diff --git a/.pfe.config.json b/.pfe.config.json index 3238753a4f..24499216d2 100644 --- a/.pfe.config.json +++ b/.pfe.config.json @@ -16,8 +16,7 @@ "description": "Red Hat Design System", "componentSubpath": "elements", "stylesheets": [ - "/docs/assets/base.css", - "/docs/assets/demos.css" + "/docs/styles/dev-server/styles.css" ] } } diff --git a/CONTRIBUTING_DESIGN.md b/CONTRIBUTING_DESIGN.md index 1334a2ea78..f4a2af1ffc 100644 --- a/CONTRIBUTING_DESIGN.md +++ b/CONTRIBUTING_DESIGN.md @@ -57,7 +57,7 @@ Most pages should have front matter that looks like this: ```jinja --- -layout: layout-basic.njk +layout: layouts/pages/basic.njk title: Grid order: -10 tags: @@ -73,7 +73,7 @@ tags: ### Getting pages into the navigation The navigation is an included template: -`pages/component/header.njk` +`pages/partials/component/sidenav.njk` It is a mixture of hardcoding and dynamic listing so that it's _hopefully_ easy to understand. @@ -129,14 +129,14 @@ Here's a two simple examples: ```jinja --- -layout: layout-basic.njk +layout: layouts/pages/basic.njk title: Example page --- ``` ```jinja --- -layout: layout-home.njk +layout: layouts/pages/home.njk title: Home --- ``` @@ -146,7 +146,7 @@ This tells 11ty what the page template should be (relative to the `pages` folder Here's an example including tags, which is a multi-value piece of data. ```jinja --- -layout: layout-basic.njk +layout: layouts/pages/basic.njk title: Accordion Element tags: - javascript @@ -164,7 +164,7 @@ the components to be used on the page: ```jinja --- -layout: layout-basic.njk +layout: layouts/pages/basic.njk title: Card tags: - component diff --git a/docs/404.njk b/docs/404.njk index 7d2fb6488f..465b133aec 100644 --- a/docs/404.njk +++ b/docs/404.njk @@ -1,35 +1,30 @@ --- -layout: layout-basic.njk +layout: layouts/pages/basic.njk title: Oops! permalink: 404.html --- - -{% import 'component/components.njk' as components %} - -
If you feel that you reached this page in error, contact us and we'll point you in the right direction.
-Do you have any feedback? Or do you need to request something? Create an issue in our GitHub repo if so.
- {%- endcall %} -If you feel that you reached this page in error, contact us and we'll point you in the right direction.
- {%- endcall %} -Do you have any feedback? Or do you need to request something? Create an issue in our GitHub repo if so.
+Understanding documents provide detailed explanations for Web Content Accessibility Guidelines diff --git a/docs/_includes/partials/component/back-to-top.njk b/docs/_includes/partials/component/back-to-top.njk new file mode 100644 index 0000000000..5c03c0ca56 --- /dev/null +++ b/docs/_includes/partials/component/back-to-top.njk @@ -0,0 +1,45 @@ + + + +
(.*)<\/p>$/m, '$1').trim();
- return /* html */`
To learn more about our other libraries, visit this page.
- `} - ${section.call(this, /* html */` -- To give feedback about anything on this page, - contact us. -
- `)} -${description}
`} - ${this.renderSlots('', { level, for: component })} - ${this.renderAttributes('', { level, for: component })} - ${this.renderMethods('', { level, for: component })} - ${this.renderEvents('', { level, for: component })} - ${this.renderCssParts('', { level, for: component })} - ${this.renderCssCustomProperties('', { level, for: component })} - ${this.renderTokens('', { level, for: component })} + +${attribute.name}
${attribute.fieldName}
${attribute.name}
${attribute.fieldName}
` from the ``
- return html`
-
- ${mdHeading(header)}${!content && !properties.length ? html`
+
+ ${!content && !attributes.length ? html`
None` : html`
${innerMD(content)}
- ${properties.map(property => html`
- ${property.name}
- -
- ${innerMD(property.description)}
-
- - Type
- - ${type(property.type.text ?? 'unknown')}
- - Default
- - ${type(property.default ?? 'unknown')}
-
- `).join('\n')}
-
`}${!deprecated.length ? '' : html`
+
+
+
+
+ DOM Property
+ Description
+ Type
+ Default
+
+
+
+ ${attributes.map(attribute => html`
+
+ ${attribute.fieldName}
+ ${innerMD(attribute.description)}
+ ${type(attribute.type?.text ?? 'unknown')}
+ ${type(attribute.default ?? 'unknown')}
+ `).join('\n')}
+
+
+ `}
+ ${!deprecated.length ? '' : html`
${mdHeading(`Deprecated ${header}`, { level: level + 1 })}
- ${deprecated.map(property => html`
- ${property.name}
- -
- ${innerMD(property.description)}
- Note: ${property.name} is deprecated. ${innerMD(property.deprecated)}
-
- - Type
- - ${type(property.type?.text ?? 'unknown')}
- - Default
- - ${type(property.default ?? 'unknown')}
-
- `).join('\n')}
-
+
+
+
+
+ DOM Property
+ Description
+ Type
+ Default
+
+
+
+ ${deprecated.map(attribute => html`
+
+ ${attribute.fieldName}
+ ${innerMD(attribute.description)}
+ ${type(attribute.type?.text ?? 'unknown')}
+ ${type(attribute.default ?? 'unknown')}
+ `).join('\n')}
+
+
+
`}
`;
}
@@ -222,26 +248,28 @@ class Renderers {
this.manifest.getCssCustomProperties(this.packageTagName(kwargs)) ?? [];
const elTokens = allCssProperties.filter(x => tokens.has(x.name));
return html`
-
- ${mdHeading(header)}${!content && !elTokens.length ? html`
+
+ ${!content && !elTokens.length ? html`
None` : html`
${innerMD(content)}
-
-
-
- Token
- Copy
-
-
- ${elTokens.map(token => html`
-
-
- ${token.name}
-
- ${copyCell(token)}
- `).join('\n')}
-
-
`}
+
+
+
+
+ Token
+ Copy
+
+
+ ${elTokens.map(token => html`
+
+
+ ${token.name}
+
+ ${copyCell(token)}
+ `).join('\n')}
+
+
+ `}
`;
}
@@ -255,50 +283,52 @@ class Renderers {
const cssProperties = allCssProperties.filter(x => !x.deprecated && !tokens.has(x.name));
const deprecated = allCssProperties.filter(x => x.deprecated && !tokens.has(x.name));
return html`
-
- ${mdHeading(header)}${!content && !cssProperties.length ? html`
+
+ ${!content && !cssProperties.length ? html`
None` : html`
${innerMD(content)}
-
-
-
- CSS Property
- Description
- Default
-
-
- ${cssProperties.map(prop => html`
-
- ${prop.name}
- ${innerMD(prop.description ?? '')}
- ${!prop.default?.startsWith('#') ? html`
- ` : html`
- `}
- ${prop.default ?? '—'}
-
-
- `).join('\n')}
-
-
`}${!deprecated.length ? '' : html`
-
- ${mdHeading(`Deprecated ${header}`, { level: level + 1 })}
-
+
+
- CSS Property
- Description
- Default
+ CSS Property
+ Description
+ Default
- ${deprecated.map(prop => html`
+ ${cssProperties.map(prop => html`
- ${prop.name}
- ${innerMD(prop.description)}
- ${innerMD(prop.default ?? '—')}
+ ${prop.name}
+ ${innerMD(prop.description ?? '')}
+ ${!prop.default?.startsWith('#') ? html`
+ ` : html`
+ `}
+ ${prop.default ?? '—'}
+
+
`).join('\n')}
-
+
`}${!deprecated.length ? '' : html`
+
+ ${mdHeading(`Deprecated ${header}`, { level: level + 1 })}
+
+
+
+ CSS Property
+ Description
+ Default
+
+
+ ${deprecated.map(prop => html`
+
+ ${prop.name}
+ ${innerMD(prop.description)}
+ ${innerMD(prop.default ?? '—')}
+ `).join('\n')}
+
+
+
`}
`;
}
@@ -309,23 +339,49 @@ class Renderers {
const parts = allParts.filter(x => !x.deprecated);
const deprecated = allParts.filter(x => x.deprecated);
return html`
-
- ${mdHeading(header)}${!content && !parts.length ? html`
+
+ ${!content && !parts.length ? html`
None` : html`
${innerMD(content)}
- ${parts.map(part => html`
- ${part.name}
- - ${innerMD(part.description)}
`).join('\n')}
-
`}${!deprecated.length ? '' : html`
+
+
+
+
+ Part Name
+ Description
+
+
+
+ ${parts.map(part => html`
+
+ ${part.name}
+ ${innerMD(part.description)}
+ `).join('\n')}
+
+
+ `}${!deprecated.length ? '' : html`
${mdHeading(`Deprecated ${header}`, { level: level + 1 })}
- ${deprecated.map(part => html`
- ${part.name}
- -
- ${innerMD(part.description)}
- Note: ${part.name} is deprecated. ${innerMD(part.deprecated)}
-
`).join('\n')}
-
+
+
+
+
+ Part Name
+ Description
+
+
+
+ ${deprecated.map(part => html`
+
+ ${part.name}
+
+ ${innerMD(part.description)}
+ Note: ${part.name} is deprecated. ${innerMD(part.deprecated)}
+
+ `).join('\n')}
+
+
+
`}
`;
}
@@ -336,29 +392,49 @@ class Renderers {
const deprecated = _events.filter(x => x.deprecated);
const events = _events.filter(x => !x.deprecated);
return html`
-
- ${mdHeading(header)}${!content && !events.length ? html`
+
+ ${!content && !events.length ? html`
None` : html`
${innerMD(content)}
- ${events.map(event => html`
- ${event.name}
- -
- ${innerMD(event.description)}
-
- Event Type: ${type(event.type?.text ?? 'unknown')}
-
-
`).join('\n')}
-
`}${!deprecated.length ? '' : html`
+
+
+
+
+ Event Name
+ Description
+
+
+
+ ${events.map(event => html`
+
+ ${event.name}
+ ${innerMD(event.description)}
+ `).join('\n')}
+
+
+ `}${!deprecated.length ? '' : html`
${mdHeading(`Deprecated ${header}`, { level: level + 1 })}
- ${deprecated.map(event => html`
- ${event.name}
- -
- ${innerMD(event.description)}
- Note: ${event.name} is deprecated. ${innerMD(event.deprecated)}
- Event Type: ${type(event.type?.text ?? 'unknown')}
-
`).join('\n')}
-
+
+
+
+
+ Event Name
+ Description
+
+
+
+ ${deprecated.map(event => html`
+
+ ${event.name}
+
+ ${innerMD(event.description)}
+ Note: ${event.name} is deprecated. ${innerMD(event.deprecated)}
+
+ `).join('\n')}
+
+
+
`}
`;
}
@@ -366,7 +442,7 @@ class Renderers {
/** Render the installation instructions for the element */
renderInstallation(content, { header = 'Installation', level = 2, tagName } = {}) {
return html`
-
+
Installation
We recommend loading elements via a CDN such as [JSPM][inst-jspm] and
@@ -405,23 +481,50 @@ class Renderers {
const methods = allMethods.filter(x => !x.deprecated);
// TODO: inline code highlighting for type and default: render the markdown to html and extract the `` from the ``
return html`
-
- ${mdHeading(header)}${!content && !methods.length ? html`
+
+ ${!content && !methods.length ? html`
None` : html`
${innerMD(content)}
- ${methods.map(method => html`
- ${method.name}(${stringifyParams(method)})
- - ${innerMD(method.description)}
`).join('\n')}
-
`}${!deprecated.length ? '' : html`
+
+
+
+
+
+ Method Name
+ Description
+
+
+
+ ${methods.map(method => html`
+
+ ${method.name}(${stringifyParams(method)})
+ ${innerMD(method.description)}
+ `).join('\n')}
+
+
+ `}${!deprecated.length ? '' : html`
${mdHeading(`Deprecated ${header}`, { level: level + 1 })}
- ${deprecated.map(method => html`
- ${method.name}(${stringifyParams(method)})
- -
- ${innerMD(method.description)}
- Note: ${method.name} is deprecated. ${innerMD(method.deprecated)}
-
`).join('\n')}
-
+
+
+
+
+ Method Name
+ Description
+
+
+
+ ${deprecated.map(method => html`
+
+ ${method.name}(${stringifyParams(method)})
+
+ ${innerMD(method.description)}
+ Note: ${method.name} is deprecated. ${innerMD(method.deprecated)}
+
+ `).join('\n')}
+
+
+
`}
`;
}
@@ -432,29 +535,50 @@ class Renderers {
const slots = allSlots.filter(x => !x.deprecated);
const deprecated = allSlots.filter(x => x.deprecated);
return html`
-
- ${mdHeading(header)}${!content && !slots.length ? html`
+
+ ${!content && !slots.length ? html`
None` : html`
${innerMD(content)}
- ${slots.map(slot => html`
- - ${slot.name ? html`
-
${slot.name}
` : html`
- Default Slot`}
-
- - ${innerMD(slot.description)}
`).join('\n')}
-
`}${!deprecated.length ? '' : html`
+
+
+
+
+
+ Slot Name
+ Description
+
+
+
+ ${slots.map(slot => html`
+
+ ${slot.name}
+ ${innerMD(slot.description)}
+ `).join('\n')}
+
+
+ `}${!deprecated.length ? '' : html`
${mdHeading(`Deprecated ${header}`, { level: level + 1 })}
- ${deprecated.map(slot => html`
- - ${slot.name ? html`
-
${slot.name}
` : html`
- Default Slot`}
-
- -
- ${innerMD(slot.description)}
- Note: ${slot.name} is deprecated. ${innerMD(slot.deprecated)}
-
`).join('\n')}
-
+
+
+
+
+ Slot Name
+ Description
+
+
+
+ ${deprecated.map(slot => html`
+
+ ${slot.name}
+
+ ${innerMD(slot.description)}
+ Note: ${slot.name} is deprecated. ${innerMD(slot.deprecated)}
+
+ `).join('\n')}
+
+
+
`}
`;
}
diff --git a/docs/_plugins/shortcodes/renderInstallation.cjs b/docs/_plugins/shortcodes/renderInstallation.cjs
index f03497b209..5592d892a4 100644
--- a/docs/_plugins/shortcodes/renderInstallation.cjs
+++ b/docs/_plugins/shortcodes/renderInstallation.cjs
@@ -24,16 +24,14 @@ fully initialized.
`;
return /* md */`
-
+
diff --git a/docs/_plugins/shortcodes/repoStatus.cjs b/docs/_plugins/shortcodes/repoStatus.cjs
index 746488e5e2..b2e63a7c1b 100644
--- a/docs/_plugins/shortcodes/repoStatus.cjs
+++ b/docs/_plugins/shortcodes/repoStatus.cjs
@@ -3,131 +3,47 @@ const STATUS_LEGEND = {
description: 'Ready to be worked on or ready to be released',
color: 'gray',
variant: 'filled',
- icon: /* html*/`
-
- `,
+ icon: ``,
},
'In Progress': {
description: 'In the design or development process',
color: 'green',
variant: 'outline',
- icon: /* html*/`
-`,
+ icon: `
-
-
-`,
+ icon: ``,
},
'Deprecated': {
description: 'No longer supported by RHDS',
color: 'orange',
variant: 'filled',
- icon: /* html*/`
-`,
+ icon: ``,
},
'N/A': {
description: 'Not planned, not available, or does not apply',
color: 'gray',
variant: 'outline',
- icon: /* html*/`
-`,
+ icon: ``,
},
'Beta': {
color: 'purple',
variant: 'outline',
- icon: /* html*/`
-
- `,
+ icon: ``,
},
'Experimental': {
color: 'orange',
variant: 'outline',
- icon: /* html*/`
-`,
+ icon: ``,
},
'New': {
color: 'cyan',
variant: 'outline',
- icon: /* html*/`
-`,
+ icon: ``,
},
-
};
const STATUS_CHECKLIST = {
@@ -174,6 +90,7 @@ function getRepoData() {
* Calls getRepoData function and outputs a definition list for each component
*/
function repoStatusList({ heading = 'Status', level = 2 } = {}) {
+ const docsPage = this.ctx._;
// Removing Documentation status from the repoStatusList
const statusList = getRepoData.call(this)?.filter(repo => repo.name !== 'Documentation');
@@ -181,32 +98,18 @@ function repoStatusList({ heading = 'Status', level = 2 } = {}) {
return '';
} else {
return /* html */`
-
-
-
-
- ${heading}
-
-
-
-
-
-
-
- ${statusList.map(listItem => {
- return /* html */`
-
-- ${listItem.name}
--
-
-${listItem.status}${STATUS_LEGEND[listItem.status].icon}
-
-
-`;
+
+
+
+ ${heading}
+
+
+ What do these mean?
+
+ ${statusList.map(listItem => {
+ return /* html */`- ${listItem.name}:
${listItem.status}${STATUS_LEGEND[listItem.status].icon.trim()} `.trim();
}).join('\n').trim()}
-
-
- `;
+ `.trim();
}
}
@@ -247,11 +150,13 @@ function repoStatusTable() {
${elementsList.map(listItem => {
+ const listItemURL = listItem.name.toLowerCase().trim().split(' ').join('-');
return /* html */`
- ${listItem.name}
+
+ ${listItem.name}
${listItem.overallStatus !== 'Available' ?
`
${listItem.overallStatus}${STATUS_LEGEND[listItem.overallStatus].icon}
@@ -263,7 +168,7 @@ ${listItem.libraries.map(lib => {
- ${lib.status}${STATUS_LEGEND[lib.status].icon}
+ ${lib.status}${STATUS_LEGEND[lib.status].icon.trim()}
@@ -289,8 +194,6 @@ function repoStatusChecklist({ heading = 'Status checklist', level = 2 } = {}) {
} else {
// This is the checklist table to be used on all the "Overview" tab in docs and is different from the table used in Design/Code Status page
return /* html */`
-
-
${`${headingLevel} ${heading} {.section-title .pfe-jump-links-panel__section}`}
@@ -315,7 +218,7 @@ function repoStatusChecklist({ heading = 'Status checklist', level = 2 } = {}) {
-${listItem.status}${STATUS_LEGEND[listItem.status].icon}
+${listItem.status}${STATUS_LEGEND[listItem.status].icon.trim()}
@@ -326,7 +229,7 @@ ${listItem.status}${STATUS_LEGEND[listItem.status].icon}
- `;
+`;
}
}
diff --git a/docs/_plugins/shortcodes/section.cjs b/docs/_plugins/shortcodes/section.cjs
deleted file mode 100644
index 9cb6b3f4b5..0000000000
--- a/docs/_plugins/shortcodes/section.cjs
+++ /dev/null
@@ -1,37 +0,0 @@
-const { attrMap } = require('./helpers.cjs');
-
-/**
- * Section macro
- * Creates a section of the page with a heading
- *
- * @param {string} content
- * @param {object} options
- * @param {string} options.headline Text to go in the heading
- * @param {string} options.palette Palette to apply, e.g. lightest, light see components/_section.scss
- * @param {string} options.headingLevel The heading level, defaults to 2
- */
-function section(content, {
- headline = null,
- palette = 'default',
- headingLevel = '2',
- style = null,
- class: className = null,
-} = {}) {
- const classes = `section section--palette-${palette} ${className ?? ''} container`;
- return /* html*/`
-${!headline ? '' : `
-
- ${Array.from({ length: headingLevel }, () => '#').join('')} ${headline} {.section-title .pfe-jump-links-panel__section} `}
-
-${content}
-
-
-
-`;
-}
-
-function Section(eleventyConfig) {
- eleventyConfig.addPairedShortcode('section', section);
-}
-
-module.exports = { Section, section };
diff --git a/docs/_plugins/shortcodes/spacerTokensTable.cjs b/docs/_plugins/shortcodes/spacerTokensTable.cjs
index cab4cab9b9..367f20c0b4 100644
--- a/docs/_plugins/shortcodes/spacerTokensTable.cjs
+++ b/docs/_plugins/shortcodes/spacerTokensTable.cjs
@@ -34,25 +34,31 @@ module.exports = function(eleventyConfig) {
const body = metaData.map(prop => {
const px = prop['$value'];
const size = px.substring(0, px.length - 2);
- const klass = parseInt(size) < 16 ? `offset size-${size}` : '';
+ const offset = parseInt(size) < 16;
+ const sampClass = offset ? `size-${size}` : '';
+ const offsetClass = offset ? 'offset' : '';
const { color } = prop['$extensions']['com.redhat.ux'];
return /* html */`
- ${size}
- --${prop.name}
- ${prop['$description']}
+
+
+ ${size}
+
+
+ --${prop.name}
+ ${prop['$description']}
`.trim();
}).join('\n');
table = /* html */`
-
+
${caption}
- Example
- Token
- Description
+ Example
+ Token
+ Description
@@ -62,10 +68,10 @@ module.exports = function(eleventyConfig) {
`.trim();
}
return `
+ ${table}
${!headline ? ''
- : `${headline} `.trim()}
- ${table}
+ : `style="${style}"}`.trim()}>${!headline ? ''
+ : `${headline} `.trim()}
${content}
`.trim();
diff --git a/docs/_plugins/shortcodes/swatch.cjs b/docs/_plugins/shortcodes/swatch.cjs
deleted file mode 100644
index fd779431ff..0000000000
--- a/docs/_plugins/shortcodes/swatch.cjs
+++ /dev/null
@@ -1,4 +0,0 @@
-module.exports = function(eleventyConfig) {
- eleventyConfig.addShortcode('swatch', ({ color = '#000000', light = false } = {}) =>
- /* html */``);
-};
diff --git a/docs/_plugins/shortcodes/tag.cjs b/docs/_plugins/shortcodes/tag.cjs
deleted file mode 100644
index 0aae9668d7..0000000000
--- a/docs/_plugins/shortcodes/tag.cjs
+++ /dev/null
@@ -1,6 +0,0 @@
-const { attrMap } = require('./helpers.cjs');
-
-module.exports = function(eleventyConfig) {
- eleventyConfig.addPairedShortcode('tag', (content, { color } = {}) =>
- /* html */`${content} `);
-};
diff --git a/docs/_plugins/shortcodes/tokensTable.cjs b/docs/_plugins/shortcodes/tokensTable.cjs
deleted file mode 100644
index a8e22436ec..0000000000
--- a/docs/_plugins/shortcodes/tokensTable.cjs
+++ /dev/null
@@ -1,11 +0,0 @@
-module.exports = function(eleventyConfig) {
- eleventyConfig.addPairedShortcode('tokensTable',
- /**
- * Tokens Table
- * Display a table rows with token usage
- */
- function(content) {
- const show = process.env.SHOW_TOKENS_TABLE;
- return show !== 'false' ? `${content}` : ``;
- });
-};
diff --git a/docs/_plugins/table-of-contents.cjs b/docs/_plugins/table-of-contents.cjs
new file mode 100644
index 0000000000..1df732dcf8
--- /dev/null
+++ b/docs/_plugins/table-of-contents.cjs
@@ -0,0 +1,116 @@
+/** @license portions MIT Jordan Shermer */
+const cheerio = require('cheerio');
+
+/** Attribute which if found on a heading means the heading is excluded */
+const ignoreAttribute = 'data-toc-exclude';
+
+const defaults = {
+ tags: ['h2', 'h3', 'h4'],
+ ignoredElements: [],
+};
+
+function getParent(prev, current) {
+ if (current.level > prev.level) {
+ // child heading
+ return prev;
+ } else if (current.level === prev.level) {
+ // sibling of previous
+ return prev.parent;
+ } else {
+ // above the previous
+ return getParent(prev.parent, current);
+ }
+}
+
+class Item {
+ constructor($el) {
+ if ($el) {
+ this.slug = $el.attr('id');
+ this.text = $el.text().trim();
+ this.level = +$el.get(0).tagName.slice(1);
+ } else {
+ this.level = 0;
+ }
+ this.children = [];
+ }
+
+ html() {
+ let markup = '';
+ if (this.slug && this.text) {
+ markup += `
+ ${this.text}
+ `;
+ }
+ if (this.children.length > 0) {
+ markup += `
+
+ ${this.children.map(item => item.html()).join('\n')}
+
+
+ ${this.children.map(item => item.html()).join('\n')}
+
+ `;
+ }
+
+ if (this.slug && this.text) {
+ markup += '\t\t ';
+ }
+
+ return markup;
+ }
+}
+
+class Toc {
+ constructor(htmlstring = '', options = defaults) {
+ this.options = { ...defaults, ...options };
+ const selector = this.options.tags.join(',');
+ this.root = new Item();
+ this.root.parent = this.root;
+
+ const $ = cheerio.load(htmlstring);
+
+ const headings = $(selector)
+ .filter('[id]')
+ .filter(`:not([${ignoreAttribute}])`);
+
+ const ignoredElementsSelector = this.options.ignoredElements.join(',');
+ headings.find(ignoredElementsSelector).remove();
+
+ if (headings.length) {
+ let previous = this.root;
+ headings.each((index, heading) => {
+ const current = new Item($(heading));
+ const parent = getParent(previous, current);
+ current.parent = parent;
+ parent.children.push(current);
+ previous = current;
+ });
+ }
+ }
+
+ get() {
+ return this.root;
+ }
+
+ html() {
+ const root = this.get();
+
+ let html = '';
+
+ if (root.children.length) {
+ html += `${root.html()}`;
+ }
+
+ return html;
+ }
+}
+
+module.exports = {
+ initArguments: {},
+ configFunction: function(eleventyConfig, options = {}) {
+ eleventyConfig.addFilter('toc', (content, opts) => {
+ const toc = new Toc(content, { ...options, ...opts });
+ return toc.html();
+ });
+ },
+};
diff --git a/docs/_plugins/tokens.cjs b/docs/_plugins/tokens.cjs
index bf7e6f1e15..4e772c9c5b 100644
--- a/docs/_plugins/tokens.cjs
+++ b/docs/_plugins/tokens.cjs
@@ -12,6 +12,12 @@ const {
} = require('./tokensHelpers.cjs');
+function classMap(classInfo) {
+ return Object.keys(classInfo)
+ .filter(key => classInfo[key])
+ .join(' ');
+}
+
/**
* Generate an HTML table of tokens
* @param {object} [opts]
@@ -24,18 +30,21 @@ function table({ tokens, name = '', docs, options } = {}) {
if (!tokens.length || name.startsWith('$')) {
return '';
}
+
return dedent(/* html */`
+
- Ex.
- Token name
- Value
- Use case
-
+ Ex.
+ Token name
+ Value
+ Use case
+
- ${tokens.map(token => {
+
+ ${tokens.map(token => {
const { r, g, b } = token.attributes?.rgb ?? {};
const { h, s, l } = token.attributes?.hsl ?? {};
const isColor = !!token.path.includes('color');
@@ -48,22 +57,59 @@ function table({ tokens, name = '', docs, options } = {}) {
const isSize = !!token.path.includes('size');
const isWeight = !!token.path.includes('weight');
const isWidth = !!token.path.includes('width');
+ const isLight =
+ token.path.includes('on-light')
+ || (token.attributes?.subitem !== 'on-light'
+ && token.attributes?.subitem !== 'on-dark');
+ const isOpacity = !!token.path.includes('opacity');
+ const isSpace = !!token.path.includes('space');
+ const isBreakpoint = !!token.path.includes('breakpoint');
+ const isHeading = !!token.path.includes('heading');
+
+ const classes = classMap({
+ 'light': isLight,
+ 'dark': !isLight,
+ 'color': isColor,
+ 'crayon': isCrayon,
+ 'dimension': isDimension,
+ 'family': isFamily,
+ 'font': isFont,
+ 'radius': isRadius,
+ 'size': isSize,
+ 'weight': isWeight,
+ 'width': isWidth,
+ 'box-shadow': token.path.includes('box-shadow'),
+ 'border': token.path.includes('border'),
+ 'sm': token.path.includes('sm'),
+ 'md': token.path.includes('md'),
+ 'lg': token.path.includes('lg'),
+ 'opacity': isOpacity,
+ 'space': isSpace,
+ 'length': token.path.includes('length'),
+ 'icon': token.path.includes('icon'),
+ 'breakpoint': isBreakpoint,
+ 'heading': isHeading,
+ 'code': token.path.includes('code'),
+ });
return isHSLorRGB ? '' : /* html */`
-
-
-
+
+
+ ${isSpace ? `${parseInt(token.$value)}` : ``}
${isColor && token.path.includes('text') ? 'Aa'
: isFont ? (docs?.example ?? token.attributes?.aliases?.[0] ?? 'Aa')
: name === 'breakpoint' ? `
@@ -71,59 +117,69 @@ function table({ tokens, name = '', docs, options } = {}) {
: docs?.example ?? ''}
-
+
--${token.name}
- ${(
- isDimension ? `
- ${token.$value}
`
- : isColor ? `
-
- ${token.$value}
- `
- : isWeight ? `
- ${token.$value}
- ${token.attributes?.aliases?.[0] ?? ''}
`
- : `
- ${token.$value}
`)}
+
+ ${( isDimension ? `${token.$value}
`
+ : isColor ? `${token.$value}
`
+ : isWeight ? `
+ ${token.$value}
+ ${token.attributes?.aliases?.[0] ?? ''}
`
+ : `${token.$value}
`
+ )}
- ${token.$description ?? ''}
+ ${token.$description ?? ''}
${copyCell(token)}
${!isCrayon ? '' : `
-
-
-
- ${token.path.includes('text') ? 'Aa' : docs?.example ?? ''}
-
- --${token.name}-rgb
-
- rgb(${r}, ${g}, ${b})
- To modify opacity
- ${copyCell(token)}
-
-
- ${token.path.includes('text') ? 'Aa' : docs?.example ?? ''}
-
- --${token.name}-hsl
-
- hsl(${h} ${s}% ${l}%)
- To modify opacity
- ${copyCell(token)}
-
-
+ Color function variants
+
+
+
+
+ Ex.
+ Token name
+ Value
+ Use case
+
+
+
+
+
+ ${token.path.includes('text') ? 'Aa' : docs?.example ?? ''}
+
+ --${token.name}-rgb
+
+ rgb(${r}, ${g}, ${b})
+ To modify opacity
+ ${copyCell(token)}
+
+
+ ${token.path.includes('text') ? 'Aa' : docs?.example ?? ''}
+
+ --${token.name}-hsl
+
+ hsl(${h} ${s}% ${l}%)
+ To modify opacity
+ ${copyCell(token)}
+
+
+
+
- `}`;
+ `}`;
}).map(dedent).join('\n')}
-
`).trim();
+
+
+ `).trim();
}
/** Returns Markdown from the Tokens source YAML files OR from linked markdown files */
@@ -138,9 +194,7 @@ function getTokenDocs(path) {
* @param {import('@11ty/eleventy/src/UserConfig')} eleventyConfig
* @param {PluginOptions} [pluginOptions]
*/
-module.exports = function RHDSPlugin(
- eleventyConfig,
- pluginOptions = { }) {
+module.exports = function RHDSPlugin(eleventyConfig, pluginOptions = { }) {
eleventyConfig.addGlobalData('tokens', tokensJSON);
eleventyConfig.addGlobalData('tokenCategories', require('./tokenCategories.json'));
@@ -173,15 +227,17 @@ module.exports = function RHDSPlugin(
const path = options.path ?? '.';
const level = options.level ?? 2;
const exclude = options.exclude ?? [];
- const include = Array.isArray(options.include) ?
- options.include
- : [options.include].filter(Boolean);
+ const include =
+ Array.isArray(options.include) ?
+ options.include : [options.include].filter(Boolean);
const name = options.name ?? path.split('.').pop();
- const { parent, key } = getParentCollection(
- options,
- eleventyConfig.globalData.tokens ?? eleventyConfig.globalData?.tokenCategories
- );
+ const { parent, key } =
+ getParentCollection(
+ options,
+ eleventyConfig.globalData.tokens
+ ?? eleventyConfig.globalData?.tokenCategories
+ );
const collection = parent[key];
const docs = getDocs(collection, options);
const heading = docs?.heading ?? capitalize(name.replace('-', ' '));
@@ -194,9 +250,9 @@ module.exports = function RHDSPlugin(
*/
const isChildEntry = ([key, value]) =>
!value.$value
- && typeof value === 'object'
- && !key.startsWith('$')
- && !exclude.includes(key);
+ && typeof value === 'object'
+ && !key.startsWith('$')
+ && !exclude.includes(key);
const children = Object.entries(collection)
.filter(isChildEntry)
@@ -214,25 +270,37 @@ module.exports = function RHDSPlugin(
* 2. for each remaining object, recurse
*/
return dedent(/* html */`
-
- ${heading}#
-
+ ${(level >= 4) ? /* html */`
+
+ ` : /* html */`
+
+ `}
+
+ ${heading}
+
+
- ${(dedent(await getDescription(collection, pluginOptions)))}
+ ${(dedent(await getDescription(collection, pluginOptions)))}
-
- ${await table({
+
+
+ ${await table({
tokens: Object.values(collection).filter(x => x.$value),
options,
name,
docs,
})}
- ${(await Promise.all(children.map(category))).join('\n')}
- ${(await Promise.all(include.map((path, i, a) => category({
+ ${(await Promise.all(children.map(category))).join('\n')}
+ ${(await Promise.all(include.map((path, i, a) => category({
path,
level: level + 1,
isLast: !a[i + 1],
})))).join('\n')}
- `);
+ ${(level >= 4) ? /* html */`
+
+ ` : /* html */`
+
+ `}
+ `);
});
};
diff --git a/docs/_plugins/tokensHelpers.cjs b/docs/_plugins/tokensHelpers.cjs
index d5826bea11..3980b4edf4 100644
--- a/docs/_plugins/tokensHelpers.cjs
+++ b/docs/_plugins/tokensHelpers.cjs
@@ -1,7 +1,6 @@
// @ts-check
const { join } = require('node:path');
const { readFile } = require('node:fs/promises');
-const tokenCategories = require('./tokenCategories.json');
const getDocs = (x, options) => x?.$extensions?.[options.docsExtension];
const capitalize = x => `${x.at(0).toUpperCase()}${x.slice(1)}`;
@@ -75,13 +74,15 @@ function getVariableSyntax(token) {
function copyCell(token) {
const variable = getVariableSyntax(token);
return /* html */`
-
-
-
-
-
+
+
+
+
+
+
+
`;
}
diff --git a/docs/about.njk b/docs/about.njk
deleted file mode 100644
index 6729eaa560..0000000000
--- a/docs/about.njk
+++ /dev/null
@@ -1,89 +0,0 @@
----
-layout: layout-basic.njk
-title: About this website
----
-
-{% import 'component/components.njk' as components %}
-
-
-
- We create Red Hat digital experiences
-
- Our teams work across the world in a range of disciplines, from UX research and digital design to web development and content strategy. We collaborate to make every digital interaction with Red Hat reflect our core brand traits which are open, authentic, helpful, and brave.
-
-
-
-
-
-
-
- Our approach
-
-
-
- Brand standards
- Red Hat brand standards are the source code for our identity. They govern how we look and sound in all types of media. We follow brand standards to unify Red Hat digital experiences and stay up-to-date with our brand as it grows, improves, and adapts to meet new challenges.
-
-
-
-
-
-
-
-
- PatternFly collaboration
- We collaborate with PatternFly, an open source design system for enterprise product experiences. Using PatternFly as a foundation, we create intuitive and scalable Red Hat digital experiences the open source way.
-
-
- Shared language and vision
- We leverage similar elements as PatternFly, so designers no longer need to reinvent the wheel when choosing components. For example, an Accordion used in a Red Hat web application will look the same when used on a website.
-
-
-
-
-
-
-
-
- Web components
- Our team is building an open source web component-driven development system to build scalable UI elements. This open source community project supports many components in our design system.
-
-
-
-
-
-
-
-
- Fundamentals
-
-
-
-
- Flexible
- Our components can be arranged in a number of ways and CSS variables can be used for further customization.
-
-
-
- Accessible
- The goal of our design system is to create meaningful experiences that work for everyone, regardless of ability.
-
-
-
- Consistent
- Our documentation and tools streamline collaboration so teams can create consistent and on-brand experiences.
-
-
-
- Scalable
- Our system enables teams to work concurrently across the Red Hat system of websites and beyond.
-
-
-
-
-
- Get started
-
-
-
-
diff --git a/docs/about/how-we-build.md b/docs/about/how-we-build.md
new file mode 100644
index 0000000000..2cc31dabe8
--- /dev/null
+++ b/docs/about/how-we-build.md
@@ -0,0 +1,180 @@
+---
+layout: layouts/pages/basic.njk
+title: How we build
+order: 10
+hasToc: true
+tags:
+ - about
+importElements:
+ - rh-table
+---
+
+
+
+
+## Building experiences for the web
+
+The Red Hat Design System (RHDS) allows designers and developers across different teams to build branded experiences consistently. Based on the foundations of PatternFly and the Red Hat Brand Standards, our design system reflects the Red Hat brand digitally.
+
+
+## Foundations
+
+The Red Hat brand has a strong voice. To make our design system feel like Red Hat, we use foundations like color, space, and typography to enhance our components, and use icons and illustrations to enhance our layouts. Our end goal is to elevate the Red Hat brand across our digital properties.
+
+
+
+
+
+## PatternFly
+
+PatternFly is the open source design system for Red Hat products, it is also the foundation for our components. We share design when possible by contributing ideas back to PatternFly to help grow its capabilities. When building a new component or updating an existing component, PatternFly is always our first source of inspiration.
+
+PatternFly can be used by designers and developers inside and outside of Red Hat. PatternFly is used to create React applications and provide HTML and CSS assets for other web projects. The Red Hat Design System is used to create Red Hat-branded websites or other digital properties. We collaborate with the Red Hat User Experience Design (UXD) team as they build user interface components for PatternFly.
+
+By sharing ideas between the PatternFly and RHDDS teams, we create a design language across all of Red Hat, for each stage of the customer lifecycle.
+
+
+ Visit PatternFly
+
+
+
+
+
+
+
+## PatternFly Elements
+
+The PatternFly Elements (PFE) project leverages the PatternFly design system and some code elements to create an accessible and open source web component library. Web components, or native custom HTML tags, allow users to easily include design system foundations and components across their websites and applications.
+
+PFE components not only work in any application framework, they are evergreen, meaning the components themselves can be upgraded easily which allows for consistency, scalability, and flexibility. PFE components are used across many of the core Red Hat websites, including redhat.com, access.redhat.com, developers.redhat.com, connect.redhat.com, and more.
+
+
+ Visit PatternFly Elements
+
+
+
+
+
+
+
+
+
+
+
+## Visual examples
+
+
+
+
+
+ Design system
+ Implementation
+ Example
+
+
+
+
+
+ PatternFly
+
+
+ PatternFly components
+
+
+
+
+
+ PFE
+
+
+ PFE components
+
+
+
+
+
+ PFE + RHDDS
+
+
+ PFE components themed with Red Hat CSS variables
+
+
+
+
+
+
+
+
+
+ WebRH
+ WebRH is an asset library of components and patterns created within Red Hat Marketing. The goal was to bring consistency to redhat.com and now other Red Hat web properties that are built on Drupal. These patterns are leveraged by Drupal through tools that make up the Flexible Template System.
WebRH contains components and patterns including JSON schemas, Twig templates (to be used in Drupal), custom CSS, and PFE web components. WebRH creates flexible patterns within Drupal so content editors can create visually-consistent experiences with unstructured data or content.
A copy of the WebRH library is viewable within the Schema Editor and allows anyone to build and test new and existing patterns through a user interface similar to FTS in Drupal.
+
+ Learn more about WebRH
+
+
+
+
+
+
+
+
+
+
+
+ Flexible Template System
+ The Flexible Template System (FTS) refers to the authoring tools and patterns used to build pages within the Drupal CMS. Fields for content and settings that control design and layout are exposed to content editors which simplifies the page building process. Using patterns enables authors to have flexibility with page layout and design without having to write code. Various patterns from the WebRH library are loaded inside Drupal based on the content type. Different content types have different purposes and use different patterns. The Flexible template content type is for general use.
In Drupal 7, WebRH patterns are built with a local version of Patternkit and then imported into Drupal with the Pattern Builder module.
In Drupal 8+, the Patternkit module will fetch the WebRH patterns via PatternAPI, a services layer which dynamically pulls the appropriate pattern by name and version.
+
+ Learn more about FTS
+
+
+
+
+
+
+
+
+
+
+## Patternkit
+
+Patternkit 2.x is a Drupal 8+ module that connects libraries like WebRH to content management systems like Drupal. It leverages the JSON Schema Editor to expose the fields defined within the component and pattern schemas, so content authors can add content and change settings while seeing the results in real time.
+
+Patternkit 1.x is used by developers to develop, test, and demo WebRH patterns. The WebRH Schema Editor (formerly known as Patternkit) is a playground to interact with the WebRH pattern library. It is hosted on OpenShift and is updated every three weeks to show the latest updates to WebRH.
+
+
+ Learn more about Patternkit
+
+
+
+## WebDMS
+
+WebDMS is a custom Bootstrap 4 implementation that allows for rapid development, a very short learning curve, and immense flexibility. It is custom development for projects with outside-of-the-box design, interactivity, engagement, and motion needs. Because of the flexibility and fast iteration speed, we are able to test new designs and then solidify them into FTS patterns if we find that they are used across multiple pages.
+
+
+
+
+
+
+
+ Other resources
+ To learn how to use our design system kit and libraries, visit this page.
+
diff --git a/docs/about/how-we-build.njk b/docs/about/how-we-build.njk
deleted file mode 100644
index e214a583e8..0000000000
--- a/docs/about/how-we-build.njk
+++ /dev/null
@@ -1,160 +0,0 @@
----
-layout: layout-basic.njk
-title: How we build
-tags:
- - about
----
-
-{% import 'component/about.njk' as about %}
-
-
-
-{% call about.section("Building experiences for the web") -%}
-
- The Red Hat Design System (RHDS) allows designers and developers across different teams to build branded experiences consistently. Based on the foundations of PatternFly and the Red Hat Brand Standards, our design system reflects the Red Hat brand digitally.
-
-{%- endcall %}
-
-{% call about.section("Foundations") -%}
-
- The Red Hat brand has a strong voice. To make our design system feel like Red Hat, we use foundations like color, space, and typography to enhance our components, and use icons and illustrations to enhance our layouts. Our end goal is to elevate the Red Hat brand across our digital properties.
-
-{%- endcall %}
-
-
-
-{% call about.section("PatternFly") -%}
-
- PatternFly is the open source design system for Red Hat products, it is also the foundation for our components. We share design when possible by contributing ideas back to PatternFly to help grow its capabilities. When building a new component or updating an existing component, PatternFly is always our first source of inspiration.
PatternFly can be used by designers and developers inside and outside of Red Hat. PatternFly is used to create React applications and provide HTML and CSS assets for other web projects. The Red Hat Design System is used to create Red Hat-branded websites or other digital properties. We collaborate with the Red Hat User Experience Design (UXD) team as they build user interface components for PatternFly.
By sharing ideas between the PatternFly and RHDDS teams, we create a design language across all of Red Hat, for each stage of the customer lifecycle.
-
-
- Visit PatternFly
-
-
-
-
-
-
-{%- endcall %}
-
-{% call about.section("PatternFly Elements") -%}
-
- The PatternFly Elements (PFE) project leverages the PatternFly design system and some code elements to create an accessible and open source web component library. Web components, or native custom HTML tags, allow users to easily include design system foundations and components across their websites and applications.
PFE components not only work in any application framework, they are evergreen, meaning the components themselves can be upgraded easily which allows for consistency, scalability, and flexibility. PFE components are used across many of the core Red Hat websites, including redhat.com, access.redhat.com, developers.redhat.com, connect.redhat.com, and more.
-
-
- Visit PatternFly Elements
-
-
-
-
-
-
- Examples of PFE components that are not themed
-
-
-
-
-
- Examples of PFE components themed with Red Hat CSS variables
-
-{%- endcall %}
-
-{% call about.section("Visual examples") -%}
-
-
-
-
-
-
- Design system
- Implementation
- Example
-
-
-
-
- PatternFly
- PatternFly components
-
-
-
- PFE
- PFE components
-
-
-
- PFE + RHDDS
- PFE components themed with Red Hat CSS variables
-
-
-
-
-
-
-
-{%- endcall %}
-
-{% call about.section("WebRH") -%}
-
- WebRH is an asset library of components and patterns created within Red Hat Marketing. The goal was to bring consistency to redhat.com and now other Red Hat web properties that are built on Drupal. These patterns are leveraged by Drupal through tools that make up the Flexible Template System.
WebRH contains components and patterns including JSON schemas, Twig templates (to be used in Drupal), custom CSS, and PFE web components. WebRH creates flexible patterns within Drupal so content editors can create visually-consistent experiences with unstructured data or content.
A copy of the WebRH library is viewable within the Schema Editor and allows anyone to build and test new and existing patterns through a user interface similar to FTS in Drupal.
-
-
- Learn more about WebRH
-
-
-
-
- Example of a WebRH pattern being customized in the Schema Editor (formerly Patternkit)
-
-{%- endcall %}
-
-{% call about.section("Flexible Template System") -%}
-
- The Flexible Template System (FTS) refers to the authoring tools and patterns used to build pages within the Drupal CMS. Fields for content and settings that control design and layout are exposed to content editors which simplifies the page building process. Using patterns enables authors to have flexibility with page layout and design without having to write code. Various patterns from the WebRH library are loaded inside Drupal based on the content type. Different content types have different purposes and use different patterns. The Flexible template content type is for general use.
In Drupal 7, WebRH patterns are built with a local version of Patternkit and then imported into Drupal with the Pattern Builder module.
In Drupal 8+, the Patternkit module will fetch the WebRH patterns via PatternAPI, a services layer which dynamically pulls the appropriate pattern by name and version.
-
-
- Learn more about FTS
-
-
-
-
-
-
- Example of an FTS pattern being customized in Drupal
-
-{%- endcall %}
-
-{% call about.section("Patternkit") -%}
-
- Patternkit 2.x is a Drupal 8+ module that connects libraries like WebRH to content management systems like Drupal. It leverages the JSON Schema Editor to expose the fields defined within the component and pattern schemas, so content authors can add content and change settings while seeing the results in real time.
Patternkit 1.x is used by developers to develop, test, and demo WebRH patterns. The WebRH Schema Editor (formerly known as Patternkit) is a playground to interact with the WebRH pattern library. It is hosted on OpenShift and is updated every three weeks to show the latest updates to WebRH.
-
-
- Learn more about Patternkit
-
-
-{%- endcall %}
-
-{% call about.section("WebDMS") -%}
-
- WebDMS is a custom Bootstrap 4 implementation that allows for rapid development, a very short learning curve, and immense flexibility. It is custom development for projects with outside-of-the-box design, interactivity, engagement, and motion needs. Because of the flexibility and fast iteration speed, we are able to test new designs and then solidify them into FTS patterns if we find that they are used across multiple pages.
-
-
-
-
-
-
-
-
-
-
-
- Examples of WebDMS applied on top of the Red Hat Design System
-
-{%- endcall %}
-
-{% feedback %}
- Other resources
- To learn how to use our design system kit and libraries, visit this page.
-{% endfeedback %}
diff --git a/docs/about/index.md b/docs/about/index.md
new file mode 100644
index 0000000000..0fd4aaf3fa
--- /dev/null
+++ b/docs/about/index.md
@@ -0,0 +1,182 @@
+---
+layout: layouts/pages/basic.njk
+title: About the Design System
+order: 0
+tags:
+ - about
+---
+
+
+
+
+
+
+ We create Red Hat digital experiences
+ Our teams work across the world in a range of disciplines, from UX research and digital design to web development and content strategy. We collaborate to make every digital interaction with Red Hat reflect our core brand traits which are open, authentic, helpful, and brave.
+
+
+
+
+
+ Our approach
+
+
+
+ Brand standards
+ Red Hat brand standards are the source code for our identity. They govern how we look and sound in all types of media. We follow brand standards to unify Red Hat digital experiences and stay up-to-date with our brand as it grows, improves, and adapts to meet new challenges.
+
+
+
+
+
+
+
+
+ PatternFly collaboration
+ We collaborate with PatternFly, an open source design system for enterprise product experiences. Using PatternFly as a foundation, we create intuitive and scalable Red Hat digital experiences the open source way.
+
+
+ Shared language and vision
+ We leverage similar elements as PatternFly, so designers no longer need to reinvent the wheel when choosing components. For example, an Accordion used in a Red Hat web application will look the same when used on a website.
+
+
+
+
+
+
+
+
+ Web components
+ Our team is building an open source web component-driven development system to build scalable UI elements. This open source community project supports many components in our design system.
+
+
+
+
+
+
+
+ Fundamentals
+
+
+
+ Flexible
+ Our components can be arranged in a number of ways and CSS variables can be used for further customization.
+
+
+
+ Accessible
+ The goal of our design system is to create meaningful experiences that work for everyone, regardless of ability.
+
+
+
+ Consistent
+ Our documentation and tools streamline collaboration so teams can create consistent and on-brand experiences.
+
+
+
+ Scalable
+ Our system enables teams to work concurrently across the Red Hat system of websites and beyond.
+
+
+
+ Get started
+
+
diff --git a/docs/about/roadmap.md b/docs/about/roadmap.md
index 214a1b0d80..bea236cd10 100644
--- a/docs/about/roadmap.md
+++ b/docs/about/roadmap.md
@@ -1,27 +1,44 @@
---
-layout: layout-basic.njk
+layout: layouts/pages/basic.njk
title: Roadmap
+order: 20
bodyClasses: page-docs
tags:
- about
+importElements:
+ - rh-tile
---
+
+
+
+
+
Our roadmap is an up-to-date outline of what we're working on and what we're planning to do in the Red Hat Design System over the next 2–3 quarters (6-9 months). You can follow along through [our open source roadmap on GitHub](https://github.com/orgs/RedHat-UX/projects/7/).
The roadmap is subject to change based on our users' feedback and needs. If you have an idea or feature request, please submit a [GitHub issue](https://github.com/RedHat-UX/red-hat-design-system/issues).
Check out [our scrum board on GitHub](https://github.com/orgs/RedHat-UX/projects/1/views/18) to see what we're working on from week to week.
-
-
+
+
+ Roadmap
+
-{% feedback %}
+
Release Notes
To see what foundations, tokens, elements, or patterns have been released recently, check out our release notes.
-{% endfeedback %}
+
diff --git a/docs/accessibility/accessibility.yaml b/docs/accessibility/accessibility.yaml
index 998333064c..4eaecc7da9 100644
--- a/docs/accessibility/accessibility.yaml
+++ b/docs/accessibility/accessibility.yaml
@@ -1,4 +1,5 @@
bodyClasses: element-docs
-layout: layout-basic.njk
+layout: layouts/pages/basic.njk
+hasToc: true
importElements:
- rh-alert
\ No newline at end of file
diff --git a/docs/accessibility/content.md b/docs/accessibility/content.md
index 2e0ff1aeb8..d70160ba30 100644
--- a/docs/accessibility/content.md
+++ b/docs/accessibility/content.md
@@ -1,6 +1,8 @@
---
title: Content
-tags: accessibility
+tags:
+ - accessibility
+order: 30
importElements:
- rh-code-block
- rh-blockquote
@@ -8,35 +10,45 @@ importElements:
---
## Overview
-{% alert title="Note" %}
-This section covers content accessibility. Content authors should also be familiar with accessibility [fundamentals](../fundamentals).
-{% endalert %}
+
+ Note
+ This section covers content accessibility. Content authors should also be familiar with accessibility fundamentals.
+
+
## Alt text
@@ -91,11 +103,9 @@ Note that background images inserted into a page via CSS are always considered d
When writing alternative text, it’s important to first consider the image’s context. An image’s meaning or function may be more relevant than its literal depiction. So, the same image may need very different alt text in different contexts.
-
+
+
+
Depending on whether a web page is about the plot of the 1946 movie It’s a Wonderful Life or about the actor Jimmy Stewart, the above image could have very different alt text. For the first case, the image’s alt text could be `“George Bailey hugs his wife, Mary, and holds his daughter, Zuzu.”` For the second, the alt text could be `“Jimmy Stewart returned to acting after the war with It’s a Wonderful Life.”`
@@ -103,14 +113,8 @@ Depending on whether a web page is about the plot of the 1946 movie It’s a Won
Images acting as buttons or links are functional, and thus serve different purposes than images supporting the surrounding text.
-
-
-
-
-![Red Hat homepage](/assets/logo-redhat.png "Red Hat homepage")
-
-
-
+
If the above image supplements the text of an article about Red Hat or our products, the appropriate alt text could be something like `"Red Hat, Inc. logo."` But if that image is a link pointing to the corporate homepage, you might want something along the lines of `"Red Hat homepage"` for your alt text:
diff --git a/docs/accessibility/contributors.md b/docs/accessibility/contributors.md
index 564a3fc4ca..331940ac2a 100644
--- a/docs/accessibility/contributors.md
+++ b/docs/accessibility/contributors.md
@@ -1,13 +1,17 @@
---
title: Contributors
-tags: accessibility
+tags:
+ - accessibility
+order: 50
---
## Overview
-{% alert title="Note" %}
-This section covers accessibility for design system contributors. Contributors should also be familiar with accessibility [fundamentals](../), [content](../content), [design](../design), and [development](../design).
-{% endalert %}
+
+ Note
+ This section covers accessibility for design system contributors. Contributors should also be familiar with accessibility fundamentals, content, design, and development.
+
+
## ARIA issues with shadowDOM
@@ -18,6 +22,7 @@ The following resources explain the problem in more detail and provide some work
- Nolan Lawson's [Shadow DOM and accessibility: the trouble with ARIA](https://nolanlawson.com/2022/11/28/shadow-dom-and-accessibility-the-trouble-with-aria/)
- Leo Balter's [Cross-root ARIA](https://github.com/leobalter/cross-root-aria-delegation/blob/main/explainer.md) explainer
+
## Accessibility controllers
Where applicable, use [controllers](https://lit.dev/docs/api/controllers/) for accessible keyboard navigation as well as ARIA roles, states and properties. Examples of our @patternfly/pfe-core/controllers are listed below:
diff --git a/docs/accessibility/design.md b/docs/accessibility/design.md
index 048907a485..3defcec0b8 100644
--- a/docs/accessibility/design.md
+++ b/docs/accessibility/design.md
@@ -1,13 +1,17 @@
---
title: Design
-tags: accessibility
+tags:
+ - accessibility
+order: 40
---
## Overview
-{% alert title="Note" %}
-This section covers design accessibility. Designers should also be familiar with accessibility [fundamentals](../), [content](../content), and [development](../development).
-{% endalert %}
+
+ Note
+ This section covers design accessibility. Designers should also be familiar with accessibility fundamentals, content, and development.
+
+
## Layout and hierarchy
@@ -18,6 +22,7 @@ The contents of a page should be arranged in a meaningful order. Here are some t
- Heading levels should help users distinguish between different sections and understand how content is grouped hierarchically.
- Items should be placed in a clear, logical visual order, so that developers can easily match this order in the DOM, allowing users of all sorts (with and without assistive technologies) to have similar experiences when engaging with content.
+
### Repeated content
Elements that repeat across a site (e.g., navigation and site search) should appear in consistent locations and with consistent ordering. That said, it’s okay if some elements within repeating sections (e.g., individual items in a navigation menu) change and shift by necessity, depending on context.
@@ -26,27 +31,31 @@ For repeating sections that come before a page’s main content (e.g., a navigat
If one element has the same function as another, both should be labeled the same way. For example, a call to action for the Contact page should have consistent text labels.
+
## Color
### Using color alone
When considering methods of communication or feedback, do not use color alone. Ensure there is a text label, icon, underline, or other visual cue to communicate meaning. Consider how the following elements would look to a color blind user.
-{% example palette="light",
- alt="Dialog with a red-orange Leave button, a form field with a red bottom border, and progress steps without labels",
- src="/assets/color/using-color-alone.png" %}
+
+
+
+
### Contrast
We strive to adhere to [WCAG 2.1 AA contrast ratio standards](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum). Our text, links, interface elements, etc. are designed with sufficient contrast when used on top of surfaces, image backgrounds with low contrast, and near adjacent colors.
+
#### Text
Small foreground text (non-bold text under 24px and bold text under 19px) must have a contrast ratio of 4.5:1 and large foreground text (non-bold text of at least 24px and bold text of at least 19px) must have a contrast ratio of 3:1.
-{% example palette="light",
- alt="Contrast ratios for dark gray sections with black text that uses different weights and fonts",
- src="/assets/color/contrast-text.png" %}
+
+
+
+
#### Links
@@ -54,9 +63,10 @@ If color is the only way to distinguish between links and surrounding text (e.g.
Non-color cues should be used to signify when a link receives hover and focus (e.g., an underline).
-{% example palette="light",
- alt="Contrast ratio of a blue link next to black text and an example of a link's darker blue, underlined hover state",
- src="/assets/color/contrast-links.png" %}
+
+
+
+
#### Graphical objects and UI components
@@ -64,28 +74,33 @@ Graphical objects and UI components (including those within charts and infograph
Non-color cues must be also used to signify when an object or component receives focus (e.g., a border).
+
#### Layering
It is acceptable to layer colors with the same hue, saturation, or lightness on white, black, or gray. However, layering them near or on top of each other might cause vibration. If you need to layer colors, follow [WCAG 2.1 AA](https://www.w3.org/WAI/WCAG21/Understanding/) requirements.
-{% example palette="light",
- alt="Red CTA against a white background, blue button against a light gray background, and a light red-orange button against a black background",
- src="/assets/color/contrast-layering.png" %}
+
+
+
+
#### Further help
TPGi’s [Colour Contrast Analyzer](https://www.tpgi.com/color-contrast-checker/) for Windows and Mac computers can help you identify colors and gauge their contrast from one another.
+
## Imagery
### Text in images
Avoid using images of text, except for logotypes or text in decorative images. Many effects can be applied to text via CSS, and designers can work with developers or engineers to determine the best approach. In addition to making reading more difficult for screen reader users, images of text usually can’t be resized or manipulated by assistive tech well.
+
### Charts and diagrams
Any charts, diagrams, or complex images should have a description placed immediately before or after. Explaining these types of visuals is typically too long for alt text. So, this accompanying text can be a caption or integrated into the adjacent body copy.
+
### Decorative images
Any decorative images that add no meaningful information to an experience should be identified as such for anyone writing alt text or developing the interface. These decorative images can then be hidden from assistive technology by developers, and content writers will know they don’t need to provide text alternatives for them.
@@ -95,6 +110,7 @@ An image used as a link or button is always meaningful (i.e., not decorative) an
- The image is accompanied by sufficient descriptive text that is also within the containing link or button, *or*
- The containing link or button has an aria-label or aria-labelledby value applied to it.
+
## Motion and audiovisual content
### Animations
@@ -105,6 +121,7 @@ The following guidelines should be followed to make animated content accessible
- Any text that’s animated or that automatically changes needs a way to be viewed statically.
- Any flashing or blinking content should do so fewer than three times per second.
+
### Videos
Designers must provide ways to pause and/or mute video content if the video:
@@ -116,12 +133,14 @@ These guidelines apply whether or not the video autoplays.
Most video players have caption controls built in, and designers will not typically be responsible for creating captions. However, designers will have to show text or audio descriptions for any embedded videos if essential information isn’t also conveyed through audio.
+
### Audio
Similarly to video, an audio file that lasts longer than three seconds must have controls for muting or pausing. An audio-only file should also come with a way to view a transcript.
Essential information should not be conveyed by sound alone. For example, if a timer dings at the end of a timed test, provide a corresponding visual indication.
+
## Interactions
### Links
@@ -130,12 +149,14 @@ Links should appear clickable and focusable. And, when possible, links and butto
If a link opens in a new window, this will have to be indicated both visually and non-visually. Text is preferred, but an icon (with text alternative for assistive tech users) can be used to announce that a new window will open.
+
### Target size
A click or touch target, like a button or link, should be large enough for all users to activate easily on all devices. The minimum size is 24 × 24 pixels for level AA compliance and 44 × 44 pixels for level AAA. Proper target sizes ensure that a user with dexterity impairments can still select a link with a mouse, that a user in a moving vehicle can tap the correct button in an app, etc.
If a target must be smaller than 24 pixels in either direction, it must be spaced from any other targets as if it were centered within its own 24 pixel diameter (or larger) circle.
+
### Keyboard interactions
Mouse and keyboard users must be able to interact with interfaces in functionally equivalent ways. For example, if a mouse user can scroll through a page and click to expand and collapse accordions in a group, a keyboard user must also be able to use the tab key to navigate through this accordion group and expand and collapse focused accordions by pressing enter.
@@ -144,26 +165,32 @@ Though much of the work of incorporating such functionality happens in the devel
Keyboard and assistive tech users must also have the ability to perform path- and gesture-based tasks typically done via mouse or touchscreen. If users are expected to interact with an image gallery by swiping, the designer should include buttons to allow all users to cycle through these images. And clicking and holding down a slider marker with a mouse pointer shouldn’t be the only means of increasing/decreasing values for that element. (e.g., You could add up/down arrows to the interface, or a developer could ensure that arrow keys update the value when the slider has focus.)
+
### Focus
The act of focusing on an element should not cause the element to change the interface’s context. For example, if a user places keyboard focus on a link, that action shouldn’t automatically send them to a new page.
-{% alert title="Note" %}
-A change in a page’s content does not always mean that the context has changed. Learn more about what constitutes a [change in context](https://www.w3.org/WAI/WCAG21/Understanding/on-focus#dfn-changes-of-context).
-{% endalert %}
+
+ Note
+ A change in a page’s content does not always mean that the context has changed. Learn more about what constitutes a change in context.
+
+
If keyboard focus appears to be trapped in a subsection, instructions for exiting this section via keyboard will need to be available. For example, if pressing the tab key does not allow the user to exit an embedded video or learning module on a page, another method (e.g., pressing the escape key or some key combo) must exist, and instructions must be presented to all users.
+
## Typography
### Spacing
Line heights for body copy should be at least 1.5× regular single-spacing. And paragraph spacing should be 1.5× of that line height. In other words, if your line height is 1.5, your paragraph spacing should be at least 2.25× (or 1.5×1.5) the original single-spaced height. (W3C rounds to 2.5× in their [paragraph-spacing recommendation](https://www.w3.org/WAI/WCAG21/Understanding/visual-presentation.html).) Such spacing helps people who find it difficult to read when lines are too close together.
+
### Character counts
Long lines of text can be difficult to read. Character counts for one line of text should not exceed 80 characters (40 if content is in Chinese, Japanese, or Korean). This can be done by setting a maximum width for content areas.
+
### Alignment
For left-to-right languages, left-aligned text is the easiest to read and skim. The same is true of right-aligned text for right-to-left languages.
diff --git a/docs/accessibility/development.md b/docs/accessibility/development.md
index 9fd82f226c..67e6d5255c 100644
--- a/docs/accessibility/development.md
+++ b/docs/accessibility/development.md
@@ -1,18 +1,22 @@
---
title: Development
-tags: accessibility
+tags:
+ - accessibility
+order: 40
importElements:
- rh-code-block
---
## Overview
-{% alert title="Note" %}
-This section covers development accessibility. Developers should also be familiar with accessibility [fundamentals](../), [content](../content), and [design](../design).
-{% endalert %}
+
+ Note
+ This section covers development accessibility. Developers should also be familiar with accessibility fundamentals, content, and design.
+
While our elements themselves were developed and tested with accessibility in mind, components can still be rendered inaccessible in how they are used. The HTML slotted within a component could be inaccessible, or CSS variables and part selectors could be used in a way that renders the component inaccessible. Therefore, you should always consider how your particular use of a component may impact its accessibility.
+
## Icons and SVGs
### Meaningful icons
@@ -20,6 +24,7 @@ While our elements themselves were developed and tested with accessibility in mi
Icons must adhere to the same accessibility rules as other images. When icons are used for interactivity (e.g., as buttons or links), they are considered meaningful, unless they are either accompanied by sufficient text within that interactive element, or the interactive element itself is already labeled (e.g., via `aria-label`).
Visit our [Content section](https://deploy-preview-1340--red-hat-design-system.netlify.app/accessibility/content) for more information on image accessibility.
+
### Avoiding icon fonts
Icon fonts are a nifty visual hack that you shouldn’t use.
@@ -30,6 +35,7 @@ Icon fonts are a nifty visual hack that you shouldn’t use.
To make icon fonts accessible, you often have to re-hack what’s already a hack. So best just to avoid them altogether.
+
### SVG accessibility
#### Describing SVGs
@@ -72,6 +78,7 @@ You can hide inline `
\ No newline at end of file
diff --git a/docs/assets/color/old/color-alert-default.svg b/docs/assets/color/old/color-alert-default.svg
deleted file mode 100644
index f4aab81695..0000000000
--- a/docs/assets/color/old/color-alert-default.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/color/old/color-alert-info.svg b/docs/assets/color/old/color-alert-info.svg
deleted file mode 100644
index f7a40e9a47..0000000000
--- a/docs/assets/color/old/color-alert-info.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/color/old/color-alert-success.svg b/docs/assets/color/old/color-alert-success.svg
deleted file mode 100644
index 31608792eb..0000000000
--- a/docs/assets/color/old/color-alert-success.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/color/old/color-alert-warning.svg b/docs/assets/color/old/color-alert-warning.svg
deleted file mode 100644
index be12b7f0df..0000000000
--- a/docs/assets/color/old/color-alert-warning.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/color/old/color-brand-example-1.svg b/docs/assets/color/old/color-brand-example-1.svg
deleted file mode 100644
index d7d3dd0a25..0000000000
--- a/docs/assets/color/old/color-brand-example-1.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/color/old/color-brand-example-2.svg b/docs/assets/color/old/color-brand-example-2.svg
deleted file mode 100644
index 2a699e66ce..0000000000
--- a/docs/assets/color/old/color-brand-example-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/color/old/color-brand-example-3.svg b/docs/assets/color/old/color-brand-example-3.svg
deleted file mode 100644
index c8bc7b7d46..0000000000
--- a/docs/assets/color/old/color-brand-example-3.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/color/old/color-brand-example-4.svg b/docs/assets/color/old/color-brand-example-4.svg
deleted file mode 100644
index 327a926d90..0000000000
--- a/docs/assets/color/old/color-brand-example-4.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/color/old/color-link-example-1.svg b/docs/assets/color/old/color-link-example-1.svg
deleted file mode 100644
index 07e1256d6d..0000000000
--- a/docs/assets/color/old/color-link-example-1.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/docs/assets/color/old/color-link-example-2.svg b/docs/assets/color/old/color-link-example-2.svg
deleted file mode 100644
index 92eac87640..0000000000
--- a/docs/assets/color/old/color-link-example-2.svg
+++ /dev/null
@@ -1,36 +0,0 @@
-
diff --git a/docs/assets/color/old/color-link-example-dark-1.svg b/docs/assets/color/old/color-link-example-dark-1.svg
deleted file mode 100644
index 6db5ba807b..0000000000
--- a/docs/assets/color/old/color-link-example-dark-1.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/docs/assets/color/old/color-link-example-dark-2.svg b/docs/assets/color/old/color-link-example-dark-2.svg
deleted file mode 100644
index 3057851ef5..0000000000
--- a/docs/assets/color/old/color-link-example-dark-2.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-
diff --git a/docs/assets/color/old/color-text-dark-1.svg b/docs/assets/color/old/color-text-dark-1.svg
deleted file mode 100644
index e64c52f8b1..0000000000
--- a/docs/assets/color/old/color-text-dark-1.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/color/old/color-text-dark-2.svg b/docs/assets/color/old/color-text-dark-2.svg
deleted file mode 100644
index bf04fa7753..0000000000
--- a/docs/assets/color/old/color-text-dark-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/color/old/color-text-light-1.svg b/docs/assets/color/old/color-text-light-1.svg
deleted file mode 100644
index e9f6b4df44..0000000000
--- a/docs/assets/color/old/color-text-light-1.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/color/old/color-text-light-2.svg b/docs/assets/color/old/color-text-light-2.svg
deleted file mode 100644
index db0aa08905..0000000000
--- a/docs/assets/color/old/color-text-light-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/color/old/color-theme-dark.svg b/docs/assets/color/old/color-theme-dark.svg
deleted file mode 100644
index 0e6f634d04..0000000000
--- a/docs/assets/color/old/color-theme-dark.svg
+++ /dev/null
@@ -1,144 +0,0 @@
-
diff --git a/docs/assets/color/old/color-theme-light.svg b/docs/assets/color/old/color-theme-light.svg
deleted file mode 100644
index 2405042bf6..0000000000
--- a/docs/assets/color/old/color-theme-light.svg
+++ /dev/null
@@ -1,153 +0,0 @@
-
diff --git a/docs/assets/copy-permalink.js b/docs/assets/copy-permalink.js
deleted file mode 100644
index 93d9570310..0000000000
--- a/docs/assets/copy-permalink.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import { toast } from './toast.js';
-
-const hPermalinkTpl = document.createElement('template');
-// TODO: rh-button icon variant, delegate aria-label
-hPermalinkTpl.innerHTML = `
-
- (permalink)
-
-`;
-
-const hPermalinkStyle = new CSSStyleSheet();
-hPermalinkStyle.replaceSync(`
-:host {
- align-items: center;
- display: flex;
-}
-
-svg {
- width: var(--rh-size-icon-02);
-}
-
-#signifier {
- display: var(--perma-signifier-display, none);
-}
-
-#button {
- height: 1.75rem;
- background: none;
- border: none;
- border-radius: var(--rh-border-radius-default);
- margin-inline: var(--rh-space-sm);
- display: flex;
- align-items: flex-end;
-}
-
-#button:is(:hover, :focus) {
- background: var(--rh-color-surface-light);
-}
-`);
-
-customElements.define('copy-permalink', class CopyPermalink extends HTMLElement {
- constructor() {
- super();
- this.attachShadow({ mode: 'open' })
- .append(hPermalinkTpl.content.cloneNode(true));
- this.shadowRoot.adoptedStyleSheets = [hPermalinkStyle];
- const button = this.shadowRoot.getElementById('button');
- button.setAttribute(
- 'aria-label',
- this.getAttribute('copy-button-label') ?? 'Copy link to clipboard'
- );
- button.addEventListener('click', async () => {
- const { href } = this.querySelector('a');
- if (href) {
- await navigator.clipboard.writeText(href);
- toast({ heading: this.getAttribute('copied-text') ?? 'Link copied' });
- }
- });
- }
-});
diff --git a/docs/assets/demos.css b/docs/assets/demos.css
deleted file mode 100644
index acfc566a2a..0000000000
--- a/docs/assets/demos.css
+++ /dev/null
@@ -1,35 +0,0 @@
-body {
- height: 100%;
- min-height: 100vh;
-}
-
-[data-demo] {
- padding: var(--rh-space-xl, 24px);
- min-height: 100%;
- height: 100%;
-}
-
-main {
- display: block;
- position: relative;
- max-height: initial;
-}
-
-#nav {
- height: 100%;
-}
-
-#main-header {
- --pf-theme--color--surface--accent: black;
- --pf-theme--color--accent: black;
-}
-
-#main-header a img {
- margin-right: 0;
-}
-
-/* offset the padding on the demo container from above */
-rh-context-demo {
- height: calc(100% + 2 * var(--rh-space-xl, 24px));
- margin: calc(-1 * var(--rh-space-xl, 24px));
-}
diff --git a/docs/assets/dsd-polyfill.js b/docs/assets/dsd-polyfill.js
deleted file mode 100644
index f31505d9f9..0000000000
--- a/docs/assets/dsd-polyfill.js
+++ /dev/null
@@ -1,9 +0,0 @@
-(function attachShadowRoots(root) {
- root.querySelectorAll('template[shadowrootmode]').forEach(template => {
- const mode = template.getAttribute('shadowrootmode');
- const shadowRoot = template.parentNode.attachShadow({ mode });
- shadowRoot.appendChild(template.content);
- template.remove();
- attachShadowRoots(shadowRoot);
- });
-})(document);
diff --git a/docs/assets/redhat/redhat-font/2/webfonts/RedHatDisplay/RedHatDisplay-Bold.woff b/docs/assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff
similarity index 100%
rename from docs/assets/redhat/redhat-font/2/webfonts/RedHatDisplay/RedHatDisplay-Bold.woff
rename to docs/assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff
diff --git a/docs/assets/redhat/redhat-font/2/webfonts/RedHatDisplay/RedHatDisplay-Medium.woff b/docs/assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff
similarity index 100%
rename from docs/assets/redhat/redhat-font/2/webfonts/RedHatDisplay/RedHatDisplay-Medium.woff
rename to docs/assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff
diff --git a/docs/assets/redhat/redhat-font/2/webfonts/RedHatDisplay/RedHatDisplay-Regular.woff b/docs/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff
similarity index 100%
rename from docs/assets/redhat/redhat-font/2/webfonts/RedHatDisplay/RedHatDisplay-Regular.woff
rename to docs/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff
diff --git a/docs/assets/redhat/redhat-font/2/webfonts/RedHatText/RedHatText-Medium.woff b/docs/assets/fonts/RedHatText/RedHatText-Medium.woff
similarity index 100%
rename from docs/assets/redhat/redhat-font/2/webfonts/RedHatText/RedHatText-Medium.woff
rename to docs/assets/fonts/RedHatText/RedHatText-Medium.woff
diff --git a/docs/assets/redhat/redhat-font/2/webfonts/RedHatText/RedHatText-Regular.woff b/docs/assets/fonts/RedHatText/RedHatText-Regular.woff
similarity index 100%
rename from docs/assets/redhat/redhat-font/2/webfonts/RedHatText/RedHatText-Regular.woff
rename to docs/assets/fonts/RedHatText/RedHatText-Regular.woff
diff --git a/docs/assets/get-started/dialog/get-started-dialog-image-1.png b/docs/assets/get-started/dialog/get-started-dialog-image-1.png
deleted file mode 100644
index 49a18a8139..0000000000
Binary files a/docs/assets/get-started/dialog/get-started-dialog-image-1.png and /dev/null differ
diff --git a/docs/assets/get-started/dialog/get-started-dialog-image-2.png b/docs/assets/get-started/dialog/get-started-dialog-image-2.png
deleted file mode 100644
index 50a4fd26f6..0000000000
Binary files a/docs/assets/get-started/dialog/get-started-dialog-image-2.png and /dev/null differ
diff --git a/docs/assets/get-started/dialog/get-started-dialog-image-3.png b/docs/assets/get-started/dialog/get-started-dialog-image-3.png
deleted file mode 100644
index e1273ddecf..0000000000
Binary files a/docs/assets/get-started/dialog/get-started-dialog-image-3.png and /dev/null differ
diff --git a/docs/assets/get-started/dialog/get-started-dialog-image-4.png b/docs/assets/get-started/dialog/get-started-dialog-image-4.png
deleted file mode 100644
index 7d97490e15..0000000000
Binary files a/docs/assets/get-started/dialog/get-started-dialog-image-4.png and /dev/null differ
diff --git a/docs/assets/get-started/icon-libraries/best-practice-1.png b/docs/assets/get-started/icon-libraries/best-practice-1.png
deleted file mode 100644
index 0bfd9978e9..0000000000
Binary files a/docs/assets/get-started/icon-libraries/best-practice-1.png and /dev/null differ
diff --git a/docs/assets/get-started/icon-libraries/best-practice-2.png b/docs/assets/get-started/icon-libraries/best-practice-2.png
deleted file mode 100644
index 9fb2ef7c00..0000000000
Binary files a/docs/assets/get-started/icon-libraries/best-practice-2.png and /dev/null differ
diff --git a/docs/assets/get-started/icon-libraries/best-practice-3.png b/docs/assets/get-started/icon-libraries/best-practice-3.png
deleted file mode 100644
index 50977e5de5..0000000000
Binary files a/docs/assets/get-started/icon-libraries/best-practice-3.png and /dev/null differ
diff --git a/docs/assets/get-started/icon-libraries/get-started-request-access-alt.png b/docs/assets/get-started/icon-libraries/get-started-request-access-alt.png
deleted file mode 100644
index c8275d719f..0000000000
Binary files a/docs/assets/get-started/icon-libraries/get-started-request-access-alt.png and /dev/null differ
diff --git a/docs/assets/get-started/icon-libraries/icon-sizing.png b/docs/assets/get-started/icon-libraries/icon-sizing.png
deleted file mode 100644
index 829b9e2732..0000000000
Binary files a/docs/assets/get-started/icon-libraries/icon-sizing.png and /dev/null differ
diff --git a/docs/assets/get-started/icon-libraries/icon-types-product.png b/docs/assets/get-started/icon-libraries/icon-types-product.png
deleted file mode 100644
index 30eebfbe5a..0000000000
Binary files a/docs/assets/get-started/icon-libraries/icon-types-product.png and /dev/null differ
diff --git a/docs/assets/get-started/icon-libraries/icon-types-standard.png b/docs/assets/get-started/icon-libraries/icon-types-standard.png
deleted file mode 100644
index 75585b7b76..0000000000
Binary files a/docs/assets/get-started/icon-libraries/icon-types-standard.png and /dev/null differ
diff --git a/docs/assets/get-started/icon-libraries/icon-types-ui.png b/docs/assets/get-started/icon-libraries/icon-types-ui.png
deleted file mode 100644
index 0b4b20bee1..0000000000
Binary files a/docs/assets/get-started/icon-libraries/icon-types-ui.png and /dev/null differ
diff --git a/docs/assets/get-started/product-logo-library/best-practice-1.png b/docs/assets/get-started/product-logo-library/best-practice-1.png
deleted file mode 100644
index 9e478f6f40..0000000000
Binary files a/docs/assets/get-started/product-logo-library/best-practice-1.png and /dev/null differ
diff --git a/docs/assets/get-started/product-logo-library/best-practice-2.png b/docs/assets/get-started/product-logo-library/best-practice-2.png
deleted file mode 100644
index c4be071595..0000000000
Binary files a/docs/assets/get-started/product-logo-library/best-practice-2.png and /dev/null differ
diff --git a/docs/assets/get-started/product-logo-library/product-logo-colors.png b/docs/assets/get-started/product-logo-library/product-logo-colors.png
deleted file mode 100644
index 46aa05db39..0000000000
Binary files a/docs/assets/get-started/product-logo-library/product-logo-colors.png and /dev/null differ
diff --git a/docs/assets/get-started/product-logo-library/product-logo-sizing.png b/docs/assets/get-started/product-logo-library/product-logo-sizing.png
deleted file mode 100644
index fb4b9243a2..0000000000
Binary files a/docs/assets/get-started/product-logo-library/product-logo-sizing.png and /dev/null differ
diff --git a/docs/assets/get-started/product-logo-library/product-logo-standard.png b/docs/assets/get-started/product-logo-library/product-logo-standard.png
deleted file mode 100644
index 28a110dacb..0000000000
Binary files a/docs/assets/get-started/product-logo-library/product-logo-standard.png and /dev/null differ
diff --git a/docs/assets/get-started/product-logo-library/product-logo-variant.png b/docs/assets/get-started/product-logo-library/product-logo-variant.png
deleted file mode 100644
index 3eec186d2c..0000000000
Binary files a/docs/assets/get-started/product-logo-library/product-logo-variant.png and /dev/null differ
diff --git a/docs/assets/grid/grid-responsive-large.svg b/docs/assets/grid/grid-responsive-large.svg
deleted file mode 100644
index 4af6ea7dee..0000000000
--- a/docs/assets/grid/grid-responsive-large.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/grid/grid-responsive-mobile-landscape.svg b/docs/assets/grid/grid-responsive-mobile-landscape.svg
deleted file mode 100644
index 4340d64a7e..0000000000
--- a/docs/assets/grid/grid-responsive-mobile-landscape.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/grid/grid-responsive-mobile-portrait.svg b/docs/assets/grid/grid-responsive-mobile-portrait.svg
deleted file mode 100644
index b1e15d12bf..0000000000
--- a/docs/assets/grid/grid-responsive-mobile-portrait.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/grid/grid-responsive-tablet.svg b/docs/assets/grid/grid-responsive-tablet.svg
deleted file mode 100644
index 450ba326d1..0000000000
--- a/docs/assets/grid/grid-responsive-tablet.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/home/code-status.svg b/docs/assets/home/code-status.svg
index 756a0d261e..254ffbc871 100644
--- a/docs/assets/home/code-status.svg
+++ b/docs/assets/home/code-status.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/assets/home/elements.svg b/docs/assets/home/elements.svg
index 92285f00b7..d5a801256d 100644
--- a/docs/assets/home/elements.svg
+++ b/docs/assets/home/elements.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/assets/home/foundations.svg b/docs/assets/home/foundations.svg
index 54247803a9..1909c36836 100644
--- a/docs/assets/home/foundations.svg
+++ b/docs/assets/home/foundations.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/assets/home/release-notes.svg b/docs/assets/home/release-notes.svg
index 24fbaf5b1a..d5294614e0 100644
--- a/docs/assets/home/release-notes.svg
+++ b/docs/assets/home/release-notes.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/assets/home/workflow-icon.svg b/docs/assets/home/workflow-icon.svg
deleted file mode 100644
index 123a36b51b..0000000000
--- a/docs/assets/home/workflow-icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/javascript/dsd-polyfill.js b/docs/assets/javascript/dsd-polyfill.js
new file mode 100644
index 0000000000..ba84016140
--- /dev/null
+++ b/docs/assets/javascript/dsd-polyfill.js
@@ -0,0 +1,17 @@
+if (!('shadowRootMode' in HTMLTemplateElement.prototype)) {
+ (function attachShadowRoots(root) {
+ // find all templates with a shadowrootmode attribute
+ root.querySelectorAll('template[shadowrootmode]').forEach(template => {
+ // get the mode: open or closed
+ const mode = template.getAttribute('shadowrootmode');
+ // attach a shadow to the component
+ const shadowRoot = template.parentNode.attachShadow({ mode });
+ // append the content in the template
+ shadowRoot.appendChild(template.content);
+ // remove the template
+ template.remove();
+ attachShadowRoots(shadowRoot);
+ });
+ })(document);
+}
+document.body.removeAttribute('dsd-pending');
diff --git a/docs/assets/javascript/elements/uxdot-best-practice.js b/docs/assets/javascript/elements/uxdot-best-practice.js
new file mode 100644
index 0000000000..26c787b4ae
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-best-practice.js
@@ -0,0 +1,75 @@
+import { LitElement, html, css } from 'lit';
+
+class UxdotBestPractice extends LitElement {
+ static styles = css`
+ :host {
+ display: block;
+ margin-block: var(--rh-space-2xl, 32px);
+ }
+
+ #container {
+ display: flex;
+ flex-direction: column;
+ gap: var(--rh-space-2xl, 32px);
+ margin-block: var(--rh-space-2xl, 32px);
+ }
+
+ [part="do"] {
+ --_color: var(--rh-color-status-success-on-light, #3d7317);
+ }
+
+ [part="dont"] {
+ --_color: var(--rh-color-status-danger-on-light, #b1380b);
+ }
+
+ span {
+ font-family: var(--rh-font-family-heading, RedHatDisplay, 'Red Hat Display', 'Noto Sans Arabic', 'Noto Sans Hebrew', 'Noto Sans JP', 'Noto Sans KR', 'Noto Sans Malayalam', 'Noto Sans SC', 'Noto Sans TC', 'Noto Sans Thai', Helvetica, Arial, sans-serif);
+ font-size: var(--rh-font-size-heading-xs, 1.25rem);
+ font-weight: var(--rh-font-weight-heading-medium, 500);
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ gap: var(--rh-space-sm, 4px);
+ }
+
+ pf-icon,
+ span {
+ color: var(--_color);
+ }
+
+ ::slotted(uxdot-example) {
+ margin: 0 !important;
+ }
+
+ figure {
+ margin: 0 !important;
+ }
+ `;
+
+ static properties = {
+ do: { type: Boolean },
+ dont: { type: Boolean },
+ };
+
+ render() {
+ return html`
+
+ `;
+ }
+}
+
+customElements.define('uxdot-best-practice', UxdotBestPractice);
diff --git a/docs/assets/elements/uxdot-copy-button.js b/docs/assets/javascript/elements/uxdot-copy-button.js
similarity index 93%
rename from docs/assets/elements/uxdot-copy-button.js
rename to docs/assets/javascript/elements/uxdot-copy-button.js
index af05462561..bc7ce02e1b 100644
--- a/docs/assets/elements/uxdot-copy-button.js
+++ b/docs/assets/javascript/elements/uxdot-copy-button.js
@@ -1,8 +1,11 @@
-import { html, css, LitElement } from 'lit';
+import { html, css, LitElement, isServer } from 'lit';
import { toast } from '../toast.js';
-import '@rhds/elements/rh-tooltip/rh-tooltip.js';
+if (!isServer) {
+ import('@rhds/elements/rh-tooltip/rh-tooltip.js');
+}
+
export class UxdotCopyButton extends LitElement {
static is = 'uxdot-copy-button';
diff --git a/docs/assets/javascript/elements/uxdot-copy-permalink-lightdom.css b/docs/assets/javascript/elements/uxdot-copy-permalink-lightdom.css
new file mode 100644
index 0000000000..6e3cb6d24c
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-copy-permalink-lightdom.css
@@ -0,0 +1,12 @@
+uxdot-copy-permalink > :is(h1,h2,h3,h4,h5,h6) > a {
+ position: relative;
+ color: inherit;
+ text-decoration: inherit;
+}
+
+uxdot-copy-permalink > :is(h1,h2,h3,h4,h5,h6) > a:hover:before {
+ display: block;
+ content: "#";
+ position: absolute;
+ inset-inline-start: -1em;
+}
diff --git a/docs/assets/javascript/elements/uxdot-copy-permalink.js b/docs/assets/javascript/elements/uxdot-copy-permalink.js
new file mode 100644
index 0000000000..90ad66056e
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-copy-permalink.js
@@ -0,0 +1,94 @@
+
+import { LitElement, html, css, isServer } from 'lit';
+
+import { toast } from '../toast.js';
+
+class UxdotCopyPermalink extends LitElement {
+ static styles = css`
+ :host {
+ display: flex;
+ align-items: center;
+ }
+
+ svg {
+ width: var(--rh-size-icon-02, 24px);
+ }
+
+ #signifier {
+ display: var(--perma-signifier-display, none);
+ }
+
+ #button {
+ height: 1.75rem;
+ background: none;
+ border: none;
+ display: flex;
+ align-items: center;
+ }
+
+ #button:is(:hover, :focus) {
+ background: var(--rh-color-surface-light, #e0e0e0);
+ }
+
+ ::slotted(:is(h1, h2, h3, h4, h5, h6)) {
+ display: flex;
+ align-items: center;
+ color: inherit;
+ text-decoration: inherit;
+ }
+ `;
+
+ static properties = {
+ copyButtonLabel: { type: String, attribute: 'copy-button-label' },
+ copiedText: { type: String, attribute: 'copied-text' },
+ };
+
+ constructor() {
+ super();
+ this.copyButtonLabel = this.getAttribute('copy-button-label') ?? 'Copy link to clipboard';
+ this.copiedText = this.getAttribute('copied-text') ?? 'Link copied';
+ this.allAnchors = null;
+ }
+
+ connectedCallback() {
+ super.connectedCallback();
+ if (!isServer) {
+ const children = this.shadowRoot.querySelector('slot').assignedElements({ flatten: true });
+ this.allAnchors = this.#getLinks(children);
+ }
+ }
+
+ render() {
+ return html`
+
+ (permalink)
+
+ `;
+ }
+
+ #handleSlotchange(e) {
+ const children = e.target.assignedElements({ flatten: true });
+ this.allAnchors = this.#getLinks(children);
+ }
+
+ #getLinks(slottedChildren) {
+ return slottedChildren.map(child => {
+ return child.querySelector('a');
+ });
+ }
+
+ async #copyLink() {
+ const [href] = this.allAnchors;
+ if (href) {
+ await navigator.clipboard.writeText(href);
+ toast({ heading: this.copiedText });
+ }
+ }
+}
+
+customElements.define('uxdot-copy-permalink', UxdotCopyPermalink);
diff --git a/docs/assets/javascript/elements/uxdot-example.js b/docs/assets/javascript/elements/uxdot-example.js
new file mode 100644
index 0000000000..ca409fcd8d
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-example.js
@@ -0,0 +1,106 @@
+import { LitElement, css } from 'lit';
+import { classMap } from 'lit/directives/class-map.js';
+import { html } from 'lit/static-html.js';
+
+import { ColorContextProvider } from '@rhds/elements/lib/context/color/provider.js';
+import { ColorContextConsumer } from '@rhds/elements/lib/context/color/consumer.js';
+
+class UxdotExample extends LitElement {
+ static styles = css`
+ :host {
+ display: block;
+ container-type: inline-size;
+ container-name: host;
+ margin-block-end: var(--rh-space-2xl, 32px);
+ }
+
+ :host([transparent]) {
+ --_context-background-color: transparent;
+ }
+
+ #container {
+ padding: var(--rh-space-2xl, 32px);
+ display: flex;
+ flex-direction: column;
+ align-items: var(--_alignment, center);
+ justify-content: center;
+ border-width: var(--rh-border-width-sm, 1px);
+ border-style: solid;
+ border-color: var(--_border-color, var(--rh-color-border-subtle-on-light, #c7c7c7));
+ border-radius: var(--rh-border-radius-default, 3px);
+ background-color: var(--_context-background-color, var(--rh-color-surface-lightest, #ffffff));
+ color: var(--_context-text, var(--rh-color-text-on-light, #151515));
+ }
+
+ #container.dark {
+ --_border-color: var(--rh-color-border-subtle-on-dark, #707070);
+ }
+
+ ::slotted(*) {
+ display: flex;
+ flex-direction: column;
+ align-items: var(--_alignment, center);
+ justify-content: center;
+ max-width: 100%;
+ width: var(--_width, 100%);
+ }
+
+ :host([variant="full"]) #container {
+ padding: 0;
+ }
+
+ :host([danger]) #container {
+ --_border-color: var(--rh-color-border-status-danger-on-light, #f0561d);
+ background-image: url('/assets/best-practices-danger-icon.svg');
+ background-position-x: 8px;
+ background-position-y: 8px;
+ background-repeat: no-repeat;
+ }
+
+ :host([no-border]:not([danger])) #container {
+ border: none;
+ }
+
+ @container host (min-width: 576px) {
+ #container {
+ padding: var(--rh-space-3xl, 48px);
+ }
+ }
+
+ @container host (min-width: 768px) {
+ #container {
+ padding: var(--rh-space-4xl, 64px);
+ }
+ }
+ `;
+
+ static properties = {
+ colorPalette: { type: String, reflect: true, attribute: 'color-palette' },
+ transparent: { type: Boolean },
+ variant: { type: String, reflect: true },
+ width: { type: String, attribute: 'width-adjustment' },
+ noBorder: { type: Boolean, attribute: 'no-border' },
+ danger: { type: Boolean },
+ alignment: { type: String },
+ };
+
+ constructor() {
+ super();
+ new ColorContextProvider(this);
+ new ColorContextConsumer(this);
+ this.width = '100%';
+ this.alignment = 'center';
+ this.transparent = false;
+ }
+
+ render() {
+ const { on = '' } = this;
+ return html`
+
+
+
+ `;
+ }
+}
+
+customElements.define('uxdot-example', UxdotExample);
diff --git a/docs/assets/javascript/elements/uxdot-feedback.js b/docs/assets/javascript/elements/uxdot-feedback.js
new file mode 100644
index 0000000000..b700d44a08
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-feedback.js
@@ -0,0 +1,60 @@
+import { LitElement, html, css } from 'lit';
+
+class UxdotFeedback extends LitElement {
+ static styles = css`
+
+ :host {
+ display: block;
+ container-type: inline-size;
+ container-name: host;
+ }
+
+ #container {
+ display: grid;
+ grid-template-columns: 1fr;
+ grid-gap: var(--rh-space-3xl, 48px);
+ margin-block-end: var(--rh-space-3xl, 48px);
+ }
+
+ h2,
+ ::slotted(h2) {
+ font-family: var(--rh-font-family-heading, RedHatDisplay, 'Red Hat Display', 'Noto Sans Arabic', 'Noto Sans Hebrew', 'Noto Sans JP', 'Noto Sans KR', 'Noto Sans Malayalam', 'Noto Sans SC', 'Noto Sans TC', 'Noto Sans Thai', Helvetica, Arial, sans-serif);
+ font-size: var(--rh-font-size-heading-md, 1.75rem) !important;
+ font-weight: var(--rh-font-weight-heading-medium, 500);
+ line-height: var(--rh-line-height-heading, 1.3);
+ margin: var(--rh-space-2xl, 32px) 0 !important;
+ }
+
+ p {
+ font-size: var(--rh-font-size-body-text-lg, 1.125rem)
+ }
+
+ @container host (min-width: 576px) {
+ #container {
+ grid-template-columns: 1fr 1fr;
+ }
+ }
+ `;
+
+ render() {
+ return html`
+
+
+
+ Other libraries
+ To learn more about our other libraries, visit this page.
+
+
+
+ Feedback
+
+ To give feedback about anything on this page,
+ contact us.
+
+
+
+ `;
+ }
+}
+
+customElements.define('uxdot-feedback', UxdotFeedback);
diff --git a/docs/assets/javascript/elements/uxdot-header.js b/docs/assets/javascript/elements/uxdot-header.js
new file mode 100644
index 0000000000..4c23aff9dd
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-header.js
@@ -0,0 +1,106 @@
+import { LitElement, html, css } from 'lit';
+import { classMap } from 'lit/directives/class-map.js';
+
+class UxdotHeader extends LitElement {
+ static styles = css`
+ :host {
+ display: block;
+ background-color: var(--rh-color-surface-lighter, #f2f2f2);
+ color: var(--rh-color-text-primary-on-light, #151515);
+ container-type: inline-size;
+ container-name: header;
+ }
+
+ #container {
+ display: block;
+ z-index: 2;
+ max-width: 1140px;
+ padding-block-start: var(--rh-space-2xl, 32px);
+ padding-inline: var(--rh-space-2xl, 32px);
+ }
+
+ #container:not(.has-subnav) {
+ padding-block-end: var(--rh-space-2xl, 32px);
+ }
+
+ #container.has-search {
+ display: grid;
+ grid-template-columns: 1fr;
+ grid-template-areas: 'heading' 'search';
+ gap: var(--rh-space-2xl, 32px);
+ }
+
+ [part="heading"] {
+ grid-area: heading;
+ }
+
+ ::slotted([slot="search"]) {
+ grid-area: search;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-around;
+ }
+
+ ::slotted(h1) {
+ font-family: var(--uxdot-heading-font-family, var(--rh-font-family-heading, RedHatDisplay, "Red Hat Display", "Noto Sans Arabic", "Noto Sans Hebrew", "Noto Sans JP", "Noto Sans KR", "Noto Sans Malayalam", "Noto Sans SC", "Noto Sans TC", "Noto Sans Thai", Helvetica, Arial, sans-serif)) !important;
+ font-size: var(--uxdot-heading-heading-size, var(--rh-font-size-heading-2xl, 3rem)) !important;
+ font-weight: var(--uxdot-heading-font-weight, var(--rh-font-weight-heading-regular, 300)) !important;
+ line-height: var(--uxdot-heading-line-height, var(--rh-line-height-heading, 1.3)) !important;
+ }
+
+ ::slotted([slot="subnav"]) {
+ margin-block-start: var(--rh-space-2xl, 32px);
+ }
+
+ @container header (min-width: 768px) {
+ #container {
+ padding-block-start: var(--rh-space-3xl, 48px);
+ padding-inline: var(--rh-space-3xl, 48px);
+ }
+
+ #container:not(.has-subnav) {
+ padding-block-end: var(--rh-space-3xl, 48px);
+ }
+ }
+
+ @container header (min-width: 992px) {
+ :host {
+ margin-block-end: var(--rh-space-6xl, 96px);
+ }
+
+ #container {
+ top: 100px;
+ padding-inline: var(--rh-space-6xl, 96px);
+ padding-block-start: var(--rh-space-6xl, 96px);
+ }
+
+ #container:not(.has-subnav) {
+ padding-block-end: var(--rh-space-6xl, 96px);
+ }
+
+ #container.has-search {
+ grid-template-columns: 1fr 1fr;
+ grid-template-areas: 'heading search';
+ }
+ }
+ `;
+
+ static properties = {
+ hasSubNav: { type: Boolean, attribute: 'has-subnav' },
+ hasSearch: { type: Boolean, attribute: 'has-search' },
+ };
+
+
+ render() {
+ const classes = classMap({ 'has-subnav': this.hasSubNav, 'has-search': this.hasSearch });
+ return html`
+
+
+
+
+
+ `;
+ }
+}
+
+customElements.define('uxdot-header', UxdotHeader);
diff --git a/docs/assets/javascript/elements/uxdot-hero.js b/docs/assets/javascript/elements/uxdot-hero.js
new file mode 100644
index 0000000000..b817138686
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-hero.js
@@ -0,0 +1,73 @@
+import { LitElement, html, css } from 'lit';
+
+class UxdotHero extends LitElement {
+ static styles = css`
+ :host {
+ display: block;
+ }
+
+ :host([compact]) {
+ margin-block-end: var(--rh-space-3xl, 48px);
+ }
+
+ #container {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ width: 100%;
+ }
+
+ slot[name="header"]::slotted(*) {
+ margin-block: 0 !important;
+ }
+
+ slot[name="header"]::slotted(h1) {
+ color: var(--rh-color-text-brand-on-light, #ee0000);
+ margin-block-end: 0;
+ text-transform: uppercase;
+ font-family: var(--rh-font-family-heading, RedHatDisplay, "Red Hat Display", "Noto Sans Arabic", "Noto Sans Hebrew", "Noto Sans JP", "Noto Sans KR", "Noto Sans Malayalam", "Noto Sans SC", "Noto Sans TC", "Noto Sans Thai", Helvetica, Arial, sans-serif);
+ line-height: var(--rh-line-height-heading, 1.3);
+ font-size: var(--rh-font-size-code-lg, 1.125rem) !important;
+ font-weight: var(--rh-font-weight-code-medium, 500);
+ }
+
+ slot[name="tagline"]::slotted(p) {
+ font-size: var(--rh-font-size-heading-2xl, 3rem) !important;
+ margin-block: var(--rh-space-lg, 16px) !important;
+ text-align: center;
+ }
+
+ slot[name="image"]::slotted(img) {
+ width: 100%;
+ margin-block-start: var(--rh-space-4xl, 64px);
+ }
+
+ :host slot[name="header"]::slotted(h2) {
+ color: var(--rh-color-text-brand-on-light, #ee0000);
+ font-family: var(--rh-font-family-heading, RedHatDisplay, "Red Hat Display", "Noto Sans Arabic", "Noto Sans Hebrew", "Noto Sans JP", "Noto Sans KR", "Noto Sans Malayalam", "Noto Sans SC", "Noto Sans TC", "Noto Sans Thai", Helvetica, Arial, sans-serif);
+ font-size: var(--rh-font-size-heading-xl, 2.5rem) !important;
+ font-weight: var(--rh-font-weight-heading-regular, 300) !important;
+ margin-block-end: var(--rh-space-2xl, 32px) !important;
+ text-align: center;
+ }
+
+ :host([compact]) ::slotted(p) {
+ font-size: var(--rh-font-size-body-text-lg, 1.125rem);
+ text-align: center;
+ max-width: 62rem;
+ }
+ `;
+
+ render() {
+ return html`
+
+
+
+
+
+
+ `;
+ }
+}
+
+customElements.define('uxdot-hero', UxdotHero);
diff --git a/docs/assets/elements/uxdot-installation-tabs.js b/docs/assets/javascript/elements/uxdot-installation-tabs.js
similarity index 100%
rename from docs/assets/elements/uxdot-installation-tabs.js
rename to docs/assets/javascript/elements/uxdot-installation-tabs.js
diff --git a/docs/assets/javascript/elements/uxdot-masthead-lightdom.css b/docs/assets/javascript/elements/uxdot-masthead-lightdom.css
new file mode 100644
index 0000000000..590bf30a1e
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-masthead-lightdom.css
@@ -0,0 +1,31 @@
+uxdot-masthead {
+ container-type: inline-size;
+ container-name: uxdot-masthead;
+}
+
+uxdot-masthead [slot="links"] span {
+ border: 0 !important;
+ clip: rect(1px, 1px, 1px, 1px) !important; /* 1 */
+ clip-path: inset(50%) !important; /* 2 */
+ height: 1px !important;
+ margin: -1px !important;
+ overflow: hidden !important;
+ padding: 0 !important;
+ position: absolute !important;
+ width: 1px !important;
+ white-space: nowrap !important;
+}
+
+@container uxdot-masthead (min-width: 576px) {
+ uxdot-masthead [slot="links"] span {
+ clip: unset !important;
+ clip-path: unset !important;
+ height: unset !important;
+ margin: unset !important;
+ overflow: unset !important;
+ padding: unset !important;
+ position: unset !important;
+ width: unset !important;
+ white-space: unset !important;
+ }
+}
\ No newline at end of file
diff --git a/docs/assets/javascript/elements/uxdot-masthead.js b/docs/assets/javascript/elements/uxdot-masthead.js
new file mode 100644
index 0000000000..3a526c1491
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-masthead.js
@@ -0,0 +1,126 @@
+import { LitElement, html, css } from 'lit';
+
+class UxdotMasthead extends LitElement {
+ static styles = css`
+ :host {
+ display: block;
+ background-color: var(--rh-color-surface-darkest, #151515);
+ color: var(--rh-color-text-primary-on-dark, #ffffff);
+ position: fixed;
+ inset: 0;
+ height: max-content;
+ z-index: var(--uxdot-masthead-z-index, 2);
+ container-type: inline-size;
+ container-name: host;
+ }
+
+ #container {
+ display: grid;
+ gap: var(--rh-space-lg, 16px);
+ grid-template-columns: max-content 1fr max-content;
+ max-height: var(--uxdot-masthead-max-height, 72px);
+ margin-inline: var(--rh-space-md, 8px);
+ margin-block: var(--rh-space-lg, 16px);
+ }
+
+ slot[name="hamburger"] {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: var(--rh-space-md, 8px);
+ justify-content: center;
+ }
+
+ slot[name="hamburger"]::slotted(button) {
+ color: var(--rh-color-text-on-dark, #ffffff);
+ background-color: transparent;
+ border: none;
+ margin: 0;
+ padding: var(--rh-space-md, 8px);
+ line-height: 0 !important;
+ }
+
+ slot[name="hamburger"]:hover::slotted(button),
+ slot[name="hamburger"]::slotted(button:hover),
+ slot[name="hamburger"]::slotted(button:active),
+ slot[name="hamburger"]::slotted(button:focus) {
+ color: var(--rh-color-icon-subtle-hover, #a3a3a3);
+ }
+
+ slot[name="hamburger"]::slotted(button:focus) {
+ outline: var(--rh-border-width-md, 2px) solid var(--rh-color-border-interactive-on-dark, #92c5f9);
+ border-radius: var(--rh-border-radius-default, 3px);
+ }
+
+ slot[name="logo"]::slotted(a) {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ gap: var(--rh-space-md, 8px);
+ }
+
+ slot[name="links"]::slotted(a) {
+ --pf-icon--size: 28px;
+
+ display: flex;
+ flex-direction: row;
+ gap: var(--rh-space-lg, 16px);
+ align-items: center;
+ color: var(--rh-color-text-on-dark, #ffffff) !important;
+ }
+
+ slot[name="links"]:hover::slotted(a),
+ slot[name="links"]::slotted(a:hover) {
+ color: var(--rh-color-icon-subtle-hover, #a3a3a3) !important;
+ }
+
+ @container (min-width: 576px) {
+ #container {
+ gap: var(--rh-space-lg, 16px);
+ margin: var(--rh-space-lg, 16px);
+ }
+
+ slot[name="links"]::slotted(span) {
+ clip: rect(0 0 0 0);
+ clip-path: inset(50%);
+ height: 1px;
+ overflow: hidden;
+ position: absolute;
+ white-space: nowrap;
+ width: 1px;
+ }
+ }
+
+ @container (min-width: 992px) {
+ #container {
+ grid-template-columns: 1fr max-content max-content;
+ }
+
+ slot[name="hamburger"] {
+ display: none;
+ }
+
+ slot[name="logo"]::slotted(a) {
+ margin-inline-start: var(--rh-space-lg, 16px);
+ }
+
+ slot[name="links"]::slotted(a) {
+
+ gap: var(--rh-space-md, 8px);
+ }
+ }
+
+ `;
+
+ render() {
+ return html`
+
+
+
+
+
+ `;
+ }
+}
+
+customElements.define('uxdot-masthead', UxdotMasthead);
diff --git a/docs/assets/javascript/elements/uxdot-repo-status-list-lightdom.css b/docs/assets/javascript/elements/uxdot-repo-status-list-lightdom.css
new file mode 100644
index 0000000000..e30d041904
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-repo-status-list-lightdom.css
@@ -0,0 +1,10 @@
+uxdot-repo-status-list > dl > div {
+ display: flex;
+ column-gap: var(--rh-space-md, 8px);
+ align-items: center;
+}
+
+uxdot-repo-status-list > dl > div > dt {
+ font-family: var(--rh-font-family-body-text, RedHatText, "Red Hat Text", "Noto Sans Arabic", "Noto Sans Hebrew", "Noto Sans JP", "Noto Sans KR", "Noto Sans Malayalam", "Noto Sans SC", "Noto Sans TC", "Noto Sans Thai", Helvetica, Arial, sans-serif);
+ font-size: var(--rh-font-size-body-text-md, 1rem);
+}
diff --git a/docs/assets/javascript/elements/uxdot-repo-status-list.js b/docs/assets/javascript/elements/uxdot-repo-status-list.js
new file mode 100644
index 0000000000..602de66ac6
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-repo-status-list.js
@@ -0,0 +1,65 @@
+import { LitElement, html, css } from 'lit';
+
+class UxdotRepoStatusList extends LitElement {
+ static styles = css`
+ :host {
+ display: block;
+ container-type: inline-size;
+ container-name: host;
+ }
+
+ #inner-container {
+ border: var(--rh-border-width-sm, 1px) solid var(--rh-color-border-subtle-on-light, #c7c7c7);
+ border-radius: var(--rh-border-radius-default, 3px);
+ }
+
+ #header-container {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
+
+ [name="checklist"]::slotted(a) {
+ font-size: var(--rh-font-size-body-text-sm, 0.875rem);
+ }
+
+ ::slotted(dl) {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ column-gap: var(--rh-space-2xl, 32px);
+ row-gap: var(--rh-space-lg, 16px);
+ margin-block: var(--rh-space-lg, 16px) !important;
+ margin-inline: var(--rh-space-xl, 24px) !important;
+ }
+
+ @container host (min-width: 768px) {
+ ::slotted(dl) {
+ flex-direction: row;
+ column-gap: var(--rh-space-lg, 16px);
+ }
+ }
+
+ @container host (min-width: 992px) {
+ ::slotted(dl) {
+ column-gap: var(--rh-space-2xl, 32px);
+ }
+ }
+ `;
+
+ render() {
+ return html`
+
+
+
+
+
+
+
+
+
+ `;
+ }
+}
+
+customElements.define('uxdot-repo-status-list', UxdotRepoStatusList);
diff --git a/docs/assets/elements/uxdot-search.js b/docs/assets/javascript/elements/uxdot-search.js
similarity index 91%
rename from docs/assets/elements/uxdot-search.js
rename to docs/assets/javascript/elements/uxdot-search.js
index 65032f7c19..bb63c99cb2 100644
--- a/docs/assets/elements/uxdot-search.js
+++ b/docs/assets/javascript/elements/uxdot-search.js
@@ -1,8 +1,11 @@
-import '@rhds/elements/rh-button/rh-button.js';
-
-import { LitElement, html, css } from 'lit';
+import { LitElement, html, css, isServer } from 'lit';
import { ifDefined } from 'lit/directives/if-defined.js';
+
+if (!isServer) {
+ import('@rhds/elements/rh-button/rh-button.js');
+}
+
class UxdotSearch extends LitElement {
static formAssociated = true;
@@ -87,18 +90,23 @@ class UxdotSearch extends LitElement {
static #instances = new Set();
static {
- window.addEventListener('click', event => {
- for (const instance of this.#instances) {
- instance.#onOutsideClick(event);
- }
- });
+ if (!isServer) {
+ window.addEventListener('click', event => {
+ for (const instance of this.#instances) {
+ instance.#onOutsideClick(event);
+ }
+ });
+ }
}
- #internals = this.attachInternals();
+ #internals = !isServer ? this.attachInternals() : null;
#ariaLabel = '';
get form() {
+ if (isServer) {
+ return null;
+ }
return this.#internals.form;
}
@@ -129,8 +137,10 @@ class UxdotSearch extends LitElement {
constructor() {
super();
this.items = [];
- this.addEventListener('keydown', this.#onKeydown);
- this.addEventListener('blur', this.#onBlur);
+ if (!isServer) {
+ this.addEventListener('keydown', this.#onKeydown);
+ this.addEventListener('blur', this.#onBlur);
+ }
}
connectedCallback() {
@@ -182,7 +192,7 @@ class UxdotSearch extends LitElement {
#onClickSearch() {
this.expanded = true;
- if (this.value) {
+ if (this.value && !isServer) {
this.form?.requestSubmit();
}
}
diff --git a/docs/assets/javascript/elements/uxdot-sidenav-lightdom.css b/docs/assets/javascript/elements/uxdot-sidenav-lightdom.css
new file mode 100644
index 0000000000..9378e0e078
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-sidenav-lightdom.css
@@ -0,0 +1,54 @@
+uxdot-sidenav > ul > li {
+ margin-block: 0;
+}
+
+uxdot-sidenav-dropdown > details > summary {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ cursor: pointer;
+ border-inline-start:
+ var(--rh-border-width-lg, 3px)
+ solid
+ transparent;
+ text-decoration: none;
+ color: var(--rh-color-text-primary-on-light, #151515);
+ font-size: var(--rh-font-size-body-text-lg, 1.125rem);
+ padding: var(--rh-space-lg, 16px) var(--rh-space-2xl, 32px);
+}
+
+uxdot-sidenav-dropdown-menu > ul > li {
+ margin-block: 0;
+}
+
+uxdot-sidenav-dropdown > details > summary::-webkit-details-marker {
+ display: none;
+}
+
+uxdot-sidenav-dropdown > details > summary:hover,
+uxdot-sidenav-dropdown > details[open] > summary:focus,
+uxdot-sidenav-dropdown > details[open] > summary:hover {
+ background: var(--rh-color-surface-lighter, #f2f2f2);
+ border-inline-start-color: var(--rh-color-border-subtle-on-light, #c7c7c7);
+}
+
+uxdot-sidenav-dropdown > details > summary:after {
+ content: "";
+ color: var(--rh-color-text-primary-on-light, #151515);
+ width: 9px;
+ height: 9px;
+ transform: rotate(45deg);
+ border-right:
+ var(--rh-border-width-lg, 3px)
+ solid
+ var(--rh-color-border-strong-on-light, #151515);
+ border-top:
+ var(--rh-border-width-lg, 3px)
+ solid
+ var(--rh-color-border-strong-on-light, #151515);
+}
+
+uxdot-sidenav-dropdown > details[open] > summary:after {
+ transform: rotate(135deg);
+}
diff --git a/docs/assets/javascript/elements/uxdot-sidenav.js b/docs/assets/javascript/elements/uxdot-sidenav.js
new file mode 100644
index 0000000000..b1b1fdfef3
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-sidenav.js
@@ -0,0 +1,464 @@
+import { LitElement, html, css, isServer } from 'lit';
+
+import { RovingTabindexController } from '@patternfly/pfe-core/controllers/roving-tabindex-controller.js';
+
+if (!isServer) {
+ import('@patternfly/elements/pf-icon/pf-icon.js');
+}
+
+/* ************* */
+/* UXDOT-SIDENAV */
+/* ************* */
+class UxdotSideNav extends LitElement {
+ static shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true };
+ static properties = {
+ open: { type: Boolean, reflect: true },
+ trigger: { type: String },
+ };
+
+ static styles = css`
+ :host {
+ --_padding-start: var(--uxdot-sidenav-padding-start, var(--rh-space-2xl, 32px));
+ --_padding-end: var(--uxdot-sidenav-padding-end, var(--rh-space-2xl, 32px));
+ --_max-height: 100dvh;
+
+ width: 100%;
+ height: var(--_max-height);
+ top: 0;
+ z-index: var(--uxdot-sidenav-z-index, 2);
+ }
+
+ :host([open]) {
+ display: block !important;
+ position: fixed !important;
+ }
+
+ :host(:not([open])) {
+ display: none;
+ }
+
+ [part="close-button"] {
+ color: var(--rh-color-text-on-light, #151515);
+ background-color: transparent;
+ border: none;
+ margin: 0;
+ padding: var(--rh-space-md, 8px);
+ line-height: 0 !important;
+ }
+
+ #container {
+ position: relative;
+ background-color: var(--rh-color-surface-lightest, #ffffff);
+ width: auto;
+ }
+
+ #close-button-container {
+ padding-inline: var(--rh-space-md, 8px);
+ padding-block: var(--rh-space-lg, 16px);
+ max-height: var(--uxdot-masthead-max-height, 72px);
+ }
+
+ #close-button:focus {
+ outline: var(--rh-border-width-md, 2px) solid var(--rh-color-border-interactive-on-light, #0066cc);
+ border-radius: var(--rh-border-radius-default, 3px);
+ }
+
+ [part="overlay"] {
+ --_gray-90-rgb: var(--rh-color-gray-90-rgb, 31 31 31);
+
+ display: none;
+ background-color: rgb(var(--_gray-90-rgb) / var(--rh-opacity-60, 60%));
+ position: fixed;
+ top: 0;
+ height: 100dvh;
+ width: 100dvw;
+ z-index: -1;
+ }
+
+ ::slotted(ul) {
+ padding-inline: 0;
+ padding-block-start: var(--_padding-start);
+ padding-block-end: var(--_padding-end);
+ list-style: none;
+ margin-block: 0 !important;
+ height: var(--_max-height);
+ overflow-y: scroll;
+ background-color: var(--rh-color-surface-lightest, #ffffff);
+ }
+
+ :host([open]) [part="overlay"] {
+ display: block;
+ }
+
+ @media (min-width: 320px) {
+
+ :host {
+ --uxdot-sidenav-width: 320px;
+
+ width: var(--uxdot-sidenav-width);
+ box-shadow: var(--rh-box-shadow-lg, 0 6px 8px 2px rgba(21, 21, 21, 0.3));
+ }
+
+ #container {
+ width: var(--uxdot-sidenav-width, 320px);
+ }
+ }
+
+ @media (min-width: 576px) {
+ #close-button-container {
+ padding: var(--rh-space-lg, 16px);
+ }
+ }
+
+ @media (min-width: 992px) {
+ :host {
+ --uxdot-siznav-z-index: 1;
+
+ position: fixed;
+ top: var(--uxdot-masthead-max-height, 72px);
+ height: calc(var(--_max-height) - var(--uxdot-masthead-max-height, 72px));
+ box-shadow: unset;
+ }
+
+ :host(:not([open])) {
+ display: block;
+ }
+
+ #close-button-container {
+ display: none;
+ }
+
+ :host([open]) [part="overlay"] {
+ display: none;
+ }
+ }
+ `;
+
+
+ static isDropdown(element) {
+ return element instanceof UxdotSideNavDropdown;
+ }
+
+ #triggerElement = null;
+
+ #closeButton = null;
+
+ #tabindex = new RovingTabindexController(this, {
+ getItems: () => {
+ if (isServer) {
+ return [];
+ }
+ const slot = this.shadowRoot?.querySelector('slot').assignedElements({ flatten: true }) ?? [];
+ return slot?.flatMap(slotted => {
+ return Array.from(slotted.querySelectorAll(`uxdot-sidenav-dropdown > details > summary, uxdot-sidenav-item > a, details[open] uxdot-sidenav-dropdown-menu-item > a`)) ?? [];
+ });
+ },
+ });
+
+ async connectedCallback() {
+ super.connectedCallback();
+
+ this.#triggerElement = (this.getRootNode()).getElementById(this.trigger);
+ if (!isServer) {
+ this.#triggerElement.addEventListener('click', this.#onTriggerClick.bind(this));
+ this.addEventListener('click', this.#onClick.bind(this));
+ this.addEventListener('expand', this.#onExpandRequest);
+ this.addEventListener('keydown', this.#onKeydown.bind(this));
+ window.addEventListener('keyup', this.#onKeyup.bind(this));
+ this.#tabindex.updateItems();
+ }
+ }
+
+ disconnectedCallback() {
+ super.disconnectedCallback();
+ this.#triggerElement.removeEventListener('click', this.#onTriggerClick.bind(this));
+ window.removeEventListener('keyup', this.#onKeyup);
+ }
+
+ render() {
+ return html`
+
+
+
+ `;
+ }
+
+ updated() {
+ this.#closeButton = this.shadowRoot?.getElementById('close-button');
+ }
+
+ async toggle(trapFocus = true) {
+ this.open = !this.open;
+ await this.updateComplete;
+
+ if (trapFocus) {
+ if (this.open) {
+ this.#closeButton?.focus();
+ } else {
+ this.#triggerElement?.focus();
+ }
+ }
+ }
+
+ #onTriggerClick(event) {
+ event.preventDefault();
+ this.toggle();
+ }
+
+ #onClick(event) {
+ const path = event.composedPath();
+ if (!path.includes(this)) {
+ this.toggle();
+ }
+ }
+
+ async #onExpandRequest(event) {
+ if (UxdotSideNav.isDropdown(event.target)) {
+ const detailsOpen = event.target.querySelector('details').hasAttribute('open');
+ this.#tabindex.updateItems();
+ this.#tabindex.setActiveItem(event.target.querySelector('summary'));
+ }
+ }
+
+ #onKeydownCloseButton(event) {
+ switch (event.key) {
+ case 'Enter':
+ event.preventDefault();
+ this.toggle();
+ return;
+ }
+ }
+
+ #onKeydown(event) {
+ switch (event.key) {
+ case 'Escape': {
+ if (!this.open) {
+ return;
+ }
+ this.toggle();
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ #onKeyup(event) {
+ switch (event.key) {
+ case 'Tab':
+ this.#onTabKeyup(event);
+ break;
+ default:
+ break;
+ }
+ }
+
+ close(trapFocus = true) {
+ if (!this.open) {
+ return;
+ }
+ this.toggle(trapFocus);
+ }
+
+ #onTabKeyup(event) {
+ const { target } = event;
+ if (!this.contains(target)) {
+ this.close(false);
+ }
+ }
+}
+
+/* ****************** */
+/* UXDOT-SIDENAV-ITEM */
+/* ****************** */
+class UxdotSideNavItem extends LitElement {
+ static styles = css`
+ :host {
+ display: block;
+ border-inline-start:
+ var(--rh-border-width-lg, 3px)
+ solid
+ transparent;
+ }
+
+ :host:hover {
+ background: var(--rh-color-surface-lighter, #f2f2f2);
+ border-inline-start-color: var(--rh-color-border-subtle-on-light, #c7c7c7);
+ }
+
+ :host([active]) {
+ background: var(--rh-color-surface-lighter, #f2f2f2);
+ border-inline-start-color: var(--rh-color-accent-brand-on-light, #ee0000);
+ }
+
+ ::slotted(a) {
+ display: block;
+ text-decoration: none;
+ color: var(--rh-color-text-primary-on-light, #151515) !important;
+ font-size: var(--rh-font-size-body-text-lg, 1.125rem);
+ padding: var(--rh-space-lg, 16px) var(--rh-space-2xl, 32px);
+ }
+
+ ::slotted(a:hover) {
+ background: var(--rh-color-surface-lighter, #f2f2f2);
+ border-inline-start-color: var(--rh-color-border-subtle-on-light, #c7c7c7);
+ }
+ `;
+
+ static properties = {
+ active: { type: Boolean },
+ };
+
+ constructor() {
+ super();
+ this.active = false;
+ }
+
+ render() {
+ return html`
+
+
+
+ `;
+ }
+}
+
+/* *************************** */
+/* UXDOT-SIDENAV-DROPDOWN */
+/* *************************** */
+class UxdotSideNavDropdown extends LitElement {
+ static styles = css`
+ :host {
+ /* styles here */
+ z-index: var(--uxdot-sidenav-z-index, 102);
+ }
+ `;
+
+ static properties = {
+ expanded: { state: true },
+ };
+
+ constructor() {
+ super();
+ this.expanded = false;
+ }
+
+ connectedCallback() {
+ super.connectedCallback();
+ if (!isServer) {
+ this.addEventListener('click', this.#onClick);
+ }
+ }
+
+ render() {
+ return html`
+
+ `;
+ }
+
+ async #onClick(event) {
+ const { target } = event;
+ if (target instanceof HTMLAnchorElement) {
+ return;
+ }
+ event.preventDefault();
+ this.expanded = !this.expanded;
+ this.querySelector('details').toggleAttribute('open', this.expanded);
+ // trigger change event which evokes the mutation on this.expanded
+ this.dispatchEvent(new CustomEvent('expand', {
+ bubbles: true,
+ composed: true,
+ detail: {
+ expanded: this.expanded,
+ toggle: this,
+ },
+ }));
+ }
+}
+
+
+/* *************************** */
+/* UXDOT-SIDENAV-DROPDOWN-MENU */
+/* *************************** */
+class UxdotSideNavDropdownMenu extends LitElement {
+ static styles = css`
+ ::slotted(ul) {
+ margin: 0 !important;
+ list-style: none;
+ padding-inline-start: var(--rh-space-2xl, 32px);
+ }
+ `;
+
+ render() {
+ return html`
+
+ `;
+ }
+}
+
+/* ******************************** */
+/* UXDOT-SIDENAV-DROPDOWN-MENU-ITEM */
+/* ******************************** */
+class UxdotSideNavDropdownMenuItem extends LitElement {
+ static styles = css`
+ ::slotted(a) {
+ display: inline-block;
+ padding: var(--rh-space-md, 8px) 0 var(--rh-space-md, 8px) var(--rh-space-lg, 16px);
+ width: 100%;
+ border-inline-start:
+ var(--rh-border-width-lg, 3px)
+ solid
+ transparent;
+ font-size: var(--rh-font-size-body-text-md, 1rem);
+ text-decoration: none;
+ color: var(--rh-color-text-primary-on-light, #151515) !important;
+ }
+
+ :host([active]) ::slotted(a) {
+ background: var(--rh-color-surface-lighter, #f2f2f2);
+ border-inline-start-color: var(--rh-color-accent-brand-on-light, #ee0000);
+ }
+
+ ::slotted(a:hover) {
+ background: var(--rh-color-surface-lighter, #f2f2f2);
+ border-inline-start-color: var(--rh-color-border-subtle-on-light, #c7c7c7);
+ }
+
+ /* TODO: Remove i believe this is misplaced */
+ /* ::slotted(ul) {
+ list-style: none;
+ padding-inline: var(--rh-space-2xl, 32px);
+ } */
+ `;
+
+ static properties = {
+ active: { type: Boolean },
+ };
+
+ constructor() {
+ super();
+ this.active = false;
+ }
+
+ render() {
+ return html`
+
+ `;
+ }
+}
+
+customElements.define('uxdot-sidenav', UxdotSideNav);
+customElements.define('uxdot-sidenav-item', UxdotSideNavItem);
+customElements.define('uxdot-sidenav-dropdown', UxdotSideNavDropdown);
+customElements.define('uxdot-sidenav-dropdown-menu', UxdotSideNavDropdownMenu);
+customElements.define('uxdot-sidenav-dropdown-menu-item', UxdotSideNavDropdownMenuItem);
diff --git a/docs/assets/javascript/elements/uxdot-skip-navigation.js b/docs/assets/javascript/elements/uxdot-skip-navigation.js
new file mode 100644
index 0000000000..a9062c97f1
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-skip-navigation.js
@@ -0,0 +1,50 @@
+import { LitElement, html, css } from 'lit';
+
+class UxdotSkipNavigation extends LitElement {
+ static styles = css`
+ :host {
+ display: block;
+ }
+
+ ::slotted(a) {
+ position: absolute;
+ top: -40px;
+ left: 50%;
+ transform: translateX(-50%);
+ padding: var(--rh-space-sm, 6px);
+ color: var(--rh-color-text-primary-on-light, #151515);
+ border-inline:
+ var(--rh-border-width-sm, 1px)
+ solid
+ var(--rh-color-border-strong-on-light, #151515);
+ border-block-end:
+ var(--rh-border-width-sm, 1px)
+ solid
+ var(--rh-color-border-strong-on-light, #151515);
+ border-radius: var(--rh-border-radius-default, 3px);
+ background: var(--rh-color-surface-light, #e0e0e0);
+ transition: top 0.5s ease-out;
+ z-index: var(--uxdot-skip-navigation-z-index, 5);
+ }
+
+ ::slotted(a:focus) {
+ top: 0;
+ outline-color: transparent;
+ transition: top 0.05s ease-in;
+ }
+
+ @media (prefers-reduced-motion: reduce) {
+ ::slotted(a) {
+ transition-duration: 0.001ms !important;
+ }
+ }
+ `;
+
+ render() {
+ return html`
+
+ `;
+ }
+}
+
+customElements.define('uxdot-skip-navigation', UxdotSkipNavigation);
diff --git a/docs/assets/javascript/elements/uxdot-toc-lightdom.css b/docs/assets/javascript/elements/uxdot-toc-lightdom.css
new file mode 100644
index 0000000000..c6451a2b02
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-toc-lightdom.css
@@ -0,0 +1,39 @@
+uxdot-toc > ol {
+ columns: 16rem auto;
+ list-style: none;
+ padding: 0;
+ margin-block-start: var(--rh-space-lg, 16px);
+ margin-block-end: 0;
+}
+
+uxdot-toc > ol > li {
+ display: list-item;
+ margin-inline-start: var(--rh-space-lg, 16px);
+ margin-block-end: var(--rh-space-lg, 16px);
+ padding-inline-start: var(--rh-space-lg, 16px);
+}
+
+uxdot-toc > ol > li:first-of-type {
+ margin-block-start: 0;
+}
+
+uxdot-toc > ol > li::marker {
+ content: url("data:image/svg+xml;charset=UTF-8,");
+}
+
+uxdot-toc > ol > li > a {
+ text-decoration: none;
+}
+
+/* TODO: This style is specific to the implementation on ux.redhat.com,
+ * not ideal for the component lightdom files, maybe this is a
+ * pattern level style that should be in the pattern layer. */
+@container main (min-width: 1440px) {
+ uxdot-toc > ol {
+ columns: unset;
+ }
+
+ uxdot-toc > ol > li:first-of-type {
+ margin-block-start: var(--rh-space-md, 8px);
+ }
+}
diff --git a/docs/assets/javascript/elements/uxdot-toc.js b/docs/assets/javascript/elements/uxdot-toc.js
new file mode 100644
index 0000000000..bb510c4466
--- /dev/null
+++ b/docs/assets/javascript/elements/uxdot-toc.js
@@ -0,0 +1,111 @@
+import { LitElement, html, css } from 'lit';
+
+class UxdotToc extends LitElement {
+ static styles = css`
+ :host {
+ display: block;
+ container-type: inline-size;
+ container-name: host;
+ }
+
+ details {
+ display: flex;
+ padding-inline: var(--rh-space-xl, 24px);
+ border-inline-start: var(--rh-border-width-lg, 3px) solid transparent;
+ border: var(--rh-border-width-sm, 1px) solid var(--rh-color-border-subtle-on-light, #c7c7c7);
+ }
+
+ details[open]::after {
+ content: "";
+ position: absolute;
+ inset-block: 0px;
+ inset-inline-start: 0px;
+ inset-block-start: -1px;
+ width: var(--rh-border-width-lg, 3px);
+ background-color: var(--rh-color-brand-red-on-light, #ee0000);
+ }
+
+ summary {
+ list-style: none;
+ display: inline-flex;
+ gap: var(--rh-space-sm, 8px);
+ align-items: center;
+ padding-block: var(--rh-space-lg, 16px);
+ }
+
+ summary,
+ #summary {
+ font-family: var(--rh-font-family-body-text, RedHatText, 'Red Hat Text', 'Noto Sans Arabic', 'Noto Sans Hebrew', 'Noto Sans JP', 'Noto Sans KR', 'Noto Sans Malayalam', 'Noto Sans SC', 'Noto Sans TC', 'Noto Sans Thai', Helvetica, Arial, sans-serif);
+ font-size: var(--rh-font-size-body-text-xl, 1.25rem) !important;
+ font-weight: var(--rh-font-weight-body-text-medium, 500);
+ }
+
+ summary::before {
+ content: '';
+ width: 1rem;
+ height: 1rem;
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 10 15' fill='none'%3E%3Cg clip-path='url(%23clip0_232_19576)'%3E%3Cpath d='M2.5 14.5L0.5 12.5L5.5 7.5L0.5 2.5L2.5 0.5L9.5 7.5L2.5 14.5Z' fill='%23707070'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_232_19576'%3E%3Crect width='10' height='14' fill='white' transform='matrix(-1 0 0 1 10 0.5)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E");
+ background-repeat: no-repeat;
+ background-size: contain;
+ transition: 0.2s;
+ }
+ summary::-webkit-details-marker,
+ summary::marker {
+ display: none;
+ }
+
+ details[open] > summary::before {
+ transform: rotate(90deg);
+ }
+
+ nav {
+ margin-block-end: var(--rh-space-lg, 16px);
+ }
+
+ #expanded {
+ display: none;
+ }
+
+ @media (min-width: 568px) {
+ details {
+ display: none;
+ }
+
+ #expanded {
+ display: block;
+ }
+ }
+ `;
+
+ static properties = {
+ summary: { type: String, attribute: 'summary' },
+ };
+
+ render() {
+ return html`
+
+
+ ${this.summary}
+
+
+
+ ${this.summary}
+
+
+
+ `;
+ }
+
+ _handleToggle() {
+ this.dispatchEvent(new CustomEvent('toggle', {
+ bubbles: true,
+ composed: true,
+ }));
+ }
+}
+
+customElements.define('uxdot-toc', UxdotToc);
diff --git a/docs/assets/search-results.js b/docs/assets/javascript/search-results.js
similarity index 97%
rename from docs/assets/search-results.js
rename to docs/assets/javascript/search-results.js
index cf335c3ba6..d3fec2b398 100644
--- a/docs/assets/search-results.js
+++ b/docs/assets/javascript/search-results.js
@@ -1,5 +1,5 @@
import { html, render } from 'lit';
-import { fuse } from '/assets/search-tokens.js';
+import { fuse } from '/assets/javascript/search-tokens.js';
import { tokens } from '@rhds/tokens/meta.js';
import '@rhds/elements/rh-badge/rh-badge.js';
diff --git a/docs/assets/search-tokens.js b/docs/assets/javascript/search-tokens.js
similarity index 100%
rename from docs/assets/search-tokens.js
rename to docs/assets/javascript/search-tokens.js
diff --git a/docs/assets/toast.js b/docs/assets/javascript/toast.js
similarity index 100%
rename from docs/assets/toast.js
rename to docs/assets/javascript/toast.js
diff --git a/docs/assets/tokens/tokens.js b/docs/assets/javascript/tokens.js
similarity index 83%
rename from docs/assets/tokens/tokens.js
rename to docs/assets/javascript/tokens.js
index 1391bd1aee..cdd3fc0f83 100644
--- a/docs/assets/tokens/tokens.js
+++ b/docs/assets/javascript/tokens.js
@@ -5,12 +5,12 @@ import '@rhds/elements/rh-tooltip/rh-tooltip.js';
import '@rhds/elements/rh-footer/rh-footer-universal.js';
// search bar
-import '/assets/elements/uxdot-search.js';
+import '/assets/javascript/elements/uxdot-search.js';
document
.getElementById('search-input')
.addEventListener('focus', async function() {
- const { init } = await import('/assets/search-tokens.js');
+ const { init } = await import('/assets/javascript/search-tokens.js');
init(document.getElementById('search-tokens'));
}, { once: true });
diff --git a/docs/assets/navigation-foundations/nav-foundations-1.svg b/docs/assets/navigation-foundations/nav-foundations-1.svg
deleted file mode 100644
index 938160ec24..0000000000
--- a/docs/assets/navigation-foundations/nav-foundations-1.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/navigation-foundations/nav-foundations-2.svg b/docs/assets/navigation-foundations/nav-foundations-2.svg
deleted file mode 100644
index 2be6b80a83..0000000000
--- a/docs/assets/navigation-foundations/nav-foundations-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-1.svg b/docs/assets/promo-banner/promo-banner-1.svg
deleted file mode 100644
index e235f2c28f..0000000000
--- a/docs/assets/promo-banner/promo-banner-1.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-best-practices-1.svg b/docs/assets/promo-banner/promo-banner-best-practices-1.svg
deleted file mode 100644
index e3fb562229..0000000000
--- a/docs/assets/promo-banner/promo-banner-best-practices-1.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-best-practices-2.svg b/docs/assets/promo-banner/promo-banner-best-practices-2.svg
deleted file mode 100644
index 3131774842..0000000000
--- a/docs/assets/promo-banner/promo-banner-best-practices-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-best-practices-3.svg b/docs/assets/promo-banner/promo-banner-best-practices-3.svg
deleted file mode 100644
index 9824216be2..0000000000
--- a/docs/assets/promo-banner/promo-banner-best-practices-3.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-best-practices-4.svg b/docs/assets/promo-banner/promo-banner-best-practices-4.svg
deleted file mode 100644
index 3534c931be..0000000000
--- a/docs/assets/promo-banner/promo-banner-best-practices-4.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-best-practices-5.svg b/docs/assets/promo-banner/promo-banner-best-practices-5.svg
deleted file mode 100644
index 757bf810a8..0000000000
--- a/docs/assets/promo-banner/promo-banner-best-practices-5.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-imaged-right.svg b/docs/assets/promo-banner/promo-banner-imaged-right.svg
deleted file mode 100644
index 068c68076e..0000000000
--- a/docs/assets/promo-banner/promo-banner-imaged-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-imaged-wrong.svg b/docs/assets/promo-banner/promo-banner-imaged-wrong.svg
deleted file mode 100644
index 9ae592fb4a..0000000000
--- a/docs/assets/promo-banner/promo-banner-imaged-wrong.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-layout-desktop.svg b/docs/assets/promo-banner/promo-banner-layout-desktop.svg
deleted file mode 100644
index 77b72270ae..0000000000
--- a/docs/assets/promo-banner/promo-banner-layout-desktop.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-layout-mobile.svg b/docs/assets/promo-banner/promo-banner-layout-mobile.svg
deleted file mode 100644
index 0fd91cc6f1..0000000000
--- a/docs/assets/promo-banner/promo-banner-layout-mobile.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-placement.svg b/docs/assets/promo-banner/promo-banner-placement.svg
deleted file mode 100644
index 4fb932253b..0000000000
--- a/docs/assets/promo-banner/promo-banner-placement.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-responsive-desktop.svg b/docs/assets/promo-banner/promo-banner-responsive-desktop.svg
deleted file mode 100644
index 77b72270ae..0000000000
--- a/docs/assets/promo-banner/promo-banner-responsive-desktop.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-responsive-mobile.svg b/docs/assets/promo-banner/promo-banner-responsive-mobile.svg
deleted file mode 100644
index 0fd91cc6f1..0000000000
--- a/docs/assets/promo-banner/promo-banner-responsive-mobile.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-responsive-tablet.svg b/docs/assets/promo-banner/promo-banner-responsive-tablet.svg
deleted file mode 100644
index a478bce29e..0000000000
--- a/docs/assets/promo-banner/promo-banner-responsive-tablet.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-spacing-large.svg b/docs/assets/promo-banner/promo-banner-spacing-large.svg
deleted file mode 100644
index 5bbc922fac..0000000000
--- a/docs/assets/promo-banner/promo-banner-spacing-large.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-spacing-small.svg b/docs/assets/promo-banner/promo-banner-spacing-small.svg
deleted file mode 100644
index effb030271..0000000000
--- a/docs/assets/promo-banner/promo-banner-spacing-small.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-style.svg b/docs/assets/promo-banner/promo-banner-style.svg
deleted file mode 100644
index 2a994145fd..0000000000
--- a/docs/assets/promo-banner/promo-banner-style.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-theme-black.svg b/docs/assets/promo-banner/promo-banner-theme-black.svg
deleted file mode 100644
index 10349bea03..0000000000
--- a/docs/assets/promo-banner/promo-banner-theme-black.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-theme-gray.svg b/docs/assets/promo-banner/promo-banner-theme-gray.svg
deleted file mode 100644
index c80440f11f..0000000000
--- a/docs/assets/promo-banner/promo-banner-theme-gray.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-theme-imaged.svg b/docs/assets/promo-banner/promo-banner-theme-imaged.svg
deleted file mode 100644
index bb5d09a782..0000000000
--- a/docs/assets/promo-banner/promo-banner-theme-imaged.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner-theme.svg b/docs/assets/promo-banner/promo-banner-theme.svg
deleted file mode 100644
index 56e88fdd38..0000000000
--- a/docs/assets/promo-banner/promo-banner-theme.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/promo-banner/promo-banner.png b/docs/assets/promo-banner/promo-banner.png
deleted file mode 100644
index 1a95e0e84c..0000000000
Binary files a/docs/assets/promo-banner/promo-banner.png and /dev/null differ
diff --git a/docs/assets/promo-banner/promo-banner.svg b/docs/assets/promo-banner/promo-banner.svg
deleted file mode 100644
index 329afdc13f..0000000000
--- a/docs/assets/promo-banner/promo-banner.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/assets/redhat/redhat-font/2/webfonts/red-hat-font.css b/docs/assets/redhat/redhat-font/2/webfonts/red-hat-font.css
deleted file mode 100644
index 4accdcea7f..0000000000
--- a/docs/assets/redhat/redhat-font/2/webfonts/red-hat-font.css
+++ /dev/null
@@ -1,64 +0,0 @@
-@font-face {
- font-family: RedHatDisplay;
- src: url("./RedHatDisplay/RedHatDisplay-Regular.eot");
-
- /* IE9 Compat Modes */
- src: url("./RedHatDisplay/RedHatDisplay-Regular.eot?#iefix") format("embedded-opentype"), url("./RedHatDisplay/RedHatDisplay-Regular.woff") format("woff");
-
- /* Modern Browsers */
- font-style: normal;
- font-weight: 300;
- text-rendering: optimizelegibility;
-}
-
-@font-face {
- font-family: RedHatDisplay;
- src: url("./RedHatDisplay/RedHatDisplay-Medium.eot");
-
- /* IE9 Compat Modes */
- src: url("./RedHatDisplay/RedHatDisplay-Medium.eot?#iefix") format("embedded-opentype"), url("./RedHatDisplay/RedHatDisplay-Medium.woff") format("woff");
-
- /* Modern Browsers */
- font-style: normal;
- font-weight: 400;
- text-rendering: optimizelegibility;
-}
-
-@font-face {
- font-family: RedHatDisplay;
- src: url("./RedHatDisplay/RedHatDisplay-Bold.eot");
-
- /* IE9 Compat Modes */
- src: url("./RedHatDisplay/RedHatDisplay-Bold.eot?#iefix") format("embedded-opentype"), url("./RedHatDisplay/RedHatDisplay-Bold.woff") format("woff");
-
- /* Modern Browsers */
- font-style: normal;
- font-weight: 700;
- text-rendering: optimizelegibility;
-}
-
-@font-face {
- font-family: RedHatText;
- src: url("./RedHatText/RedHatText-Regular.eot");
-
- /* IE9 Compat Modes */
- src: url("./RedHatText/RedHatText-Regular.eot?#iefix") format("embedded-opentype"), url("./RedHatText/RedHatText-Regular.woff") format("woff");
-
- /* Modern Browsers */
- font-style: normal;
- font-weight: 400;
- text-rendering: optimizelegibility;
-}
-
-@font-face {
- font-family: RedHatText;
- src: url("./RedHatText/RedHatText-Medium.eot");
-
- /* IE9 Compat Modes */
- src: url("./RedHatText/RedHatText-Medium.eot?#iefix") format("embedded-opentype"), url("./RedHatText/RedHatText-Medium.woff") format("woff");
-
- /* Modern Browsers */
- font-style: normal;
- font-weight: 700;
- text-rendering: optimizelegibility;
-}
diff --git a/docs/assets/redhat/redhat-theme/4/advanced-theme.css b/docs/assets/redhat/redhat-theme/4/advanced-theme.css
deleted file mode 100644
index 81fcd89132..0000000000
--- a/docs/assets/redhat/redhat-theme/4/advanced-theme.css
+++ /dev/null
@@ -1,289 +0,0 @@
-:root {
- --pfe-theme--color--ui-base: #0076e0;
- --pfe-theme--color--ui-base--text: #ffffff;
- --pfe-theme--color--ui-base--hover: #004080;
- --pfe-theme--color--ui-base--text--hover: #ffffff;
- --pfe-theme--color--ui-complement: #151515;
- --pfe-theme--color--ui-complement--text: #ffffff;
- --pfe-theme--color--ui-complement--hover: #464646;
- --pfe-theme--color--ui-complement--text--hover: #ffffff;
- --pfe-theme--color--ui-accent: #ee0000;
- --pfe-theme--color--ui-accent--text: #ffffff;
- --pfe-theme--color--ui-accent--hover: #d40000;
- --pfe-theme--color--ui-accent--text--hover: #ffffff;
- --pfe-theme--color--ui-disabled: #d2d2d2;
- --pfe-theme--color--ui-disabled--text: #707070;
- --pfe-theme--color--ui-disabled--hover: #d2d2d2;
- --pfe-theme--color--ui-disabled--text--hover: #aaaaaa;
- --pfe-theme--color--surface--lightest: #ffffff;
- --pfe-theme--color--surface--lighter: #f0f0f0;
- --pfe-theme--color--surface--base: #dddddd;
- --pfe-theme--color--surface--darker: #444444;
- --pfe-theme--color--surface--darkest: #1a1a1a;
- --pfe-theme--color--surface--complement: #10565c;
- --pfe-theme--color--surface--accent: #ee0000;
- --pfe-theme--ui--border-width: 1px;
- --pfe-theme--ui--border-style: solid;
- --pfe-theme--ui--border-radius: 3px;
- --pfe-theme--surface--border-width: 1px;
- --pfe-theme--surface--border-style: solid;
- --pfe-theme--surface--border-radius: 3px;
- --pfe-theme--surface--border: #d2d2d2;
- --pfe-theme--surface--border-lightest: #ededed;
- --pfe-theme--surface--border-darkest: #333333;
- --pfe-theme--logo--favicon: url("https://static.redhat.com/libs/redhat/brand-assets/2/corp/favicon.png");
- --pfe-theme--logo--svg: url("https://static.redhat.com/libs/redhat/brand-assets/2/corp/logo.svg");
- --pfe-theme--logo--svg--on-dark: url("https://static.redhat.com/libs/redhat/brand-assets/2/corp/logo--on-dark.svg");
- --pfe-theme--logo--png: url("https://static.redhat.com/libs/redhat/brand-assets/2/corp/logo.png");
- --pfe-theme--logo--png--on-dark: url("https://static.redhat.com/libs/redhat/brand-assets/2/corp/logo--on-dark.png");
- --pfe-theme--container-spacer: 16px;
- --pfe-theme--container-padding: 16px;
- --pfe-theme--content-spacer: 30px;
- --pfe-theme--animation-timing: 0.2s ease-in 0s;
- --pfe-theme--box-shadow--sm: 0 0.0625rem 0.125rem 0 rgba(37, 37, 39, 0.1);
- --pfe-theme--box-shadow--md: 0 0.125rem 0.0625rem 0.0625rem rgba(37, 37, 39, 0.1), 0 0.25rem 0.6875rem 0.375rem rgba(37, 37, 39, 0.1);
- --pfe-theme--box-shadow--lg: 0 0.1875rem 0.4375rem 0.1875rem rgba(37, 37, 39, 0.1), 0 0.6875rem 1.5rem 1rem rgba(37, 37, 39, 0.1);
- --pfe-theme--box-shadow--inset: inset 0 0 0.625rem 0 rgba(37, 37, 39, 0.1);
- --pfe-theme--zindex--modal: 1001;
- --pfe-theme--zindex--navigation: 103;
- --pfe-theme--zindex--subnavigation: 95;
- --pfe-theme--zindex--content: 0;
- --pfe-theme--base--text: 16px;
- --pfe-theme--base--heading: 17px;
- --pfe-theme--base--heading-lg: 18px;
- --pfe-theme--font-size--xxl: calc(1.92 * var(--pfe-theme--base--heading-lg, 25px));
- --pfe-theme--font-size--xl: calc(1.6 * var(--pfe-theme--base--heading-lg, 25px));
- --pfe-theme--font-size--alpha: calc(1.44 * var(--pfe-theme--base--heading-lg, 25px));
- --pfe-theme--font-size--beta: calc(1.4 * var(--pfe-theme--base--heading, 20px));
- --pfe-theme--font-size--gamma: calc(1.2 * var(--pfe-theme--base--heading, 20px));
- --pfe-theme--font-size--delta: 20px;
- --pfe-theme--font-size--epsilon: calc(0.9 * 20px);
- --pfe-theme--font-size--zeta: calc(0.8 * 20px);
- --pfe-theme--font-size--default-lg: calc(1.11 * var(--pfe-theme--base--text, 18px));
- --pfe-theme--font-size: var(--pfe-theme--base--text, 18px);
- --pfe-theme--font-size--default-sm: 16px;
- --pfe-theme--font-size--default-xs: 14px;
- --pfe-theme--line-height--xxl: 1.2;
- --pfe-theme--line-height--xl: 1.2;
- --pfe-theme--line-height--alpha: 1.3;
- --pfe-theme--line-height--beta: 1.3;
- --pfe-theme--line-height--gamma: 1.3;
- --pfe-theme--line-height--delta: 1.5;
- --pfe-theme--line-height--epsilon: 1.5;
- --pfe-theme--line-height--zeta: 1.5;
- --pfe-theme--line-height--eta: 1.5;
- --pfe-theme--line-height: 1.5;
- --pfe-theme--font-weight--xxl: 300;
- --pfe-theme--font-weight--xl: 300;
- --pfe-theme--font-weight--alpha: 400;
- --pfe-theme--font-weight--beta: 400;
- --pfe-theme--font-weight--gamma: 400;
- --pfe-theme--font-weight--delta: 400;
- --pfe-theme--font-weight--epsilon: 400;
- --pfe-theme--font-weight--zeta: 400;
- --pfe-theme--font-weight--eta: 400;
- --pfe-theme--font-weight: 400;
- --pfe-theme--font-family: "RedHatText", "Overpass", overpass, helvetica, arial, sans-serif;
- --pfe-theme--font-family--heading: "RedHatDisplay", "Overpass", overpass, helvetica, arial, sans-serif;
- --pfe-theme--font-family--code: "Overpass Mono", consolas, monaco, andale mono, monospace;
- --pfe-theme--color--text: #151515;
- --pfe-theme--color--text--on-dark: #ffffff;
- --pfe-theme--color--text--on-saturated: #eeeeee;
- --pfe-theme--color--link: #0066cc;
- --pfe-theme--color--link--hover: #004080;
- --pfe-theme--color--link--focus: #004080;
- --pfe-theme--color--link--visited: #0066cc;
- --pfe-theme--color--link--on-dark: #73bcf7;
- --pfe-theme--color--link--hover--on-dark: #2b9af3;
- --pfe-theme--color--link--focus--on-dark: #2b9af3;
- --pfe-theme--color--link--visited--on-dark: #73bcf7;
- --pfe-theme--color--link--on-saturated: #ffffff;
- --pfe-theme--color--link--hover--on-saturated: #d2d3d5;
- --pfe-theme--color--link--focus--on-saturated: #d2d3d5;
- --pfe-theme--color--link--visited--on-saturated: #ffffff;
- --pfe-theme--link-decoration: none;
- --pfe-theme--link-decoration--hover: underline;
- --pfe-theme--link-decoration--focus: underline;
- --pfe-theme--link-decoration--visited: none;
- --pfe-theme--link-decoration--on-dark: none;
- --pfe-theme--link-decoration--hover--on-dark: underline;
- --pfe-theme--link-decoration--focus--on-dark: underline;
- --pfe-theme--link-decoration--visited--on-dark: none;
- --pfe-theme--link-decoration--on-saturated: underline;
- --pfe-theme--link-decoration--hover--on-saturated: underline;
- --pfe-theme--link-decoration--focus--on-saturated: underline;
- --pfe-theme--link-decoration--visited--on-saturated: underline;
- }
-
-@media screen and (min-width: 768px) {
- :root {
- --pfe-theme--base--text: 18px;
- --pfe-theme--base--heading: 20px;
- --pfe-theme--base--heading-lg: 25px;
- }
- }
-
-.pfe-headline-xxl {
- font-family: RedHatDisplay, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family--heading, "RedHatDisplay", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- font-size: calc(1.92 * 18px);
- font-size: var(--pfe-theme--font-size--xxl, calc(1.92 * var(--pfe-theme--base--heading-lg, 25px)));
- line-height: 1.2;
- line-height: var(--pfe-theme--line-height--xxl, 1.2);
- font-weight: 300;
- font-weight: var(--pfe-theme--font-weight--xxl, 300);
- }
-
-.pfe-headline-xl {
- font-family: RedHatDisplay, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family--heading, "RedHatDisplay", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- font-size: calc(1.6 * 18px);
- font-size: var(--pfe-theme--font-size--xl, calc(1.6 * var(--pfe-theme--base--heading-lg, 25px)));
- line-height: 1.2;
- line-height: var(--pfe-theme--line-height--xl, 1.2);
- font-weight: 300;
- font-weight: var(--pfe-theme--font-weight--xl, 300);
- }
-
-.pfe-headline-alpha {
- font-family: RedHatDisplay, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family--heading, "RedHatDisplay", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- font-size: calc(1.44 * 18px);
- font-size: var(--pfe-theme--font-size--alpha, calc(1.44 * var(--pfe-theme--base--heading-lg, 25px)));
- line-height: 1.3;
- line-height: var(--pfe-theme--line-height--alpha, 1.3);
- font-weight: 400;
- font-weight: var(--pfe-theme--font-weight--alpha, 400);
- }
-
-.pfe-headline-beta {
- font-family: RedHatDisplay, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family--heading, "RedHatDisplay", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- font-size: calc(1.4 * 17px);
- font-size: var(--pfe-theme--font-size--beta, calc(1.4 * var(--pfe-theme--base--heading, 20px)));
- line-height: 1.3;
- line-height: var(--pfe-theme--line-height--beta, 1.3);
- font-weight: 400;
- font-weight: var(--pfe-theme--font-weight--beta, 400);
- }
-
-.pfe-headline-gamma {
- font-family: RedHatDisplay, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family--heading, "RedHatDisplay", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- font-size: calc(1.2 * 17px);
- font-size: var(--pfe-theme--font-size--gamma, calc(1.2 * var(--pfe-theme--base--heading, 20px)));
- line-height: 1.3;
- line-height: var(--pfe-theme--line-height--gamma, 1.3);
- font-weight: 400;
- font-weight: var(--pfe-theme--font-weight--gamma, 400);
- }
-
-.pfe-headline-delta {
- font-family: RedHatDisplay, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family--heading, "RedHatDisplay", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- font-size: 20px;
- font-size: var(--pfe-theme--font-size--delta, 20px);
- line-height: 1.5;
- line-height: var(--pfe-theme--line-height--delta, 1.5);
- font-weight: 400;
- font-weight: var(--pfe-theme--font-weight--delta, 400);
- }
-
-.pfe-headline-epsilon {
- font-family: RedHatDisplay, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family--heading, "RedHatDisplay", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- font-size: calc(0.9 * 20px);
- font-size: var(--pfe-theme--font-size--epsilon, calc(0.9 * 20px));
- line-height: 1.5;
- line-height: var(--pfe-theme--line-height--epsilon, 1.5);
- font-weight: 400;
- font-weight: var(--pfe-theme--font-weight--epsilon, 400);
- }
-
-.pfe-headline-zeta {
- font-family: RedHatDisplay, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family--heading, "RedHatDisplay", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- font-size: calc(0.8 * 20px);
- font-size: var(--pfe-theme--font-size--zeta, calc(0.8 * 20px));
- line-height: 1.5;
- line-height: var(--pfe-theme--line-height--zeta, 1.5);
- font-weight: 400;
- font-weight: var(--pfe-theme--font-weight--zeta, 400);
- }
-
-.pfe-text-lg {
- font-family: RedHatText, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family, "RedHatText", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- font-size: calc(1.11 * 16px);
- font-size: var(--pfe-theme--font-size--default-lg, calc(1.11 * var(--pfe-theme--base--text, 18px)));
- line-height: 1.5;
- line-height: var(--pfe-theme--line-height--default, 1.5);
- font-weight: 400;
- font-weight: var(--pfe-theme--font-weight--default, 400);
- }
-
-.pfe-text {
- font-family: RedHatText, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family, "RedHatText", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- font-size: var(--pfe-theme--base--text, 18px);
- font-size: var(--pfe-theme--font-size--default, var(--pfe-theme--base--text, 18px));
- line-height: 1.5;
- line-height: var(--pfe-theme--line-height--default, 1.5);
- font-weight: 400;
- font-weight: var(--pfe-theme--font-weight--default, 400);
- }
-
-.pfe-text-sm {
- font-family: RedHatText, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family, "RedHatText", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- font-size: 16px;
- font-size: var(--pfe-theme--font-size--default-sm, 16px);
- line-height: 1.5;
- line-height: var(--pfe-theme--line-height--default, 1.5);
- font-weight: 400;
- font-weight: var(--pfe-theme--font-weight--default, 400);
- }
-
-.pfe-text-xs {
- font-family: RedHatText, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family, "RedHatText", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- font-size: 14px;
- font-size: var(--pfe-theme--font-size--default-xs, 14px);
- line-height: 1.5;
- line-height: var(--pfe-theme--line-height--default, 1.5);
- font-weight: 400;
- font-weight: var(--pfe-theme--font-weight--default, 400);
- }
-
-.PFElement {
- font-family: RedHatText, Overpass, Overpass, Helvetica, Arial, sans-serif;
- font-family: var(--pfe-theme--font-family, "RedHatText", "Overpass", Overpass, Helvetica, Arial, sans-serif);
- color: var(--pfe-broadcasted--text);
- }
-
-.PFElement a {
- color: var(--pfe-broadcasted--link);
- }
-
-.PFElement a:hover {
- color: var(--pfe-broadcasted--link--hover);
- }
-
-.PFElement a:focus {
- color: var(--pfe-broadcasted--link--focus);
- }
-
-pfe-cta[priority="primary"] a,
-pfe-cta[priority="secondary"] a {
- font-size: 1em;
- }
-
-pfe-cta:not([priority="primary"]) a,
-pfe-cta:not([priority="secondary"]) a {
- text-decoration: none;
- }
-
-pfe-cta:not([priority="primary"]) a:after,
-pfe-cta:not([priority="secondary"]) a:after {
- margin-bottom: 0.25em;
- }
diff --git a/docs/assets/search-bar/search-bar-best-practice-1.svg b/docs/assets/search-bar/search-bar-best-practice-1.svg
deleted file mode 100644
index 11c6dba6eb..0000000000
--- a/docs/assets/search-bar/search-bar-best-practice-1.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-best-practice-2.svg b/docs/assets/search-bar/search-bar-best-practice-2.svg
deleted file mode 100644
index 7affc280cc..0000000000
--- a/docs/assets/search-bar/search-bar-best-practice-2.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-best-practice-3.svg b/docs/assets/search-bar/search-bar-best-practice-3.svg
deleted file mode 100644
index 368399e87d..0000000000
--- a/docs/assets/search-bar/search-bar-best-practice-3.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-best-practice-4.svg b/docs/assets/search-bar/search-bar-best-practice-4.svg
deleted file mode 100644
index 9cd66e74c2..0000000000
--- a/docs/assets/search-bar/search-bar-best-practice-4.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-best-practice-5.svg b/docs/assets/search-bar/search-bar-best-practice-5.svg
deleted file mode 100644
index 5222272bbb..0000000000
--- a/docs/assets/search-bar/search-bar-best-practice-5.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-best-practice-6.svg b/docs/assets/search-bar/search-bar-best-practice-6.svg
deleted file mode 100644
index ed61c4fcb7..0000000000
--- a/docs/assets/search-bar/search-bar-best-practice-6.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-blueprint.svg b/docs/assets/search-bar/search-bar-blueprint.svg
deleted file mode 100644
index 50adbc29ef..0000000000
--- a/docs/assets/search-bar/search-bar-blueprint.svg
+++ /dev/null
@@ -1,27 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-button-vs-cta.svg b/docs/assets/search-bar/search-bar-button-vs-cta.svg
deleted file mode 100644
index c23bad813a..0000000000
--- a/docs/assets/search-bar/search-bar-button-vs-cta.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-dark-theme.svg b/docs/assets/search-bar/search-bar-dark-theme.svg
deleted file mode 100644
index 2e4797e089..0000000000
--- a/docs/assets/search-bar/search-bar-dark-theme.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-errors.svg b/docs/assets/search-bar/search-bar-errors.svg
deleted file mode 100644
index e48a0fb715..0000000000
--- a/docs/assets/search-bar/search-bar-errors.svg
+++ /dev/null
@@ -1,114 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-form-field.svg b/docs/assets/search-bar/search-bar-form-field.svg
deleted file mode 100644
index fa8bbdb4c6..0000000000
--- a/docs/assets/search-bar/search-bar-form-field.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-interaction-states-active.svg b/docs/assets/search-bar/search-bar-interaction-states-active.svg
deleted file mode 100644
index d1add12e5b..0000000000
--- a/docs/assets/search-bar/search-bar-interaction-states-active.svg
+++ /dev/null
@@ -1,83 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-interaction-states-focus.svg b/docs/assets/search-bar/search-bar-interaction-states-focus.svg
deleted file mode 100644
index 52abfdd1c1..0000000000
--- a/docs/assets/search-bar/search-bar-interaction-states-focus.svg
+++ /dev/null
@@ -1,51 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-interaction-states-hover.svg b/docs/assets/search-bar/search-bar-interaction-states-hover.svg
deleted file mode 100644
index 037dba10a1..0000000000
--- a/docs/assets/search-bar/search-bar-interaction-states-hover.svg
+++ /dev/null
@@ -1,52 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-interaction-states-link.svg b/docs/assets/search-bar/search-bar-interaction-states-link.svg
deleted file mode 100644
index 478b6611ca..0000000000
--- a/docs/assets/search-bar/search-bar-interaction-states-link.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-layout.svg b/docs/assets/search-bar/search-bar-layout.svg
deleted file mode 100644
index 5e350ea517..0000000000
--- a/docs/assets/search-bar/search-bar-layout.svg
+++ /dev/null
@@ -1,146 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-light-theme.svg b/docs/assets/search-bar/search-bar-light-theme.svg
deleted file mode 100644
index 478b6611ca..0000000000
--- a/docs/assets/search-bar/search-bar-light-theme.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-placeholder-text.svg b/docs/assets/search-bar/search-bar-placeholder-text.svg
deleted file mode 100644
index 44b2faa86e..0000000000
--- a/docs/assets/search-bar/search-bar-placeholder-text.svg
+++ /dev/null
@@ -1,36 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-responsive-desktop.svg b/docs/assets/search-bar/search-bar-responsive-desktop.svg
deleted file mode 100644
index 61335d833d..0000000000
--- a/docs/assets/search-bar/search-bar-responsive-desktop.svg
+++ /dev/null
@@ -1,50 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-responsive-mobile.svg b/docs/assets/search-bar/search-bar-responsive-mobile.svg
deleted file mode 100644
index f0f57d0145..0000000000
--- a/docs/assets/search-bar/search-bar-responsive-mobile.svg
+++ /dev/null
@@ -1,25 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-responsive-tablet.svg b/docs/assets/search-bar/search-bar-responsive-tablet.svg
deleted file mode 100644
index 45e5f43f48..0000000000
--- a/docs/assets/search-bar/search-bar-responsive-tablet.svg
+++ /dev/null
@@ -1,54 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-sample.svg b/docs/assets/search-bar/search-bar-sample.svg
deleted file mode 100644
index 6d2813d30c..0000000000
--- a/docs/assets/search-bar/search-bar-sample.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-spacing.svg b/docs/assets/search-bar/search-bar-spacing.svg
deleted file mode 100644
index 07ccf487bf..0000000000
--- a/docs/assets/search-bar/search-bar-spacing.svg
+++ /dev/null
@@ -1,58 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-tab-order.svg b/docs/assets/search-bar/search-bar-tab-order.svg
deleted file mode 100644
index adf9d7eef0..0000000000
--- a/docs/assets/search-bar/search-bar-tab-order.svg
+++ /dev/null
@@ -1,69 +0,0 @@
-
diff --git a/docs/assets/search-bar/search-bar-typeahead.svg b/docs/assets/search-bar/search-bar-typeahead.svg
deleted file mode 100644
index 23e3d8001a..0000000000
--- a/docs/assets/search-bar/search-bar-typeahead.svg
+++ /dev/null
@@ -1,55 +0,0 @@
-
diff --git a/docs/assets/tokens/tokens.css b/docs/assets/tokens/tokens.css
deleted file mode 100644
index 52c38483d3..0000000000
--- a/docs/assets/tokens/tokens.css
+++ /dev/null
@@ -1,342 +0,0 @@
-:root {
- --swatch-size: 350px;
-}
-
-header svg {
- height: 36px;
- color: white;
-}
-
-main > aside {
- float: right;
- padding-inline: 2em;
-}
-
-main > aside :is(ol, ul) {
- list-style-type: none;
- padding-inline-start: 0;
-}
-
-:is(h1,h2,h3,h4,h5,h6) a {
- padding-inline-start: 0.5em;
- opacity: 0;
- color: var(--rh-color-border-strong-on-light);
-}
-
-:is(h1,h2,h3,h4,h5,h6):is(:hover, :focus-within) a {
- opacity: 1;
-}
-
-rh-tooltip:not(:defined) {
- display: none;
-}
-
-table {
- border-collapse: collapse;
- table-layout: auto;
- width: 100%;
- text-align: start;
-}
-
-#media table :is(td,th):first-child {
- display: none;
-}
-
-th {
- text-align: start;
-}
-
-tr {
- border-bottom: 1px solid var(--rh-color-border-subtle-on-light);
-}
-
-tr.on-dark {
- background-color: var(--rh-color-surface-darkest, #151515);
- color: var(--rh-color-text-primary-on-dark, #ffffff);
-}
-
-th,
-td {
- padding-block: var(--rh-space-sm);
- padding-inline: var(--rh-space-md);
-}
-
-td:first-child {
- padding-inline-start: var(--rh-space-lg, 16px);
-}
-
-tr.variants > td {
- vertical-align: top;
-}
-
-tr.variants details {
- position: relative;
-}
-
-tr.variants summary {
- height: 2.5em;
- width: 2.5em;
- position: absolute;
- translate: 0 -2.25em;
-}
-
-tr.variants summary rh-tooltip {
- display: block;
- position: absolute;
- inset: 0;
-}
-
-tr.variants details table {
- padding-inline: var(--rh-space-lg);
-}
-
-tr.variants > td:first-child {
- padding: 0;
-}
-
-td.token > div {
- display: flex;
- flex-flow: row wrap;
- max-width: 350px;
- gap: var(--rh-space-xs);
-}
-
-section {
- /* display: grid; */
- gap: var(--rh-space-md);
- grid-template-columns: repeat(auto-fill, var(--swatch-size));
- padding: var(--rh-space-sm);
- align-items: start;
-}
-
-section section {
- padding: 0;
-}
-
-article {
- display: grid;
- position: relative;
-}
-
-section :is(h2, h3, h4, h5, h6) {
- grid-column: -1/1;
-
- /* text-transform: capitalize; */
-}
-
-code {
- font-size: var(--rh-font-size-body-text-sm);
- font-weight: var(--rh-font-weight-code-regular);
-}
-
-.comment:empty {
- display: none;
-}
-
-.token:is(.value, .name) uxdot-copy-button code {
- background-color: var(--rh-color-surface-lighter);
- overflow-x: hidden;
- max-width: 350px;
- white-space: pre;
- text-overflow: ellipsis;
-}
-
-.token.value uxdot-copy-button.color {
- border-radius: var(--rh-border-radius-pill);
- padding-block: 0;
-}
-
-.token.value uxdot-copy-button.color:after {
- content: "";
- display: inline-block;
- border-radius: 100%;
- background-color: var(--color);
- height: 0.5rem;
- aspect-ratio: 1;
- margin-inline-start: 0.5rem;
-}
-
-.on-dark :is(.value, .name) uxdot-copy-button code {
- background-color: var(--rh-color-surface-darker);
-}
-
-.copy-cell {
- text-align: end;
- vertical-align: middle;
-}
-
-.copy-cell uxdot-copy-button {
- color: var(--rh-color-icon-subtle);
-}
-
-.on-dark .copy-cell uxdot-copy-button {
- color: var(--rh-color-icon-subtle-hover);
-}
-
-tr:is(:hover, :focus-within) .copy-cell uxdot-copy-button {
- color: var(--rh-color-icon-secondary-on-light);
-}
-
-tr:is(:hover, :focus-within).on-dark .copy-cell uxdot-copy-button {
- color: var(--rh-color-icon-secondary-on-dark);
-}
-
-.font samp {
- font-size: var(--font-size, var(--rh-font-size-heading-md));
- font-family: var(--font-family, var(--rh-font-family-body-text));
- font-weight: var(--font-weight, var(--rh-font-weight-body-text-regular));
-}
-
-.font.family {
- align-content: center;
-}
-
-.font :is(samp, .common) {
- text-transform: capitalize;
-}
-
-.color samp {
- color: var(--color);
-}
-
-.color:not(.border, .text) samp {
- aspect-ratio: 1;
- height: var(--rh-length-xl);
- display: block;
- border-radius: 100%;
- border: 1px solid transparent;
- background: var(--color);
-}
-
-.color:not(.border, .text).light samp {
- border-color: var(--rh-color-gray-90);
-}
-
-.line-height samp {
- line-height: var(--line-height);
-}
-
-.box-shadow samp {
- height: var(--rh-length-2xl);
- aspect-ratio: 1;
- border-radius: var(--rh-border-radius-default);
- box-shadow: var(--box-shadow);
- display: block;
-}
-
-.border samp {
- width: var(--rh-length-2xl);
- aspect-ratio: 2;
- display: block;
- border-style: solid;
- border-width: var(--width, var(--rh-border-width-md));
- border-color: var(--color, var(--rh-color-border-strong-on-light));
- border-radius: var(--radius, var(--rh-border-radius-default));
-}
-
-.opacity samp {
- opacity: var(--opacity);
- background-color: black;
- display: block;
- width: var(--rh-length-xl);
- aspect-ratio: 1;
-}
-
-.space samp {
- width: var(--space);
- background-color: black;
- opacity: var(--rh-opacity-60);
- display: block;
- aspect-ratio: 1;
-}
-
-.length samp {
- width: var(--length);
- background-color: black;
- opacity: var(--rh-opacity-60);
- display: block;
- border-bottom: 2px solid var(--rh-color-border-strong-on-light);
- position: relative;
-}
-
-.length samp:before,
-.length samp:after {
- content: "";
- position: absolute;
- display: block;
- height: 4px;
- width: 0;
- inset-block: -4px;
- border-style: solid;
- border-inline-width: 2px 0;
- border-color: var(--rh-color-border-interactive-on-light);
-}
-
-.length samp:before {
- inset-inline: -2px 100%;
-}
-
-.length samp:after {
- inset-inline: 100% 2px;
-}
-
-.icon:not(.color) samp {
- aspect-ratio: 1;
- display: block;
- width: var(--icon);
- border: var(--rh-border-width-md) dotted var(--rh-color-border-strong-on-light);
-}
-
-#typography {
- --swatch-size: 100%;
-}
-
-:is(#typography, .box-shadow) .comment {
- display: none;
-}
-
-.btt {
- text-align: right;
- display: block;
-}
-
-.language-html .hljs-tag { color: var(--rh-color-blue-60, #004d99); }
-.language-html .hljs-name { color: var(--rh-color-brand-red-dark, #a60000); }
-.language-html .hljs-attr { color: var(--rh-color-orange-40, #f5921b); }
-.language-html .hljs-string { color: var(--rh-color-green-60, #3d7317); }
-
-code[class^="language-"] {
- max-width: 100%;
- display: block;
- overflow-x: scroll;
-}
-
-.breakpoint img {
- max-height: var(--rh-length-3xl);
-}
-
-dl.grid {
- display: grid;
- grid-template-columns: max-content 1fr;
- gap: 6px 8px;
- align-items: center;
-}
-
-dl.grid dt {
- font-style: italic;
-}
-
-dl.grid dt:after {
- content: ": ";
-}
-
-dl.grid dt,
-dl.grid dd {
- margin: 0;
- padding: 0;
-}
-
-dl.grid dd {
- display: flex;
- align-items: center;
-}
diff --git a/docs/assets/typography/typography-quote.svg b/docs/assets/typography/typography-quote.svg
deleted file mode 100644
index 31b82db55f..0000000000
--- a/docs/assets/typography/typography-quote.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/cheatsheet.njk b/docs/cheatsheet.njk
deleted file mode 100644
index 1d87e8f2c3..0000000000
--- a/docs/cheatsheet.njk
+++ /dev/null
@@ -1,299 +0,0 @@
----
-layout: layout-basic.njk
-title: Cheatsheet
-hasToc: true
----
-
-
-
-{% section headline="CSS Classes Layout" -%}
-
- .container
-
- If something is outside of a nunucks component, the container class will apply basic layout and max-width.
-
- {% section headline="Multi-Column", headingLevel="3" -%}
- Multi column elements will make every 'child html tag' into a column, and fit what it can. These elements will also use as much real-estate as possible, breaking outside of the text containers.
-
- {% section headline="Multi-Column with specific widths", headingLevel="4" -%}
- These classes make the columns conform to a width between the number in the name, and -100px. So .multi-column--min-400
maintains a width between 400-300px.
-
- .multi-column--200-wide
-
-
-
-
-
-
-
-
-
-
-
-
- .multi-column--300-wide
-
-
-
-
-
-
-
-
-
-
-
- .multi-column--400-wide
-
-
-
-
-
-
-
-
-
-
-
- .multi-column--500-wide
-
-
-
-
-
-
-
-
-
-
-
- .multi-column--600-wide
-
-
-
-
-
-
-
-
-
-
- {%- endsection %}
-
- {% section headline="Multi-Column with minimum widths", headingLevel="4" -%}
- These classes will try to make as many columns as there are 'children html tags' until it hits the minimum width hinted in the class.
-
- .multi-column--min-200-wide
- With 2 Columns
-
-
-
-
-
-
- With 7 Columns
-
-
-
-
-
-
-
-
-
-
- .multi-column--min-300-wide
- With 2 Columns
-
-
-
-
-
-
- With 7 Columns
-
-
-
-
-
-
-
-
-
-
- .multi-column--min-400-wide
- With 2 Columns
-
-
-
-
-
-
- With 7 Columns
-
-
-
-
-
-
-
-
-
-
- .multi-column--min-500-wide
- With 2 Columns
-
-
-
-
-
-
- With 7 Columns
-
-
-
-
-
-
-
-
-
-
- .multi-column--min-600-wide
- With 2 Columns
-
-
-
-
-
-
- With 7 Columns
-
-
-
-
-
-
-
-
-
- {%- endsection %}
-
- {%- endsection %}
-
- {% section headline="Add Vertical white-space", headingLevel="3" -%}
- These classes allow margin-top or margin-bottom, and come in units of 8px. So adding the class margin-bottom--1
is margin-bottom: 8px
, 2 is 16px, etc.
-
- .margin-bottom--1
-
-
-
-
-
-
-
- .margin-bottom--2
-
-
-
-
-
-
- .margin-bottom--3
-
-
-
-
-
-
- .margin-bottom--4
-
-
-
-
-
-
- .margin-bottom--5
-
-
-
-
-
-
- .margin-bottom--6
-
-
-
-
-
- {%- endsection %}
-
-{%- endsection %}
-
-
-{% section headline="Nunjucks Components" -%}
-
-{% section headline="Sections - Nunjucks Component", headingLevel="3" -%}
- Sections should wrap parts of content that have a headline. It enforces rules for basic page layout and line-lengths.
-
-{% section headline='Headline goes here' %}
- HTML for whatever goes in this section
-{%- endsection %}
-
-
- By default headlines have an h2 tag, to change it with the headingLevel
flag
-
- {% section headline="Headline goes here",
- headingLevel="3"
- %}
- HTML for whatever goes in this section
-{%- endsection %}
-
- {%- endsection %}
-
-
- {% section headline="Example", headingLevel="3" -%}
- This is a nunjucks component we can use to wrap example images or live component examples
-
-{% example palette='lightest' %}
- Component or Image
-{%- endsection %}
-
- {% example palette="lightest",
- headline="Lightest",
- headingLevel=4,
- alt="Examples of light call to action appearance",
- src="/elements/call-to-action/cta-theme-light.png" %}
-
- {% example palette="darkest",
- headline="Darkest",
- headingLevel=4,
- alt="Examples of dark call to action appearance",
- src="/elements/call-to-action/cta-theme-dark.png" %}
-
- {% example palette="wrong",
- headline="Wrong",
- headingLevel=4,
- alt="Examples of 'wrong' call to action appearance",
- src="/elements/call-to-action/cta-best-practice-2.png" %}
-
- {%- endsection %}
-
-{%- endsection %}
diff --git a/docs/design-code-status.njk b/docs/design-code-status/index.md
similarity index 90%
rename from docs/design-code-status.njk
rename to docs/design-code-status/index.md
index 688a6efbb2..0266fae180 100644
--- a/docs/design-code-status.njk
+++ b/docs/design-code-status/index.md
@@ -1,20 +1,20 @@
---
-layout: layout-basic.njk
+layout: layouts/pages/basic.njk
title: Design/code status
-stylesheets:
- - /assets/packages/@rhds/elements/elements/rh-table/rh-table-lightdom.css
-importElements:
- - rh-tag
+hasToc: true
+importElements:
- rh-table
+ - rh-tag
---
+
-{% import 'component/components.njk' as components %}
+
-{% call components.section("Overview") -%}
+ ## Overview
+
+ A detailed synopsis of our web components and their implementation status.
- A detailed synopsis of our web components and their implementation status.
-
@@ -117,18 +117,17 @@ importElements:
+
-{%- endcall %}
+
-
-{% call components.section("Web component status") -%}
+ ## Web component status
{% repoStatusTable %}
-{%- endcall %}
+
-{% feedback %}
+
Release notes
To see what foundations, tokens, elements, or patterns have been released recently, visit this page.
-{% endfeedback %}
-
+
diff --git a/docs/documentation/example.md b/docs/documentation/example.md
deleted file mode 100644
index 695e21aa79..0000000000
--- a/docs/documentation/example.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-layout: layout-basic.njk
-title: Pages and 11ty documentation
----
-
-# `/pages` & 11ty documentation
-
-11ty is an unopinionated static site generator. It gives us a lot of basic features that are handy when templating, organizing, and building a site, but mostly tries to stay out of our way.
-
-This site is configured to use [Nunjucks](https://mozilla.github.io/nunjucks/) and Markdown as languages to build pages.
-
-Each page should have 'front-matter'. Front-matter should be at the top of the document, it helps define page templates, tags, and other variables we may use to help display or organize our pages.
-
-Here's a two simple examples:
-```
----
-layout: layout-basic.njk
-title: Example page
----
-```
-
-```
----
-layout: layout-home.njk
-title: Home
----
-```
-
-This tells 11ty what the page template should be (relative to the `pages` folder), and what the page title is. Which may be used as part of the page template as an h1, but is also used as part of the `` attribute in the ``.l
-
-Here's an example including tags, which is a multi-value piece of data.
-```
----
-layout: layout-basic.njk
-title: Accordion Element
-tags:
- - javascript
- - container
----
-```
-
-Front-matter variables can be arbitrarily defined and used in templates or for custom javascript coding, although there are some values that are [predefined by 11ty](https://www.11ty.dev/docs/data-configuration/).
diff --git a/docs/elements/demos.html b/docs/elements/demos.html
index 452f6fe646..938584af1f 100644
--- a/docs/elements/demos.html
+++ b/docs/elements/demos.html
@@ -1,6 +1,6 @@
---
templateEngineOverride: njk
-layout: layout-demo.njk
+layout: layouts/demo.njk
permalink: '{{ demo.permalink }}'
pagination:
data: demos
diff --git a/docs/elements/elements.html b/docs/elements/elements.html
index 21f14c1d72..683669fe45 100644
--- a/docs/elements/elements.html
+++ b/docs/elements/elements.html
@@ -1,17 +1,11 @@
---
-layout: layout-base.njk
+layout: layouts/base.njk
pagination:
data: collections.elementDocs
size: 1
alias: doc
+hasToc: true
permalink: "{{ doc.permalink }}"
-bodyClasses: element-docs
-stylesheets:
- - /assets/cem.css
- - /assets/packages/@rhds/elements/elements/rh-subnav/rh-subnav-lightdom.css
- - /assets/packages/@rhds/elements/elements/rh-pagination/rh-pagination-lightdom.css
- - /assets/packages/@rhds/elements/elements/rh-table/rh-table-lightdom.css
- - /assets/packages/@rhds/elements/elements/rh-tile/rh-tile-lightdom.css
eleventyComputed:
title: "{{ doc.pageTitle }} | {{ doc.slug | deslugify }}"
importElements:
@@ -22,13 +16,12 @@
- rh-subnav
- rh-code-block
- rh-table
+ - rh-accordion
+ - rh-badge
- "{{ doc.tagName }}"
----
-
-
-
-{% include 'component/header.njk' %}
+---
+
{% if doc.slug == 'audio-player' %}
{% endif %}
+{% if doc.slug == 'pagination' %}
+
+{% endif %}
+{% if doc.slug == 'tile' %}
+
+{% endif %}
+
+
+
+
+
+
+
+
+{% include 'partials/component/masthead.njk' %}
+{% include 'partials/component/sidenav.njk' %}
+
+ 0 %}class="has-toc"{% endif %}>
+
+ {{ doc.alias or (doc.slug | deslugify) }}
+ {% for tab in doc.tabs %}
+
+ {{ tab.pageTitle | capitalize }}
+ {% endfor %}
+
+
+
+ {% if hasToc and (content | toc).length > 0 %}
+
+ {% endif %}
+
+
+ {% renderFile doc.filePath, doc.docsPage %}
+ {% include 'partials/component/feedback.html' %}
+
-
-
-
-
-
-
-
- {% renderFile doc.filePath, doc.docsPage %}
- {% include 'feedback.html' %}
-
-
- {% include 'component/footer.njk' %}
+ {% include "partials/component/back-to-top.njk" %}
+{% include 'partials/component/footer.njk' %}
diff --git a/docs/elements/index.md b/docs/elements/index.md
deleted file mode 100644
index 590a77846e..0000000000
--- a/docs/elements/index.md
+++ /dev/null
@@ -1,68 +0,0 @@
----
-layout: layout-basic.njk
-title: All elements
-summaries:
- audio-player: Plays audio clips and includes other features
- jump-links: Moves users to specific content when a link is selected
- navigation-primary: Organizes content representing global web properties
- popover: Overlays an area of information without blocking users
- progress-steps: Guides users through a task with sequential steps
- breadcrumb: Keeps track of location as users move through pages
- footnote: Provides additional information or a source for content
- tile: A form of selection that can be used in place of a link, checkbox, or radio button
----
-
-{# NOTE: all images in this view need to be 340 by 200 px in order to maintain same ratio. #}
-
-{% section %}
- ## Overview
- Red Hat design system's elements are custom HTML elements - interactive
- building blocks of our design system. Each element was created to meet a
- specific UI and accessibility need. Elements should be used harmoniously
- together in the same space to create more intuitive user interfaces and
- experiences.
-{% endsection %}
-
-
-{%- for tagName, docs in collections.elementDocs | groupby('tagName') -%}
- {%- set doc = docs[0] -%}
- {%- set slug = doc.slug -%}
- {%- set title = docs | getTitleFromDocs | makeSentenceCase -%}
- {%- set comingSoon = tagName in comingSoonItems -%}
- {% if comingSoon %}
- {%- set title = [title, "(coming soon)"] | join(" ") -%}
- {% endif %}
- {%- set summary = doc.docsPage.summary -%}
- {% if not summary %}
- {%- set summary = summaries[slug] -%}
- {% endif %}
-
- {%- set wrapperClass = '' -%}
- {% if title in ['Dialog'] %}
- {%- set wrapperClass = 'gray-bg' -%}
- {% endif %}
-
-
- {% if not comingSoon %}{% endif %}
- {% example palette="descriptive",
- width=340,
- alt=linkTitle,
- wrapperClass=wrapperClass,
- srcAbsolute=true,
- src=doc.screenshotPath %}
- {% if not comingSoon %}{% endif %}
- {{ title }}
- {{ summary }}
-
-{% endfor %}
-
-
-{% section %}
- ## Make a request
- To request a new element or if updates need to be made to an existing element, create a GitHub issue.
-{% endsection %}
-
-{% feedback %}
- Elements
- To learn how to use our elements in your designs, visit the Elements section.
-{% endfeedback %}
diff --git a/docs/elements/index.njk b/docs/elements/index.njk
new file mode 100644
index 0000000000..2060ade7bd
--- /dev/null
+++ b/docs/elements/index.njk
@@ -0,0 +1,65 @@
+---
+layout: layouts/pages/basic.njk
+title: All elements
+summaries:
+ audio-player: Plays audio clips and includes other features
+ jump-links: Moves users to specific content when a link is selected
+ navigation-primary: Organizes content representing global web properties
+ popover: Overlays an area of information without blocking users
+ progress-steps: Guides users through a task with sequential steps
+ breadcrumb: Keeps track of location as users move through pages
+ footnote: Provides additional information or a source for content
+ tile: A form of selection that can be used in place of a link, checkbox, or radio button
+hasToc: true
+importElements:
+ - rh-tile
+---
+
+
+
+
+
+{# NOTE: all images in this view need to be 340 by 200 px in order to maintain same ratio. #}
+
+
+ Overview
+ Red Hat design system's elements are custom HTML elements - interactive
+ building blocks of our design system. Each element was created to meet a
+ specific UI and accessibility need. Elements should be used harmoniously
+ together in the same space to create more intuitive user interfaces and
+ experiences.
+
+
+
+
+
+
+ Make a request
+ To request a new element or if updates need to be made to an existing element, create a GitHub issue.
+
+
+
+ Elements
+ To learn how to use our elements in your designs, visit the Elements section.
+
diff --git a/docs/example.njk b/docs/example.njk
deleted file mode 100644
index 2946f5ab53..0000000000
--- a/docs/example.njk
+++ /dev/null
@@ -1,13 +0,0 @@
----
-layout: layout-basic.njk
-title: Example page
----
-
-This is an example page!!!!!
-
-
- Velit aliqua et eu fugiat culpa anim velit ad eu officia exercitation. Aliquip magna ipsum minim tempor nostrud ut. Deserunt nostrud esse deserunt mollit voluptate do voluptate duis aliquip ad anim dolore eu non. Commodo mollit excepteur proident consectetur aliquip non irure. Cillum sit cillum nostrud consectetur amet enim dolor excepteur ea dolore voluptate esse Lorem Lorem.
-
-
- Non nisi anim id culpa commodo nulla minim magna do ut nostrud deserunt. Cupidatat pariatur nisi voluptate elit do exercitation. Aliquip mollit enim labore exercitation eu do cillum Lorem ut anim ex ea. Quis fugiat non laboris irure commodo do deserunt eiusmod culpa velit.
-
diff --git a/docs/foundations.njk b/docs/foundations.njk
deleted file mode 100644
index 2bbe993a31..0000000000
--- a/docs/foundations.njk
+++ /dev/null
@@ -1,66 +0,0 @@
----
-layout: layout-basic.njk
-title: Foundations
----
-
-{% import 'component/foundations.njk' as foundations %}
-
-{% call foundations.section("Overview") -%}
-
- Foundations are the visual and structural elements of our design system. Foundations were created as the building blocks of all user interface elements. Foundations should be used as blueprints that all components and layouts are created from.
-
-{%- endcall %}
-
-
-
-
-
-
- Color
- Unifies our brand while bringing accessibility and consistency to our digital experiences
-
- View colors
-
-
-
-
-
-
-
- Grid
- Provides guidance and structure when positioning elements and components in a layout
-
- View grids
-
-
-
-
-
-
-
- Spacing
- Defines fixed amounts of space between elements and makes it easy to maintain consistency
-
- View spacing
-
-
-
-
-
-
-
- Typography
- A system of fonts that creates hierarchies and helps guide a user through an experience
-
- View typography
-
-
-
-
-{% call foundations.section("Make a request") -%}
-
- To request a new foundation or if updates need to be made to an existing foundation, contact us.
-
-{%- endcall %}
-
-{% include 'feedback.html' %}
diff --git a/docs/foundations/color/accessibility.md b/docs/foundations/color/accessibility.md
index 0254f64758..d13b6e61d0 100644
--- a/docs/foundations/color/accessibility.md
+++ b/docs/foundations/color/accessibility.md
@@ -1,13 +1,13 @@
---
-layout: layout-with-subnav.njk
+layout: layouts/pages/basic.njk
title: Accessibility
-heading: Color
+hasToc: true
tags:
- color
+subnav:
+ collection: sortedColor
+ order: 3
permalink: /foundations/color/accessibility/index.html
-subNavCollection: sortedColor
-order: 20
-bodyClasses: element-docs
---
## Approach
@@ -23,9 +23,9 @@ location) alone. Ensure there is a text label, icon, underline, or other visual
cue to communicate meaning. Consider how the following elements would look to a
color blind user.
-{% example palette="light",
- alt="Dialog with a red-orange Leave button, a form field with a red bottom border, and progress steps without labels",
- src="/assets/color/using-color-alone.png" %}
+
+
+
## Contrast
We strive to adhere to [WCAG 2.1 AA](https://www.w3.org/WAI/WCAG21/Understanding/) requirements. Our text, links, interface elements, etc. are designed with sufficient contrast when used on top
@@ -37,9 +37,9 @@ Small foreground text (non-bold text under 24px and bold text under 19px) must
have a contrast ratio of 4.5:1 and large foreground text (non-bold text of at
least 24px and bold text of at least 19px) must have a contrast ratio of 3:1.
-{% example palette="light",
- alt="Contrast ratios for dark gray sections with black text that uses different weights and fonts",
- src="/assets/color/contrast-text.png" %}
+
+
+
### Links
@@ -47,9 +47,9 @@ If color is the only way to distinguish between links and surrounding text (e.g.
- Non-color cues must be used to signify when the link receives hover or focus (e.g., an underline)
-{% example palette="light",
- alt="Contrast ratio of a blue link next to black text and an example of a link's darker blue, underlined hover state",
- src="/assets/color/contrast-links.png" %}
+
+
+
### Graphical objects and UI components
@@ -66,15 +66,15 @@ It is acceptable to layer colors with the same hue, saturation, or lightness on
white, black, or gray. However, layering them near or on top of each other might cause vibration. If you need to layer colors, follow [WCAG 2.1 AA](https://www.w3.org/WAI/WCAG21/Understanding/)
requirements.
-{% example palette="light",
- alt="Red CTA against a white background, blue button against a light gray background, and a light red-orange button against a black background",
- src="/assets/color/contrast-layering.png" %}
+
+
+
### Tools
TPGi’s [Colour Contrast Analyzer](https://www.tpgi.com/color-contrast-checker/) can help you identify colors and gauge their contrast from one another.
-{% feedback %}
+
Foundations
To learn how to use our other foundations in your designs, visit the foundations section.
-{% endfeedback %}
+
diff --git a/docs/foundations/color/index.md b/docs/foundations/color/index.md
index 786ce2515c..f7cee320b0 100644
--- a/docs/foundations/color/index.md
+++ b/docs/foundations/color/index.md
@@ -1,17 +1,19 @@
---
-layout: layout-with-subnav.njk
+layout: layouts/pages/basic.njk
title: Overview
heading: Color
+sidenavTitle: Color
+order: 10
+hasToc: true
tags:
- foundations
- color
+subnav:
+ collection: sortedColor
+ order: 1
permalink: /foundations/color/index.html
-subNavCollection: sortedColor
-order: 00
-bodyClasses: element-docs
----
-{% import 'component/foundations.njk' as foundations %}
+---
## Introduction
@@ -35,9 +37,10 @@ for our users.
When colors are used together, they form relationships that communicate brand,
hierarchy, state, and more.
-{% example palette="light",
- alt="Variants of several elements",
- src="/assets/color/color-relationships.png" %}
+
+
+
+
### Color design tokens
@@ -51,11 +54,13 @@ To learn more about our color design tokens, go to the [Tokens](/tokens) section
Our design system includes multiple sets of colors known as **"crayon" colors**. Crayon colors reference hard-coded values, but offer no information about usage. **Semantic** colors reference crayon colors and define how a color is used. Semantic naming is essential not just for color, but for all foundational styles.
-{% example palette="light",
- alt="Example of how crayon color tokens are aliased to semantic tokens, which are used to style a button",
- src="/assets/color/primitive-and-semantic-colors.png" %}
+
+
+
+
+
-{% feedback %}
+
Foundations
To learn how to use our other foundations in your designs, visit the foundations section.
-{% endfeedback %}
+
diff --git a/docs/foundations/color/usage.md b/docs/foundations/color/usage.md
index 4a3dd66f29..a7da6db159 100644
--- a/docs/foundations/color/usage.md
+++ b/docs/foundations/color/usage.md
@@ -1,15 +1,24 @@
---
-layout: layout-with-subnav.njk
+layout: layouts/pages/basic.njk
title: Usage
-heading: Color
+hasToc: true
tags:
- color
+subnav:
+ collection: sortedColor
+ order: 2
permalink: /foundations/color/usage/index.html
-subNavCollection: sortedColor
-order: 10
-bodyClasses: element-docs
+importElements:
+ - rh-alert
+ - rh-tag
+ - rh-table
---
+
+
+
+
+
## Using color
Our color palette is designed to work across all digital properties,
@@ -27,16 +36,16 @@ areas. If you need a color for danger or error states, use red-orange.
To learn more about our Red Hat red color, go to the [Brand
standards](https://www.redhat.com/en/about/brand/standards) website.
-{% alert title="Usage warning",
- state="warning" %}
-Do not apply the Red Hat red color to text in dark environments unless
-it meets [WCAG 2.1 AA](https://www.w3.org/WAI/WCAG21/Understanding/)
-requirements.
-{% endalert %}
+
+ Usage Warning
+ Do not apply the Red Hat red color to text in dark environments unless
+it meets WCAG 2.1 AA
+requirements.
+
-{% example palette="light",
- alt="spectrum of brand red shades with examples of brand red being used",
- src="/assets/color/brand-red.png" %}
+
+
+
### Canvas
@@ -47,9 +56,9 @@ other colors as long as contrast is maintained throughout the entire
design. If a custom canvas color is lighter or darker than the defaults,
white or black may be used as surface colors.
-{% example palette="light",
- alt="swatches of the default canvas colors for dark and light theme and examples of custom canvas colors",
- src="/assets/color/canvas.png" %}
+
+
+
### Surface
@@ -58,37 +67,37 @@ Surface colors are used as backgrounds for elements, patterns, and large
sections. For example, a card (white surface) can be placed in a section
(light gray surface) on a canvas (white).
-{% example palette="none",
- alt="Annotations pointing to canvas and surface colors in a section with a card",
- src="/assets/color/surface.png" %}
+
+
+
-### Layering {% tag color="purple" %}Beta{% endtag %}
+### Layering Beta
Layering is the relationship between the canvas color and surface colors
as well as how they stack to create depth and separate content.
-{% alert title="Update from the team" %}
-The design system team is working on creating best practices for
-layering in the near future. [Contact
-us](https://github.com/RedHat-UX/red-hat-design-system/discussions) if
-you would like to contribute.
-{% endalert %}
+
+ Update from the team
+ The design system team is working on creating best practices for layering in the near future. Contact us if you would like to contribute.
+
#### Light theme
In the light theme, white and gray values alternate when stacked.
-{% example palette="none",
- alt="A light gray card in a larger, white card, which sits in a light gray section",
- src="/assets/color/layering-light-theme.png" %}
+
+
+
+
#### Dark theme
In the dark theme, gray values should get one step lighter when stacked.
-{% example palette="none",
- alt="A dark gray card in a larger, darker gray card, which sits in an even dark gray section",
- src="/assets/color/layering-dark-theme.png" %}
+
+
+
+
### Text
@@ -109,16 +118,14 @@ represented.
7. **Status** - use for text that needs to communicate a particular
status
-{% alert title="Usage warning",
- state="warning" %}
-Do not apply the Red Hat red color to text in dark environments unless
-it meets [WCAG 2.1 AA](https://www.w3.org/WAI/WCAG21/Understanding/)
-requirements.
-{% endalert %}
+
+ Usage Warning
+ Do not apply the Red Hat red color to text in dark environments unless it meets WCAG 2.1 AA requirements.
+
-{% example palette="none",
- alt="Dark and light theme examples of the seven types of semantic colors used by text",
- src="/assets/color/text.png" %}
+
+
+
### Icons
@@ -133,9 +140,9 @@ three categories of icons: Brand, Technology, and UI.
To learn more about icons, go to the [Brand
standards](https://www.redhat.com/en/about/brand/standards) website.
-{% example palette="none",
- alt="Examples of the three icon categories",
- src="/assets/color/icons.png" %}
+
+
+
### Interactivity
@@ -149,9 +156,9 @@ Certain colors are used to indicate that something is interactive.
4. **Red-orange** - use for destructive actions (and errors)
5. **Red** - use sparingly for Primary calls to action only
-{% example palette="none",
- alt="Examples of elements using the five colors that denote interactivity",
- src="/assets/color/interactivity.png" %}
+
+
+
### Status
@@ -161,27 +168,53 @@ patterns like [alerts](/elements/alert), [badges](/elements/badge),
[buttons](/elements/button), [forms](/patterns/form), and
[toasts](/elements/alert/style/#toast).
-{% alert title="Usage warning",
- state="warning" %}
-The red-orange color is reserved for danger or error states, do not use it anywhere else.
-{% endalert %}
-
-
-
-| Status | Use case |
-|----------------|----------------------------------------------------------------------------------------------|
-| `Note/Tip` | Use purple to communicate helpful or important information. |
-| `Neutral` | Use gray to communicate information that will have no impact on a user. |
-| `Success` | Use green to communicate a success state. |
-| `Caution` | Use yellow to communicate that an issue can be avoided. |
-| `Warning` | Use orange to communicate that a destructive action might occur if an issue is not resolved. |
-| `Danger/Error` | Use red-orange to communicate a destructive action or critical error. |
-
-
-{% example palette="light",
- alt="Alerts, a form field, and tags that use status colors",
- src="/assets/color/status.png" %}
+
+ Usage Warning
+ The red-orange color is reserved for danger or error states, do not use it anywhere else.
+
+
+
+
+
+
+ Status
+ Use case
+
+
+
+
+ Note/Tip
+ Use purple to communicate helpful or important information.
+
+
+ Neutral
+ Use gray to communicate information that will have no impact on a user.
+
+
+ Success
+ Use green to communicate a success state.
+
+
+ Caution
+ Use yellow to communicate that an issue can be avoided.
+
+
+ Warning
+ Use orange to communicate that a destructive action might occur if an issue is not resolved.
+
+
+ Danger/Error
+ Use red-orange to communicate a destructive action or critical error.
+
+
+
+
+
+
+
+
+
## Best practices
@@ -197,17 +230,20 @@ you need a custom theme for a campaign or special project, contact the
Brand team first. If you need one or more custom design tokens, contact
the [Design system](https://github.com/RedHat-UX/red-hat-design-system/discussions) team first.
-
-
-
- Do
- Use the color variants already available for elements and patterns.
-
-
-
- Don't
- Do not create your own colors, design tokens, or change the colors of existing elements and patterns.
-
+
+
+
+
+
+ Use the color variants already available for elements and patterns.
+
+
+
+
+
+
+ Do not create your own colors, design tokens, or change the colors of existing elements and patterns.
+
### Sufficient contrast
@@ -218,17 +254,19 @@ vibration resulting in a poor user experience. If you have a large
section of color or an image background with low contrast, consider
using elements and patterns from the desaturated theme instead.
-
-
-
- Do
- Use a surface color token for background to ensure accessibility, or use a tool to check proper contrast.
-
-
-
- Don't
- Do not use a background color that has a similar hue, saturation, or lightness to foreground elements.
-
+
+
+
+
+
+ Use a surface color token for background to ensure accessibility, or use a tool to check proper contrast.
+
+
+
+
+
+ Do not use a background color that has a similar hue, saturation, or lightness to foreground elements.
+
## Resources
@@ -237,7 +275,7 @@ using elements and patterns from the desaturated theme instead.
- [WCAG 2.1](https://www.w3.org/WAI/WCAG21/Understanding/)
- [WebAIM: Contrast and Color Accessibility](https://webaim.org/articles/contrast/)
-{% feedback %}
+
Foundations
To learn how to use our other foundations in your designs, visit the foundations section.
-{% endfeedback %}
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/foundations/grid.md b/docs/foundations/grid.md
new file mode 100644
index 0000000000..68c6529c95
--- /dev/null
+++ b/docs/foundations/grid.md
@@ -0,0 +1,214 @@
+---
+layout: layouts/pages/basic.njk
+title: Grid
+order: 20
+hasToc: true
+tags:
+ - foundations
+importElements:
+ - rh-table
+---
+
+
+
+
+
+ ## Overview
+
+ A grid is a group of columns that organize layouts and allow content to scale responsively based on screen size. They provide structure to pages and ensure optimal viewing experiences.
+
+ ### Sample component
+
+
+
+
+
+ ### Grid availability
+
+
+ (coming soon)
+
+
+ ### Style
+
+
+
+
+
+
+
+
+
+
+ ## Usage
+
+ Grids are fundamental to how content is organized across various devices and screen sizes.
+
+ ### Columns
+
+ The number of columns that a grid contains is determined by the screen size.
+
+
+
+
+
+
+
+
+
+ ### Gutters
+
+ Gutters are the spaces in between columns, they also change depending on the screen size. Gutters help separate content into layouts based on the amount of columns being used.
+
+
+
+
+
+
+
+
+
+
+ ### Margins
+
+ Margins are the spaces between a grid and the edges of the screen or window. They can be the same width or larger than gutters, depending on the screen size.
+
+ ### Large screens
+
+ The grid for large screens features 12 columns, like desktop and tablet. Column, gutter, and margin widths reduce as breakpoints get smaller.
+
+
+
+
+
+ ### Small screens
+
+ The grid for small screens features one column. In rare cases, content on small screens can sometimes be arranged in two columns.
+
+
+
+
+
+
+
+
+
+
+ ## Best practices
+
+ Don’t align every component to the grid, doing so might compromise the design of individual elements.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ## Responsive design
+
+ Grids are designed to be responsive, meaning they adapt to different screen sizes and orientations.
+
+ ### Large screens
+
+ The grid for large screens features 12 columns, like desktop and tablet. Column, gutter, and margin widths reduce as breakpoints get smaller.
+
+
+
+
+
+
+
+
+
+ ### Small screens
+
+ The grid for small screens features one column. In rare cases, content on small screens can sometimes be arranged in two columns.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ## Breakpoints
+
+ A breakpoint is a predetermined screen size that has specific layout requirements. When breakpoints change, content will shift around to fit the adjusted layout.
+
+
+
+
+
+ Breakpoint name
+ Size range
+ Columns
+
+
+
+
+ Desktop, large
+ 1680px
+ 12
+
+
+ Desktop, medium
+ 1440px
+ 12
+
+
+ Desktop, small
+ 1200px - 1439px
+ 12
+
+
+ Tablet, large
+ 992px - 1199px
+ 12
+
+
+ Tablet, small
+ 768px - 991px
+ 12
+
+
+ Mobile, large
+ 576px - 767px
+ 2
+
+
+ Mobile, small
+ 0px
+ 1
+
+
+
+
+
+
+
+ Foundations
+ To learn how to use our other foundations in your designs, visit the foundations section.
+
diff --git a/docs/foundations/grid.njk b/docs/foundations/grid.njk
deleted file mode 100644
index c1f58217ff..0000000000
--- a/docs/foundations/grid.njk
+++ /dev/null
@@ -1,187 +0,0 @@
----
-layout: layout-basic.njk
-title: Grid
-order: 2
-tags:
- - foundations
----
-
-{% import 'component/foundations.njk' as foundations %}
-
-{% call foundations.section("Overview") -%}
-
- A Grid is a group of columns that organize layouts and allow content to scale responsively based on screen size. They provide structure to pages and ensure optimal viewing experiences.
-
-{%- endcall %}
-
-{% call foundations.section("Sample component") -%}
-
-
-
-
-
-{%- endcall %}
-
-{% call foundations.section("Grid availability") -%}
-
-{%- endcall %}
-
-{% call foundations.section("Style") -%}
-
- {% call foundations.example(palette='light') %}
-
-
-
- {%- endcall %}
-
-{%- endcall %}
-
-
-
-{% call foundations.section("Usage") -%}
-
- Grids are fundamental to how content is organized across various devices and screen sizes.
-
- Columns
- The number of columns that a grid contains is determined by the screen size.
-
-
-
-
- A grid on large screens contains 12 columns
-
-
-
-
- A grid on small screens contains one column
-
- Gutters
- Gutters are the spaces in between columns, they also change depending on the screen size. Gutters help separate content into layouts based on the amount of columns being used.
-
-
-
-
-
-
-
-
-
- Margins
- Margins are the spaces between a grid and the edges of the screen or window. They can be the same width or larger than gutters, depending on the screen size.
-
- Large screens
- The grid for large screens features 12 columns, like desktop and tablet. Column, gutter, and margin widths reduce as breakpoints get smaller.
-
-
-
-
-
- Small screens
- The grid for small screens features one column. In rare cases, content on small screens can sometimes be arranged in two columns.
-
-
-
-
-
-{%- endcall %}
-
-
-
-
-{% call foundations.section("Best practices") -%}
-
- Don’t align every component to the grid, doing so might compromise the design of individual elements.
- {% call foundations.example(palette='wrong') %}
-
-
-
- {%- endcall %}
-
- 18px or larger text shouldn't exceed eight columns to maintain optimal readability.
- {% call foundations.example(palette='wrong') %}
-
-
-
- {%- endcall %}
-
-{%- endcall %}
-
-
-{% call foundations.section("Responsive design") -%}
-Large screens
-The grid for large screens features 12 columns, like desktop and tablet. Column, gutter, and margin widths reduce as breakpoints get smaller.
-
-
-
-
-Small screens
-The grid for small screens features one column. In rare cases, content on small screens can sometimes be arranged in two columns.
-
-
-
-
-
-{%- endcall %}
-
-
-{% call foundations.section("Breakpoints") -%}
-
- A breakpoint is a predetermined screen size that has specific layout requirements. When breakpoints change, content will shift around to fit the adjusted layout.
-
-
-
-
-
- Breakpoint name
- Size range
- Columns
-
-
-
-
- Desktop, large
- 1680px
- 12
-
-
- Desktop, medium
- 1440px
- 12
-
-
- Desktop, small
- 1200px - 1439px
- 12
-
-
- Tablet, large
- 992px - 1199px
- 12
-
-
- Tablet, small
- 768px - 991px
- 12
-
-
- Mobile, large
- 576px - 767px
- 2
-
-
- Mobile, small
- 0px
- 1
-
-
-
-
-
-{%- endcall %}
-
-{% feedback %}
- Foundations
- To learn how to use our other foundations in your designs, visit the foundations section.
-{% endfeedback %}
-
-
diff --git a/docs/foundations/index.md b/docs/foundations/index.md
new file mode 100644
index 0000000000..2ddb2b4b31
--- /dev/null
+++ b/docs/foundations/index.md
@@ -0,0 +1,56 @@
+---
+layout: layouts/pages/basic.njk
+title: Foundations
+sidenavTitle: Overview
+order: 0
+tags:
+ - foundations
+importElements:
+ - rh-tile
+---
+
+
+
+
+
+ ## Overview
+
+ Foundations are the visual and structural elements of our design system. Foundations were created as the building blocks of all user interface elements. Foundations should be used as blueprints that all components and layouts are created from.
+
+
+
+
+
+
+ Color
+ Unifies our brand while bringing accessibility and consistency to our digital experiences
+
+
+
+
+
+ Grid
+ Provides guidance and structure when positioning elements and components in a layout
+
+
+
+
+
+ Spacing
+ Defines fixed amounts of space between elements and makes it easy to maintain consistency
+
+
+
+
+
+ Typography
+ A system of fonts that creates hierarchies and helps guide a user through an experience
+
+
+
+
+## Make a request
+
+To request a new foundation or if updates need to be made to an existing foundation, [contact us](mailto:digital-design-system@redhat.com).
+
+{% include 'partials/component/feedback.html' %}
diff --git a/docs/foundations/personalization.md b/docs/foundations/personalization.md
new file mode 100644
index 0000000000..e47ea3a56f
--- /dev/null
+++ b/docs/foundations/personalization.md
@@ -0,0 +1,371 @@
+---
+layout: layouts/pages/basic.njk
+title: Personalization patterns
+order: 30
+hasToc: true
+tags:
+ - foundations
+importElements:
+ - rh-tile
+---
+
+
+
+
+
+
+ ## Overview
+
+ Personalization is a digital marketing tactic where priority audiences are intercepted through targeting. Those audiences can be account-, demographic-, behavioral-, lifecycle-, or intent-based. Our goal is to provide visitors with the best next action when browsing our websites as well as meet their specific needs and progress them through the customer lifecycle.
+
+ For more information about how personalization works, the team, and our vision for the future, read the [source deck](https://docs.google.com/presentation/d/1rRLFRJLsbspINGu5r2zXBUITRkwzVVH8T3CveA1Z_bM/edit#slide=id.g24f5d8f664e_0_1100).
+
+
+
+
+
+
+
+
+ ## Getting started with personalization
+
+ Before jumping into personalization, have answers to these questions ready first.
+
+
+ - What audience are you trying to target?
+ - How large is the audience?
+
+ - Reference the Go/No go estimator to calculate and determine the viability of your project.
+
+ - What do you want that audience to do?
+ - What would success look like for this audience?
+ - What type of experience(s) do you want to use?
+ - Are any tests or personalizations already running on the page you are working on?
+
+
+
+
+
+
+ ## Pattern 1: Dialog { id="pattern-1-dialog" }
+
+ A Dialog displays content in a container which sits on top of the page and darkens any content underneath. This is a priority 1 implementation as it prevents a user from completing a task or interacting with the rest of the page until they close the dialog.
+
+ ### Design { id="dialog-design"}
+
+ A dialog can be used both on desktop and mobile.
+
+
+
+
+
+ ### How to use { id="dialog-how-to-use"}
+
+
+ - Use sparingly as it interrupts the workflow of a user, requires immediate attention from a user, and distracts a user from completing their current task.
+ - A best practice is to trigger a dialog only when a user interacts with the appropriate element, never on its own. For instance, show a dialog if a user selects something and then needs to complete a more important task. If that is not ideal or possible, show it once a user has completed their task.
+ - Refrain from presenting a dialog while a user is likely to be in the middle of an important task.
+ - Per our design system, every dialog should include a close button. It should also close when a user clicks outside of the dialog and when the Escape (esc) key is pressed.
+ - Messaging within a dialog should be simple, do not include multiple steps or long forms.
+ - A dialog can be used on mobile, but a user might have a hard time closing it on a small screen.
+
+
+ ### The audience { id="dialog-audience"}
+
+ A dialog can be used for the following types of content (among others).
+
+
+ - Product announcements
+ - Notifications related to any previous user actions
+ - An experience that ideally does not direct a user away from their task or the page
+
+
+
+
+
+
+ ## Pattern 2: Sticky banner { id="pattern-2-sticky-banner" }
+
+ A Sticky banner displays a secondary offer without interrupting the experience of a user. It sticks to the bottom of the screen and overlays existing content.
+
+ ### Design { id="sticky-banner-design"}
+
+
+ - If a sticky banner links to a set of assets (like in Pathfactory), a placeholder image can be displayed describing what the user gets.
+ - If a sticky banner links to specific assets, a resource icon can be displayed instead of the Pathfactory image.
+ - The headline should not wrap, 35 - 40 characters or fewer is acceptable.
+ - The body text should not wrap beyond more than two lines; 85 - 110 characters or fewer, depending on how the first line wraps, is acceptable.
+ - A user should be able to permanently close a sticky banner and that same sticky banner should not reappear when they return.
+
+
+
+
+
+
+ ### How to use { id="sticky-banner-how-to-use"}
+
+
+ - A sticky banner slides up from the bottom of the page. We often require a user to scroll past the fold before revealing a sticky banner to avoid interfering with the primary hero message.
+ - Decide on which pages will display a sticky banner. We typically do not show a sticky banner on landing pages like the Solutions pages and Thought Leadership article pages.
+ - Design a sticky banner to explicitly tell a user what they will receive if they make a selection. For example, include an image that visually describes the resource and write content to be specific to the resource.
+ - The Drift chatbot icon appears on top of everything, so avoid creating a design that spans the entire width of a sticky banner to avoid a conflict.
+
+
+ ### The audience { id="sticky-banner-audience"}
+
+
+ - A sticky banner can be displayed to a user who has shown interest in a product or topic, but have not converted yet.
+ - We recommend the audience be large enough so that a click-through rate of under 10% is sufficient to meet goals.
+ - Expect a fairly high close rate, based on initial trials, in the 40% range.
+
+
+
+
+
+
+ ## Pattern 3: Sticky card { id="pattern-3-sticky-card" }
+
+ A Sticky card is a single page or cross-page offer that persists on the side of the screen.
+
+ ### Design { id="sticky-card-design"}
+
+ A sticky card can include a title, headline, body text, and call to action, but not all of these elements are required in the same sticky card. It can function in a couple of different ways depending on the primary goal of the page.
+
+
+ - Less interruptive
+
+ - On pages where the primary goal is to support reading and learning, a sticky card will slide in from right to left after the visitor has scrolled past 1,000 pixels. It will remain in a fixed position so it follows a user down the page.
+ - On mobile, a sticky card will appear inline on the page. For example, there is an example of a less interruptive sticky card on article pages.
+
+
+
+
+
+ - More interruptive
+
+ - On pages where the primary goal is to present a user with a personalized offer, a sticky card will slide in from right to left once the visitor has scrolled past the hero.
+ - On mobile, a sticky card will be shown as an overlay which is the same as on desktop. For example, show a sticky card on pages after a user has taken an action indicating they have an interest in a certain subject in order to present a resource they may be interested in.
+
+
+
+
+
+
+
+
+ ### How to use { id="sticky-card-how-to-use"}
+
+
+ - A sticky card should promote a resource or event and the only acceptable elements are a title, headline, body text, and call to action.
+ - A sticky card can be used on a single page or across a set of pages.
+ - A sticky card is useful on pages that do not have a call to action in the hero or near the top of the page because it can be used to call attention to a personalized resource.
+
+
+ ### The audience { id="sticky-card-audience"}
+
+
+ - A sticky card can be displayed to a user who has shown interest in a product or topic, but have not converted yet.
+
+
+
+
+
+
+
+ ## Pattern 4: Announcement { id="pattern-4-announcement" }
+
+ An Announcement is a priority 1 personalization and should be used sparingly. It includes a skinny banner at the very top of a website above the navigation.
+
+ ### Design { id="announcement-design"}
+
+ An announcement can be used to display an important message at the top of a website, but is not limited to one page at a time. An announcement can either have a themed background image or solid color background. For colored backgrounds, we suggest using alert styles.
+
+
+
+
+
+ ### How to use { id="announcement-how-to-use"}
+
+
+ - If a logo is associated with an announcement, it should have a max width of 80px.
+ - Headline or body text should be 60 characters or fewer.
+ - Call to action text should be 20 characters or fewer.
+ - Provide a link to the announcement if applicable.
+
+
+ ### The audience { id="announcement-audience"}
+
+ Alert styles can be used for the following kinds of announcement content.
+
+
+ - Important cross-website announcements - For top-tier press releases, company announcements, and important product launches, use a red or yellow background.
+ - Single-page announcements - For global updates or important in-page content, use a green or blue background.
+
+
+
+
+
+
+ ## Pattern 5: In-page card { id="pattern-5-in-page-card" }
+
+ An In-page card is an existing card(s) within a page for personalization or targeting.
+
+
+ Warning
+ Only cards on the redhat.com home page are templated in Adobe Target. For a different card experience on other pages, new design and development work may be required.
+
+
+ ### Design { id="in-page-card-design" }
+
+ There are several versions of in-page offer cards depending on what kind of asset you need to promote.
+
+
+ - Resource offer
+ - Event/webinar offer
+ - Page offer
+ - Product card
+
+
+
+
+
+
+ ### How to use { id="in-page-card-how-to-use" }
+
+
+ - Find an existing card(s) within your page or set of pages you want to personalize.
+ - Define the offer you are trying to promote (announcement, event, press release, webinar, etc.).
+ - To automate the process of what you show a user, Adobe has pre-built technology to automatically personalize based on the attributes of a user or an algorithm based on content type. Please work with the Digital Systems Web Team if you are interested in this direction.
+
+
+ ### The audience { id="in-page-card-audience" }
+
+ An in-page card should be relevant to the context of the page a user is currently on.
+
+
+
+
+
+
+
+ ## Pattern 6: Active tab { id="pattern-6-active-tab" }
+
+ The Active tab is a simple experience applicable to any page that contains tabs. It aims to customize the visitor experience by highlighting a tab based on the interests of a user.
+
+ ### Design { id="active-tab-design" }
+
+ Active tab uses the existing tab component design and only customizes the active tab within the tab set (no custom design work is needed).
+
+
+
+
+
+ ### How to use { id="active-tab-how-to-use" }
+
+
+ - Choose your target audience.
+ - Choose a tab that best aligns to that audience in order to provide a targeted experience to them.
+ - Request the active tab experience be set for that audience and describe what goals you hope to accomplish by doing so.
+
+
+ ### The audience { id="active-tab-audience" }
+
+ An active tab design can be used for the following types of content.
+
+
+ - Persona-based targeting
+ - Lifecycle-based targeting
+ - Product affinity targeting
+ - Topic affinity targeting
+
+
+
+
+
+
+ ## Pattern 7: Inline alert { id="pattern-7-inline-alert" }
+
+ An Inline alert is a single or multiple page offer that appears inline with page content.
+
+ ### Design { id="inline-alert-design" }
+
+ An inline-alert only includes text, but no images. It can also include a single or two links that direct a user to other pages.
+
+
+
+
+
+ If a user closes an inline alert, consider if or when it should be displayed again for the same user. It could be suppressed for a week, month, or forever depending on the goal of the project. The alert component in Adobe XD has two styles, normal and alternate, and either can be used.
+
+ ### How to use { id="inline-alert-how-to-use" }
+
+
+ - Use when the goal is to show an inline message pertinent to the surrounding content.
+
+
+ ### The audience { id="inline-alert-audience" }
+
+ An inline alert can be displayed to any appropriate audience group.
+
+
+
+
+
+ Custom patterns
+ Custom patterns are not pre-established targeting opportunities. If you are interested in creating a custom targeting experience, please reach out to the design system team or via this form with the details of your request and they will help you to establish the framework for the new design.
+
+
+
+ Feedback
+ Help us improve this page by leaving your feedback below.
+
diff --git a/docs/foundations/personalization.njk b/docs/foundations/personalization.njk
deleted file mode 100644
index fcbe5b69cf..0000000000
--- a/docs/foundations/personalization.njk
+++ /dev/null
@@ -1,377 +0,0 @@
----
-layout: layout-basic.njk
-title: Personalization patterns
-order: 3
-tags:
- - foundations
-includeComponent:
- - pfe-jump-links
----
-
-{% import 'component/components.njk' as components %}
-
-{% call components.section("Overview") -%}
-
- Personalization is a digital marketing tactic where priority audiences are intercepted through targeting. Those audiences can be account-, demographic-, behavioral-, lifecycle-, or intent-based. Our goal is to provide visitors with the best next action when browsing our websites as well as meet their specific needs and progress them through the customer lifecycle.
For more information about how personalization works, the team, and our vision for the future, read the source deck.
-
-
-
-
-
-
-
- {% call components.example(palette='descriptive') %}
-
- {%- endcall %}
-
- Sticky banner
-
-
-
-
-
-
- {% call components.example(palette='descriptive-light-gray') %}
-
- {%- endcall %}
-
- Announcement
-
-
-
-
- {% call components.example(palette='descriptive') %}
-
- {%- endcall %}
-
- In-page card
-
-
-
-
-
-
- {% call components.example(palette='descriptive') %}
-
- {%- endcall %}
-
- In-page alert
-
-
-
-
-{%- endcall %}
-
-
-
-
-
-{% call components.section("Getting started with personalization") -%}
-
- Before jumping into personalization, have answers to these questions ready first.
-
-
- - What audience are you trying to target?
- - How large is the audience?
-
- - Reference the Go/No go estimator to calculate and determine the viability of your project.
-
- - What do you want that audience to do?
- - What would success look like for this audience?
- - What type of experience(s) do you want to use?
- - Are any tests or personalizations already running on the page you are working on?
-
-
-{%- endcall %}
-
-
-
-
-
-{% call components.section("Pattern 1: Dialog") -%}
-
- A Dialog displays content in a container which sits on top of the page and darkens any content underneath. This is a priority 1 implementation as it prevents a user from completing a task or interacting with the rest of the page until they close the dialog.
-
- Design
-
- A dialog can be used both on desktop and mobile.
-
-
-
- How to use
-
-
- - Use sparingly as it interrupts the workflow of a user, requires immediate attention from a user, and distracts a user from completing their current task.
- - A best practice is to trigger a dialog only when a user interacts with the appropriate element, never on its own. For instance, show a dialog if a user selects something and then needs to complete a more important task. If that is not ideal or possible, show it once a user has completed their task.
- - Refrain from presenting a dialog while a user is likely to be in the middle of an important task.
- - Per our design system, every dialog should include a close button. It should also close when a user clicks outside of the dialog and when the Escape (esc) key is pressed.
- - Messaging within a dialog should be simple, do not include multiple steps or long forms.
- - A dialog can be used on mobile, but a user might have a hard time closing it on a small screen.
-
-
- The audience
-
- A dialog can be used for the following types of content (among others).
-
-
- - Product announcements
- - Notifications related to any previous user actions
- - An experience that ideally does not direct a user away from their task or the page
-
-
-{%- endcall %}
-
-
-
-
-
-{% call components.section("Pattern 2: Sticky banner") -%}
-
- A Sticky banner displays a secondary offer without interrupting the experience of a user. It sticks to the bottom of the screen and overlays existing content.
-
- Design
-
-
- - If a sticky banner links to a set of assets (like in Pathfactory), a placeholder image can be displayed describing what the user gets.
- - If a sticky banner links to specific assets, a resource icon can be displayed instead of the Pathfactory image.
- - The headline should not wrap, 35 - 40 characters or fewer is acceptable.
- - The body text should not wrap beyond more than two lines; 85 - 110 characters or fewer, depending on how the first line wraps, is acceptable.
- - A user should be able to permanently close a sticky banner and that same sticky banner should not reappear when they return.
-
-
-
-
- How to use
-
-
- - A sticky banner slides up from the bottom of the page. We often require a user to scroll past the fold before revealing a sticky banner to avoid interfering with the primary hero message.
- - Decide on which pages will display a sticky banner. We typically do not show a sticky banner on landing pages like the Solutions pages and Thought Leadership article pages.
- - Design a sticky banner to explicitly tell a user what they will receive if they make a selection. For example, include an image that visually describes the resource and write content to be specific to the resource.
- - The Drift chatbot icon appears on top of everything, so avoid creating a design that spans the entire width of a sticky banner to avoid a conflict.
-
-
- The audience
-
-
- - A sticky banner can be displayed to a user who has shown interest in a product or topic, but have not converted yet.
- - We recommend the audience be large enough so that a click-through rate of under 10% is sufficient to meet goals.
- - Expect a fairly high close rate, based on initial trials, in the 40% range.
-
-
-{%- endcall %}
-
-
-
-
-
-{% call components.section("Pattern 3: Sticky card") -%}
-
- A Sticky card is a single page or cross-page offer that persists on the side of the screen.
-
- Design
-
- A sticky card can include a title, headline, body text, and call to action, but not all of these elements are required in the same sticky card. It can function in a couple of different ways depending on the primary goal of the page.
-
-
- - Less interruptive
-
- - On pages where the primary goal is to support reading and learning, a sticky card will slide in from right to left after the visitor has scrolled past 1,000 pixels. It will remain in a fixed position so it follows a user down the page.
- - On mobile, a sticky card will appear inline on the page. For example, there is an example of a less interruptive sticky card on article pages.
-
-
-
-
-
- - More interruptive
-
- - On pages where the primary goal is to present a user with a personalized offer, a sticky card will slide in from right to left once the visitor has scrolled past the hero.
- - On mobile, a sticky card will be shown as an overlay which is the same as on desktop. For example, show a sticky card on pages after a user has taken an action indicating they have an interest in a certain subject in order to present a resource they may be interested in.
-
-
-
-
-
-
- How to use
-
-
- - A sticky card should promote a resource or event and the only acceptable elements are a title, headline, body text, and call to action.
- - A sticky card can be used on a single page or across a set of pages.
- - A sticky card is useful on pages that do not have a call to action in the hero or near the top of the page because it can be used to call attention to a personalized resource.
-
-
- The audience
-
-
- - A sticky card can be displayed to a user who has shown interest in a product or topic, but have not converted yet.
-
-
-{%- endcall %}
-
-
-
-
-
-{% call components.section("Pattern 4: Announcement") -%}
-
- An Announcement is a priority 1 personalization and should be used sparingly. It includes a skinny banner at the very top of a website above the navigation.
-
- Design
-
- An announcement can be used to display an important message at the top of a website, but is not limited to one page at a time. An announcement can either have a themed background image or solid color background. For colored backgrounds, we suggest using alert styles.
-
-
-
- How to use
-
-
- - If a logo is associated with an announcement, it should have a max width of 80px.
- - Headline or body text should be 60 characters or fewer.
- - Call to action text should be 20 characters or fewer.
- - Provide a link to the announcement if applicable.
-
-
- The audience
-
- Alert styles can be used for the following kinds of announcement content.
-
-
- - Important cross-website announcements - For top-tier press releases, company announcements, and important product launches, use a red or yellow background.
- - Single-page announcements - For global updates or important in-page content, use a green or blue background.
-
-
-{%- endcall %}
-
-
-
-
-
-{% call components.section("Pattern 5: In-page card") -%}
-
- An In-page card is an existing card(s) within a page for personalization or targeting.
-
- Warning
Only cards on the redhat.com home page are templated in Adobe Target. For a different card experience on other pages, new design and development work may be required.
-
- Design
-
- There are several versions of in-page offer cards depending on what kind of asset you need to promote.
-
-
- - Resource offer
- - Event/webinar offer
- - Page offer
- - Product card
-
-
-
-
- How to use
-
-
- - Find an existing card(s) within your page or set of pages you want to personalize.
- - Define the offer you are trying to promote (announcement, event, press release, webinar, etc.).
- - To automate the process of what you show a user, Adobe has pre-built technology to automatically personalize based on the attributes of a user or an algorithm based on content type. Please work with the Digital Systems Web Team if you are interested in this direction.
-
-
- The audience
-
- An in-page card should be relevant to the context of the page a user is currently on.
-
-{%- endcall %}
-
-
-
-
-
- {% call components.section("Pattern 6: Active tab") -%}
-
- The Active tab is a simple experience applicable to any page that contains tabs. It aims to customize the visitor experience by highlighting a tab based on the interests of a user.
-
- Design
-
- Active tab uses the existing tab component design and only customizes the active tab within the tab set (no custom design work is needed).
-
-
-
- How to use
-
-
- - Choose your target audience.
- - Choose a tab that best aligns to that audience in order to provide a targeted experience to them.
- - Request the active tab experience be set for that audience and describe what goals you hope to accomplish by doing so.
-
-
- The audience
-
- An active tab design can be used for the following types of content.
-
-
- - Persona-based targeting
- - Lifecycle-based targeting
- - Product affinity targeting
- - Topic affinity targeting
-
-
-{%- endcall %}
-
-
-
-
-
-{% call components.section("Pattern 7: Inline alert") -%}
-
- An Inline alert is a single or multiple page offer that appears inline with page content.
-
- Design
-
- An inline-alert only includes text, but no images. It can also include a single or two links that direct a user to other pages.
-
-
-
- If a user closes an inline alert, consider if or when it should be displayed again for the same user. It could be suppressed for a week, month, or forever depending on the goal of the project. The alert component in Adobe XD has two styles, normal and alternate, and either can be used.
-
- How to use
-
-
- - Use when the goal is to show an inline message pertinent to the surrounding content.
-
-
- The audience
-
- An inline alert can be displayed to any appropriate audience group.
-
-{%- endcall %}
-
-
-
-{% call components.section("Custom patterns") -%}
-
- Custom patterns are not pre-established targeting opportunities. If you are interested in creating a custom targeting experience, please reach out to the design system team or via this form with the details of your request and they will help you to establish the framework for the new design.
-
-{%- endcall %}
-
-{% feedback %}
- Foundations
- To learn how to use our other foundations in your designs, visit the foundations section.
-{% endfeedback %}
diff --git a/docs/foundations/spacing.md b/docs/foundations/spacing.md
new file mode 100644
index 0000000000..1a4e898102
--- /dev/null
+++ b/docs/foundations/spacing.md
@@ -0,0 +1,550 @@
+---
+layout: layouts/pages/basic.njk
+title: Spacing
+order: 40
+hasToc: true
+tags:
+ - foundations
+importElements:
+ - rh-table
+---
+
+
+
+
+
+
+
+ ## Overview
+
+ Spacers are visual cues used to define fixed amounts of space between elements. They make it easy for designers to maintain consistent spacing across components and patterns as well as simplify the handoff process between designers and developers. Consistent spacing helps maintain balance and rhythm across the system.
+
+
+
+
+
+ ## Style
+
+ ### Base increment
+
+ The base increment of spacers starts at 4px. The Form field pattern features a 6px spacer for very specific use cases. It should not be used anywhere else.
+
+ ### Scale
+
+ There are a variety of spacers available which can be used for different spacing needs, which are all divisible by 4. To keep the system simple, there’s only one scale for spacers that applies to components, patterns, and layouts. The smallest spacer is 4px and the largest is 80px. New spacers are added based on design needs, so do not create any new spacers, combine different spacers instead.
+
+
+ {% spacerTokensTable
+ headline="",
+ caption="",
+ headingLevel="4",
+ tokens="--rh-space-xs,--rh-space-sm,--rh-space-md,--rh-space-lg,--rh-space-xl,--rh-space-2xl,--rh-space-3xl,--rh-space-4xl,--rh-space-5xl,--rh-space-6xl,--rh-space-7xl"%}
+ {% endspacerTokensTable %}
+
+
+ ### Applying spacers
+
+ The size of an element dictates its spatial relationship with other elements in a layout, i.e. small elements need less space and large elements need more space. For example, use small spacers to define the spacing between text styles or buttons and use large spacers to define the vertical rhythm in a layout or spacing between sections.
+
+
+
+
+
+
+
+
+
+ ## Typography
+
+ When placing text in a layout, using the right spacers will ensure a smooth vertical rhythm and readability.
+
+
+
+
+
+ ### Spacing between text styles
+
+ Use spacers between text styles to establish hierarchy and maintain relationships. For example, if text styles are spaced too closely, the content in the group will be hard to process. If they’re spaced too far apart, it won’t appear as if the styles are related to each other.
+
+
+
+
+
+ ### Titles and headlines
+
+ The spacing between Layout titles and headlines as well as Card titles and body copy is always the same at 16px on desktop, tablet, and mobile. It’s enough space so that the title can introduce the content underneath. For visual examples, see this XD document.
+
+ #### Spacing guidelines
+
+
+ - The spacing between a Layout title and a headline is 16px on desktop, tablet, and mobile
+ - The spacing between a Card title and body copy is 16px on desktop, tablet, and mobile
+
+
+
+
+
+
+ ### Desktop scale
+
+ The columns indicate which spacer to use between headlines and body copy on desktop and tablet devices. To see the exact size values of each text style, visit the Typography page.
+
+
+
+
+
+ Headline style
+ Text style
+ Spacer
+
+
+
+
+ Headline, 2xl
+ Body copy, lg
+
+
+
+ Headline, xl
+ Body copy, lg
+
+
+
+ Headline, lg
+ Body copy, lg
+
+
+
+ Headline, md
+ Body copy, lg
+
+
+
+ Headline, sm
+ Body copy, lg
+
+
+
+ Headline, xs
+ Body copy, lg
+
+
+
+
+
+
+ ### Mobile scale
+
+ The columns indicate which spacer to use between headlines and body copy on mobile devices. To see the exact size values of each text style, visit the Typography page.
+
+
+
+
+
+ Headline style
+ Text style
+ Spacer
+
+
+
+
+ Headline, xxl
+ Body copy, md
+
+
+
+ Headline, xl
+ Body copy, md
+
+
+
+ Headline, lg
+ Body copy, md
+
+
+
+ Headline, md
+ Body copy, md
+
+
+
+ Headline, sm
+ Body copy, md
+
+
+
+ Headline, xs
+ Body copy, md
+
+
+
+
+
+
+ ### Headlines and Calls to action
+
+ The spacing between headlines and Calls to action depends on the point size of the headline. For visual examples, see this XD document.
+
+
+ #### Spacing guidelines
+
+
+ - The spacing between large headlines and Calls to action is 32px on desktop and tablet, and 24px on mobile
+ - The spacing between small headlines and Calls to action is 24px on desktop and tablet, and 16px on mobile
+ - The spacing between body copy and Calls to action is 32px on desktop and tablet, and 24px on mobile
+
+
+
+
+
+
+ ### Scale
+
+ The columns indicate which spacer to use between headlines and Calls to action, depending on the breakpoint. To see the exact size values of each text style, visit the Typography page.
+
+
+
+
+
+ Text style
+ Spacer (desktop and tablet)
+ Spacer (mobile)
+
+
+
+
+ Headline, 2xl
+
+
+
+
+ Headline, xl
+
+
+
+
+ Headline, lg
+
+
+
+
+ Headline, md
+
+
+
+
+ Headline, sm
+
+
+
+
+ Headline, xs
+
+
+
+
+ Body copy, lg
+
+
+
+
+ Body copy, md
+
+
+
+
+
+
+
+ ### Headlines and Buttons
+
+ The spacing between headlines and Buttons depends on the point size of the headline. For visual examples, see this XD document.
+
+ #### Spacing guidelines
+
+
+ - The spacing between large headlines and Buttons is 32px on desktop and tablet, and 24px on mobile
+ - The spacing between small headlines and Buttons is 24px on desktop and tablet, and 16px on mobile
+ - The spacing between body copy and Buttons is always 24px on desktop, tablet, and mobile
+
+
+
+
+
+
+ #### Scale
+
+ The columns indicate which spacer to use between headlines and Buttons, depending on the breakpoint. To see the exact size values of each text style, visit the Typography page.
+
+
+
+
+
+ Headline style
+ Spacer (desktop and tablet)
+ Spacer (mobile)
+
+
+
+
+ Headline, 2xl
+ Do not use
+ Do not use
+
+
+ Headline, xl
+ Do not use
+ Do not use
+
+
+ Headline, lg
+
+
+
+
+ Headline, md
+
+
+
+
+ Headline, sm
+
+
+
+
+ Headline, xs
+
+
+
+
+
+
+
+ ### Other examples
+
+
+
+
+
+ ### Other use cases
+
+ If you still have questions about how to use spacers with typography, please contact us or create an issue in our GitHub repo.
+
+
+
+
+
+
+ ## Components and patterns
+
+ When working in Adobe XD, components and patterns have built-in spacers, so there’s no need to guess. Remember to take into account how spacers might change when modifying content inside of a component or pattern.
+
+ ### Responsive design
+
+ XD maintains the spacers inside of components and patterns even when used on different screen sizes. Spacers used in complex layouts may change values from large to small breakpoints and vice versa, depending on the screen real estate.
+
+
+
+
+
+ ### Calls to action
+
+ Some styles have a 2:1 spacing ratio. That ratio never changes, so do not add more spacing to those styles.
+
+ Primary and Secondary styles have a 2:1 spacing ratio, meaning the left and right spacing is fixed at 32px and the top and bottom spacing is fixed at 16px.
+
+
+
+
+
+ The Brick style has a fixed top and bottom spacing of 16px, but the left and right spacing can stretch to fit a certain amount of grid columns.
+
+
+
+
+
+ The Default style needs 8px of spacing between the text and the arrow or icon.
+
+
+
+
+
+ ### Accordion
+
+ An Accordion is a good example of how a component uses spacers to maintain a comfortable balance between text, horizontal rules, icons, and backgrounds.
+
+
+
+
+
+ ### Tabs
+
+ Tabs is another good example of how a component uses spacers to maintain a comfortable balance between lots of elements that are in close proximity to each other. The area below (or to the right) of the component is a large content area layout and therefore should use a large spacer. For more information about using spacers in Tabs, see this XD document.
+
+
+
+
+
+ ### Cards
+
+ Cards are small layouts that use different spacers depending on their size. As Cards increase or decrease in size, they require more or less spacing on the inside or outside.
+
+
+
+
+
+
+
+
+
+ ### Scale
+
+
+
+
+
+ Breakpoint
+ Columns
+ Spacer
+
+
+
+
+ Desktop
+ 8 or more
+
+
+
+ Desktop
+ 3 – 7
+
+
+
+ Tablet
+ 8 or more
+
+
+
+ Tablet
+ 3 – 7
+
+
+
+ Mobile
+ 1 or 2
+
+
+
+
+
+
+ ### Other components or patterns
+
+ Here’s how spacing is used in other components and patterns.
+
+
+
+
+
+
+ ### Other use cases
+
+ If you still have questions about how to use spacers with components, please contact us or create an issue in our GitHub repo.
+
+
+
+
+
+
+ ## Layout
+
+ Layouts require large spacers to create white space and disassociate sections from each other.
+
+ ### Applying spacers
+
+ Every layout or section on a page needs enough vertical spacing so that content doesn’t feel too close or crushed.
+ The top and bottom spacing of a layout is 64px by default, but some layouts feature different spacing depending on hierarchy or importance.
+
+ Some components like Tabs contain a large spacer because there’s a content area layout inside.
+
+
+
+
+
+ ### Responsive design
+
+ When layouts reduce in size, the spacers will also reduce in size to compensate for the loss in screen real estate.
+
+ In the desktop breakpoint, the gutters in the grid are spaced 30px apart from each other.
+
+
+
+
+
+ In the tablet, landscape breakpoint, the gutters in the grid are spaced 24px apart from each other.
+
+
+
+
+
+ In the tablet, portrait breakpoint, the gutters in the grid are spaced 18px apart from each other.
+
+
+
+
+
+ In the mobile breakpoint, the gutters in the grid are spaced 16px apart from each other.
+
+
+
+
+
+
+
+
+
+ ### Other use cases
+
+ If you still have questions about how to use spacers in a layout, please contact us or create an issue in our GitHub repo.
+
+
+
+
+
+
+ ## Best practices
+
+ Use existing spacers for horizontal and vertical spacing. If a current spacer doesn’t meet your needs, submit a request for us to establish new spacers.
+
+
+
+
+
+ To be as clear as possible, include spacers in your design specs to make it easy for developers to see what spacers you want to use between elements. Note that Adobe XD sometimes won’t produce exact pixel amounts between elements when viewed in Developer specs.
+
+
+
+
+
+
+
+
+
+ ## Spacers in XD
+
+ All of the components and patterns in the design kit include spacers. Turn on the group named Spacing and you can see how they’re used.
+
+
+
+
+
+
+
+
+ Foundations
+ To learn how to use our other foundations in your designs, visit the foundations section.
+
diff --git a/docs/foundations/spacing.njk b/docs/foundations/spacing.njk
deleted file mode 100644
index 6c4ee83307..0000000000
--- a/docs/foundations/spacing.njk
+++ /dev/null
@@ -1,496 +0,0 @@
----
-layout: layout-basic.njk
-title: Spacing
-order: 4
-tags:
- - foundations
----
-
-{% import 'component/foundations.njk' as foundations %}
-
-{% call foundations.section("Overview") -%}
-
- Spacers are visual cues used to define fixed amounts of space between elements. They make it easy for designers to maintain consistent spacing across components and patterns as well as simplify the handoff process between designers and developers. Consistent spacing helps maintain balance and rhythm across the system.
-
-{%- endcall %}
-
-
- Style
-
- Base increment
-
- The base increment of spacers starts at 4px. The Form field pattern features a 6px spacer for very specific use cases. It should not be used anywhere else.
-
- Scale
-
- There are a variety of spacers available which can be used for different spacing needs, which are all divisible by 4. To keep the system simple, there’s only one scale for spacers that applies to components, patterns, and layouts. The smallest spacer is 4px and the largest is 80px. New spacers are added based on design needs, so do not create any new spacers, combine different spacers instead.
-
- {% spacerTokensTable
- headline="",
- caption="",
- headingLevel="4",
- tokens="--rh-space-xs,--rh-space-sm,--rh-space-md,--rh-space-lg,--rh-space-xl,--rh-space-2xl,--rh-space-3xl,--rh-space-4xl,--rh-space-5xl,--rh-space-6xl,--rh-space-7xl"%}
- {% endspacerTokensTable %}
-
- Applying spacers
-
- The size of an element dictates its spatial relationship with other elements in a layout, i.e. small elements need less space and large elements need more space. For example, use small spacers to define the spacing between text styles or buttons and use large spacers to define the vertical rhythm in a layout or spacing between sections.
-
-
-
-
-
-{% call foundations.section("Typography") -%}
-
- When placing text in a layout, using the right spacers will ensure a smooth vertical rhythm and readability.
-
-
-
- Spacing between text styles
-
- Use spacers between text styles to establish hierarchy and maintain relationships. For example, if text styles are spaced too closely, the content in the group will be hard to process. If they’re spaced too far apart, it won’t appear as if the styles are related to each other.
-
-
-
- Titles and headlines
-
- The spacing between Layout titles and headlines as well as Card titles and body copy is always the same at 16px on desktop, tablet, and mobile. It’s enough space so that the title can introduce the content underneath. For visual examples, see this XD document.
-
- Spacing guidelines
-
- - The spacing between a Layout title and a headline is 16px on desktop, tablet, and mobile
- - The spacing between a Card title and body copy is 16px on desktop, tablet, and mobile
-
-
-
-
-
- Headlines and body copy
-
- The spacing between headlines and body copy depends on the point size of the headline. As headlines increase or decrease in point size, they require more or less spacing underneath. For visual examples, see this XD document.
-
- Spacing guidelines
-
- - The spacing between large headlines and body copy is 24px on desktop, tablet, and mobile
- - The spacing between small headlines and body copy is 16px on desktop, tablet, and mobile
-
-
-
-
- Desktop scale
-
- The columns indicate which spacer to use between headlines and body copy on desktop and tablet devices. To see the exact size values of each text style, visit the Typography page.
-
-
-
-
- Headline style
- Text style
- Spacer
-
-
- Headline, xxl
- Body copy, lg
-
-
-
- Headline, xl
- Body copy, lg
-
-
-
- Headline, lg
- Body copy, lg
-
-
-
- Headline, md
- Body copy, lg
-
-
-
- Headline, sm
- Body copy, lg
-
-
-
- Headline, xs
- Body copy, lg
-
-
-
-
- Mobile scale
-
- The columns indicate which spacer to use between headlines and body copy on mobile devices. To see the exact size values of each text style, visit the Typography page.
-
-
-
- Headline style
- Text style
- Spacer
-
-
- Headline, xxl
- Body copy, md
-
-
-
- Headline, xl
- Body copy, md
-
-
-
- Headline, lg
- Body copy, md
-
-
-
- Headline, md
- Body copy, md
-
-
-
- Headline, sm
- Body copy, md
-
-
-
- Headline, xs
- Body copy, md
-
-
-
-
- Headlines and Calls to action
-
- The spacing between headlines and Calls to action depends on the point size of the headline. For visual examples, see this XD document.
-
- Spacing guidelines
-
-
- - The spacing between large headlines and Calls to action is 32px on desktop and tablet, and 24px on mobile
- - The spacing between small headlines and Calls to action is 24px on desktop and tablet, and 16px on mobile
- - The spacing between body copy and Calls to action is 32px on desktop and tablet, and 24px on mobile
-
-
-
-
- Scale
-
- The columns indicate which spacer to use between headlines and Calls to action, depending on the breakpoint. To see the exact size values of each text style, visit the Typography page.
-
-
-
- Text style
- Spacer (desktop and tablet)
- Spacer (mobile)
-
-
- Headline, xxl
-
-
-
-
- Headline, xl
-
-
-
-
- Headline, lg
-
-
-
-
- Headline, md
-
-
-
-
- Headline, sm
-
-
-
-
- Headline, xs
-
-
-
-
- Body copy, lg
-
-
-
-
- Body copy, md
-
-
-
-
-
- Headlines and Buttons
-
- The spacing between headlines and Buttons depends on the point size of the headline. For visual examples, see this XD document.
-
- Spacing guidelines
-
-
- - The spacing between large headlines and Buttons is 32px on desktop and tablet, and 24px on mobile
- - The spacing between small headlines and Buttons is 24px on desktop and tablet, and 16px on mobile
- - The spacing between body copy and Buttons is always 24px on desktop, tablet, and mobile
-
-
-
-
- Scale
-
- The columns indicate which spacer to use between headlines and Buttons, depending on the breakpoint. To see the exact size values of each text style, visit the Typography page.
-
-
-
- Headline style
- Spacer (desktop and tablet)
- Spacer (mobile)
-
-
- Headline, xxl
- Do not use
- Do not use
-
-
- Headline, xl
- Do not use
- Do not use
-
-
- Headline, lg
-
-
-
-
- Headline, md
-
-
-
-
- Headline, sm
-
-
-
-
- Headline, xs
-
-
-
-
-
- Other examples
-
-
-
- Other use cases
-
- If you still have questions about how to use spacers with typography, please contact us or create an issue in our GitHub repo.
-
-{%- endcall %}
-
-
-
-{% call foundations.section("Components and patterns") -%}
-
- When working in Adobe XD, components and patterns have built-in spacers, so there’s no need to guess. Remember to take into account how spacers might change when modifying content inside of a component or pattern.
-
- Responsive design
-
- XD maintains the spacers inside of components and patterns even when used on different screen sizes. Spacers used in complex layouts may change values from large to small breakpoints and vice versa, depending on the screen real estate.
-
-
-
- Calls to action
-
- Some styles have a 2:1 spacing ratio. That ratio never changes, so do not add more spacing to those styles.
-
- Primary and Secondary styles have a 2:1 spacing ratio, meaning the left and right spacing is fixed at 32px and the top and bottom spacing is fixed at 16px.
-
-
-
-
-
- The Brick style has a fixed top and bottom spacing of 16px, but the left and right spacing can stretch to fit a certain amount of grid columns.
-
-
-
-
-
- The Default style needs 8px of spacing between the text and the arrow or icon.
-
-
-
-
-
- Accordion
-
- An Accordion is a good example of how a component uses spacers to maintain a comfortable balance between text, horizontal rules, icons, and backgrounds.
-
-
-
-
-
- Tabs
-
- Tabs is another good example of how a component uses spacers to maintain a comfortable balance between lots of elements that are in close proximity to each other. The area below (or to the right) of the component is a large content area layout and therefore should use a large spacer. For more information about using spacers in Tabs, see this XD document.
-
-
-
-
-
- Cards
-
- Cards are small layouts that use different spacers depending on their size. As Cards increase or decrease in size, they require more or less spacing on the inside or outside.
-
-
-
-
-
-
-
-
-
- Scale
-
-
-
- Breakpoint
- Columns
- Spacer
-
-
- Desktop
- 8 or more
-
-
-
- Desktop
- 3 – 7
-
-
-
- Tablet
- 8 or more
-
-
-
- Tablet
- 3 – 7
-
-
-
- Mobile
- 1 or 2
-
-
-
-
- Other components or patterns
-
- Here’s how spacing is used in other components and patterns.
-
-
-
-
-
-
- Other use cases
-
- If you still have questions about how to use spacers with components, please contact us or create an issue in our GitHub repo.
-
-{%- endcall %}
-
-
-
-
-{% call foundations.section("Layout") -%}
-
- Layouts require large spacers to create white space and disassociate sections from each other.
-
- Applying spacers
-
- Every layout or section on a page needs enough vertical spacing so that content doesn’t feel too close or crushed.
- The top and bottom spacing of a layout is 64px by default, but some layouts feature different spacing depending on hierarchy or importance.
- Some components like Tabs contain a large spacer because there’s a content area layout inside.
-
-
-
-
-
- Responsive design
-
- When layouts reduce in size, the spacers will also reduce in size to compensate for the loss in screen real estate.
-
- In the desktop breakpoint, the gutters in the grid are spaced 30px apart from each other.
-
-
-
-
-
- In the tablet, landscape breakpoint, the gutters in the grid are spaced 24px apart from each other.
-
-
-
-
-
- In the tablet, portrait breakpoint, the gutters in the grid are spaced 18px apart from each other.
-
-
-
-
-
- In the mobile breakpoint, the gutters in the grid are spaced 16px apart from each other.
-
-
-
-
-
-
-
-
-
- Other use cases
-
- If you still have questions about how to use spacers in a layout, please contact us or create an issue in our GitHub repo.
-
-
-{%- endcall %}
-
-
-
-{% call foundations.section("Best practices") -%}
-
- Use existing spacers for horizontal and vertical spacing. If a current spacer doesn’t meet your needs, submit a request for us to establish new spacers.
-
-
-
-
-
- To be as clear as possible, include spacers in your design specs to make it easy for developers to see what spacers you want to use between elements. Note that Adobe XD sometimes won’t produce exact pixel amounts between elements when viewed in Developer specs.
-
-
-
-
-
-{%- endcall %}
-
-{% call foundations.section("Spacers in XD") -%}
-
- All of the components and patterns in the design kit include spacers. Turn on the group named Spacing and you can see how they’re used.
-
-
-
-
-
-{%- endcall %}
-
-{% feedback %}
- Foundations
- To learn how to use our other foundations in your designs, visit the foundations section.
-{% endfeedback %}
diff --git a/docs/foundations/typography.md b/docs/foundations/typography.md
new file mode 100644
index 0000000000..269d4e15dc
--- /dev/null
+++ b/docs/foundations/typography.md
@@ -0,0 +1,525 @@
+---
+layout: layouts/pages/basic.njk
+title: Typography
+order: 50
+hasToc: true
+tags:
+ - foundations
+importElements:
+ - rh-blockquote
+ - rh-table
+---
+{# see XD for reference: https://xd.adobe.com/view/c3387de7-c738-43be-aed2-d631e283dde4-966b #}
+
+
+
+
+
+
+
+
+ ## Overview
+
+ Typography organizes content and creates hierarchies. It brings consistency to experiences and extends the brand presence across web properties.
+
+
+
+
+
+ ## Get started
+
+ To get started using our fonts, visit our GitHub repo.
+
+
+
+
+
+ ## Style
+
+ The Red Hat typeface is a fresh take on the geometric sans genre, taking inspiration from a range of American sans serifs including Tempo and Highway Gothic. These two font families can be used together seamlessly and are available to download here.
+
+
+
+
+
+
+
+ Red Hat Display
+ The Display typeface is low contrast and spaced tightly with a large x-height and open counters.
+
+
+ Red Hat Text
+ The Text typeface has a slightly smaller x-height, a narrower width for better legibility, and thinned joins for a better performance at small sizes.
+
+
+ Red Hat Mono
+ The Mono typeface is our monospaced font that distinguishes code from natural-language text. It should only be used for code snippets or as a stylistic approach for a more technical audience.
+
+
+
+
+
+
+ ## Text options
+
+ ### Headline
+
+ Headlines create various levels of content hierarchies.
+
+
+ Red Hat Enterprise Linux
+ Conquer complexity with Red Hat Enterprise Linux 8
+
+
+ ### Blockquote
+
+ Blockquotes are emphasized blocks of text that include a quote icon and attribution.
+
+
+
+ The moment we have an idea, we can start building the product
+ John Smith
+ Senior Director, Dev Ops, Acme Corporation
+
+
+
+ ### Title
+
+ Titles disclose extra information above headlines or other content.
+
+
+
+ Linux platforms
+ Red Hat Enterprise Linux
+
+
+
+ ### Body copy
+
+ Body copy is a block of text that can include links or lists.
+
+
+
+ We support Red Hat Enterprise Linux on multiple architectures—from IBM Power servers and IBM Z mainframes to Arm microchips that power cloud workloads—so you can choose the right hardware for the right workload. All while using a single OS with a standardized experience.
+
+
+
+ ### Code
+
+ Code is text that features a monospace font that can be used for coding purposes.
+
+
+
+
+for (i = (numElementsReturned - 1); i >= 0; i--) {
+ console.log('Hello World');
+}
+
+
+
+
+ ### Line length
+
+ Headline and body copy line lengths aren’t measured by the number of characters. Instead, all text styles have a minimum width of three grid columns and a maximum width of eight grid columns on all screen sizes.
+
+
+
+
+
+ ## Scale
+
+ The type scale features a range of text sizes and weights created to support the needs of various kinds of content. There’s a type scale for desktop and mobile breakpoints.
+
+ ### Desktop scale
+
+
+
+
+
+ Style
+ Font / weight
+ Size / Line height
+
+
+
+
+ Headline, 2xl
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Headline, xl
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Headline, lg
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Headline, md
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Headline, sm
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Headline, xs
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Blockquote, lg
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Blockquote, sm
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Layout title
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Card title
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Body copy, 2xl
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Body copy, xl
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Body copy, lg
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Body copy, md
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Body copy, sm
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Body copy, xs
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+
+
+
+ ### Mobile scale
+
+ When larger text styles are used on smaller screens, they automatically decrease in size to fit smaller layouts better. The mobile type scale is applied when the Tablet, portrait breakpoint is reached or when a screen becomes less than 768px wide.
+
+
+
+
+
+ Style
+ Font / weight
+ Size / Line height
+
+
+
+
+ Headline, 2xl
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Headline, xl
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Headline, lg
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Headline, md
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Headline, sm
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Headline, xs
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Blockquote, lg
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Blockquote, sm
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Layout title
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Card title
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Body copy, 2xl
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Body copy, xl
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Body copy, lg
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Body copy, md
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Body copy, sm
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+ Body copy, xs
+ --- {# TODO: get correct value for RHDS #}
+ --- {# TODO: get correct value for RHDS #}
+
+
+
+
+
+
+
+
+
+ ## Usage
+
+ Each text style has its own unique hierarchy and application. Text styles can be used in layouts and in components to communicate messages or entice users to take an action.
+
+
+
+ Headline, 2xl
+ The largest headline available. Use in big hero layouts, like Summit or campaign pages. Reserved for marketing use cases only.
+
+
+ Headline, xl
+ The second largest headline available. Use in hero layouts, like the home page or a product page. Reserved for marketing use cases only.
+
+
+ Headline, lg
+ The primary headline for important layouts that aren’t the hero. Try and use only once per page, otherwise use the Headline 2 style.
+
+
+ Headline, md
+ The secondary headline for important layouts that are lower in hierarchy. Use this style multiple times per page.
+
+
+ Headline, sm
+ The tertiary headline for other layouts lower in hierarchy. Use this style in components like a Card or in multiple layouts per page.
+
+
+ Headline, xs
+ The smallest headline available. Use this style under larger headlines or in select components, like an Accordion.
+
+
+ Blockquote, lg
+ The larger style for adding more emphasis to blockquotes. Try not to use this style around other content, otherwise use the Blockquote, sm style.
+
+
+ Blockquote, sm
+ The smaller style for all blockquotes. Use this style around other content or in smaller layouts and components, like a Card.
+
+
+ Layout title
+ The larger style for an important title. Use this style above larger headlines or above important content in any layout.
+
+
+ Card title
+ The smaller style for less important titles. Use this style above headlines in smaller layouts only, like a Card.
+
+
+ Body copy, 2xl
+ The largest body copy style. Use this style for long-form content only, like Topic and Article pages. Text should not exceed 8 columns in width for optimal readability.
+
+
+ Body copy, xl
+ The largest body copy style. Use this style for long-form content only, like Topic and Article pages. Text should not exceed 8 columns in width for optimal readability.
+
+
+ Body copy, lg
+ The base body copy style for marketing use cases only, unless an app interface calls for a larger text size. Text should not exceed 8 columns in width for optimal readability.
+
+
+ Body copy, md
+ The base body copy style for app interfaces or some smaller components, unless a marketing use case calls for a smaller text size. Text should not exceed 7 columns in width for optimal readability.
+
+
+ Body copy, sm
+ The supporting body copy style for all use cases, like under Form fields or for attribution purposes. Text should not exceed 7 columns in width for optimal readability.
+
+
+ Body copy, xs
+ The smallest body copy style for legal or footnote use cases only. Text should not exceed 7 columns in width for optimal readability.
+
+
+
+
+
+
+
+ ## Best practices
+
+ Don't use Red Hat Text for headlines.
+
+
+ Red Hat and open source
+
+
+ Don't use Red Hat Display for body copy.
+
+
+
+ We believe in collaboration. We believe in choice, control, and freedom. Open source values like meritocracy, community building, and transparency are changing the way we approach business and life.
+
+
+
+ Don't space text styles too closely together.
+
+
+ Linux platforms
+ Red Hat Enterprise Linux
+
+
+ Don't stack lots of text styles too closely together.
+
+
+ Headline, xl
+ Headline, lg
+ Headline, min-width
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut suscipit aliquet mauris, in consequat lorem ullamcorper a. Curabitur tempor ante vitae ultrices dignissim.
+
+
+
+
+
+
+ ## Behavior
+
+ ### Responsive design
+
+ Text styles decrease in size when screens become smaller. This shift helps users consume content better without additional scrolling.
+
+ ### Desktop
+
+
+
+
+
+ ### Mobile
+
+
+
+
+
+
+
+
+ ## Interaction states
+
+ Since typography can be used in a variety of components, refer to the specific interaction states that are assigned to each component for more information
+
+
+
+
+ Foundations
+ To learn how to use our other foundations in your designs, visit the foundations section.
+
diff --git a/docs/foundations/typography.njk b/docs/foundations/typography.njk
deleted file mode 100644
index 6ccb543f2c..0000000000
--- a/docs/foundations/typography.njk
+++ /dev/null
@@ -1,451 +0,0 @@
----
-layout: layout-basic.njk
-title: Typography
-order: 5
-tags:
- - foundations
----
-
-
-{% import 'component/foundations.njk' as foundations %}
-
-{% call foundations.section("Overview") -%}
-
- Typography organizes content and creates hierarchies. It brings consistency to experiences and extends the brand presence across web properties.
-
-{%- endcall %}
-
-{# {% call foundations.section("Sample type") -%}
-
- Headline
- Body copy
-
- Call to action
-
-
-{%- endcall %} #}
-
-{% call foundations.section("Get started") -%}
- To get started using our fonts, visit our GitHub repo.
-{%- endcall %}
-
-{% call foundations.section("Style") -%}
- The Red Hat typeface is a fresh take on the geometric sans genre, taking inspiration from a range of American sans serifs including Tempo and Highway Gothic. These two font families can be used together seamlessly and are available to download here.
-
-
-
-
-
- Red Hat Display
- The Display typeface is low contrast and spaced tightly with a large x-height and open counters.
-
-
-
- Red Hat Text
- The Text typeface has a slightly smaller x-height, a narrower width for better legibility, and thinned joins for a better performance at small sizes.
-
-
-
- Red Hat Mono
- The Mono typeface is our monospaced font that distinguishes code from natural-language text. It should only be used for code snippets or as a stylistic approach for a more technical audience.
-
-
-
-{%- endcall %}
-
-{% call foundations.section("Text options") -%}
-
- Headline
- Headlines create various levels of content hierarchies.
-
- {% call foundations.example(palette='lightest') %}
-
- Red Hat Enterprise Linux
- Conquer complexity with Red Hat Enterprise Linux 8
-
- {%- endcall %}
-
- Blockquote
- Blockquotes are emphasized blocks of text that include a quote icon and attribution.
-
- {% call foundations.example(palette='lightest') %}
-
- {%- endcall %}
-
- Title
- Titles disclose extra information above headlines or other content.
-
- {% call foundations.example(palette='lightest') %}
-
- Linux platforms
- Red Hat Enterprise Linux
-
- {%- endcall %}
-
-
- Body copy
- Body copy is a block of text that can include links or lists.
-
- {% call foundations.example(palette='lightest') %}
-
- We support Red Hat Enterprise Linux on multiple architectures—from IBM Power servers and IBM Z mainframes to Arm microchips that power cloud workloads—so you can choose the right hardware for the right workload. All while using a single OS with a standardized experience.
-
- {%- endcall %}
-
- Code
- Code is text that features a monospace font that can be used for coding purposes.
-
- {% call foundations.example(palette='lightest') %}
-
- for (i = (numElementsReturned - 1); i >= 0; i--) {
-
- {%- endcall %}
-
- Line length
- Headline and body copy line lengths aren’t measured by the number of characters. Instead, all text styles have a minimum width of three grid columns and a maximum width of eight grid columns on all screen sizes.
-
-{%- endcall %}
-
-{% call foundations.section("Scale") -%}
-
- The type scale features a range of text sizes and weights created to support the needs of various kinds of content. There’s a type scale for desktop and mobile breakpoints.
-
- Desktop scale
-
-
-
- Style
- Font / weight
- Size / Line height
- PatternFly Elements classname
-
-
- Headline, xxl
- Display, Regular
- 48pt / 58 (1.2)
- .pfe-title--6xl
-
-
- Headline, xl
- Display, Regular
- 40pt / 48 (1.2)
- .pfe-title--5xl
-
-
- Headline, lg
- Display, Medium
- 36pt / 47 (1.3)
- .pfe-title--4xl
-
-
- Headline, md
- Display, Medium
- 28pt / 37 (1.3)
- .pfe-title--3xl
-
-
- Headline, sm
- Display, Medium
- 24pt / 31 (1.3)
- .pfe-title--2xl
-
-
- Headline, xs
- Display, Medium
- 20pt / 30 (1.5)
- .pfe-title--xl
-
-
- Blockquote, lg
- Display, Regular
- 28pt / 37 (1.3)
-
-
-
- Blockquote, sm
- Display, Regular
- 20pt / 30 (1.5)
-
-
-
- Layout title
- Display, Medium (Uppercase)
- 20pt / 30 (1.5)
-
-
-
- Card title
- Text, Regular (Uppercase)
- 16pt / 24 (1.5)
-
-
-
- Body copy, xl
- Text, Regular
- 20pt / 30 (1.5)
- .pfe-text--xl
-
-
- Body copy, lg
- Text, Regular
- 18pt / 27 (1.5)
- .pfe-text--lg
-
-
- Body copy, md
- Text, Regular
- 16pt / 24 (1.5)
- .pfe-text--md
-
-
- Body copy, sm
- Text, Regular
- 14pt / 21 (1.5)
- .pfe-text--sm
-
-
- Body copy, xs
- Text, Regular
- 12pt / 18 (1.5)
- .pfe-text--xs
-
-
-
- Mobile scale
- When larger text styles are used on smaller screens, they automatically decrease in size to fit smaller layouts better. The mobile type scale is applied when the Tablet, portrait breakpoint is reached or when a screen becomes less than 768px wide.
-
-
-
- Style
- Font / weight
- Size / Line height
-
-
- Headline, xxl
- 48pt / 58 (1.2)
- Decreases to 35pt / 42 (1.2)
-
-
- Headline, xl
- 40pt / 48 (1.2)
- Decreases to 29pt / 35 (1.2)
-
-
- Headline, lg
- 36pt / 47 (1.3)
- Decreases to 26pt / 34 (1.3)
-
-
- Headline, md
- 28pt / 37 (1.3)
- Decreases to 24pt / 31 (1.3)
-
-
- Headline, sm
- 24pt / 31 (1.5)
- Decreases to 20pt / 26 (1.3)
-
-
- Headline, xs
- 20pt / 30 (1.5)
- Decreases to 18pt / 27 (1.5)
-
-
- Blockquote, lg
- 28pt / 37 (1.3)
- Decreases to 24pt / 31 (1.3)
-
-
- Blockquote, sm
- 20pt / 30 (1.5)
- Decreases to 18pt / 27 (1.5)
-
-
- Layout title
- 20pt / 30 (1.5)
- Decreases to 18pt / 27 (1.5)
-
-
- Card title
- 16pt / 24 (1.5)
- Stays the same size
-
-
- Body copy, xl
- 20pt / 30 (1.5)
- Decreases to 18pt / 27 (1.5)
-
-
- Body copy, lg
- 18pt / 27 (1.5)
- Decreases to 16pt / 24 (1.5)
-
-
- Body copy, md
- 16pt / 24 (1.5)
- Stays the same size
-
-
- Body copy, sm
- 14pt / 21 (1.5)
- Stays the same size
-
-
- Body copy, xs
- 12pt / 18 (1.5)
- Stays the same size
-
-
-
-{%- endcall %}
-
-{% call foundations.section("Usage") -%}
-
- Each text style has its own unique hierarchy and application. Text styles can be used in layouts and in components to communicate messages or entice users to take an action.
-
-
-
- Headline, xxl
- The largest headline available. Use in big hero layouts, like Summit or campaign pages. Reserved for marketing use cases only.
-
-
-
- Headline, xl
- The second largest headline available. Use in hero layouts, like the home page or a product page. Reserved for marketing use cases only.
-
-
- Headline, lg
- The primary headline for important layouts that aren’t the hero. Try and use only once per page, otherwise use the Headline 2 style.
-
-
-
- Headline, md
- The secondary headline for important layouts that are lower in hierarchy. Use this style multiple times per page.
-
-
-
- Headline, sm
- The tertiary headline for other layouts lower in hierarchy. Use this style in components like a Card or in multiple layouts per page.
-
-
-
- Headline, xs
- The smallest headline available. Use this style under larger headlines or in select components, like an Accordion.
-
-
- Blockquote, lg
- The larger style for adding more emphasis to blockquotes. Try not to use this style around other content, otherwise use the Blockquote, sm style.
-
-
-
- Blockquote, sm
- The smaller style for all blockquotes. Use this style around other content or in smaller layouts and components, like a Card.
-
-
-
- Layout title
- The larger style for an important title. Use this style above larger headlines or above important content in any layout.
-
-
-
- Card title
- The smaller style for less important titles. Use this style above headlines in smaller layouts only, like a Card.
-
-
-
- Body copy, xl
- The largest body copy style. Use this style for long-form content only, like Topic and Article pages. Text should not exceed 8 columns in width for optimal readability.
-
-
-
- Body copy, lg
- The base body copy style for marketing use cases only, unless an app interface calls for a larger text size. Text should not exceed 8 columns in width for optimal readability.
-
-
-
- Body copy, md
- The base body copy style for app interfaces or some smaller components, unless a marketing use case calls for a smaller text size. Text should not exceed 7 columns in width for optimal readability.
-
-
-
- Body copy, sm
- The supporting body copy style for all use cases, like under Form fields or for attribution purposes. Text should not exceed 7 columns in width for optimal readability.
-
-
-
- Body copy, xs
- The smallest body copy style for legal or footnote use cases only. Text should not exceed 7 columns in width for optimal readability.
-
-
-
-{%- endcall %}
-
-{% call foundations.section("Best practices") -%}
-
- Don't use Red Hat Text for headlines.
-
- {% call foundations.example(palette='wrong') %}
-
- Red Hat and open source
-
- {%- endcall %}
-
- Don't use Red Hat Display for body copy.
-
- {% call foundations.example(palette='wrong') %}
-
- We believe in collaboration. We believe in choice, control, and freedom. Open source values like meritocracy, community building, and transparency are changing the way we approach business and life.
-
- {%- endcall %}
-
- Don't space text styles too closely together.
- {% call foundations.example(palette='wrong') %}
-
- Linux platforms
- Red Hat Enterprise Linux
-
- {%- endcall %}
-
- Don't stack lots of text styles too closely together.
- {% call foundations.example(palette='wrong') %}
-
- Headline, xxl
- Headline, md
- Headline, xs
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut suscipit aliquet mauris, in consequat lorem ullamcorper a. Curabitur tempor ante vitae ultrices dignissim.
-
- {%- endcall %}
-
-{%- endcall %}
-
-{% call foundations.section("Behavior") -%}
-
- Responsive design
-
- Text styles decrease in size when screens become smaller. This shift helps users consume content better without additional scrolling.
-
- Desktop
- {% call foundations.example(palette='light') %}
-
-
-
- {%- endcall %}
-
- Mobile
- {% call foundations.example(palette='light') %}
-
-
-
- {%- endcall %}
-{%- endcall %}
-
-{% call foundations.section("Interaction states") -%}
-
- Since typography can be used in a variety of components, refer to the specific interaction states that are assigned to each component for more information
-
-{%- endcall %}
-
-{% feedback %}
- Foundations
- To learn how to use our other foundations in your designs, visit the foundations section.
-{% endfeedback %}
diff --git a/docs/get-started.md b/docs/get-started.md
deleted file mode 100644
index 9eb0f0f817..0000000000
--- a/docs/get-started.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-layout: layout-basic.njk
-title: Overview
-order: 0
----
-
-
-
-## Get started
-
-The Red Hat Design System for digital experiences gives designers and developers the tools to create accessible and on-brand user interfaces quickly. The role-specific pages linked below will guide you through using the design system.
-
-
-
-{% feedback %}
- Release notes
- To see what foundations, tokens, elements, or patterns have been released recently, check out our release notes.
-{% endfeedback %}
diff --git a/docs/get-started/designers.md b/docs/get-started/designers.md
index be53c9d084..5e3a79b4a2 100644
--- a/docs/get-started/designers.md
+++ b/docs/get-started/designers.md
@@ -1,13 +1,54 @@
---
-layout: layout-basic.njk
+layout: layouts/pages/basic.njk
title: Designers
-heading: Designers
-order: 2
+order: 10
+hasToc: true
tags:
- getstarted
-bodyClasses: element-docs
+importElements:
+ - rh-alert
+ - rh-table
---
+
+
+
+
## Introduction
Welcome to the **Red Hat Design System** (RHDS) for digital experiences. If you need to design something using our design system, you have come to the right place.
@@ -19,40 +60,40 @@ Follow these steps to get started and e-mail [design-system@redhat.com](mailto:d
Our [Brand standards](https://www.redhat.com/en/about/brand/standards) are the source code of the Red Hat brand. Using brand standards as the starting point for every project ensures that every interaction with Red Hat reflects our brand personality, brand strategy, and consistent visual language. Consistency is how we create authentic relationships and credibility with our customers, partners, and contributors.
-{% example palette="none",
- alt="The text 'Brand Standards' with small illustrations of color swatches, dropdown element, and resizing an icon",
- src="/assets/get-started/designers/brand-standards.png" %}
+
+
+
## Learn about our design system
Our design system libraries and the documentation website offer assets and guidance needed to create digital experiences. Please read through each section to have a better understanding of how to use our design system.
-
-
- Foundations
- Foundations are how we express our brand through color, space, typography, etc.
-
-
- Design tokens
- Design tokens are how we translate our design language decisions into code.
-
-
- Elements and patterns
- Our libraries include elements and patterns you can use to create digital experiences.
-
-
- Accessibility
- Designer-specific guidelines equip you with the information to create inclusive digital experiences.
-
+
+
+ Foundations
+ Foundations are how we express our brand through color, space, typography, etc.
+
+
+ Design tokens
+ Design tokens are how we translate our design language decisions into code.
+
+
+ Elements and patterns
+ Our libraries include elements and patterns you can use to create digital experiences.
+
+
+ Accessibility
+ Designer-specific guidelines equip you with the information to create inclusive digital experiences.
+
## Access Figma
You need a Figma license to access our libraries. When you are granted a license, use your Red Hat e-mail address to log in to Figma via SSO authentication. When you are logged in, you should be able to access our libraries and add them to all of your [drafts](https://help.figma.com/hc/en-us/articles/360038743434-Manage-libraries-for-your-drafts) or [individual files](https://help.figma.com/hc/en-us/articles/1500008731201-Manage-libraries-in-design-files).
-{% example palette="light-compact",
- alt="Figma's Libraries modal showing the Red Hat Design System library is added'",
- src="/assets/get-started/designers/access-figma-libraries.png" %}
+
+
+
### Agency access
@@ -62,22 +103,48 @@ If you work with an agency and do not have a Red Hat e-mail address, e-mail [des
Our libraries are built and maintained in Figma, our primary design tool. By using our libraries, you will automatically receive notifications as we make updates to our foundational styles, elements, and patterns (as long as you do not detach them). This ensures that your designs are current and representative of the latest design system release.
-{% alert title="Warning",
- state="warning" %}
-We no longer support Adobe XD. You need to migrate to Figma in order to access and use our most up-to-date libraries. Do not continue to use Adobe XD for any kind of design work. If you need assistance migrating XD files to Figma, e-mail [design-system@redhat.com](mailto:design-system@redhat.com).
-{% endalert %}
+
+
+ Warning
+ We no longer support Adobe XD. You need to migrate to Figma in order to access and use our most up-to-date libraries. Do not continue to use Adobe XD for any kind of design work. If you need assistance migrating XD files to Figma, e-mail mailto:design-system@redhat.com.
+
### Core and subsystem libraries
The RHDS library is our core library that includes our foundational styles, elements, and patterns needed to create digital experiences. We also offer access to subsystem libraries that include project- or team- specific patterns that pull from the RHDS library.
-| Library name | Use case |
-| ------------ | -------- |
-| RHDS | Our core library for creating Red Hat digital experiences. |
-| PatternFly | A library for creating application interfaces. |
-| Tier 1 Events | A library for tier 1 events, like Summit and AnsibleFest. |
-| Brand media | A library for Red Hat original media like podcasts and video series. |
-| Page builder | A library with a boilerplate template and components specific to Drupal's page builder. |
+
+
+
+
+ Library name
+ Use case
+
+
+
+
+ RHDS
+ Our core library for creating Red Hat digital experiences
+
+
+ PatternFly
+ A library for creating application interfaces
+
+
+ Tier 1 Events
+ A library for tier 1 events, like Summit and AnsibleFest
+
+
+ Brand media
+ A library for Red Hat original media like podcasts and video series
+
+
+ Page builder
+ A library with a boilerplate template and components specific to Drupal's page builder
+
+
+
+
## Work in Figma
@@ -89,39 +156,43 @@ If your project requires brand assets, the [Brand standards](https://www.redhat.
To use an element or pattern in your design, select the **Assets** tab. Find your desired asset and drag it onto the canvas or frame. You can also preview an asset by selecting it. When you are satisfied with the preview, select the **Insert instance** button and the asset will appear on the canvas or frame. If you have questions about how to use an element or pattern correctly, review the documentation or connect with us on Slack.
-{% example palette="light-compact",
- alt="Figma's asset preview dialog box for a card component with an 'Insert instance' button",
- src="/assets/get-started/designers/figma-inserting-elements-patterns.png" %}
+
+
+
### Properties
Properties are changeable aspects of an element or pattern and you can see them in the right sidebar when the asset is selected. Properties change the appearance of an element or pattern so they can be used for different use cases. Some examples of properties include state, theme, variant, etc.
-{% example palette="light",
- alt="Diagram showing a blue primary button being changed to a destroy button with Figma's properties selector",
- src="/assets/get-started/designers/figma-properties.png" %}
+
+
+
### Responsive resize
Most elements and patterns can be resized to fit different viewport sizes. You can change the height or width of an asset by dragging an edge or corner.
-{% example palette="light",
- alt="Screenshot of a progress steps element being resized by dragging the bottom right corner",
- src="/assets/get-started/designers/figma-responsive-resize-drag.png" %}
+
+
+
You can also use [Constraints](https://help.figma.com/hc/en-us/articles/360039957734-Apply-constraints-to-define-how-layers-resize) to tell Figma how layers should respond when their frames are resized.
-{% example palette="light",
- alt="Screenshot of a selected progress steps element next to Figma's constraints settings",
- src="/assets/get-started/designers/figma-responsive-resize-constraints.png" %}
+
+
+
### Instance swap
To speed up your design process, you can swap elements or patterns instead of dragging and dropping over and over again. Use the **Instance** menu to swap one element for another from any enabled library. Changing a property will not replace an element, but instance swapping will.
-{% example palette="light",
- alt="Diagram of a primary CTA being changed to a secondary CTA via the instance swap panel",
- src="/assets/get-started/designers/figma-instance-swap.png" %}
+
+
+
## Get familiar with GitHub
@@ -129,9 +200,10 @@ GitHub is how we maintain the design system. We also use it to track changes, up
The [GitHub Wiki](https://github.com/RedHat-UX/red-hat-design-system/wiki) can help you get started, and you can always chat with us for additional help.
-{% example palette="none",
- alt="Screenshot of the red-hat-design-system GitHub repo's Code tab",
- src="/assets/get-started/designers/get-familiar-with-github.png" %}
+
+
+
## Best practices
@@ -139,79 +211,75 @@ The [GitHub Wiki](https://github.com/RedHat-UX/red-hat-design-system/wiki) can h
Currently, you **cannot** add new items to an element or pattern instance that you pull from a library. You need to detach it if you want to add new assets, more slots, etc. If you believe that an element or pattern in any library needs more slots for new items, [create an issue](https://github.com/RedHat-UX/red-hat-design-system/issues/new/choose) and we will try and prioritize building them in.
-{% alert title="Warning",
- state="warning" %}
-Detached instances will not receive style or other updates from any of the libraries if that element or pattern is updated.
-{% endalert %}
-{% example palette="light",
- alt="Comparison of a linked and a detached accordion with their layers panel below",
- src="/assets/get-started/designers/best-practices-detach-instance.png" %}
+
+ Warning
+ Detached instances will not receive style or other updates from any of the libraries if that element or pattern is updated.
+
+
+
+
+
### Alignment resources
Use these resources to help you stay aligned to our brand and design system while working.
- - Brand standards
- - Foundations, elements, and patterns
- - Reference existing pages so you can see how brand and design system assets are being used
-
+ - Brand standards
+ - Foundations, elements, and patterns
+ - Reference existing pages so you can see how brand and design system assets are being used
+
## Frequently asked questions
-
- How can I get better at Figma?
-
- Check out these resources if you want to improve your Figma skills.
-
-
-
- - YouTube channels like Figma and UI Collective have lots of free videos
- - The Figma Resource Library has helpful content
- - If all else fails, find answers in the Figma Help Center
-
-
-
-
-
- How do foundational styles, elements, and patterns get updated?
-
- The design system team meets regularly to discuss work in progress and new issues. Updates are assigned a priority in our GitHub backlog. Once a priority is set and a schedule is agreed upon, design or development work begins. When the work is completed, the Figma libraries, documentation website, and repos are all updated. All updates are tracked in our changelog and listed on the Release notes page. Larger updates are sometimes communicated via a quarterly newsletter e-mail.
-
-
-
-
-
- What if an element or pattern I need is missing?
-
- If you think something is missing or you cannot find something, connect with us on Slack or create a discussion.
-
-
-
-
-
- How can I contribute an idea?
-
- If you have feedback or you would like to contribute an idea, create a discussion.
-
-
-
+
+
+ How can I get better at Figma?
+
+
+ Check out these resources if you want to improve your Figma skills.
+
+ - YouTube channels like Figma and UI Collective have lots of free videos
+ - The Figma Resource Library has helpful content
+ - If all else fails, find answers in the Figma Help Center
+
+
+
+ How do foundational styles, elements, and patterns get updated?
+
+
+ The design system team meets regularly to discuss work in progress and new issues. Updates are assigned a priority in our GitHub backlog. Once a priority is set and a schedule is agreed upon, design or development work begins. When the work is completed, the Figma libraries, documentation website, and repos are all updated. All updates are tracked in our changelog and listed on the Release notes page. Larger updates are sometimes communicated via a quarterly newsletter e-mail.
+
+
+ What if an element or pattern I need is missing?
+
+
+ If you think something is missing or you cannot find something, connect with us on Slack or create a discussion.
+
+
+ How can I contribute an idea?
+
+
+ If you have feedback or you would like to contribute an idea, create a discussion
+
+
+ How can I report a bug?
+
+
+ If you find a bug, create an issue and describe it as thoroughly as possible. If something is broken, e-mail design-system@redhat.com or connect with us on Slack and we will investigate.
+
+
-
- How can I report a bug?
-
- If you find a bug, create an issue and describe it as thoroughly as possible. If something is broken, e-mail
- design-system@redhat.com or connect with us on Slack and we will investigate.
-
## Roadmap
@@ -228,8 +296,8 @@ For questions, additional support, or training, e-mail [design-system@redhat.com
- [RHa11y Resource Hub](https://github.com/hellogreg/rha11y-tools)
-{% feedback %}
+
Developers
To get started using our design system as a developer, go to the Developers page.
-{% endfeedback %}
+
diff --git a/docs/get-started/developers/index.md b/docs/get-started/developers/index.md
index d25fdc1ec7..6f5705a84e 100644
--- a/docs/get-started/developers/index.md
+++ b/docs/get-started/developers/index.md
@@ -1,52 +1,57 @@
---
-layout: layout-with-subnav.njk
+layout: layouts/pages/basic.njk
title: Overview
heading: Developers
+sidenavTitle: Developers
tags:
- getstarted
- developers
permalink: /get-started/developers/index.html
-subNavCollection: sortedDevelopers
-order: 00
-bodyClasses: element-docs
+subnav:
+ collection: sortedDevelopers
+ order: 00
+order: 20
---
+
## Introduction
Welcome to the **Red Hat Design System** (RHDS) for digital experiences. If you need to develop something using our design system, you have come to the right place.
Read this section to get started and e-mail [design-system@redhat.com](mailto:design-system@redhat.com) or connect with us on Slack if you have any questions along the way.
+
## Learn about our design system
Our design system libraries and the documentation website offer assets and guidance needed to create digital experiences. Please use these resources to have a better understanding of how to use our design system.
-
-
- Foundations
- Foundations are how we express our brand through color, space, typography, etc.
-
-
- Design tokens
- Design tokens are how we translate our design language decisions into code.
-
-
- Documentation
- This website offers guidance about how to use our elements and patterns. Learn how to apply them accessibily with developer-specific guidelines.
-
-
- GitHub repositories
- Explore our code, roadmaps, and discussions in the Red Hat Design System repo and the Red Hat Design Tokens repo.
-
+
+
+ Foundations
+ Foundations are how we express our brand through color, space, typography, etc.
+
+
+ Design tokens
+ Design tokens are how we translate our design language decisions into code.
+
+
+ Documentation
+ This website offers guidance about how to use our elements and patterns. Learn how to apply them accessibily with developer-specific guidelines.
+
+
+ GitHub repositories
+ Explore our code, roadmaps, and discussions in the Red Hat Design System repo and the Red Hat Design Tokens repo.
+
+
## About web components
Web components are based on a set of web platform APIs that help to create reusable and encapsulated UI elements. Those standards consist of custom elements, shadow DOM, and HTML Templates.
Because they're able to work with any framework that supports HTML, web components can be used without having to rework all of your code and are less likely to be affected by changes in preferred web stacks. Encapsulation within the shadow DOM prevents a page's code from breaking a component's style and allows for a scalable design system.
-{% feedback %}
+
Designers
To get started using our design system as a designer, go to the Designers page.
-{% endfeedback %}
\ No newline at end of file
+
diff --git a/docs/get-started/developers/installation.md b/docs/get-started/developers/installation.md
index e4d6db4240..62ae4fc365 100644
--- a/docs/get-started/developers/installation.md
+++ b/docs/get-started/developers/installation.md
@@ -1,25 +1,26 @@
---
-layout: layout-with-subnav.njk
+layout: layouts/pages/basic.njk
title: Installation
heading: Developers
tags:
- developers
permalink: /get-started/developers/installation/index.html
-subNavCollection: sortedDevelopers
-order: 10
-bodyClasses: element-docs
+subnav:
+ collection: sortedDevelopers
+ order: 10
---
## How to install
There are three ways you can install the Red Hat Design System's web components: CDN, NPM, or JSPM. Each element's "Code" page includes the same installation information with code snippets that are specific to that element.
+
### Red Hat CDN
-{% alert title="CDN Prerelease",
- state="warning" %}
-We are currently working on our CDN, which will be soon moving into beta. This will be the preferred method of installation in the near future. If you are a Red Hat associate and have questions or comments about the CDN or installation process please connect with us on Slack.
-{% endalert %}
+
+ CDN Prerelease
+ We are currently working on our CDN, which will be soon moving into beta. This will be the preferred method of installation in the near future. If you are a Red Hat associate and have questions or comments about the CDN or installation process please connect with us on Slack.
+
The recommended way to load RHDS is via the Red Hat Digital Experience CDN, and using an [import map](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type/importmap).
@@ -50,6 +51,7 @@ Once the import map is established, you can load the element with the following
Note that modules may be placed in the ``. Since they are deferred by default, they will not block rendering.
+
### NPM
Install RHDS using your team's preferred NPM package manager.
@@ -67,12 +69,13 @@ Once that's been accomplished, you will need to use a bundler to resolve the bar
- [Parcel](https://parceljs.org/)
- [Webpack](https://webpack.js.org/)
+
### JSPM
-{% alert title="Public CDNs",
- state="warning" %}
-JSPM and other public CDNs should not be used on corporate domains. Use them for development purposes only!
-{% endalert %}
+
+ Public CDNs
+ JSPM and other public CDNs should not be used on corporate domains. Use them for development purposes only!
+
Add an [import map](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type/importmap) to the ``, pointing to the CDN, or update any existing import map.
@@ -101,7 +104,7 @@ Once the import map is established, you can load the element with the following
Note that Modules may be placed in the ``. Since they are deferred by default, they will not block rendering.
-{% feedback %}
+
Designers
To get started using our design system as a designer, go to the Designers page.
-{% endfeedback %}
\ No newline at end of file
+
diff --git a/docs/get-started/developers/tokens.md b/docs/get-started/developers/tokens.md
index 9b0a9970c2..c384f8e4dd 100644
--- a/docs/get-started/developers/tokens.md
+++ b/docs/get-started/developers/tokens.md
@@ -1,13 +1,13 @@
---
-layout: layout-with-subnav.njk
+layout: layouts/pages/basic.njk
title: Tokens
heading: Developers
tags:
- developers
permalink: /get-started/developers/tokens/index.html
-subNavCollection: sortedDevelopers
-order: 30
-bodyClasses: element-docs
+subnav:
+ collection: sortedDevelopers
+ order: 30
---
## How to install tokens
@@ -20,10 +20,12 @@ Run the following git command to install RHDS tokens:
+
## Usage
We use [style-dictionary](https://amzn.github.io/style-dictionary/) to transform our tokens into multiple formats and helpers.
+
### Import global CSS
Apply defaults to the document root by importing the global stylesheet:
@@ -39,6 +41,7 @@ Apply defaults to the document root by importing the global stylesheet:
+
### Reset the shadowroot
Reset a component's styles (preventing inheritance) by adding resetStyles to its static Constructible Style Sheet list:
@@ -57,11 +60,13 @@ Reset a component's styles (preventing inheritance) by adding resetStyles to its
+
### Import tokens as JavaScript objects
-{% alert title="Note", state="info" %}
-We strongly recommend using CSS variables (and accompanying snippets), instead of importing tokens as JavaScript objects.
-{% endalert %}
+
+ Note
+ We strongly recommend using CSS variables (and accompanying snippets), instead of importing tokens as JavaScript objects.
+
Import tokens as JavaScript objects:
@@ -87,6 +92,7 @@ or for tree-shakable imports:
+
## Plugins
### Using editor snippets
@@ -101,10 +107,12 @@ Editor snippets complete prefixes like `--rh-color-brand` to their CSS custom pr
They also provide reverse lookup. For example, if you want to choose between all the tokens with the value `#e00`, you can do so by completing the prefix `e00`.
+
#### Load snippets in VSCode
Download the VSIX bundle that’s linked at the bottom of our [“Release v1.0.0”](https://github.com/RedHat-UX/red-hat-design-tokens/releases/tag/v1.0.0) page.
+
#### Load snippets in Neovim
Use LuaSnip to load snippets in Neovim:
@@ -118,16 +126,19 @@ Use LuaSnip to load snippets in Neovim:
+
### Stylelint plugin
Install the stylelint plugin to automatically correct token values in your files.
See the [Stylelint Plugin README](https://github.com/RedHat-UX/red-hat-design-tokens/blob/main/plugins/stylelint/README.md) for more info.
+
### 11ty plugin
The experimental 11ty plugin lets you display token values in an 11ty site.
+
### vim-hexokinase
Vim users can load the [vim-hexokinase](https://github.com/RRethy/vim-hexokinase) plugin to display color swatches next to their encoded values in their editor.
@@ -159,7 +170,7 @@ Use the following config (lua syntax, for Neovim users) to configure hexokinase
-{% feedback %}
+
Designers
To get started using our design system as a designer, go to the Designers page.
-{% endfeedback %}
\ No newline at end of file
+
diff --git a/docs/get-started/developers/usage.md b/docs/get-started/developers/usage.md
index b571d486fc..4e5dfa25d2 100644
--- a/docs/get-started/developers/usage.md
+++ b/docs/get-started/developers/usage.md
@@ -1,23 +1,27 @@
---
-layout: layout-with-subnav.njk
+layout: layouts/pages/basic.njk
title: Usage
heading: Developers
tags:
- developers
permalink: /get-started/developers/usage/index.html
-subNavCollection: sortedDevelopers
-order: 20
-bodyClasses: element-docs
+subnav:
+ collection: sortedDevelopers
+ order: 20
+importElements:
+ - rh-code-block
---
## Usage
Now that you've installed the Red Hat Design System, here's more information about how to use the web components.
+
### Using react wrappers
React wrappers make it possible to use web components within React JSX files. Follow the steps below to learn how.
+
#### 1. Initial setup
We'll bootstrap our React app using Vite. It's possible to use other tools for this, but that is out of the scope of this tutorial.
@@ -30,6 +34,7 @@ We'll bootstrap our React app using Designers page.
-{% endfeedback %}
+
diff --git a/docs/get-started/index.md b/docs/get-started/index.md
new file mode 100644
index 0000000000..f4cbc1fb92
--- /dev/null
+++ b/docs/get-started/index.md
@@ -0,0 +1,46 @@
+---
+layout: layouts/pages/basic.njk
+title: Overview
+order: 00
+tags:
+ - getstarted
+importElements:
+ - rh-tile
+---
+
+
+
+
+
+## Get started
+
+The Red Hat Design System for digital experiences gives designers and developers the tools to create accessible and on-brand user interfaces quickly. The role-specific pages linked below will guide you through using the design system.
+
+
+
+
+ Release notes
+ To see what foundations, tokens, elements, or patterns have been released recently, check out our release notes.
+
diff --git a/docs/index.njk b/docs/index.njk
index b0e842d73e..1819e58fb9 100644
--- a/docs/index.njk
+++ b/docs/index.njk
@@ -1,104 +1,91 @@
---
-layout: layout-home.njk
+layout: layouts/pages/home.njk
title: Home
+
+importElements:
+ - rh-card
---
+
-
-
-
- Red Hat design system
- Open source meets open design
-
-
-
+
-
- Designing Red Hat digital experiences?
- You are at the right place. We rely on this design system to create consistent Red Hat® digital experiences. Using Red Hat brand standards and PatternFly as our foundational design language, we enable designers and developers to concurrently build branded experiences across redhat.com, Red Hat Customer Portal, and beyond.
-
- Learn more
-
-
-
- Designing Red Hat products? Visit PatternFly
-
-
-
-
-
- Get started
- Principles and documentation to help you start creating Red Hat digital experiences
-
+
+
+ Red Hat design system
+ Open source meets open design
+
+
-
-
-
-
-
-
-
- Foundations
- Design principles to help you create engaging layouts
-
- View foundations
+
+ Designing Red Hat digital experiences?
+ You are at the right place. We rely on this design system to create consistent Red Hat® digital experiences. Using Red Hat brand standards and PatternFly as our foundational design language, we enable designers and developers to concurrently build branded experiences across redhat.com, Red Hat Customer Portal, and beyond.
+
+ Learn more about the design system
+
+
+ Designing Red Hat products? Visit PatternFly
-
+
-
-
-
-
-
-
- Elements
- Guidance to help you create interactive user interfaces
-
- View elements
-
-
+
+ Get started
+ Principles and documentation to help you start creating Red Hat digital experiences
-
+
+
+
+
+
+ Foundations
+ Design principles to help you create engaging layouts
+
+ Foundations
+
+
+
+
+
+
+
+ Elements
+ Guidance to help you create interactive user interfaces
+
+ Elements
+
+
-
-
-
+
+
+
+
+ Code status
+ Track the status of our components and patterns
+
+ Code status
+
+
-
+
+
+
+
+ Release notes
+ Track the updates we're making to the design system
+
+ Release notes
+
+
+
+
-
-
- Contribute
+
+ Contribute
We welcome feedback in order to produce the best experiences for our users
-
-
-
-
-
+
Join the discussion
-
-
+
+
+
diff --git a/docs/main.css b/docs/main.css
deleted file mode 100644
index 3efae5551d..0000000000
--- a/docs/main.css
+++ /dev/null
@@ -1,679 +0,0 @@
-:root {
- --pf-theme--font-family: "Red Hat Text", "Overpass", helvetica, arial, sans-serif;
- --pf-theme--font-family--heading: "Red Hat Display", "Overpass", helvetica, arial, sans-serif;
- --pf-theme--color--ui-accent: #ee0000;
- --pf-navigation--Height--actual: 60px;
-}
-
-html,
-body {
- margin: 0;
- font-family: "Red Hat Text", sans-serif;
- font-size: 1em;
- line-height: 1.5;
- -webkit-font-smoothing: antialiased;
-}
-
-body,
-main.basic,
-main.blog {
- /* Ensures the footer stays at the bottom */
- display: flex;
- flex-direction: column;
- min-height: 100vh;
-}
-
-*,
-*:before,
-*:after {
- box-sizing: border-box;
-}
-
-summary :is(h1, h2, h3, h4, h5, h6) {
- margin: 0;
- display: inline-block;
-}
-
-h1,
-h2,
-h3,
-p.subtitle {
- font-weight: 400;
- font-family: "Red Hat Display", sans-serif;
-}
-
-h1 {
- font-size: 2rem;
-}
-
-h3,
-p.subtitle {
- margin-top: 0.83em;
- font-weight: 500;
-}
-
-p.subtitle {
- font-size: 1.17em;
-}
-
-strong {
- font-weight: bold;
-}
-
-main.basic,
-main.blog {
- margin-top: 3.75rem;
- margin-bottom: 3.75rem;
- flex-grow: 1;
-}
-
-#home-title img {
- width: 6rem;
- display: block;
- margin: auto;
-}
-
-.tagline {
- font-size: 18px;
-}
-
-.header-ctas {
- display: flex;
- justify-content: center;
- align-items: center;
- flex-direction: column;
-}
-
-.header-ctas rh-cta:first-child {
- margin-bottom: 16px;
-}
-
-.header-ctas rh-cta a {
- min-width: 250px;
-}
-
-.framework-logos img {
- width: 125px;
- margin: 8px;
-}
-
-.framework-logos img.react-logo {
- width: 200px;
-}
-
-.logo-bar {
- --pf-navigation--Height--actual: 60px;
-
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- display: flex;
- align-items: center;
- height: 3.75rem;
- padding: var(--pf-theme--container-spacer, 16px);
- color: white;
- background: var(--pf-navigation--BackgroundColor, var(--pf-theme--color--surface--darkest, #151515));
- z-index: 200;
-}
-
-.logo-bar a {
- display: flex;
- align-items: center;
- color: white;
- text-decoration: none;
- font-size: 1.25rem;
- font-weight: bold;
- margin-left: calc(1.5rem + 16px);
- gap: 8px;
-}
-
-.logo-bar a img {
- display: none;
-}
-
-.component-preview {
- margin-bottom: 64px !important;
-}
-
-.component-preview--container {
- position: relative;
-}
-
-.component-preview h3 {
- margin-bottom: 0;
-}
-
-.component-preview:hover .overlay {
- display: flex;
-}
-
-.overlay {
- display: none;
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background-color: #eeeeeecc;
-
- /* display: flex; */
- flex-direction: column;
- justify-content: flex-end;
- align-items: center;
-}
-
-.overlay > rh-cta,
-.overlay > a {
- margin-bottom: 16px;
-}
-
-.overlay > rh-cta[variant="wind"] {
- background-color: white;
-}
-
-.preview-image {
- height: 250px;
- background-size: 90%;
- background-repeat: no-repeat;
- background-position: center;
- border: 1px solid #d2d2d2;
- border-radius: 3px;
-}
-
-.element-invisible {
- position: absolute;
- width: 0.0625rem;
- height: 0.0625rem;
- padding: 0;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- clip-path: inset(50%);
- border: 0;
- grid-gap: 1rem;
-}
-
-#main-header .mobile-menu-toggle,
-#mobile-menu-toggle {
- position: fixed;
- top: 0;
- left: 0;
-
- @media (min-width: 820px) {
- display: none;
- }
-}
-
-#main-header .mobile-menu-toggle {
- width: 1.5rem;
- height: 3.75rem;
- margin-right: 16px;
- color: #ffffff;
- z-index: 200;
- position: fixed;
- top: 0;
- left: 16px;
-}
-
-& .burger-icon {
- display: block;
- position: absolute;
- top: 50%;
- left: calc(50% - 0.75rem);
- transform: scale(0.25);
- transform-origin: left top;
-
- &:before,
- &:after {
- content: "";
- position: absolute;
- top: 0;
- left: 0;
- box-sizing: border-box;
- display: block;
- width: 6rem;
- }
-
- &:before {
- height: 0;
- border-top: 0.5rem solid #ffffff;
- background: #ffffff;
- transform: translateY(-2rem);
- transform-origin: left top;
- transition: transform 0.3s cubic-bezier(0.55, 0.085, 0, 0.99);
- }
-
- &:after {
- height: 2.5rem;
- border: 0.5rem solid #ffffff;
- border-width: 0.5rem 0;
- transition: border 0.3s cubic-bezier(0.55, 0.085, 0, 0.99), transform 0.3s cubic-bezier(0.55, 0.085, 0, 0.99);
- transform-origin: left bottom;
- }
-}
-
-.menu-toggle-button {
- display: block;
- cursor: pointer;
- border: 0;
- overflow: hidden;
- background: transparent;
- appearance: none;
- user-select: none;
-}
-
-.site-navigation-outer-wrapper {
- position: fixed;
- top: 3.75rem;
- left: 0;
- z-index: 10;
- height: calc(100vh - 3.75rem);
-}
-
-.site-navigation {
- width: 17.5rem;
- padding-top: 1.875rem;
- height: calc(100vh - 3.75rem);
- overflow-y: auto;
- color: #151515;
- background: #ffffff;
- border-right: 0.0625rem solid #d2d2d2;
-
- @media (min-width: 820px) {
- visibility: visible;
- padding-bottom: 1.875rem;
- }
-
- & .sub-menu,
- & .wrapper {
- margin: 0;
- padding: 0;
- list-style: none;
- }
-
- & .item {
- line-height: 2.25rem;
- }
-
- & .heading,
- & .link,
- & .sub-menu.link {
- display: block;
- text-decoration: none;
- transition: background-color 0.25s;
- font-size: 1.125rem;
- padding: 0.5em 2rem;
- color: #151515;
- }
-
- & details > summary::-webkit-details-marker {
- display: none;
- }
-
- & summary {
- cursor: pointer;
- }
-
- & .heading:after {
- content: "";
- color: #151515;
- width: 0.5625rem;
- height: 0.5625rem;
- transform: rotate(45deg);
- border-right: 0.1875rem solid #151515;
- border-top: 0.1875rem solid #151515;
- display: flex;
- float: right;
- top: 0.8125rem;
- position: relative;
- }
-
- & details[open] .heading:after {
- transform: rotate(135deg);
- }
-
- & .sub-menu {
- padding-left: 2rem;
-
- & .link {
- font-size: 1rem;
- line-height: 1.5rem;
- padding-left: 1rem;
-
- &.active {
- background: #f5f5f5;
- box-shadow: inset 0.1875rem 0 0 0 var(--pf-theme--color--surface--accent, #004080);
- color: #151515;
- }
- }
- }
-
- & .heading:focus,
- & .heading:hover,
- & .link:focus,
- & .link:hover,
- & .sub-menu .link:focus,
- & .sub-menu .link:hover {
- color: #151515;
- background: #f5f5f5;
- box-shadow: inset 0.1875rem 0 0 0 #d2d2d2;
- }
-}
-
-.menu-toggle-toggleable {
- visibility: hidden;
- transition: visibility 0s 0.4s, width 0.25s ease-in-out;
- width: 0;
- overflow: hidden;
- background: #ffffff;
-
- #mobile-menu-toggle:checked ~ & {
- visibility: visible;
- transition: visibility 0s 0s, width 0.25s ease-in-out;
- width: 17.5rem;
- }
-}
-
-.faux-band {
- padding: 16px;
-}
-
-.color-preview {
- display: inline-block;
- width: 1em;
- height: 1em;
- vertical-align: middle;
- background-color: var(--bg, #ffffff);
- border: 1px solid #444444;
-}
-
-th {
- text-align: left;
-}
-
-th,
-td {
- border-bottom: 1px solid #eeeeee;
- padding: 16px;
-}
-
-code:not([class*="language-"]) {
- background-color: rgba(27, 31, 35, 0.05);
- padding: 0.2em 0.4em;
- border-radius: 6px;
- font-family: var(--rh-font-family-code);
-}
-
-footer h3 {
- margin: 0;
-}
-
-footer ul {
- list-style-type: none;
- padding: 0;
- margin-top: 0;
-}
-
-pre {
- border: #eeeeee solid 1px;
- padding: 10px;
- overflow-x: scroll;
-}
-
-code {
- font-size: 14px;
-}
-
-.push-top {
- margin-top: var(--pf-theme--container-spacer, 0.83em);
-}
-
-.push-bottom {
- margin-bottom: var(--pf-theme--container-spacer, 0.83em);
-}
-
-pf-card > h3 {
- margin-top: 0;
-}
-
-.gist {
- overflow: scroll;
-}
-
-blockquote {
- background-color: #bee1f4;
- margin-left: 0;
- margin-right: 0;
- padding: 1.5rem;
-}
-
-@media (min-width: 500px) {
- .header-ctas {
- flex-direction: row;
- }
-
- .header-ctas rh-cta:first-child {
- margin-bottom: 0;
- margin-right: 16px;
- }
-
- .header-ctas rh-cta a {
- min-width: initial;
- }
-}
-
-@media (min-width: 540px) {
- h1 {
- font-size: 48px;
- }
-
- .tagline {
- font-size: 24px;
- }
-}
-
-@media (min-width: 820px) {
- :root {
- --pf-band--Padding--horizontal: 48px;
- }
-
- main.basic,
- main.blog,
- body:not(.layout-base) footer.basic {
- padding-left: 17.5rem;
- }
-
- .menu-toggle-toggleable.js-menu-toggle-toggleable,
- .menu-toggle-toggleable {
- overflow: visible;
- visibility: visible;
- }
-
- #home-title img {
- display: inline-block;
- position: relative;
- top: 2rem;
- }
-
- .logo-bar a {
- margin-left: 16px;
- }
-
- .logo-bar a img {
- display: inline-block;
- height: 48px;
- position: relative;
- aspect-ratio: 1/1;
- }
-}
-
-@media (min-width: 1179px) {
- .preview-image {
- background-size: 65%;
- }
-}
-
-@media (max-width: 1199px) {
- .block-toc {
- display: none;
- }
-}
-
-nav.toc ol {
- list-style-type: none;
- padding-inline-start: 16px;
-}
-
-nav.toc li {
- position: relative;
-}
-
-@media (min-width: 1200px) {
- pf-band h2[id]:not(.no-header-styles) {
- font-size: 2rem;
- line-height: 2.3125rem;
- }
-
- .inline-toc {
- display: none;
- }
-
- main.blog {
- display: grid;
- position: relative;
- grid-template-areas: "header header""content toc";
- grid-template-columns: auto 300px;
- }
-
- aside.block-toc > nav.toc {
- position: sticky;
- top: 60px;
- padding: 10px 16px;
- }
-
- aside.block-toc > h2 {
- margin: 20px 0 0 12px;
- }
-
- nav.toc li:after {
- content: "";
- display: inline-block;
- width: 1em;
- height: 1em;
- background-image: url("/brand/logo/svg/pfe-icon-blue.svg");
- padding-inline-end: 4px;
- opacity: 0;
- transition: opacity 0.2s ease-in-out;
- position: absolute;
- left: -1.2em;
- top: 0.2em;
- }
-
- nav.toc .active:after {
- opacity: 1;
- }
-}
-
-pre[class*="language-"] {
- position: relative;
-}
-
-pre[class*="language-"]:hover button,
-pre[class*="language-"]:focus-within button,
-pre[class*="language-"] button:hover,
-pre[class*="language-"] button:focus {
- opacity: 1;
-}
-
-pre[class*="language-"] button {
- color: black;
- box-sizing: border-box;
- cursor: pointer;
- user-select: none;
- background: rgba(255, 255, 255, 0.15);
- border: 1px solid rgba(255, 255, 255, 0.15);
- padding: 5px 10px;
- font-size: 0.8em;
- position: absolute;
- top: 0;
- right: 0;
- border-radius: 0 0.15rem;
- opacity: 0;
- transition: opacity 0.3s ease;
-}
-
-.inline-type pre {
- padding: 0;
- background: none;
- border: none;
-}
-
-/* in case of markdown rendering artifacts */
-.inline-type p,
-.inline-type :empty {
- display: none;
-}
-
-.inline-type pre,
-.inline-type code {
- font-size: inherit;
- display: inline;
- white-space: pre-line;
- overflow-wrap: unset;
- word-wrap: unset;
-}
-
-:is(h1, h2, h3, h4, h5, h6) code {
- font-size: inherit;
-}
-
-dt:not(:first-of-type) {
- margin-top: 14px;
-}
-
-dl.member {
- display: grid;
- grid-template-columns: max-content 1fr;
- gap: 6px 8px;
-}
-
-dl.member dt {
- font-style: italic;
-}
-
-dl.member dt:after {
- content: ": ";
-}
-
-dl.member dt,
-dl.member dd {
- margin: 0;
- padding: 0;
-}
-
-/* diff syntax highlighting */
-
-/* TODO: use PFE color vars */
-
-.token.deleted {
- background-color: hsl(350deg 100% 88% / 0.47);
-}
-
-.token.inserted {
- background-color: hsl(120deg 73% 75% / 0.35);
-}
-
-/* Make the + and - characters unselectable for copy/paste */
-.token.prefix.unchanged,
-.token.prefix.inserted,
-.token.prefix.deleted {
- user-select: none;
-}
-
-/* Optional: full-width background color */
-.token.inserted:not(.prefix),
-.token.deleted:not(.prefix) {
- display: block;
-}
-}
diff --git a/docs/patterns/announcement/index.md b/docs/patterns/announcement/index.md
index 95dc3a965e..b8648be6db 100644
--- a/docs/patterns/announcement/index.md
+++ b/docs/patterns/announcement/index.md
@@ -1,20 +1,27 @@
---
title: Announcement
+hasToc: true
+order: 10
tags:
- pattern
---
+
+
+
## Overview
An Announcement is a short banner that promotes an important message. It can be
used across websites, depending on the relevance of the message and the target
audience.
+
## Sample implementation
-{% example palette="medium",
- alt="Example of an announcement banner",
- src="./announcement-sample-1.svg" %}
+
+
+
+
## Style
@@ -22,32 +29,38 @@ An announcement banner can be used in light, dark, and saturated themes. It can
feature elements like text, a button, a call to action, icons, imagery, or a
background container.
-{% example palette="medium",
- alt="Anatomy of an announcement banner",
- src="./announcement-style-1.svg" %}
+
+
+
+
## Theme
-{% example palette="medium",
- alt="Announcement banner on light theme",
- src="./announcement-theme-1.svg" %}
+
+
+
+
+
+
+
-{% example palette="light",
- alt="Announcement banner on dark theme",
- src="./announcement-theme-2.svg" %}
## Usage
An announcement banner can promote a popular event or advertise an important
organizational or product announcement.
+
### Grid
An announcement banner doesn’t fall within the grid. It spans the entire width
of a browser window on all screens whereas the content of the banner itself
should fall within the standard grid.
-![Announcement banner spanning entire width of browser window](./announcement-usage-1.svg)
+
+
+
+
### Layout
@@ -56,9 +69,10 @@ the highest layout in hierarchy. It can also be used across different pages to
better attract attention from visitors who might be coming from different
places.
-{% example palette="medium",
- alt="Announcement banner positioned above the main menu on Redhat.com",
- src="./announcement-usage-2.svg" %}
+
+
+
+
### Content
@@ -66,25 +80,44 @@ Any content within an announcement banner can either be center-aligned or
aligned to the left and right sides, depending on the amount of content and what
its objective is.
-{% example palette="medium",
- alt="One announcement banner showing center-aligned content and one showing left and right-aligned content",
- src="./announcement-usage-content.svg" %}
+
+
+
+
### Character count
The recommended maximum character count for the elements of an announcement are listed below and include spaces.
-| Element {style="width: 50%" } | Character count |
-|-------------------------------|-----------------|
-| Text | 60 |
-| Call to action | 20 |
+
+
+
+
+ Element
+ Character count
+
+
+
+
+ Text
+ 60
+
+
+ Call to action
+ 20
+
+
+
+
+
## Best practices
Do not position the announcement banner below the navigation.
-{% example palette="wrong",
- alt="Example of an announcement banner below the primary navigation",
- src="./announcement-bestpractice-1.svg" %}
+
+
+
+
## Behavior
@@ -94,7 +127,8 @@ An announcement banner sits above the navigation and can be sticky, but should
not be visible on scroll if the navigation of the site is also in fixed
position.
-
+
+
## Responsive design
@@ -104,51 +138,51 @@ An announcement banner works well across both large and small screens. The
elements inside will stack in one column and become vertically-aligned on small
screens.
+
#### Desktop
-![Example of an announcement banner on desktop](./announcement-responsive-1.svg)
+
+
+
+
#### Tablet
-![Example of an announcement banner on tablet](./announcement-responsive-2.svg)
+
+
+
-#### Mobile
-![Example of an announcement banner on mobile](./announcement-responsive-3.svg)
+#### Mobile
+
+
+
Some text styles reduce in size on small screens. Learn more about
[typography](../../foundations/typography) on mobile {.footnote}
-
+
+
## Interaction states
Since announcement banners can consist of a variety of elements, refer to the specific interaction states that are assigned to each style and component for more information.
-
+
+
## Spacing
The announcement banner uses [space tokens](/tokens/space/) to define spacing values between elements.
-{% spacerTokensTable headingLevel="3", tokens="--rh-space-sm,--rh-space-lg, --rh-space-xl, --rh-space-3xl" %}{% endspacerTokensTable %}
-
-{% example palette="medium",
- alt="Example of an announcement banner with spacers",
- src="./announcement-spacing-1.svg" %}
-
-{% include 'feedback.html' %}
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+{% spacerTokensTable headingLevel="3", tokens="--rh-space-sm,--rh-space-lg, --rh-space-xl, --rh-space-3xl" %}{% endspacerTokensTable %}
+
+{% include 'partials/component/feedback.html' %}
diff --git a/docs/patterns/card/index.md b/docs/patterns/card/index.md
index fe0a02205d..9a70a601fc 100644
--- a/docs/patterns/card/index.md
+++ b/docs/patterns/card/index.md
@@ -1,19 +1,22 @@
---
title: Card
-layout: layout-basic.njk
+layout: layouts/pages/basic.njk
+hasToc: true
+order: 20
tags:
- pattern
+importElements:
+ - rh-card
+ - rh-cta
+ - rh-surface
---
-
+
+
+
{# NOTE: all images in this view need to be 340 by 200 px in order to maintain same ratio. #}
## Overview
Patterns compose elements and tokens with content and validation rules to
create uniform, accessible experiences.
-
+
+
## Make a request
To request a new element or if updates need to be made to an existing element,
[contact us](mailto:digital-design-system@redhat.com).
-{% feedback %}
+
Patterns
To learn how to use our patterns in your designs, visit the Patterns section.
-{% endfeedback %}
+
diff --git a/docs/patterns/link-with-icon/index.md b/docs/patterns/link-with-icon/index.md
index 581b33d2c7..09a7bf327f 100644
--- a/docs/patterns/link-with-icon/index.md
+++ b/docs/patterns/link-with-icon/index.md
@@ -1,49 +1,61 @@
---
title: Link with icon
-layout: layout-basic.njk
+order: 60
+layout: layouts/pages/basic.njk
+hasToc: true
tags:
- pattern
---
+
+
+
+
## Overview
Link with icon features an icon that adds context to the link itself. It’s positioned to the left or on top of a link, depending on orientation.
+
## Sample pattern
-{% example palette="none",
- alt="Link with icon",
- src="./link-with-icon.svg" %}
+
+
+
+
## Style
Link with icon is available in light and dark themes. It’s a grouping of a small icon near a link, similar to how a list item is a grouping of a bullet point near text. The icon chosen should represent what a user will get when they click on or tap the link. It acts as a functional addition instead of only visual.
-{% example palette="light",
- alt="Link with icon specs",
- src="./link-with-icon-style.svg" %}
+
+
+
+
### Theme
-{% example palette="light",
- alt="Link with icon theme light",
- src="./link-with-icon-theme-light.svg" %}
-
-{% example palette="darkest",
- alt="Link with icon theme dark",
- src="./link-with-icon-theme-dark.svg" %}
+
+
+
+
+
+
+
+
## Usage
Use link with icon to increase the visual interest of a link without using a call to action style. Link with icon can replace links that are used on their own, but not in a paragraph of text.
+
## Best practices
Don't increase the icon size because the link text size will appear smaller.
-{% example palette="wrong",
- alt="Link with icon icon size issue",
- src="./link-with-icon-best-practices.svg" %}
+
+
+
+
## Behavior
@@ -51,44 +63,49 @@ Don't increase the icon size because the link text size will appear smaller.
Link with icon can be used on large and small screens. When the width of the link exceeds the width of its container, the text will break to two lines.
-{% example palette="none",
- alt="Link with icon responsive desktop",
- src="./link-with-icon-responsive.svg" %}
+
+
+
-{% example palette="none",
- alt="Link with icon responsive mobile",
- src="./link-with-icon-responsive-mobile.svg" %}
+
-Some text styles reduce in size on small screens. Learn more about typography on mobile
-{.footnote}
### Alignment
The icon and the link are always vertically-aligned.
-{% example palette="light",
- alt="Link with icon alignment",
- src="./link-with-icon-alignment-1.svg" %}
+
+
+
+
+
+
+
-{% example palette="light",
- alt="Link with icon alignment",
- src="./link-with-icon-alignment-2.svg" %}
## Interaction states
The link has the same interaction states as a Link whereas the icon doesn't have any interaction states.
+
## Spacing
Link with icon uses [space tokens](/tokens/space/) to define spacing values between elements.
-{% example palette="light",
- alt="Link with icon spacing",
- src="./link-with-icon-spacing.svg" %}
-
-{% include 'feedback.html' %}
-
-
+
+
+
+
+{% spacerTokensTable
+ tokens="--rh-space-lg" %}
+{% endspacerTokensTable %}
+
+{% include 'partials/component/feedback.html' %}
diff --git a/docs/patterns/link/index.md b/docs/patterns/link/index.md
index eaa2c3ee8e..47bec1a91c 100644
--- a/docs/patterns/link/index.md
+++ b/docs/patterns/link/index.md
@@ -1,33 +1,41 @@
---
title: Link
-layout: layout-basic.njk
+order: 70
+layout: layouts/pages/basic.njk
+hasToc: true
tags:
- pattern
---
+
+
+
+
## Overview
Links are navigational elements that allow a user to move between content, pages, and websites.
+
## Sample pattern
-{% example palette="none",
- alt="Link component examples",
- src="./example-links.svg" %}
+
+
+
+
## Demo
View a live version of the Call to action link and see how it can be customized.
-{% cta href="/elements/call-to-action/", target="_blank" %}
- Customize component via Elements
-{% endcta %}
+Customize component via Elements
+
## Style
-{% example palette="lightest",
- alt="Link component blueprint",
- src="./link-blueprint.svg" %}
+
+
+
+
### Variants
@@ -36,6 +44,7 @@ There are two link variants available for use.
- **Inline** - An Inline link can be used inside of text or a paragraph and allows a user to take a less important action.
- **Call to action** - A Call to action link can be used solo or near content and allows a user to take an important action.
+
### Visual elements
Each link variant has different styles depending on how they are used with or without content.
@@ -45,87 +54,103 @@ Each link variant has different styles depending on how they are used with or wi
- **Primary or Secondary call to action link** - Bolded text inside of a background or border container.
- **Default call to action link** - Bolded text with an arrow or icon to the right.
-{% alert title="See more", state="default" %}
-Visit the [Call to action](https://ux.redhat.com/elements/call-to-action/) component page to see all available styles.
-{% endalert %}
+
+ Helpful tip
+ Visit the Call to action component page to see all available styles.
+
+
+
+
+
-{% example palette="lightest",
- alt="Link component visual elements",
- src="./link-visual-elements.svg" %}
### Text size
An Inline link can be applied to text used on its own at any size outside of a paragraph. When applied to text inside of a paragraph, it should match the size of the existing text.
-{% alert title="See more", state="default" %}
-Visit the [Typography](https://ux.redhat.com/foundations/typography/) page to see available text sizes.
-{% endalert %}
+
+ Helpful tip
+ Visit the Typography page to see available text sizes.
+
+
## Theme
### Light theme
-{% alert title="See more", state="default" %}
-Visit the [Call to action](https://ux.redhat.com/elements/call-to-action/) component page to see light theme examples.
-{% endalert %}
+
+ Helpful tip
+ Visit the Call to action component page to see light theme examples.
+
+
+
+
+
-{% example palette="lightest",
- alt="Link component, light theme",
- src="./theme-light.svg" %}
### Dark theme
-{% alert title="See more", state="default" %}
-Visit the [Call to action](https://ux.redhat.com/elements/call-to-action/) component page to see dark theme examples.
-{% endalert %}
+
+ Helpful tip
+ Visit the Call to action component page to see dark theme examples.
+
+
+
+
+
-{% example palette="darkest",
- alt="Link component, light theme",
- src="./theme-dark.svg" %}
## Usage
Links should be applied when a user needs to jump to content on the same page, visit a page within the same domain, or visit a page within another domain.
-{% example palette="lightest",
- alt="Link component usage",
- src="./when-to-use.svg" %}
+
+
+
+
### Content
Links are navigational elements, so any text needs to **accurately communicate the destination**. Inconsistent experiences might lead to distrust, lessening the satisfaction of a user during their journey. When writing link content, Inline links should be **descriptive** to help a user better understand the destination whereas Call to action links should be **action-oriented** to entice a user to make a selection.
-{% alert title="Warning", state="warning" %}
-Link content needs to be written clearly in order to be understood, therefore write **no more than four or five words** per link.
-{% endalert %}
-
-{% example palette="lightest",
- alt="Link component usage, content",
- src="./usage-content.svg" %}
+
+ Warning
+ Link content needs to be written clearly in order to be understood, therefore write no more than four or five words per link.
+
+
+
+
+
+
### Character count
There is no maximum character count for a link. The link text should be long enough to be descriptive and no longer.
+
### Images
Photos or images can be links as long as there is supporting content nearby explaining that a selection can be made, like a headline, content, or Call to action link. Do not hide links in photos or images otherwise a user will miss the opportunity to make a selection if they cannot see the link.
+
### Buttons
Do not apply a link to an action that needs to be triggered instead, like submitting a form or changing a state.
-{% alert title="Learn more", state="default" %}
-Visit the [Button](https://ux.redhat.com/elements/button/) or [Form](https://ux.redhat.com/patterns/form/) component pages to learn more about how to use buttons and forms.
-{% endalert %}
+
+ Learn more
+ Visit the Button or Form component pages to learn more about how to use buttons and forms.
+
-{% alert title="Helpful tip" %}
-In a form, selecting a button will trigger an action whereas selecting a link will direct a user to another page.
-{% endalert %}
+
+ Helpful tip
+ In a form, selecting a button will trigger an action whereas selecting a link will direct a user to another page.
+
+
+
+
+
-{% example palette="lightest",
- alt="Link component usage, buttons",
- src="./usage-buttons.svg" %}
## Behavior
@@ -133,97 +158,130 @@ In a form, selecting a button will trigger an action whereas selecting a link wi
If a user selects a link within [redhat.com](https://www.redhat.com/en), they should be directed to content within the redhat.com domain. In this situation, a new tab or window is **not opened.**
+
### External pages
A user will be directed to another domain if they select an Inline link with an external link icon. For example, if a user needs to be directed to another website with different content or to complete a separate task, a new tab or window (depending on how their browser is configured) is opened so they may complete that task and then return to their original task.
-{% alert title="Helpful tip" %}
-Only Inline links can display an external link icon.
-{% endalert %}
+
+ Helpful tip
+ Only Inline links can display an external link icon.
+
+
+
+ Warning
+ If navigating to a new page in the same tab is very disruptive to the experience or workflow, have the page open in a new tab or window instead.
+
-{% alert title="See more", state="warning" %}
-If navigating to a new page in the same tab is very disruptive to the experience or workflow, have the page open in a new tab or window instead.
-{% endalert %}
+
+
+
-{% example palette="lightest",
- alt="Link component, internal vs. external pages",
- src="./external-pages.svg" %}
## Interaction states
-{% alert title="See more", state="default" %}
-Visit the [Call to action](https://ux.redhat.com/elements/call-to-action/) component page to see available interaction states.
-{% endalert %}
+
+ Helpful tip
+ Visit the Call to action component page to see available interaction states.
+
+
### Link
-{% example palette="lightest",
- alt="Link component interaction state, link (light theme)",
- src="./interaction-state-link-light.svg" %}
+
+
+
+
+
+
+
-{% example palette="darkest",
- alt="Link component interaction state, link (dark theme)",
- src="./interaction-state-link-dark.svg" %}
### Hover
-{% example palette="lightest",
- alt="Link component interaction state, hover (light theme)",
- src="./interaction-state-hover-light.svg" %}
+
+
+
+
+
+
+
-{% example palette="darkest",
- alt="Link component interaction state, hover (dark theme)",
- src="./interaction-state-hover-dark.svg" %}
### Focus
-{% example palette="lightest",
- alt="Link component interaction state, focus (light theme)",
- src="./interaction-state-focus-light.svg" %}
+
+
+
+
+
+
+
-{% example palette="darkest",
- alt="Link component interaction state, focus (dark theme)",
- src="./interaction-state-focus-dark.svg" %}
### Active
-{% example palette="lightest",
- alt="Link component interaction state, active (light theme)",
- src="./interaction-state-active-light.svg" %}
+
+
+
+
+
+
+
-{% example palette="darkest",
- alt="Link component interaction state, active (dark theme)",
- src="./interaction-state-active-dark.svg" %}
### Visited
-{% alert title="Helpful tip" %}
-A popover trigger can be a linked text, or it can be an icon. For example, when a popover is needed near a form field, using the question mark icon as a trigger is common, but utilizing it is not always a requirement.
-{% endalert %}
+
+ Helpful tip
+ A popover trigger can be a linked text, or it can be an icon. For example, when a popover is needed near a form field, using the question mark icon as a trigger is common, but utilizing it is not always a requirement.
+
-{% example palette="lightest",
- alt="Link component interaction state, visited (light theme)",
- src="./interaction-state-visited-light.svg" %}
+
+
+
+
+
+
+
-{% example palette="darkest",
- alt="Link component interaction state, visited (dark theme)",
- src="./interaction-state-visited-dark.svg" %}
### Tab order
When the Tab key is pressed repeatedly, the focus highlights each Inline and Call to action link in order, from left to right and top to bottom.
-{% example palette="lightest",
- alt="Link component tab order",
- src="./tab-order.svg" %}
+
+
+
+
### Accessibility
-| Key | Action |
-| ----------- | ------------------------------------- |
-| Tab | Moves the focus to the next link. |
-| Shift + Tab | Moves the focus to the previous link. |
-| Enter | Selects the link with focus. |
+
+
+
+
+ Key
+ Action
+
+
+
+
+ Tab
+ Moves the focus to the next link.
+
+
+ Shift + Tab
+ Moves the focus to the previous link.
+
+
+ Enter
+ Selects the link with focus.
+
+
+
+
+
## Responsive design
@@ -231,21 +289,22 @@ Both link variants mostly remain the same on large and small screens. Inline lin
### Desktop
-{% example palette="none",
- alt="Link component responsive design, desktop",
- src="./responsive-design-desktop.svg" %}
+
+
+
### Tablet
-{% example palette="none",
- alt="Link component responsive design, tablet",
- src="./responsive-design-tablet.svg" %}
+
+
+
### Mobile
-{% example palette="none",
- alt="Link component responsive design, mobile",
- src="./responsive-design-mobile.svg" %}
+
+
+
+
## Best practices
@@ -253,70 +312,81 @@ Both link variants mostly remain the same on large and small screens. Inline lin
Do not apply lots of links to paragraph text otherwise a user will have trouble reading the content in its entirety before making a selection.
-{% example palette="wrong",
- alt="Link component best practice 1",
- src="./link-best-practice-1.svg" %}
+
+
+
+
### Different link variants
Do not use different link variants to direct a user to the same page.
-
-{% example palette="wrong",
- alt="Link component best practice 2",
- src="./link-best-practice-2.svg" %}
+
+
+
+
+
### Ambiguity
When writing link content, avoid ambiguous phrases or a full website URL. A user should have a clear idea of where they are being directed to before they make a selection.
-{% example palette="wrong",
- alt="Link component best practice 3",
- src="./link-best-practice-3.svg" %}
+
+
+
+
### Long links
Do not apply links to long strings of text.
-{% example palette="wrong",
- alt="Link component best practice 4",
- src="./link-best-practice-4.svg" %}
+
+
+
+
### Buttons
Buttons have different use cases and should not be used to promote offers or other content.
-{% alert title="Learn more", state="default" %}
-Visit the [Button](https://ux.redhat.com/elements/button/) component page to learn more about how to use buttons.
-{% endalert %}
-
-{% example palette="wrong",
- alt="Link component best practice 5",
- src="./link-best-practice-5.svg" %}
+
+ Helpful Tip
+ Visit the Button component page to learn more about how to use buttons.
+
+
+
+
+
+
### External link icon
Do not apply the external link icon to Call to action links.
-{% alert title="Learn more", state="default" %}
-Visit the [Call to action](https://ux.redhat.com/elements/call-to-action/) component page to learn more about how to use calls to action.
-{% endalert %}
-
-{% example palette="wrong",
- alt="Link component best practice 6",
- src="./link-best-practice-6.svg" %}
+
+ Helpful tip
+ Visit the Call to action component page to learn more about how to use calls to action.
+
+
+
+
+
+
### Widows
The Default call to action link arrow and the external link icon should not appear by themselves, they should always be connected to at least one word on the same line.
-{% example palette="wrong",
- alt="Link component best practice 7",
- src="./link-best-practice-7.svg" %}
+
+
+
+
## Spacing
-{% alert title="See more", state="default" %}
-Visit the [Spacing](https://ux.redhat.com/foundations/spacing/) page to see spacing values between link variants and other elements.
-{% endalert %}
+
+ Helpful tip
+ Visit the Spacing page to see spacing values between link variants and other elements.
+
+
-{% include 'feedback.html' %}
+{% include 'partials/component/feedback.html' %}
diff --git a/docs/patterns/patterns.yaml b/docs/patterns/patterns.yaml
index 998333064c..e31ba7c3ab 100644
--- a/docs/patterns/patterns.yaml
+++ b/docs/patterns/patterns.yaml
@@ -1,4 +1,5 @@
bodyClasses: element-docs
-layout: layout-basic.njk
+layout: layouts/pages/basic.njk
importElements:
- - rh-alert
\ No newline at end of file
+ - rh-alert
+ - rh-table
\ No newline at end of file
diff --git a/docs/patterns/search-bar/index.md b/docs/patterns/search-bar/index.md
index 046f021302..06f56efaca 100644
--- a/docs/patterns/search-bar/index.md
+++ b/docs/patterns/search-bar/index.md
@@ -1,29 +1,37 @@
---
title: Search bar
-layout: layout-basic.njk
+order: 80
+layout: layouts/pages/basic.njk
+hasToc: true
tags:
- pattern
---
+
+
+
## Overview
A Search bar is a horizontal grouping of a form field with placeholder text and
a button. It allows a user to input text and then perform a search.
+
## Sample pattern
-{% example palette="none",
- alt="Search bar component sample",
- src="./search-bar-sample.svg" %}
+
+
+
+
## Style
A search bar includes a narrow but wide form field with placeholder text and a
red button that is placed on the right.
-{% example palette="lightest",
- alt="Search bar component blueprint",
- src="./search-bar-blueprint.svg" %}
+
+
+
+
#### Button
@@ -31,15 +39,15 @@ A search bar includes a button so a user can perform a search. A call to action
link would only direct a user to a results page without actually performing a
search, so a button must be used instead.
-{% alert title="Learn more" %}
-Visit the [Button](/elements/button/) or [Call to
-action](/elements/call-to-action/) element pages to learn more about how to use
-buttons and calls to action.
-{% endalert %}
+
+ Learn more
+ Visit the Button or Call to action element pages to learn more about how to use buttons and calls to action.
+
+
+
+
+
-{% example palette="lightest",
- alt="Search bar component button vs. CTA",
- src="./search-bar-button-vs-cta.svg" %}
## Theme
@@ -47,18 +55,19 @@ buttons and calls to action.
The light theme search bar includes a light theme form field and red button.
-{% example palette="lightest",
- alt="Search bar component, light theme",
- src="./search-bar-light-theme.svg" %}
+
+
+
#### Dark theme
For now, the light theme search bar can also be used in the dark theme.
-{% example palette="darkest",
- alt="Search bar component, dark theme",
- src="./search-bar-dark-theme.svg" %}
+
+
+
+
## Usage
@@ -70,9 +79,10 @@ then display any relevant search results.
A search bar can be used in most layouts. It has no set width other than the
boundaries of whatever container or grid it is placed in.
-{% example palette="medium",
- alt="Search bar component usage",
- src="./search-bar-layout.svg" %}
+
+
+
+
#### Content
@@ -81,9 +91,10 @@ the text is *generic* (Enter your search term), a user might expect to
search through an entire website. If the text is *specific* (Search all
resources), a user might expect to search through an individual page.
-{% example palette="lightest",
- alt="Search bar component placeholder text options",
- src="./search-bar-placeholder-text.svg" %}
+
+
+
+
## Behavior
@@ -94,13 +105,15 @@ placeholder text will disappear, the form field will have focus, and a blinking
cursor will take its place. When a user starts typing, the text styling will
change.
-{% alert title="Learn more" %}
-Visit the [Form](/patterns/form/) pattern page to learn more about form fields.
-{% endalert %}
+
+ Learn more
+ Visit the Form pattern page to learn more about form fields.
+
+
+
+
+
-{% example palette="lightest",
- alt="Search bar component styling changes",
- src="./search-bar-form-field.svg" %}
#### Typeahead
@@ -108,9 +121,10 @@ Typeahead allows a user to narrow down a displayed list of options when they
input text within a form field, it is recommended for lists with more than 10
options.
-{% example palette="lightest",
- alt="Search bar component typeahead",
- src="./search-bar-typeahead.svg" %}
+
+
+
+
#### Errors
@@ -118,35 +132,39 @@ If focus is moved from the form field to the button, an error will not be
displayed. However, if a user tries to perform a search without any text in the
form field, an error will be displayed.
-{% alert title="Learn more" %}
-Visit the [Form](/patterns/form/) pattern page to learn more about form field
-errors.
-{% endalert %}
+
+ Learn more
+ Visit the Form pattern page to learn more about form field errors.
+
+
+
+
+
-{% example palette="lightest",
- alt="Search bar component form field errors",
- src="./search-bar-errors.svg" %}
## Interaction states
-{% alert title="Learn more" %}
-Visit the [Form](/patterns/form/) or [Button](/elements/button/) pages to learn
-more about interaction states.
-{% endalert %}
+
+ Learn more
+ Visit the Form or Button pages to learn more about interaction states.
+
+
#### Link
-{% example palette="lightest",
- alt="Search bar component interaction state, link",
- src="./search-bar-interaction-states-link.svg" %}
+
+
+
+
#### Hover
A blue line appears at the bottom of the form field indicating it is selectable.
-{% example palette="lightest",
- alt="Search bar component interaction state, hover",
- src="./search-bar-interaction-states-hover.svg" %}
+
+
+
+
#### Focus
@@ -154,9 +172,10 @@ When the focus is moved to the form field via keyboard, the placeholder text
will disappear and a blinking cursor will take its place. When the focus is
moved away, the placeholder text will be visible again.
-{% example palette="lightest",
- alt="Search bar component interaction state, focus",
- src="./search-bar-interaction-states-focus.svg" %}
+
+
+
+
#### Active
@@ -164,9 +183,10 @@ When the focus is moved to the form field via cursor, the placeholder text will
disappear and a blinking cursor will take its place. When the focus is moved
away, the placeholder text will be visible again.
-{% example palette="lightest",
- alt="Search bar component interaction state, active",
- src="./search-bar-interaction-states-active.svg" %}
+
+
+
+
#### Tab order
@@ -174,20 +194,42 @@ When the Tab key is pressed repeatedly, the focus will highlight the form field
first and then the button. A user can move the focus from the form field to the
button without an error being displayed.
-{% example palette="lightest",
- alt="Search bar component tab order",
- src="./search-bar-tab-order.svg" %}
+
+
+
+
## Accessibility
-| Key | Action |
-| --------------------------------- | --------------------------------------------------------------------------------- |
-| Tab | Moves the focus to the button. |
-| Shift + Tab | Moves the focus to the form field. |
-| Enter (if text) | Triggers a search. |
-| Enter (if no text) | Displays an error icon and text requiring a user to input text in the form field. |
+
+
+
+
+ Key
+ Action
+
+
+
+
+ Tab
+ Moves the focus to the button.
+
+
+ Shift + Tab
+ Moves the focus to the form field.
+
+
+ Enter (if text)
+ Triggers a search.
+
+
+ Enter (if no text)
+ Displays an error icon and text requiring a user to input text in the form field.
+
+
+
+
-{.full-width}
## Responsive design
@@ -197,21 +239,24 @@ whereas the button always stays the same size.
#### Desktop
-{% example palette="none",
- alt="Search bar component responsive design, desktop",
- src="./search-bar-responsive-desktop.svg" %}
+
+
+
+
#### Tablet
-{% example palette="none",
- alt="Search bar component responsive design, tablet",
- src="./search-bar-responsive-tablet.svg" %}
+
+
+
+
#### Mobile
-{% example palette="none",
- alt="Search bar component responsive design, mobile",
- src="./search-bar-responsive-mobile.svg" %}
+
+
+
+
## Best practices
@@ -220,26 +265,29 @@ whereas the button always stays the same size.
Do not write placeholder text too long, it should be short and to the point
(maximum 30 characters).
-{% example palette="wrong",
- alt="Search component best practice 1",
- src="./search-bar-best-practice-1.svg" %}
+
+
+
+
#### Call to action as button
Do not replace the button with a call to action.
-{% example palette="wrong",
- alt="Search component best practice 2",
- src="./search-bar-best-practice-2.svg" %}
+
+
+
+
#### Different style or color
Do not use a different button color or style when using a search bar on Red Hat
*marketing* websites.
-{% example palette="wrong",
- alt="Search component best practice 3",
- src="./search-bar-best-practice-3.svg" %}
+
+
+
+
#### Disabled
@@ -247,46 +295,51 @@ Do not disable the button until a user inputs text in the form field. The button
should always be active and if a user tries to perform a search without any text
in the form field, an error should be displayed instead.
-{% example palette="wrong",
- alt="Search component best practice 4",
- src="./search-bar-best-practice-4.svg" %}
+
+
+
#### Solo button
Avoid using the search button on its own without a form field.
-{% alert title="Learn more" %}
-Visit the [Button](/elements/button/) component page to learn more about how to
-use buttons.
-{% endalert %}
+
+ Learn more
+ Visit the Button component page to learn more about how to use buttons.
+
+
+
+
+
-{% example palette="wrong",
- alt="Search component best practice 5",
- src="./search-bar-best-practice-5.svg" %}
#### Rearranging the component
Do not rearrange a search bar by placing the button below the form field or
changing its width.
-{% example palette="wrong",
- alt="Search component best practice 6",
- src="./search-bar-best-practice-6.svg" %}
+
+
+
+
## Spacing
A search bar uses [space tokens](/tokens/space/) to define spacing values
between elements.
+
+
+
+
+
{% spacerTokensTable headingLevel="3", tokens=[
'--rh-space-sm',
'--rh-space-md',
'--rh-space-lg',
'' ] %}{% endspacerTokensTable %}
+
-{% example palette="light",
- alt="Search bar spacing",
- src="./search-bar-spacing.svg" %}
-{% include 'feedback.html' %}
+{% include 'partials/component/feedback.html' %}
diff --git a/docs/patterns/skip-navigation/index.md b/docs/patterns/skip-navigation/index.md
index 0a9a16f182..d623070dc6 100644
--- a/docs/patterns/skip-navigation/index.md
+++ b/docs/patterns/skip-navigation/index.md
@@ -1,75 +1,87 @@
---
title: Skip navigation
+order: 90
+hasToc: true
tags:
- pattern
---
+
+
+
## Overview
- {% alert title="Warning", state="warning" %}
- The skip navigation pattern is being deprecated. Please use the Skip link element instead.
- {% endalert %}
-
Skip navigation is a styled link that appears at the top of a page when the Tab key is pressed. It bypasses the navigation and jumps users down to the main content when selected.
## Sample pattern
-{% example palette="none",
- alt="Skip navigation",
- src="./skip-nav.svg" %}
+
+
+
+
- ## Style
+## Style
Skip to main content is a styled link that consists of a text label and a background container. Even though it looks like a Button, it functions more like a jump link.
-{% example palette="medium",
- alt="Skip navigation specs",
- src="./skip-nav-style.svg" %}
+
+
+
+
+
## Usage
A skip to main content link helps some users browse the web more effectively. It should be invisible on every page as a commitment to accessibility.
-{% example palette="none",
- alt="Skip navigation usage",
- src="./skip-nav-usage-1.svg" %}
+
+
+
+
+
+
+
-{% example palette="none",
- alt="Skip navigation usage",
- src="./skip-nav-usage-2.svg" %}
+
+
+
-{% example palette="none",
- alt="Skip navigation usage",
- src="./skip-nav-usage-3.svg" %}
## Best practices
Don't apply the skip to main content link style to other components.
-{% example palette="wrong",
- alt="Skip navigation style errors",
- src="./skip-nav-best-practices-1.svg" %}
+
+
+
+
+
## Behavior
When a user presses the Tab key upon page load, the skip to main content link will appear centered at the top above the navigation. When a user presses the Enter key, the page will move down and the focus indicator should highlight the main content.
-{% example palette="none",
- alt="Skip navigation behavior",
- src="./skip-nav-behavior.svg" %}
+
+
+
+
## Spacing
A skip to main content link uses [space tokens](/tokens/space/) to define spacing
values between elements.
+
+
+
+
+
+
{% spacerTokensTable
headline="",
caption='',
headingLevel="4",
tokens="--rh-space-sm,--rh-space-md" %}
{% endspacerTokensTable %}
+
-{% example palette="none",
- alt="Skip navigation spacing diagram",
- src="./skip-nav-spacing.svg" %}
-{% include 'feedback.html' %}
\ No newline at end of file
+{% include 'partials/component/feedback.html' %}
diff --git a/docs/patterns/sticky-banner/index.md b/docs/patterns/sticky-banner/index.md
index e819bf12d7..0dad413264 100644
--- a/docs/patterns/sticky-banner/index.md
+++ b/docs/patterns/sticky-banner/index.md
@@ -1,40 +1,47 @@
---
title: Sticky banner
+order: 100
+hasToc: true
tags:
- pattern
---
+
+
+
## Overview
A Sticky banner slides into view at a certain scroll position and then anchors itself to the bottom edge of a browser window. It stays in one place as content scrolls underneath until a user dismisses them.
+
## Sample pattern
-{% example palette="none",
- alt="Sticky banner",
- src="./sticky-banner.svg" %}
+
+
+
+
+
## Style
A sticky banner can be used in the light theme only. The large size can include a thumbnail image on large screens, but both sizes can include a headline, text, a call to action, and a background container with a subtle drop shadow. A close button also needs to be included in both sizes.
-{% example palette="lightest",
- alt="Sticky banner style",
- src="./sticky-banner-style.svg" %}
+
+
+
-### Sizes
-Large and Small are the two sticky banner sizes. The large size spans the full-width of the browser window and therefore can’t have rounded corners. The small size is fixed width and features rounded corners on top. The large size can feature more
+### Sizes
- than the small size as well, including a thumbnail image, more text, and a larger call to action.
+Large and Small are the two sticky banner sizes. The large size spans the full-width of the browser window and therefore can’t have rounded corners. The small size is fixed width and features rounded corners on top. The large size can feature more than the small size as well, including a thumbnail image, more text, and a larger call to action.
-{% example palette="none",
- alt="Sticky banner large size",
- src="./sticky-banner-size-desktop.svg" %}
+
+
+
+
+
+
-{% example palette="none",
- alt="Sticky banner small size",
- src="./sticky-banner-size-mobile.svg" %}
### Content
@@ -56,15 +63,14 @@ The large sticky banner can be used to promote an important offer on most websit
A sticky banner is anchored on the bottom of the page where it doesn’t distract a user from the page content. It can be used in light or dark environments because it scrolls on top of content and the backgrounds contain a drop shadow to help give it some depth. A user must close the Cookie banner for a sticky banner to appear.
-
-{% example palette="none",
- alt="Sticky banner desktop placement",
- src="./sticky-banner-usage.svg" %}
+
+
+
+
+
+
+
-
-{% example palette="none",
- alt="Sticky banner desktop placement",
- src="./sticky-banner-usage-mobile.svg" %}
### Layout
@@ -74,102 +80,126 @@ The large sticky banner background spans the width of a browser window. The cont
A sticky banner has limited vertical height, so keep content short and only include essential information. A sticky banner can include a thumbnail image, a headline, text, and a call to action, but not all elements are required.
-
- - The headline shouldn’t break to two lines on any screen size (35 - 40 characters)
- - The text shouldn’t break to three lines on any screen size (85 - 110 characters)
- - A sticky banner should clearly describe what a visitor is getting if they choose to continue
- - The thumbnail image, headline, text, and call to action should all align to the specific resource that’s being promoted
-
+- The headline shouldn’t break to two lines on any screen size (35 - 40 characters)
+- The text shouldn’t break to three lines on any screen size (85 - 110 characters)
+- A sticky banner should clearly describe what a visitor is getting if they choose to continue
+- The thumbnail image, headline, text, and call to action should all align to the specific resource that’s being promoted<
+
## Best practices
Don't change the large sticky banner to be fixed width.
-{% example palette="wrong",
- alt="Fixed width issue",
- src="./sticky-banner-best-practices-1.svg" %}
+
+
+
+
+
+Don’t omit the thumbnail image from the sticky banner on large screens like Desktop or Tablet, landscape, it helps users get a better idea of what they’re downloading.
-Don’t omit the thumbnail image from the sticky banner on large screens like _Desktop_ or _Tablet, landscape_, it helps users get a better idea of what they’re downloading.
+
+
+
-{% example palette="wrong",
- alt="Full width small banner issue",
- src="./sticky-banner-best-practices-2.svg" %}
Don’t omit the drop shadow because the banner will blend into the background.
-{% example palette="wrong",
- alt="Banner without thumbnail issue",
- src="./sticky-banner-best-practices-3.svg" %}
+
+
+
+
## Behavior
The behavior of a sticky banner is similar to a Sticky card, they stick to the edge of a browser window and remain there until a user dismisses them. The difference is that a sticky banner is conversion-driven, they promote a more important offer that drives a user to a landing page whereas a sticky card promotes a less important offer like a resource or webinar.
-{% example palette="none",
- alt="Sticky banner behavior",
- src="./sticky-banner-behavior.svg" %}
+
+
+
+
+
### Sliding
A sticky banner slides into view when a user reaches a specific scroll position on a page, usually somewhere below the fold.
+
### Dismissing
A user can click on or tap the close button if they want to dismiss a sticky banner from their view. The page’s scroll position won’t be impacted and the sticky banner won’t return in the same browsing session after it’s closed.
+
## Responsive design
### Breakpoints
A sticky banner can work on both large and small screens. Some elements will be dropped when space reduces to keep the layout clean and organized.
+
### Desktop
-{% example palette="none",
- alt="Sticky banner desktop breakpoint",
- src="./sticky-banner-breakpoints-desktop.svg" %}
+
+
+
+
+
### Tablet
-{% example palette="none",
- alt="Sticky banner tablet breakpoint",
- src="./sticky-banner-breakpoints-tablet.svg" %}
+
+
+
+
+
### Mobile, landscape
-{% example palette="none",
- alt="Sticky banner mobile landscape breakpoint",
- src="./sticky-banner-breakpoints-mobile-landscape.svg" %}
- Some text styles reduce in size on small screens. Learn more about typography on mobile
+
+
### Mobile, portrait
-{% example palette="none",
- alt="Sticky banner mobile portrait breakpoint",
- src="./sticky-banner-breakpoints-mobile-portrait.svg" %}
+
+
+
+
+
## Interaction states
Since a sticky banner can consist of a variety of elements, refer to the specific interaction states that are assigned to each style and component for more information.
+
## Spacing
Both sticky banners use [space tokens](/tokens/space/) to define spacing
values between elements.
-{% spacerTokensTable
- headline="",
- caption='',
- headingLevel="4",
- tokens="--rh-space-md, --rh-space-lg, --rh-space-xl, --rh-space-2xl, --rh-space-3xl, --rh-space-4xl" %}
-{% endspacerTokensTable %}
### Large size
-{% example palette="lightest",
- alt="Sticky banner large spacing",
- src="./sticky-banner-spacing-large-screens.svg" %}
+
+
+
+
+
### Small size
+
Content padding defines how far away elements are from each other inside each section.
-{% example palette="light",
- alt="Sticky banner spacing small",
- src="./sticky-banner-spacing-small-screens.svg" %}
+
+
+
+
+
+ {% spacerTokensTable
+ headline="",
+ caption='',
+ headingLevel="4",
+ tokens="--rh-space-md, --rh-space-lg, --rh-space-xl, --rh-space-2xl, --rh-space-3xl, --rh-space-4xl" %}
+ {% endspacerTokensTable %}
+
+
-{% include 'feedback.html' %}
\ No newline at end of file
+{% include 'partials/component/feedback.html' %}
diff --git a/docs/patterns/sticky-card/index.md b/docs/patterns/sticky-card/index.md
index 9ae76479e9..ccf6af9e22 100644
--- a/docs/patterns/sticky-card/index.md
+++ b/docs/patterns/sticky-card/index.md
@@ -1,61 +1,75 @@
---
title: Sticky card
+order: 110
+hasToc: true
tags:
- pattern
---
+
+
+
## Overview
Sticky cards slide into view at a certain scroll position and then anchor themselves to the edge of a browser window. They stay in one place as content scrolls underneath until a user dismisses them.
+
## Sample pattern
-{% example palette="none",
- alt="Sticky card",
- src="./sticky-card.svg" %}
+
+
+
+
+
## Style
A sticky card acts as a small container for a limited amount of content.
-{% example palette="lightest",
- alt="Sticky card naming",
- src="./sticky-card-style.png" %}
+
+
+
+
### Theme
The required elements in a sticky card are a close button, a title or a headline, a call to action, and a container (the light theme container features a drop shadow). The container consists of a background color and two rounded corners on the left or the right side, depending on the orientation. A thin border is also required even if the sticky card background color is different than the page background color.
-{% example palette="lightest",
- alt="Sticky card light theme",
- src="./sticky-card-theme-light.svg" %}
+
+
+
-{% example palette="darkest",
- alt="Sticky card dark theme",
- src="./sticky-card-theme-dark.svg" %}
+
+
+
### Layout
A sticky card features header, body, and footer sections, just like a normal Card. Header, body, and footer sections can only include a limited amount of content to ensure that the card doesn’t become too tall.
+
### Close button
A close button is required for accessibility if a user wants to dismiss the sticky card from their view if they find it distracting.
+
### Header
The header section can feature only a limited amount of content like a card title or a small headline. This required section introduces what the content is and shouldn’t be hidden.
+
### Body
To keep the vertical height short, the body section can only include a small amount of text or a small image thumbnail. If a card title and a headline are enough to explain what the content is, the body section can be hidden.
+
### Footer
The footer section can include normal links or a call to action. A sticky card footer is always required and shouldn't be hidden.
-{% example palette="lightest",
- alt="Sticky card content sections",
- src="./sticky-card-layout.svg" %}
+
+
+
+
## Usage
@@ -65,28 +79,52 @@ The sticky card placement is different than the normal card placement, where a n
A sticky card can be placed on the left or the right edge of a page and it has a fixed width of 262px.
-{% example palette="medium",
- alt="Sticky card on right side",
- src="./sticky-card-layout-right.svg" %}
+
+
+
+
### Content
A sticky card has limited vertical height, so keep content short and only include essential information. A sticky card can include a card title, a headline, text, and a call to action, but not all of these elements need to be included at the same time. Move any extra content to other parts of the page if possible.
-{% example palette="lightest",
- alt="Sticky card content sections",
- src="./sticky-card-content.png" %}
+
+
+
### Character count
- The recommended maximum character count for the elements of a sticky card are listed below and include spaces.
- | Element {style="width: 50%" } | Character count |
- |-------------------------------|-----------------|
- | Title | 20 |
- | Headline | 50 |
- | Body text | 120 |
- | Footer | 55 |
+The recommended maximum character count for the elements of a sticky card are listed below and include spaces.
+
+
+
+
+
+ Element
+ Character count
+
+
+
+
+ Title
+ 20
+
+
+ Headline
+ 50
+
+
+ Body text
+ 120
+
+
+ Footer
+ 55
+
+
+
+
### Alignment
@@ -97,33 +135,34 @@ Text and other content in a sticky card is always left-aligned, even if the stic
Don’t use more than one sticky card per page.
-{% example palette="wrong",
- alt="Sticky card multiple issue",
- src="./sticky-card-best-practices-1.svg" %}
+
+
+
Don’t change the width of a sticky card on large screens, it’s fixed at 262px.
-{% example palette="wrong",
- alt="Sticky card width issue",
- src="./sticky-card-best-practices-2.svg" %}
+
+
+
Don’t anchor a sticky card on small screens, it covers too much content.
-{% example palette="wrong",
- alt="Sticky card overlap issue",
- src="./sticky-card-best-practices-3.svg" %}
+
+
+
Don't omit the close button, it’s needed for accessibility.
-{% example palette="wrong",
- alt="Sticky card close button issue",
- src="./sticky-card-best-practices-4.svg" %}
+
+
+
Don’t use more than one call to action.
-{% example palette="wrong",
- alt="Sticky card call to action issue",
- src="./sticky-card-best-practices-5.svg" %}
+
+
+
+
## Behavior
@@ -131,43 +170,51 @@ Don’t use more than one call to action.
A sticky card is always hidden until it slides into view. The trigger is when a user reaches a specific scroll position on a page, which should be below the fold to avoid distracting a user as soon as a page loads.
+
### Scrolling
A sticky card can be anchored to the left or the right edge of a page and it stays in the same position when a user scrolls up or down. Any content below will scroll underneath, but it will be partially covered.
+
### Dismissing
A user can click on or tap the close button if they want to dismiss the sticky card from their view. The page’s scroll position won’t be impacted and the sticky card won’t return in the same browsing session after it’s closed.
+
### Vertical height
The vertical height of a sticky card greatly expands when too much content is placed inside. Doing this will cover too much content and negatively impact the user experience, so keep the content short to maintain as close to a square aspect ratio as possible.
-{% example palette="lightest",
- alt="Sticky card vertical height caution",
- src="./sticky-card-behavior-height.svg" %}
+
+
+
+
## Breakpoints
A sticky card is 262px wide on large screens only. On small screens, it acts like a normal card and is placed in a predetermined spot on a page, but it maintains the same styles.
+
### Desktop
-{% example palette="none",
- alt="Sticky card desktop layout",
- src="./sticky-card-responsive-desktop.svg" %}
+
+
+
+
### Tablet
-{% example palette="none",
- alt="Sticky card tablet layout",
- src="./sticky-card-responsive-tablet.svg" %}
+
+
+
+
### Mobile
-{% example palette="none",
- alt="Sticky card mobile layout",
- src="./sticky-card-responsive-mobile.svg" %}
+
+
+
+
## Interaction states
@@ -178,16 +225,18 @@ Since a sticky card can consist of a variety of elements, refer to the specific
A sticky card uses [space tokens](/tokens/space/) to define spacing
values between elements.
+
+
+
+
+
{% spacerTokensTable
headline="",
caption='',
headingLevel="4",
tokens="--rh-space-lg, --rh-space-xl" %}
{% endspacerTokensTable %}
+
- {% example palette="lightest",
- alt="Sticky card spacing",
- src="./sticky-card-spacing.svg" %}
-
-{% include 'feedback.html' %}
+{% include 'partials/component/feedback.html' %}
diff --git a/docs/patterns/video-thumbnail/index.md b/docs/patterns/video-thumbnail/index.md
index 6a4c3e5a72..3077808df2 100644
--- a/docs/patterns/video-thumbnail/index.md
+++ b/docs/patterns/video-thumbnail/index.md
@@ -1,65 +1,80 @@
---
title: Video thumbnail
+order: 120
+hasToc: true
tags:
- pattern
---
+
+
+
+
## Overview
A Video thumbnail is a graphical preview of a video overlayed with a play button. When it’s selected, a video player modal will be displayed so a user can watch the video at a larger size.
## Sample pattern
-{% example palette="none",
- alt="Video thumbnail",
- src="./video-thumbnail.svg" %}
+
+
+
+
+
## Style
A video thumbnail is a combination of a graphic with a slightly transparent play button on top. A video thumbnail can also include an optional caption underneath that explains what the video is.
-{% example palette="light",
- alt="Video thumbnail specs",
- src="./video-thumbnail-style.svg" %}
+
+
+
+
## Theme
-{% example palette="light",
- alt="Video thumbnail light theme",
- src="./video-thumbnail-theme-light.svg" %}
-
-{% example palette="darkest",
- alt="Video thumbnail dark theme",
- src="./video-thumbnail-theme-dark.svg" %}
+
+
+
+
+
+
+
+
+
### Button
A video thumbnail can include either a light or a dark play button, depending on the image underneath. If an image is lighter, use a dark play button for accessibility and vice versa.
-
- {% example palette="light",
- alt="Play button on light theme",
- src="./video-button-light.svg" %}
-
- {% example palette="darkest",
- alt="Play button on dark theme",
- src="./video-button-dark.svg" %}
-
+
+
+
+
+
+
+
+
+
+
## Usage
A video thumbnail can be used to indicate that a video can be played and using a caption underneath isn’t required.
+
### Layouts
A video thumbnail can be used in most layouts that have enough space to accommodate a small image with a play button on top. A video thumbnail used in a card is a good example of a minimum size.
-{% example palette="light",
- alt="Specs of video button thumbnail",
- src="./video-thumbnail-layout-specs.svg" %}
+
+
+
+
### Caption
An optional descriptor caption can be placed underneath the video thumbnail, it can be left- or center-aligned, depending on how the video is oriented.
+
### Character counts
A caption should be limited to 150 characters.
@@ -69,15 +84,16 @@ A caption should be limited to 150 characters.
Don't reposition the play button.
-{% example palette="wrong",
- alt="Don't reposition play button",
- src="./video-thumbnail-best-practices-1.png" %}
+
+
+
Don't change the aspect ratio of a video thumbnail.
-{% example palette="wrong",
- alt="Don't change aspect ratio",
- src="./video-thumbnail-best-practices-2.png" %}
+
+
+
+
## Behavior
@@ -85,88 +101,103 @@ Don't change the aspect ratio of a video thumbnail.
When a video thumbnail is smaller than six columns, selecting the play button triggers a [Video player modal](../modal) where a larger version of the video will play on top of a background overlay.
+
### Inline
When a video thumbnail is larger than six columns, the video will play inline on the page.
+
## Responsive design
A video thumbnail changes size, but it should maintain its aspect ratio across all screen sizes. The caption also maintains the same text size, but changes alignment to match the video thumbnail.
+
### Desktop, centered
-{% example palette="none",
- alt="Video thumbnail centered",
- src="./video-thumbnail-responsive-desktop.svg" %}
+
+
+
When centered, the video thumbnail and caption should span six grid columns
-{% example palette="none",
- alt="Video thumbnail sides",
- src="./video-thumbnail-responsive-desktop-sides.svg" %}
+
+
+
When aligned on the left or right edge of the grid, the video thumbnail and caption should span five grid columns
### Mobile
-{% example palette="none",
- alt="Video thumbnail on mobile",
- src="./video-thumbnail-responsive-mobile.svg" %}
+
+
+
+
## Interaction states
The only interactive element in a video thumbnail is the play button. For more information about modal interaction states, see [Video player modal](../modal).
+
### Default
-{% example palette="light",
- alt="Video thumbnail default state",
- src="./video-thumbnail-interaction-default.svg" %}
+
+
+
+
+
### Focus
-{% example palette="light",
- alt="Video thumbnail focus state",
- src="./video-thumbnail-interaction-focus.svg" %}
+
+
+
+
+
### Hover
-{% example palette="light",
- alt="Video thumbnail hover state",
- src="./video-thumbnail-interaction-hover.svg" %}
+
+
+
+
+
### Active
-{% example palette="light",
- alt="Video thumbnail active state",
- src="./video-thumbnail-interaction-active.svg" %}
-
-
- {% example palette="light",
- alt="Video thumbnail hover state light",
- src="./video-button-hover-state-dark.svg" %}
-
- The dark play button background becomes 25% darker on hover
- {.example-notes}
-
- {% example palette="darkest",
- alt="Video thumbnail hover state dark",
- src="./video-button-hover-state-light.svg" %}
-
- The light play button background becomes 25% lighter on hover
- {.example-notes}
-
+
+
+
+
+
+
+
+
+
+
## Spacing
A video thumbnail uses [space tokens](/tokens/space/) to define spacing
values between elements.
-{% spacerTokensTable
- headline="",
- caption='',
- headingLevel="4",
- tokens="--rh-space-xl" %}
-{% endspacerTokensTable %}
+
+
+
+
+
+ {% spacerTokensTable
+ headline="",
+ caption='',
+ headingLevel="4",
+ tokens="--rh-space-xl" %}
+ {% endspacerTokensTable %}
+
-{% example palette="light",
- alt="Video thumbnail spacing specs",
- src="./video-thumbnail-spacing.svg" %}
-{% include 'feedback.html' %}
\ No newline at end of file
+{% include 'partials/component/feedback.html' %}
diff --git a/docs/prerelease-notes.njk b/docs/prerelease-notes.njk
deleted file mode 100644
index 44bbe923dd..0000000000
--- a/docs/prerelease-notes.njk
+++ /dev/null
@@ -1,424 +0,0 @@
----
-layout: layout-basic.njk
-title: Beta release notes
----
-
-
-
-{% import 'component/components.njk' as components %}
-
-{% call components.section() -%}
-
-
-
-{%- endcall %}
-
-{% call components.section("January 2023") -%}
-
- Changed
-
-
-
-
-
-
-
- Page name
- Notes
-
-
-
-
- Icon libraries
Product logo library
- Rewrote the content of the Icon libraries and Product logo library pages to better explain the updated process for accessing brand assets directly from Adobe Creative Cloud apps.
-
-
-
-
-
- Deprecated
-
-
-
-
-
-
-
- Component name
- Notes
-
-
-
-
- Button
- Removed large version from library
-
-
-
-
-
-{%- endcall %}
-
-{% call components.section("December 2022") -%}
-
- Added
-
-
-
-
-
-
-
- Component name
- Notes
-
-
-
-
- Alert
- Added README to GitHub and demo to website
-
-
- Blockquote
- Added README to GitHub and demo to website
-
-
- Footer
- Added README to GitHub and demo to website
-
-
- Pagination
- Added README to GitHub and demo to website
-
-
- Secondary navigation
- Added README to GitHub and demo to website
-
-
- Spinner
- Added README to GitHub and demo to website
-
-
- Statistic
- Added README to GitHub and demo to website
-
-
- Tag
- Added README to GitHub and demo to website
-
-
-
-
-
-{%- endcall %}
-
-{% call components.section("September 2022") -%}
-
- Added
-
-
-
-
-
-
-
- Component name
- Notes
-
-
-
-
- Blockquote
- Added component to library
-
-
- Footer
- Added component to library and website
-
-
- Secondary navigation
- Added component to library and website
-
-
- Statistic
- Added component to library and website
-
-
-
-
-
- Changed
-
-
-
-
-
-
-
- Component name
- Notes
-
-
-
-
- Blockquote
- Changed component name from Quote
to Blockquote
for improved consistency
-
-
- Primary navigation
- Updated page with better UX writing and better image examples
-
-
-
-
-
-{%- endcall %}
-
-{% call components.section("May 2022") -%}
-
- Added
-
-
-
-
-
-
-
- Page name
- Notes
-
-
-
-
- How we build
- Added a How we build page to the About section, it includes details about how to build branded experiences using the various repos.
-
-
- Overview
- Added an Overview page to the Get started section, it includes details about available libraries, how to access libraries, and includes a video of how to use libraries.
-
-
- Design system kit
- Added a Design system kit page to the Get started section, it includes details about how to get started, how to access the library, working in XD, best practices, contributing, and frequently asked questions.
-
-
- FTS starter kit
- Added an FTS starter kit page to the Get started section, it includes details about what FTS/Drupal is, how get started, how to access the library, working in XD/Drupal, best practices, contributing, and frequently asked questions.
-
-
- Icon libraries
Product logo library
- Added Icon libraries and Product logo library pages to the Get started section, they include details about how to access the libraries, types of icons/logos, colors/sizing, best practices, and frequently asked questions.
-
-
-
-
-
-{%- endcall %}
-
-{% call components.section("February 2022") -%}
-
- Added
-
-
-
-
-
-
-
- Component name
- Notes
-
-
-
-
- Button
- Added large version of component to library
-
-
- Header navigation
- Added component to library
-
-
- Link
- Added component to website
-
-
- Popover
- Added component to website
-
-
-
-
-
- Changed
-
-
-
-
-
-
-
- Component name
- Notes
-
-
-
-
- Alert
- Updated page with better UX writing, better image examples, and cross-links to related component pages
-
-
- Call to action
- Updated page with better UX writing, better image examples, cross-links to related components, accessibility best practices, and interaction states
-
-
- Form
- Updated page with better UX writing, better image examples, cross-links to related components, accessibility best practices, and interaction states
-
-
- Personalization patterns
- Updated page with better image examples and clearer usage guidelines
-
-
- Search bar
- Updated page with better UX writing, better image examples, and cross-links to related component pages
-
-
- Tooltip
- Updated page with better UX writing, better image examples, and cross-links to related component pages
-
-
-
-
-
-{%- endcall %}
-
-{% call components.section("June 2021") -%}
-
- Added
-
-
-
-
-
-
-
- Component name
- Notes
-
-
-
-
- Form
- Added dark theme components with container and without container to library
-
-
- Progress steps
- Added component to website
-
-
-
-
-
-{%- endcall %}
-
-{% call components.section("March 2021") -%}
-
- Added
-
-
-
-
-
-
-
- Component name
- Notes
-
-
-
-
- Breadcrumb
- Added light theme and dark theme components to library
-
-
- External link icon
- Added light theme and dark theme icons to library
-
-
- Jump links
- Added horizontal light theme and dark theme components to library
-
-
- Link
- Added light theme and dark theme components to library
-
-
- Popover
- Added light theme and dark theme components to library
-
-
- Primary navigation
- Added a full tray component to library
-
- Added two-column and three-column components to library
-
- Added a logged in component to library
-
-
-
- Stateful button
- Added light theme and dark theme components to library
-
-
- Switch
- Added components with and without labels to library
-
-
-
-
-
-{%- endcall %}
-
-{% call components.section("October 2020") -%}
-
- Added
-
-
-
-
-
-
-
- Component name
- Notes
-
-
-
-
- Avatar
- Added a dark theme component to library
-
-
- Label
- Added filled and outlined components to library
-
-
- Sticky card
- Added light theme and dark theme components to Personalization patterns page
-
-
- Tooltip
- Added top, right, bottom, and left light theme components to library
-
-
- Typography
- Added dark theme text and list styles to library
-
-
-
-
-
-{%- endcall %}
-
-{% include 'feedback.html' %}
diff --git a/docs/public/red-hat-outfit.css b/docs/public/red-hat-outfit.css
deleted file mode 100644
index 157bf577e9..0000000000
--- a/docs/public/red-hat-outfit.css
+++ /dev/null
@@ -1,656 +0,0 @@
-/* Use this stylesheet once ready @import url("https://outfit-assets-production.s3.amazonaws.com/fonts/redhat/stylesheet.css"); */
-@import url("https://outfit-assets-production.s3.amazonaws.com/fonts/redhat/redhat-webfonts.css");
-@import url("https://fonts.googleapis.com/css?family=Overpass+Mono:400,700");
-
-:root {
- --red: #ee0000;
- --grey: #58595b;
- --blue: #00a4e4;
- --black: #000000;
- --text-black: #231f20;
- --light-grey: #e6e7e8;
- --lighter-grey: #ededee;
- --red1: #cc0000;
- --red2: #a30000;
- --red3: #820000;
- --white: #ffffff;
-}
-
-*,
-*:before,
-*:after {
- box-sizing: border-box;
- margin: 0;
- padding: 0;
- border: none;
- background: none;
-}
-
-html {
- font-size: 10.66666666666px;
-
- /* 10.666666666666666 === 8pt for print */
-}
-
-body,
-html {
- margin: 0;
-}
-
-body {
- font-size: 100%;
- font-family: "Red Hat Text", sans-serif;
- -webkit-font-smoothing: antialiased;
- line-height: 1.4;
-}
-
-img {
- display: block;
- max-width: 100%;
-}
-
-.page {
- position: relative;
- overflow: hidden;
- background: #ffffff;
- height: 100vh;
- width: 100vw;
-}
-
-.flex-col {
- display: flex;
- flex-direction: column;
-}
-
-/** Headings **/
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-family: "Red Hat Display", sans-serif;
-}
-
-p,
-li,
-a,
-cite {
- font-family: "Red Hat Text", sans-serif;
-}
-
-h1 {
- font-family: "Red Hat Display", sans-serif;
- font-size: 3.5em;
- line-height: 1.2em;
- font-weight: 400;
- margin-bottom: 5rem;
-}
-
-h2 {
- font-size: 1.25em;
- line-height: 1.2em;
- margin-bottom: 0.625em;
- font-weight: 700;
-}
-
-h3 {
- font-size: 1.125em;
- line-height: 1.41em;
- font-weight: 700;
- margin-bottom: 0.51875em;
-}
-
-h4 {
- font-size: 1.0625em;
- line-height: 1.2em;
- margin-bottom: 0.51875em;
- font-weight: 700;
-}
-
-h6 {
- font-size: 1.0625em;
- line-height: 1.2em;
- font-weight: 400;
- margin-bottom: 0.75em;
- font-family: var(--rh-font-family-code);
-}
-
-strong {
- font-weight: 500;
-}
-
-a {
- color: var(--blue);
-}
-
-/** Paragraph **/
-
-p {
- font-size: 1.0625em;
- line-height: 1.41em;
- font-weight: 400;
- margin-top: 0;
- margin-bottom: 0.75em;
-}
-
-.p-med {
- font-size: 1em;
- line-height: 1.3em;
-}
-
-p.small {
- font-size: 0.875em;
- line-height: 1.2em;
-}
-
-.p-xsmall {
- font-size: 0.75em;
- line-height: 1.25em;
-}
-
-p:last-child {
- margin: 0;
-}
-
-/** List UL **/
-
-ul {
- font-size: 1.0625em;
- font-weight: 400;
- list-style: none;
- margin: 0 0 0.75em;
- padding: 0;
-}
-
-ul li {
- position: relative;
- padding-left: 1em;
- line-height: 1.41em;
- font-weight: 400;
- margin-top: 0;
- margin-bottom: 0.75rem;
-}
-
-ul ul,
-ul li:not(:first-of-type) {
- margin-top: 0.15em;
-}
-
-ul li:before {
- content: "•";
- position: absolute;
- font-size: 1.4em;
- top: 0;
- left: 0;
-}
-
-ul ul {
- margin: 0.15em 0 0 1em;
-}
-
-ul ul li {
- padding-left: 1em;
-}
-
-/** List OL **/
-
-ol {
- font-size: 1.0625em;
- font-weight: 400;
- list-style: none;
- margin: 0 0 0.75em;
- padding: 0;
- counter-reset: ol;
-}
-
-ol li {
- position: relative;
- padding-left: 1em;
- line-height: 1.41em;
- font-weight: 400;
- margin-top: 0;
- margin-bottom: 0.75rem;
-}
-
-ol li ol,
-ol li:not(:first-of-type) {
- margin-top: 0.15em;
-}
-
-ol li:before {
- position: absolute;
- top: 0.03em;
- left: 0;
- font-weight: 700;
- font-size: 0.7647em;
- counter-increment: ol;
- content: counters(ol, ".") ".";
-}
-
-ol ol {
- margin: 0.15em 0 0 1em;
-}
-
-ol ol li {
- padding-left: 1em;
-}
-
-/** Clearspace **/
-
-.clearspace-container {
- width: 247px;
- height: 58px;
-}
-
-.clearspace {
- padding: 40%;
- background-color: var(--blue);
-}
-
-/** Tables **/
-
-table {
- width: 100%;
- border-collapse: collapse;
-}
-
-table tr:nth-child(odd) td {
- background-color: var(--light-grey);
-}
-
-table tr:last-child td {
- border-bottom: 1px solid var(--grey);
-}
-
-table tr:first-child th {
- border-top: 1px solid var(--grey);
- border-bottom: 1px solid var(--grey);
- background-color: white;
-}
-
-td {
- font-size: 1.0625em;
- line-height: 1.41em;
- font-weight: 500;
- padding: 0.4em;
- border-right: 1px solid white;
-}
-
-tr td:last-child {
- border-right: initial;
-}
-
-th {
- font-size: 1.0625em;
- line-height: 1.41em;
- font-weight: 700;
- text-align: left;
- padding: 0.4em 0.4em 0.35em;
-}
-
-/** Image Container **/
-
-.img-container {
- background-color: var(--lighter-grey);
- padding: 1.2em;
-}
-
-.img-container img {
- max-height: 700px;
- max-width: 100%;
-}
-
-.img-container cite {
- border-top: 1px solid var(--grey);
- color: var(--grey);
- font-size: 0.875em;
- margin-top: 1.2em;
- padding-top: 0.875em;
- line-height: 1.2em;
- font-style: normal;
- display: block;
- width: 100%;
-}
-
-/** Sidebar **/
-
-.sidebar h1,
-.sidebar h2,
-.sidebar h3,
-.sidebar h4,
-.sidebar h5,
-.sidebar h6,
-.sidebar p {
- text-align: right;
- color: var(--grey);
-}
-
-.sidebar-content {
- border-top: 1px solid var(--grey);
- padding-top: 0.8em !important;
- margin-bottom: 1.2em;
- margin-top: 0.8em;
-}
-
-.sidebar h1 {
- line-height: 1.2em;
- font-size: 3em;
- font-weight: 700;
-}
-
-.sidebar p {
- font-size: 1em;
- line-height: 1.5em;
-}
-
-.sidebar-quote h2 {
- font-size: 1.375em;
- line-height: 1.36em;
- font-weight: 400;
- color: var(--grey);
-}
-
-.sidebar-quote p {
- font-size: 0.75em;
- line-height: 1.46em;
- margin-bottom: 1em;
-}
-
-.sidebar-quote p strong {
- font-weight: 500;
-}
-
-/** Footer **/
-
-.footnote {
- font-size: 0.875em;
- line-height: 1.71em;
- color: var(--grey);
- padding-top: 0.25em;
- padding-left: 1.3em;
- position: relative;
-}
-
-.footnote:before {
- content: attr(data-footnote-number);
- position: absolute;
- left: 0;
- font-weight: 700;
- font-size: 0.7647em;
-}
-
-.footnote__container {
- font-family: "Red Hat Text", sans-serif;
- font-size: 19.2px;
- border-top: 1px solid var(--text-black);
- margin-top: 2em;
- padding-top: 0.5em;
-}
-
-/** Utility Classes **/
-
-.red-hat-display-400 {
- font-family: "Red Hat Display", sans-serif;
- font-weight: 400;
-}
-
-.red-hat-display-500 {
- font-family: "Red Hat Display", sans-serif;
- font-weight: 500;
-}
-
-.red-hat-display-700 {
- font-family: "Red Hat Display", sans-serif;
- font-weight: 700;
-}
-
-.red-hat-display-900 {
- font-family: "Red Hat Display", sans-serif;
- font-weight: 900;
-}
-
-.red-hat-text-400 {
- font-family: "Red Hat Text", sans-serif;
- font-weight: 400;
-}
-
-.red-hat-text-500 {
- font-family: "Red Hat Text", sans-serif;
- font-weight: 500;
-}
-
-.red-hat-text-700 {
- font-family: "Red Hat Text", sans-serif;
- font-weight: 700;
-}
-
-.overpass-mono-400 {
- font-family: var(--rh-font-family-code);
- font-weight: 400;
-}
-
-.overpass-mono-700 {
- font-family: var(--rh-font-family-code);
- font-weight: 700;
-}
-
-.color-red {
- color: var(--red);
-}
-
-.color-blue {
- color: var(--blue);
-}
-
-.color-light-grey {
- color: var(--light-grey);
-}
-
-.color-light-light-grey {
- color: var(--lighter-grey);
-}
-
-.color-grey {
- color: var(--grey);
-}
-
-.color-text-black {
- color: var(--text-black);
-}
-
-.color-black {
- color: var(--black);
-}
-
-.background-red {
- background: var(--red);
-}
-
-.background-blue {
- background: var(--blue);
-}
-
-.background-light-grey {
- background: var(--light-grey);
-}
-
-.background-light-light-grey {
- background: var(--lighter-grey);
-}
-
-.background-grey {
- background: var(--grey);
-}
-
-.background-text-black {
- background: var(--text-black);
-}
-
-.background-black {
- background: var(--black);
-}
-
-/** Overflow Styles **/
-.overflow {
- position: relative !important;
- border: 1px dashed red;
- color: red !important;
-}
-
-.overflow * {
- color: inherit !important;
-}
-
-.overflow:before {
- content: "+";
- position: absolute;
- z-index: 99999999;
- top: 5px;
- right: 5px;
- height: 1.5em;
- width: 1.5em;
- min-width: 15px;
- min-height: 15px;
- border: 1px solid red;
- font-size: 1em;
- background-color: white;
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.overflow:hover:before {
- background-color: red;
- color: white;
-}
-
-.overflow:after {
- display: none;
-}
-
-.overflow:hover:after {
- display: block;
- content: "Number of lines exceeds total allowed";
- position: absolute;
- top: calc(1.5em + 5px);
- right: 5px;
- background-color: black;
- color: white;
- padding: 5px;
- font-size: 1em;
- font-weight: 400;
- width: 15em;
-}
-
-/** Logos **/
-
-.redhatLogo {
- font-size: 1.25em !important;
- margin: 0.8em;
-}
-
-.redhatLogo svg {
- width: 7.75em;
-}
-
-.redhatLogo span {
- display: block;
- font-size: 1.26em;
- font-weight: 500;
- margin-left: 2.2125em;
- margin-top: -0.4em;
- color: var(--black);
- white-space: pre-wrap;
-}
-
-/** Co Brand Logos **/
-.cobrand {
- display: flex;
- flex-direction: row;
- justify-content: flex-start;
- align-items: center;
-}
-
-.cobrandLogo:before {
- content: "";
- margin-left: 0.5em;
- padding-left: 1.5em;
- border-left: 2px solid #000000;
- height: 100%;
-}
-
-.cobrand .cobrandLogo {
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: flex-start;
- height: 2.5em !important;
-}
-
-.cobrand .cobrandLogo img {
- height: 100% !important;
- max-width: 100%;
-}
-
-.co-brand-logo {
- font-size: 2.01rem;
- margin: 0.8em 0;
- display: flex;
- width: 100%;
- align-items: center;
-}
-
-.co-brand-logo .vertical-line {
- height: 9.2rem;
- width: 0.1rem;
- background-color: var(--grey);
- margin: 2.3rem 1.3rem;
- border-radius: 2px;
-}
-
-.co-brand-image-1,
-.co-brand-image-2 {
- width: 5em;
-}
-
-.co-brand-image-1 img,
-.co-brand-image-2 img {
- height: 100%;
- width: 100%;
-}
-
-/** Social Blocks **/
-.social-block {
- flex-grow: 1;
- justify-content: flex-end;
- text-align: right;
- margin-right: 0;
- margin-bottom: 0.1em;
-}
-
-.social-icons {
- line-height: 10%;
- margin-bottom: 0.13em;
-}
-
-.social-icons a {
- display: inline-block;
- margin-left: -0.14em;
-}
-
-.social-icons img {
- width: 0.41em;
-}
-
-.social-links {
- margin-bottom: 0.4em;
-}
-
-.social-links a {
- font-size: 0.17em;
- color: #000000;
- display: block;
- line-height: 1.3;
-}
diff --git a/docs/release-notes.md b/docs/release-notes.md
deleted file mode 100644
index 5dc4f87783..0000000000
--- a/docs/release-notes.md
+++ /dev/null
@@ -1,149 +0,0 @@
----
-layout: layout-basic.njk
-title: Release notes
-bodyClasses: page-docs
----
-
-## Changelog
-
-We are continually making changes in order to improve and grow the Red Hat Design System. If you think changes need to be made to a component, foundation, or anything else, please submit a [GitHub issue](https://github.com/RedHat-UX/red-hat-design-system/issues).
-
-
-
-
-
-
-## Version 1.4.0
-Released April 22, 2024
-
-### Highlights
-
-| Change | Notes {style="width: 70%" } |
-| ------------------------------ | --------------------------------- |
-| Added `` | Website status communicates the operational status of a website or domain using a status icon and link. It is usually located in the Footer component. |
-| Added `` | Back to top component is a fragment link that allows users to quickly navigate to the top of a lengthy content. | A skip link is used to skip repetitive content on a page. It is hidden by default and can be activated by hitting the "Tab" key after loading/refreshing a page. |
-| Added `` | A skip link is used to skip repetitive content on a page. It is hidden by default and can be activated by hitting the "Tab" key after loading/refreshing a page. |
-| Updated `` | Added line numbers option, `Show more` toggle, copy and wrap actions, to `` |
-| Updated `` | Improved focus accessibility for keyboard navigation users on firefox. |
-| Updated `` | Improved focus accessibility on firefox. |
-| Updated `` | Added an accents slot with placement options as inline and bottom. |
-| Updated `` | Make sure alerts always have to correct (lightest) colour palette. |
-| Updated `` | Allow tabs with long text content to fit into different-sized containers. |
-| Updated PatternFly Elements tooling | [Patch update to dependencies](https://github.com/patternfly/patternfly-elements/releases/tag/%40patternfly%2Fpfe-core%403.0.0), including Lit version 3. |
-
-View version 1.4 release notes
-
-
-
-
-## Version 1.3.0
-Released January 11, 2024
-
-### Highlights
-
-| Change | Notes {style="width: 70%" } |
-| ------------------------------ | --------------------------------- |
-| Added `` | a content container that provides accessible background and font color theming for its child elements. |
-| Updated to `RH Tokens 2.0` | Uses RHDS Tokens version 2.0. [See release notes](https://github.com/RedHat-UX/red-hat-design-system/releases/tag/v1.3.0) for important info regarding this update. |
-| Updated `` | Tab Panels can now have their margin and padding overridden. |
-| Updated `` | Added `numeric` CSS shadow part. |
-| Added `accessible-label` to `` | Tile's form control labels can now be customized. |
-| Fixed `` radio and checkboxes | Radio and checkbox tiles now submit their values in `
-
-
-## Version 1.2.0
-Released October 16, 2023
-
-### Highlights
-
-| Change | Notes {style="width: 70%" } |
-| ------------------------------ | --------------------------------- |
-| Added `` | A table is a container for displaying information. It allows a user to scan, examine, and compare large amounts of data. |
-| Added `` | A tile is a flexible layout with a clickable and contained surface. |
-| Added `` | Provides consistent formats for displaying date and time values. |
-| Added `` current page indicator support | Updated support for a current page indicator using `aria-current="page"`. |
-| Improved keyboard navigation on `` | Secondary Navigation now has improved keyboard navigation. |
-| Fixed `` `header` slot | Card's header slot now displays items vertically instead of stacking, allowing for more than one item to display in the header. |
-| Fixed `` `brick` variant | Brick variants of calls to action (CTAs) are now full width. |
-
-
-View version 1.2 release notes
-
-
-
-
-## Version 1.1.0
-Released July 5, 2023
-
-### Highlights
-
-| Change | Notes {style="width: 70%" } |
-| ------------------------------ | --------------------------------- |
-| Added `` | Card creates a component with a header, body, and footer. The header and footer are optional. |
-| Added `` | Audio-player creates a custom UI for audio files. |
-| Added `` | A container for a block of code. May be composed into a toolbar or contain copy buttons or other interactive components. |
-| Added new CSS custom properties for `` | New CSS custom properties, like `--rh-tooltip-arrow-size`, `--rh-tooltip-content-background-color`, and more! |
-| Added outline variant for `` | Now you can use `variant="outline"`. |
-
-
-View version 1.1 release notes
-
-
-
-
-## Version 1.0.0
-Released April 3, 2023
-
-### Highlights
-
-| Change | Notes {style="width: 70%" } |
-| ------------------------------ | --------------------------------- |
-| Added `` | A Call to Action is a styled link that directs a user to other pages or sometimes displays hidden content. |
-| Added `` | Spinner consists of an animated circle and sometimes a message, and it indicates that a section is loading. |
-| Added `` | Button is a form-associated custom element. Buttons allow users to perform an action when triggered. |
-| Added `` | A tag is an inline-block element component that provides a distinct visual style for metadata in a UI. |
-| Added `` | Displays a quote with author's name and title. |
-| Added `` | The subnav component is used when an alternate navigation structure is needed to provide additional navigation on a site that does not need the product branding or structural depth that `rh-secondary-nav` provides. |
-| Added `` | A tab set of layered content, including tab widgets and their associated tab panel. |
-| Added `` | Accordion displays multiple, related disclosure widgets. |
-| Added `` | An alert displays auxiliary information on a website. An alert can have one of several states of severity. |
-| Added `` | An Avatar is a placeholder graphic for a photo or an image that is placed to the left or on top of text. |
-| Added `` | Pagination is a web component for navigating paginated content. |
-| Added `` | An element which can be used to display statistics inside of an app. |
-| Added `` | A badge is used to annotate other information with numerical content. |
-| Added `` | A tooltip displays floating content next to a portion of inline content. |
-| Added `` | A non-primary navigation for products and subcategory pages. |
-| Added `` | A universal footer component. |
-| Added `` | A standalone global footer component. |
-| Renamed `` to `` | Renamed the global slot to universal. |
-| Renamed `` to `` | Renamed the component and all sub components to `rh-navigation-secondary-*`. |
-
-
-
-View version 1.0 release notes
-
-
-
-
-
-
-## Older versions
-
-For release notes on older versions, please [view our release notes on GitHub](https://github.com/RedHat-UX/red-hat-design-system/releases).
-
-
-
-{% feedback %}
- Roadmap
- For an up-to-date outline of what we're working on and what we're planning to do in the Red Hat Design System, visit our roadmap.
-{% endfeedback %}
diff --git a/docs/release-notes/index.md b/docs/release-notes/index.md
new file mode 100644
index 0000000000..e15a1e5c9f
--- /dev/null
+++ b/docs/release-notes/index.md
@@ -0,0 +1,317 @@
+---
+layout: layouts/pages/basic.njk
+title: Release notes
+hasToc: true
+importElements:
+ - rh-tile
+---
+
+
+
+
+
+
+
+## Changelog
+
+We are continually making changes in order to improve and grow the Red Hat Design System. If you think changes need to be made to a component, foundation, or anything else, please submit a [GitHub issue](https://github.com/RedHat-UX/red-hat-design-system/issues).
+
+
+
+ Changelog
+
+
+
+
+## Version 1.4.0
+Released April 22, 2024
+
+### Highlights
+
+| Change | Notes {style="width: 70%" } |
+| ------------------------------ | --------------------------------- |
+| Added `` | Website status communicates the operational status of a website or domain using a status icon and link. It is usually located in the Footer component. |
+| Added `` | Back to top component is a fragment link that allows users to quickly navigate to the top of a lengthy content. | A skip link is used to skip repetitive content on a page. It is hidden by default and can be activated by hitting the "Tab" key after loading/refreshing a page. |
+| Added `` | A skip link is used to skip repetitive content on a page. It is hidden by default and can be activated by hitting the "Tab" key after loading/refreshing a page. |
+| Updated `` | Added line numbers option, `Show more` toggle, copy and wrap actions, to `` |
+| Updated `` | Improved focus accessibility for keyboard navigation users on firefox. |
+| Updated `` | Improved focus accessibility on firefox. |
+| Updated `` | Added an accents slot with placement options as inline and bottom. |
+| Updated `` | Make sure alerts always have to correct (lightest) colour palette. |
+| Updated `` | Allow tabs with long text content to fit into different-sized containers. |
+| Updated PatternFly Elements tooling | [Patch update to dependencies](https://github.com/patternfly/patternfly-elements/releases/tag/%40patternfly%2Fpfe-core%403.0.0), including Lit version 3. |
+
+View version 1.4 release notes
+
+
+
+
+
+## Version 1.3.0
+Released January 11, 2024
+
+### Highlights
+
+
+
+
+
+ Change
+ Notes
+
+
+
+
+ Added <rh-surface>
+ a content container that provides accessible background and font color theming for its child elements.
+
+
+ Updated to RH Tokens 2.0
+ Uses RHDS Tokens version 2.0. See release notes for important info regarding this update.
+
+
+ Updated <rh-tabs-panel>
+ Tab Panels can now have their margin and padding overridden.
+
+
+ Updated <rh-pagination>
+ Added numeric CSS shadow part.
+
+
+ Added accessible-label to <rh-tile>
+ Tile's form control labels can now be customized.
+
+
+ Fixed <rh-tile>
radio and checkboxes
+ Radio and checkbox tiles now submit their values in
+
+
+
+
+
+View version 1.3 release notes
+
+
+
+
+
+## Version 1.2.0
+Released October 16, 2023
+
+### Highlights
+
+
+
+
+
+ Change
+ Notes
+
+
+
+
+ Added <rh-table>
+ A table is a container for displaying information. It allows a user to scan, examine, and compare large amounts of data.
+
+
+ Added <rh-tile>
+ A tile is a flexible layout with a clickable and contained surface.
+
+
+ Added <rh-timestamp>
+ Provides consistent formats for displaying date and time values.
+
+
+ Added <rh-navigation-secondary>
current page indicator support
+ Updated support for a current page indicator using aria-current="page"
.
+
+
+ Improved keyboard navigation on <rh-navigation-secondary>
+ Secondary Navigation now has improved keyboard navigation.
+
+
+ Fixed <rh-card>
header
slot
+ Card's header slot now displays items vertically instead of stacking, allowing for more than one item to display in the header.
+
+
+ Fixed <rh-cta>
brick
variant
+ Brick variants of calls to action (CTAs) are now full width.
+
+
+
+
+
+View version 1.2 release notes
+
+
+
+
+
+## Version 1.1.0
+Released July 5, 2023
+
+### Highlights
+
+
+
+
+
+ Change
+ Notes
+
+
+
+
+ Added <rh-card>
+ Card creates a component with a header, body, and footer. The header and footer are optional.
+
+
+ Added <rh-audio-player>
+ Audio-player creates a custom UI for audio files.
+
+
+ Added <rh-code-block>
+ A container for a block of code. May be composed into a toolbar or contain copy buttons or other interactive components.
+
+
+ Added new CSS custom properties for <rh-tooltip>
+ New CSS custom properties, like --rh-tooltip-arrow-size
, --rh-tooltip-content-background-color
, and more!
+
+
+ Added outline variant for <rh-tag>
+ Now you can use variant="outline"
.
+
+
+
+
+
+View version 1.1 release notes
+
+
+
+
+
+## Version 1.0.0
+Released April 3, 2023
+
+### Highlights
+
+
+
+
+
+ Change
+ Notes
+
+
+
+
+ Added <rh-cta>
+ A Call to Action is a styled link that directs a user to other pages or sometimes displays hidden content.
+
+
+ Added <rh-spinner>
+ Spinner consists of an animated circle and sometimes a message, and it indicates that a section is loading.
+
+
+ Added <rh-button>
+ Button is a form-associated custom element. Buttons allow users to perform an action when triggered.
+
+
+ Added <rh-tag>
+ A tag is an inline-block element component that provides a distinct visual style for metadata in a UI.
+
+
+ Added <rh-blockquote>
+ Displays a quote with author's name and title.
+
+
+ Added <rh-subnav>
+ The subnav component is used when an alternate navigation structure is needed to provide additional navigation on a site that does not need the product branding or structural depth that rh-secondary-nav
provides.
+
+
+ Added <rh-tabs>
+ A tab set of layered content, including tab widgets and their associated tab panel.
+
+
+ Added <rh-accordion>
+ Accordion displays multiple, related disclosure widgets.
+
+
+ Added <rh-alert>
+ An alert displays auxiliary information on a website. An alert can have one of several states of severity.
+
+
+ Added <rh-avatar>
+ An Avatar is a placeholder graphic for a photo or an image that is placed to the left or on top of text.
+
+
+ Added <rh-pagination>
+ Pagination is a web component for navigating paginated content.
+
+
+ Added <rh-stat>
+ An element which can be used to display statistics inside of an app.
+
+
+ Added <rh-badge>
+ A badge is used to annotate other information with numerical content.
+
+
+ Added <rh-tooltip>
+ A tooltip displays floating content next to a portion of inline content.
+
+
+ Added <rh-secondary-nav>
+ A non-primary navigation for products and subcategory pages.
+
+
+ Added <rh-footer>
+ A universal footer component.
+
+
+ Added <rh-global-footer>
+ A standalone global footer component.
+
+
+ Renamed <rh-global-footer>
to <rh-footer-universal>
+ Renamed the global slot to universal.
+
+
+ Renamed <rh-secondary-nav>
to <rh-navigation-secondary>
+ Renamed the component and all sub components to <rh-navigation-secondary-*>
.
+
+
+
+
+
+
+View version 1.0 release notes
+
+
+
+
+
+## Older versions
+
+For release notes on older versions, please [view our release notes on GitHub](https://github.com/RedHat-UX/red-hat-design-system/releases).
+
+
+
+
+ Roadmap
+ For an up-to-date outline of what we're working on and what we're planning to do in the Red Hat Design System, visit our roadmap.
+
diff --git a/docs/release-notes/prerelease.md b/docs/release-notes/prerelease.md
new file mode 100644
index 0000000000..447a174543
--- /dev/null
+++ b/docs/release-notes/prerelease.md
@@ -0,0 +1,408 @@
+---
+layout: layouts/pages/basic.njk
+title: Beta release notes
+permalink: "/prerelease-notes/index.html"
+importElements:
+ - rh-table
+---
+
+
+
+
+ Beta release notes
+
+ Return to Release notes
+
+
+
+ January 2023
+
+ Changed
+
+
+
+
+
+ Page name
+ Notes
+
+
+
+
+ Icon libraries
Product logo library
+ Rewrote the content of the Icon libraries and Product logo library pages to better explain the updated process for accessing brand assets directly from Adobe Creative Cloud apps.
+
+
+
+
+
+ Deprecated
+
+
+
+
+
+ Component name
+ Notes
+
+
+
+
+ Button
+ Removed large version from library
+
+
+
+
+
+
+
+ December 2022
+
+ Added
+
+
+
+
+
+ Component name
+ Notes
+
+
+
+
+ Alert
+ Added README to GitHub and demo to website
+
+
+ Blockquote
+ Added README to GitHub and demo to website
+
+
+ Footer
+ Added README to GitHub and demo to website
+
+
+ Pagination
+ Added README to GitHub and demo to website
+
+
+ Secondary navigation
+ Added README to GitHub and demo to website
+
+
+ Spinner
+ Added README to GitHub and demo to website
+
+
+ Statistic
+ Added README to GitHub and demo to website
+
+
+ Tag
+ Added README to GitHub and demo to website
+
+
+
+
+
+
+
+ September 2022
+
+ Added
+
+
+
+
+
+ Component name
+ Notes
+
+
+
+
+ Blockquote
+ Added component to library
+
+
+ Footer
+ Added component to library and website
+
+
+ Secondary navigation
+ Added component to library and website
+
+
+ Statistic
+ Added component to library and website
+
+
+
+
+
+ Changed
+
+
+
+
+
+ Component name
+ Notes
+
+
+
+
+ Blockquote
+ Changed component name from Quote
to Blockquote
for improved consistency
+
+
+ Primary navigation
+ Updated page with better UX writing and better image examples
+
+
+
+
+
+
+
+
+ May 2022
+
+ Added
+
+
+
+
+
+ Page name
+ Notes
+
+
+
+
+ How we build
+ Added a How we build page to the About section, it includes details about how to build branded experiences using the various repos.
+
+
+ Overview
+ Added an Overview page to the Get started section, it includes details about available libraries, how to access libraries, and includes a video of how to use libraries.
+
+
+ Design system kit
+ Added a Design system kit page to the Get started section, it includes details about how to get started, how to access the library, working in XD, best practices, contributing, and frequently asked questions.
+
+
+ FTS starter kit
+ Added an FTS starter kit page to the Get started section, it includes details about what FTS/Drupal is, how get started, how to access the library, working in XD/Drupal, best practices, contributing, and frequently asked questions.
+
+
+ Icon libraries
Product logo library
+ Added Icon libraries and Product logo library pages to the Get started section, they include details about how to access the libraries, types of icons/logos, colors/sizing, best practices, and frequently asked questions.
+
+
+
+
+
+
+
+
+ February 2022
+
+ Added
+
+
+
+
+
+ Component name
+ Notes
+
+
+
+
+ Button
+ Added large version of component to library
+
+
+ Header navigation
+ Added component to library
+
+
+ Link
+ Added component to website
+
+
+ Popover
+ Added component to website
+
+
+
+
+
+ Changed
+
+
+
+
+
+ Component name
+ Notes
+
+
+
+
+ Alert
+ Updated page with better UX writing, better image examples, and cross-links to related component pages
+
+
+ Call to action
+ Updated page with better UX writing, better image examples, cross-links to related components, accessibility best practices, and interaction states
+
+
+ Form
+ Updated page with better UX writing, better image examples, cross-links to related components, accessibility best practices, and interaction states
+
+
+ Personalization patterns
+ Updated page with better image examples and clearer usage guidelines
+
+
+ Search bar
+ Updated page with better UX writing, better image examples, and cross-links to related component pages
+
+
+ Tooltip
+ Updated page with better UX writing, better image examples, and cross-links to related component pages
+
+
+
+
+
+
+
+ June 2021
+
+ Added
+
+
+
+
+
+ Component name
+ Notes
+
+
+
+
+ Form
+ Added dark theme components with container and without container to library
+
+
+ Progress steps
+ Added component to website
+
+
+
+
+
+
+
+
+ March 2021
+
+ Added
+
+
+
+
+
+ Component name
+ Notes
+
+
+
+
+ Breadcrumb
+ Added light theme and dark theme components to library
+
+
+ External link icon
+ Added light theme and dark theme icons to library
+
+
+ Jump links
+ Added horizontal light theme and dark theme components to library
+
+
+ Link
+ Added light theme and dark theme components to library
+
+
+ Popover
+ Added light theme and dark theme components to library
+
+
+ Primary navigation
+ Added a full tray component to library
+
+ Added two-column and three-column components to library
+
+ Added a logged in component to library
+
+
+
+ Stateful button
+ Added light theme and dark theme components to library
+
+
+ Switch
+ Added components with and without labels to library
+
+
+
+
+
+
+
+
+ October 2020
+
+ Added
+
+
+
+
+
+ Component name
+ Notes
+
+
+
+
+ Avatar
+ Added a dark theme component to library
+
+
+ Label
+ Added filled and outlined components to library
+
+
+ Sticky card
+ Added light theme and dark theme components to Personalization patterns page
+
+
+ Tooltip
+ Added top, right, bottom, and left light theme components to library
+
+
+ Typography
+ Added dark theme text and list styles to library
+
+
+
+
+
+
+
+{% include 'partials/component/feedback.html' %}
diff --git a/docs/scss/__core/_css-properties.scss b/docs/scss/__core/_css-properties.scss
deleted file mode 100644
index a776cdec9b..0000000000
--- a/docs/scss/__core/_css-properties.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// :root,
-// pfe-band {
-// --pfe-band--Padding: 48px 64px;
-// --pfe-band--Padding--vertical: 48px;
-// --pfe-band--Padding--horizontal: 64px;
-// }
diff --git a/docs/scss/__core/_mixins.scss b/docs/scss/__core/_mixins.scss
deleted file mode 100644
index 40c02cd53d..0000000000
--- a/docs/scss/__core/_mixins.scss
+++ /dev/null
@@ -1,110 +0,0 @@
-@use "sass:map";
-@use "variables" as *;
-
-/// Breakpoint helper
-/// @todo Do we need an IE11 hack? I think we should have fallback styles for non-grid
-///
-/// @param {string} $breakpoint This can be a breakpoint from the $breakpoints map, or a value in pixels.
-/// @param {string} $min-max Can be either 'min-width' or 'max-width'. Defaults to 'min-width'.
-@mixin breakpoint($breakpoint, $min-max: "min-width") {
- $output: false;
-
- @if type-of($breakpoint) == number {
- $output: $breakpoint;
- } @else {
- $output: #{map.get($breakpoints, $breakpoint)};
- }
-
- @media ($min-max: #{$output}) {
- @content;
- }
-}
-
-/// Element invisibile (for accessibility)
-@mixin visually-hidden {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- clip-path: inset(50%);
- border: 0;
-}
-
-/// Element visible (for accessibility)
-@mixin un-visually-hide {
- position: static;
- width: auto;
- height: auto;
- overflow: visible;
- clip: auto;
- white-space: nowrap;
- clip-path: none;
- border: 0;
-}
-
-/// Helper that makes an element a content-container that constrains max-width
-@mixin content-container() {
- width: 100%;
- max-width: $grid-max-width;
- margin-left: auto;
- margin-right: auto;
-}
-
-/// Helper that makes an element a grid container
-@mixin grid-container() {
- grid-column: 1 / -1; // If nested in a grid, always span the full width of that parent grid.
- display: grid;
- grid-template-columns: repeat(6, minmax(0, 1fr));
- column-gap: 18px;
- justify-self: stretch;
-
- @include breakpoint(lima) {
- grid-template-columns: repeat(12, minmax(0, 1fr));
- max-width: $grid-max-width;
- margin-left: auto;
- margin-right: auto;
- }
-
- @include breakpoint(papa) {
- grid-template-columns: repeat(14, minmax(0, 1fr));
- }
-}
-
-/// Helper mixin that can go on text containers that should be as wide as text is allowed to go
-/// E.g. this would be used on the text in an article, case study, bot _not_ on text in a sidebar.
-@mixin full-width-text {
- grid-column: 1 / -1;
- justify-self: stretch;
- margin-left: 0;
- margin-right: 0;
- max-width: 100%; // Necessary to prevent FF from overflowing text.
-
- @include breakpoint(lima) {
- grid-column: 2 / -2;
- }
-
- @include breakpoint(romeo) {
- grid-column: 3 / -3;
- }
-
- @include no-grid {
- margin-left: 200px;
- margin-right: 200px;
- }
-}
-
-/// Aspect ratio helper
-/// Creates a before element that will maintain aspect ratio of element
-@mixin aspect-ratio($width, $height) {
- &:before {
- content: "";
- display: block;
- box-sizing: content-box;
- width: 100%;
- height: 0;
- padding-bottom: $height / $width * 100%;
- }
-}
diff --git a/docs/scss/__core/_variables.scss b/docs/scss/__core/_variables.scss
deleted file mode 100644
index 9ad675a686..0000000000
--- a/docs/scss/__core/_variables.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-/// Site content's maximum width
-$grid-max-width: 1280px;
-$fixed-sidebar-width: 280px;
-$header-height: (
- default: 60px,
- lima: 72px,
-);
-
-/// Breakpoint minimum widths
-/// All breakpoints should use nato-phonetic alphabet names
-/// @see {mixin} breakpoint
-$breakpoints: (
- kilo: 500px,
- bravo: 768px,
- lima: 820px,
- papa: 1000px,
- romeo: 1200px,
- tango: 1400px,
- zeta: 1700px
-);
-
-/// For use with specific functionality (e.g. navigation menu change).
-/// @see {mixin} breakpoint
-/// @see {variable} $breakpoints
-$nav-break: "lima";
diff --git a/docs/scss/_base/_base.scss b/docs/scss/_base/_base.scss
deleted file mode 100644
index 66ec6aac1f..0000000000
--- a/docs/scss/_base/_base.scss
+++ /dev/null
@@ -1,209 +0,0 @@
-@use "sass:map";
-@use "../__core/_mixins" as *;
-@use "../__core/variables" as *;
-
-* {
- &,
- &:before,
- &:after {
- box-sizing: border-box;
- }
-}
-
-@keyframes fadeintimer {
- 0% {
- visibility: hidden;
- opacity: 0;
- }
-
- 80% {
- visibility: visible;
- }
-
- 81% {
- opacity: 0;
- }
-
- 100% {
- opacity: 1;
- }
-}
-
-@keyframes fadein {
- 0% {
- visibility: visible;
- opacity: 0;
- }
-
- 100% {
- opacity: 1;
- }
-}
-
-html {
- scroll-padding-top: map.get($header-height, default);
-
- @include breakpoint(lima) {
- scroll-padding-top: map.get($header-height, lima);
- }
-}
-
-body {
- font-family: var(--rh-font-family-body-text);
- font-size: 1rem;
- line-height: var(--rh-line-height-body-text);
- overflow-y: scroll; // Force scrollbar on OS's with one to prevent UI jumping
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.l-main__content {
- font-size: var(--rh-font-size-body-text-lg);
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- line-height: var(--rh-line-height-heading);
- font-family: var(--rh-font-family-heading);
-}
-
-h1 {
- font-weight: var(--rh-font-weight-heading-regular);
- font-size: var(--rh-font-size-heading-2xl);
-}
-
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-weight: var(--rh-font-weight-heading-medium);
-}
-
-h2 {
- font-size: 28px;
-}
-
-h3 {
- font-size: 24px;
-}
-
-h4 {
- font-size: 20px;
-}
-
-h5 {
- font-size: 18px;
-}
-
-h6 {
- font-size: 16px;
-}
-
-img {
- max-width: 100%;
-
- figure & {
- display: block;
- }
-}
-
-p:empty {
- margin-block-start: 0 !important;
- margin-block-end: 0 !important;
-}
-
-a {
- color: var(--rh-color-interactive-blue-darker);
-
- &:hover,
- &:focus,
- &:active {
- color: var(--rh-color-interactive-blue-darkest);
- }
-
- &:visited {
- color: var(--rh-color-interactive-purple-darker);
-
- &:hover {
- color: var(--rh-color-interactive-purple-darkest);
- }
- }
-}
-
-li {
- line-height: 2;
-}
-
-video,
-iframe {
- max-width: 100%;
-}
-
-table {
- border: 0;
- width: 100%;
-
- td,
- th {
- padding: 16px;
- }
-
- th {
- font-size: 16px;
- line-height: 1.5;
- text-align: left;
-
- thead & {
- border-bottom: 1px solid #c7c7c7;
- }
-
- tfoot & {
- border-top: 1px solid #c7c7c7;
- }
- }
-
- /*
- td {
- border: 1px solid #f5f5f5;
- border-left: 0;
-
- &:last-child {
- border-right: 0;
- }
- }
- */
- tr {
- border-bottom: 1px solid #c7c7c7;
- }
-
- td {
- font-size: 16px;
- line-height: 1.5;
- }
-}
-
-caption {
- font-style: italic;
-}
-
-pre {
- border: 1px solid #dbdbdb;
- padding: 1em;
- background: #f9f9f9;
-}
-
-summary {
- color: var(--rh-color-interactive-blue-darker);
- cursor: pointer;
-
- &:hover,
- &:focus,
- &:active {
- color: var(--rh-color-interactive-blue-darkest);
- }
-}
diff --git a/docs/scss/_base/_normalize.scss b/docs/scss/_base/_normalize.scss
deleted file mode 100644
index ab2a00acd6..0000000000
--- a/docs/scss/_base/_normalize.scss
+++ /dev/null
@@ -1,428 +0,0 @@
-@use "../__core/_mixins" as *;
-
-/* stylelint-disable */
-
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
-
-/**
- * 1. Set default font family to sans-serif.
- * 2. Prevent iOS text size adjust after orientation change, without disabling
- * user zoom.
- */
-
- html {
- font-family: sans-serif; /* 1 */
- -ms-text-size-adjust: 100%; /* 2 */
- -webkit-text-size-adjust: 100%; /* 2 */
-}
-
-/**
- * Remove default margin.
- */
-
-body {
- margin: 0;
-}
-
-/* HTML5 display definitions
- ========================================================================== */
-
-/**
- * Correct `block` display not defined in IE 8/9.
- */
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section,
-summary {
- display: block;
-}
-
-/**
- * 1. Correct `inline-block` display not defined in IE 8/9.
- * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
- */
-
-audio,
-canvas,
-progress,
-video {
- display: inline-block; /* 1 */
- vertical-align: baseline; /* 2 */
-}
-
-/**
- * Prevent modern browsers from displaying `audio` without controls.
- * Remove excess height in iOS 5 devices.
- */
-
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-
-/**
- * Address `[hidden]` styling not present in IE 8/9.
- * Hide the `template` element in IE, Safari, and Firefox < 22.
- */
-
-[hidden],
-template {
- display: none;
-}
-
-/* Links
- ========================================================================== */
-
-/**
- * Remove the gray background color from active links in IE 10.
- */
-
-a {
- background: transparent;
-}
-
-/**
- * Improve readability when focused and also mouse hovered in all browsers.
- */
-
-a:active,
-a:hover {
- outline: 0;
- text-decoration: underline;
- color: #004080;
-}
-
-/* Text-level semantics
- ========================================================================== */
-
-/**
- * Address styling not present in IE 8/9, Safari 5, and Chrome.
- */
-
-abbr[title] {
- border-bottom: 1px dotted;
-}
-
-/**
- * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
- */
-
-b,
-strong {
- font-weight: bold;
-}
-
-/**
- * Address styling not present in Safari 5 and Chrome.
- */
-
-dfn {
- font-style: italic;
-}
-
-/**
- * Address variable `h1` font-size and margin within `section` and `article`
- * contexts in Firefox 4+, Safari 5, and Chrome.
- */
-
-h1 {
- margin: 0.67em 0;
-}
-
-/**
- * Address styling not present in IE 8/9.
- */
-
-mark {
- background: #ff0;
- color: #000;
-}
-
-/**
- * Address inconsistent and variable font size in all browsers.
- */
-
-small {
- font-size: 80%;
-}
-
-/**
- * Prevent `sub` and `sup` affecting `line-height` in all browsers.
- */
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sup {
- top: -0.5em;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-/* Embedded content
- ========================================================================== */
-
-/**
- * Remove border when inside `a` element in IE 8/9.
- */
-
-img {
- border: 0;
-}
-
-/**
- * Correct overflow displayed oddly in IE 9.
- */
-
-svg:not(:root) {
- overflow: hidden;
-}
-
-/* Grouping content
- ========================================================================== */
-
-/**
- * Address margin not present in IE 8/9 and Safari 5.
- */
-
-figure {
- margin: 1em 40px;
-}
-
-/**
- * Address differences between Firefox and other browsers.
- */
-
-hr {
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- height: 0;
-}
-
-/**
- * Contain overflow in all browsers.
- */
-
-pre {
- overflow: auto;
-}
-
-/**
- * Address odd `em`-unit font size rendering in all browsers.
- */
-
-code,
-kbd,
-pre,
-samp {
- font-family: var(--rh-font-family-code);
- font-size: 1em;
-}
-
-/* Forms
- ========================================================================== */
-
-/**
- * Known limitation: by default, Chrome and Safari on OS X allow very limited
- * styling of `select`, unless a `border` property is set.
- */
-
-/**
- * 1. Correct color not being inherited.
- * Known issue: affects color of disabled elements.
- * 2. Correct font properties not being inherited.
- * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
- */
-
-button,
-input,
-optgroup,
-select,
-textarea {
- color: inherit; /* 1 */
- font: inherit; /* 2 */
- margin: 0; /* 3 */
-}
-
-/**
- * Address `overflow` set to `hidden` in IE 8/9/10.
- */
-
-button {
- overflow: visible;
-}
-
-/**
- * Address inconsistent `text-transform` inheritance for `button` and `select`.
- * All other form control elements do not inherit `text-transform` values.
- * Correct `button` style inheritance in Firefox, IE 8+, and Opera
- * Correct `select` style inheritance in Firefox.
- */
-
-button,
-select {
- text-transform: none;
-}
-
-/**
- * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
- * and `video` controls.
- * 2. Correct inability to style clickable `input` types in iOS.
- * 3. Improve usability and consistency of cursor style between image-type
- * `input` and others.
- */
-
-button,
-html input[type="button"], /* 1 */
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button; /* 2 */
- cursor: pointer; /* 3 */
-}
-
-/**
- * Re-set default cursor for disabled elements.
- */
-
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-
-/**
- * Remove inner padding and border in Firefox 4+.
- */
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-
-/**
- * Address Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
- */
-
-input {
- line-height: normal;
-}
-
-/**
- * It's recommended that you don't attempt to style these elements.
- * Firefox's implementation doesn't respect box-sizing, padding, or width.
- *
- * 1. Address box sizing set to `content-box` in IE 8/9/10.
- * 2. Remove excess padding in IE 8/9/10.
- */
-
-input[type="checkbox"],
-input[type="radio"] {
- box-sizing: border-box; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Fix the cursor style for Chrome's increment/decrement buttons. For certain
- * `font-size` values of the `input`, it causes the cursor style of the
- * decrement button to change from `default` to `text`.
- */
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-
-/**
- * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
- * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
- * (include `-moz` to future-proof).
- */
-
-input[type="search"] {
- -webkit-appearance: textfield; /* 1 */
- -moz-box-sizing: content-box;
- -webkit-box-sizing: content-box; /* 2 */
- box-sizing: content-box;
-}
-
-/**
- * Remove inner padding and search cancel button in Safari and Chrome on OS X.
- * Safari (but not Chrome) clips the cancel button when the search input has
- * padding (and `textfield` appearance).
- */
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/**
- * Define consistent border, margin, and padding.
- */
-
-fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em;
-}
-
-/**
- * 1. Correct `color` not being inherited in IE 8/9.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-
-legend {
- border: 0; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Remove default vertical scrollbar in IE 8/9.
- */
-
-textarea {
- overflow: auto;
-}
-
-/**
- * Don't inherit the `font-weight` (applied by a rule above).
- * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
- */
-
-optgroup {
- font-weight: bold;
-}
-
-/* Tables
- ========================================================================== */
-
-/**
- * Remove most spacing between table cells.
- */
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-td,
-th {
- padding: 0;
-}
diff --git a/docs/scss/_layout.scss b/docs/scss/_layout.scss
deleted file mode 100644
index 8862a182a0..0000000000
--- a/docs/scss/_layout.scss
+++ /dev/null
@@ -1,178 +0,0 @@
-@use "sass:map";
-@use "__core/mixins" as *;
-@use "__core/variables" as *;
-
-body {
- padding-top: 60px;
-
- @include breakpoint(bravo) {
- padding-top: 72px; // Move content down to dodge fixed header
- }
-}
-
-#main-header {
- & .logo-bar {
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- z-index: 100;
- display: flex;
- align-items: center;
- height: map.get($header-height, default);
- padding: 0 24px;
- color: #ffffff;
- background: #000000;
-
- @include breakpoint(bravo) {
- position: fixed;
- }
-
- .feedback-button {
- align-self: center;
- justify-content: center;
- position: absolute;
- right: 64px;
-
- @include breakpoint(bravo) {
- right: 48px;
- }
- }
-
- @each $breakpoint, $height in $header-height {
- @if $breakpoint != "default" {
- @include breakpoint($breakpoint) {
- height: $height;
- }
- }
- }
-
- & a {
- display: inherit;
- }
- }
-
- & .logo {
- max-width: 136px;
- margin-left: 0;
-
- @include breakpoint($nav-break) {
- margin-left: 0;
- }
- }
-}
-
-.l-main {
- position: relative;
-
- @include breakpoint($nav-break) {
- // padding-bottom: 40px;
- padding-left: $fixed-sidebar-width;
- }
-}
-
-.l-main__header--palette-lighter {
- background: var(--rh-color-surface-lighter, #f2f2f2);
- margin-bottom: 80px;
-}
-
-.l-main__content {
- padding-block-end: var(--rh-space-4xl, 64px);
-
- // add spacing between examples, tables, sections, etc.
- // except for specified elements that have custom spacing.
- > .container > *:not(p, .feedback, copy-permalink) {
- margin-block-start: 0;
- margin-block-end: var(--rh-space-2xl, 32px);
- }
-}
-
-.main-footer {
- background-color: #151515;
- padding: 24px 32px;
- margin-top: 80px;
- display: flex;
- gap: 8px;
- justify-content: flex-start;
- align-items: center;
- text-align: center;
- flex-flow: column nowrap;
-
- @include breakpoint(bravo) {
- flex-flow: row wrap;
- text-align: left;
- gap: 0;
-
- #netlify-badge {
- margin-inline-start: auto;
- }
- }
-
- img {
- display: block;
- margin: 0 auto 24px;
- text-align: center;
-
- @include breakpoint(bravo) {
- text-align: left;
- margin: 0 24px;
- }
- }
-
- p {
- font-size: 12px;
- color: #d2d2d2;
- margin: 0 16px;
- padding: 0;
- line-height: 12px;
- }
-
- &--list {
- ul {
- display: block;
- margin: 0;
- list-style: none;
- padding: 0;
-
- @include breakpoint(bravo) {
- display: flex;
- }
-
- li {
- padding: 0 8px;
- line-height: 24px;
-
- @include breakpoint(bravo) {
- line-height: 12px;
- }
- }
-
- a {
- line-height: 12px;
- font-size: 12px;
- color: #d2d2d2;
-
- &:hover {
- color: #ffffff;
- }
- }
- }
- }
-}
-
-.layout-wrapper--jumplinks {
- display: grid;
- grid-template-columns: 8fr 2fr;
- grid-gap: 64px;
- max-width: 800px;
-}
-
-.jump-links--layout {
- position: relative;
- min-width: 200px;
-
- pfe-jump-links-nav {
- position: sticky;
- top: 100px;
- }
-}
diff --git a/docs/scss/_utility.scss b/docs/scss/_utility.scss
deleted file mode 100644
index 4d4a60d406..0000000000
--- a/docs/scss/_utility.scss
+++ /dev/null
@@ -1,831 +0,0 @@
-@use "sass:map";
-@use "__core/mixins" as *;
-@use "__core/variables" as *;
-
-// !! Utility classes should never be extended with other styles
-// !! e.g. .l-sidebar .headline {color: blue;}
-// !! Instead another class should be added to the element for custom styles
-
-:root {
- --width: auto;
-}
-
-@media screen and (prefers-reduced-motion: no-preference) {
- html {
- scroll-behavior: smooth;
- }
-}
-
-.visually-hidden {
- @include visually-hidden;
-
- gap: 1rem;
-}
-
-.element-invisible {
- @include visually-hidden;
-
- gap: 1rem;
-}
-
-.header,
-.section,
-.container {
- max-width: 1160px;
- padding-inline: var(--rh-space-2xl);
-
- @include breakpoint(tango) {
- padding-left: var(--rh-space-5xl);
- padding-right: var(--rh-space-5xl);
- }
-}
-
-.multi-column--150-wide,
-.multi-column--200-wide,
-.multi-column--300-wide,
-.multi-column--400-wide,
-.multi-column--500-wide,
-.multi-column--600-wide,
-.multi-column--min-150-wide,
-.multi-column--min-200-wide,
-.multi-column--min-300-wide,
-.multi-column--min-400-wide,
-.multi-column--min-500-wide,
-.multi-column--min-600-wide {
- grid-template-columns: 1fr;
- width: 100%;
- display: grid;
- gap: 32px;
- margin-bottom: var(--rh-space-4xl);
-
- @include breakpoint(lima) {
- gap: 2rem var(--rh-space-4xl);
- width: calc(100vw - #{$fixed-sidebar-width + 240px});
- max-width: 100%;
- margin-bottom: auto;
- }
-
- .section + .section {
- margin: 0;
- }
-
- + h3 {
- margin-top: 0;
- }
-
- .example {
- margin-bottom: 0;
- }
-
- .example + .example {
- margin-top: 0;
- }
-}
-
-.multi-column--200-wide {
- grid-template-columns: 1fr;
-
- @include breakpoint(lima) {
- grid-template-columns: repeat(auto-fill, minmax(100px, 200px));
- }
-}
-
-.multi-column--300-wide {
- grid-template-columns: 1fr;
-
- @include breakpoint(lima) {
- grid-template-columns: repeat(auto-fill, minmax(200px, 300px));
- }
-}
-
-.multi-column--400-wide {
- grid-template-columns: 1fr;
-
- @include breakpoint(lima) {
- grid-template-columns: repeat(auto-fill, minmax(300px, 400px));
- }
-}
-
-.multi-column--500-wide {
- grid-template-columns: 1fr;
-
- @include breakpoint(lima) {
- grid-template-columns: repeat(auto-fit, minmax(400px, 500px));
- }
-}
-
-.multi-column--600-wide {
- grid-template-columns: 1fr;
-
- @include breakpoint(lima) {
- grid-template-columns: repeat(auto-fit, minmax(500px, 600px));
- }
-}
-
-.multi-column--min-150-wide {
- grid-template-columns: 1fr;
- width: 100%;
-
- @include breakpoint(lima) {
- grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
- }
-}
-
-.multi-column--min-200-wide {
- grid-template-columns: 1fr;
- width: 100%;
-
- @include breakpoint(lima) {
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
- }
-}
-
-.multi-column--min-300-wide {
- grid-template-columns: 1fr;
- width: 100%;
-
- @include breakpoint(lima) {
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
- }
-}
-
-.multi-column--min-400-wide {
- grid-template-columns: 1fr;
- width: 100%;
-
- @include breakpoint(lima) {
- grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
- }
-}
-
-.multi-column--min-500-wide {
- grid-template-columns: 1fr;
- width: 100%;
-
- @include breakpoint(lima) {
- grid-template-columns: repeat(auto-fit, minmax(500px, 1fr));
- }
-}
-
-.multi-column--min-600-wide {
- grid-template-columns: 1fr;
- width: 100%;
-
- @include breakpoint(lima) {
- grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));
- }
-}
-
-.margin-top--1[class] {
- margin-top: var(--rh-space-md);
-}
-
-.margin-top--2[class] {
- margin-top: var(--rh-space-lg);
-}
-
-.margin-top--3[class] {
- margin-top: var(--rh-space-xl);
-}
-
-.margin-top--4[class] {
- margin-top: var(--rh-space-2xl);
-}
-
-.margin-top--5[class] {
- margin-top: 40px; // WARNING: not a token
-}
-
-.margin-top--6[class] {
- margin-top: var(--rh-space-3xl);
-}
-
-.margin-top--7[class] {
- margin-top: 56px; // WARNING: not a token
-}
-
-.margin-top--8[class] {
- margin-top: var(--rh-space-4xl);
-}
-
-.margin-top--9[class] {
- margin-top: 72px; // WARNING: not a token
-}
-
-.margin-top--10[class] {
- margin-top: var(--rh-space-5xl);
-}
-
-.margin-top--12[class] {
- margin-top: var(--rh-space-6xl);
-}
-
-.margin-bottom--1[class] {
- margin-bottom: var(--rh-space-md);
-}
-
-.margin-bottom--2[class] {
- margin-bottom: var(--rh-space-lg);
-}
-
-.margin-bottom--3[class] {
- margin-bottom: var(--rh-space-xl);
-}
-
-.margin-bottom--4[class] {
- margin-bottom: var(--rh-space-2xl);
-}
-
-.margin-bottom--5[class] {
- margin-bottom: 40px;
-}
-
-.margin-bottom--6[class] {
- margin-bottom: var(--rh-space-3xl);
-}
-
-.margin-bottom--7[class] {
- margin-bottom: 56px;
-}
-
-.margin-bottom--8[class] {
- margin-bottom: var(--rh-space-4xl);
-}
-
-.margin-bottom--9[class] {
- margin-bottom: 72px; // WARNING: not a token
-}
-
-.margin-bottom--10[class] {
- margin-bottom: var(--rh-space-5xl);
-}
-
-.centered {
- margin: 0 auto;
- text-align: center;
- align-items: center;
-
- p {
- max-width: 1000px;
- margin: 0 auto var(--rh-space-3xl);
- }
-}
-
-.footnote {
- font-size: 14px;
- color: #6a6e73;
- line-height: 18px;
-
- // Not ideal negative margins, need to dynamically
- // ask if there is a footnote below example
- margin-top: 16px;
- margin-bottom: var(--rh-space-4xl);
-
- @include breakpoint(tango) {
- margin-top: -16px;
- }
-}
-
-hr {
- border: 0;
- height: 0;
- border-top: 1px solid #d2d2d2;
-}
-
-.section-headline {
- color: #ee0000;
- text-transform: uppercase;
- font-family: var(--rh-font-family-heading, RedHatDisplay, "Red Hat Display", "Noto Sans Arabic", "Noto Sans Hebrew", "Noto Sans JP", "Noto Sans KR", "Noto Sans Malayalam", "Noto Sans SC", "Noto Sans TC", "Noto Sans Thai", Helvetica, Arial, sans-serif);
- margin-bottom: 0;
- line-height: 26px;
- font-size: 20px;
- font-weight: 500;
-}
-
-.multi-column--4-2-1-narrow {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: 16px;
- justify-content: center;
-
- @include breakpoint(tango) {
- grid-template-columns: 1fr 1fr 1fr 1fr;
- gap: 16px;
- }
-}
-
-.multi-column--4-2-1 {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: var(--rh-space-2xl);
- justify-content: center;
-
- @include breakpoint(tango) {
- grid-template-columns: 1fr 1fr 1fr 1fr;
- gap: var(--rh-space-4xl);
- }
-}
-
-.multi-column--3-2 {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: var(--rh-space-2xl);
- justify-content: center;
-
- @include breakpoint(tango) {
- grid-template-columns: 1fr 1fr 1fr;
- gap: var(--rh-space-4xl);
- }
-}
-
-.multi-column--2-1-1 {
- display: grid;
- grid-template-columns: 1fr;
- gap: var(--rh-space-4xl);
- justify-content: center;
- align-items: top;
-
- @include breakpoint(tango) {
- grid-template-columns: 1fr 1fr;
- gap: var(--rh-space-4xl);
- }
-}
-
-.inline-flex {
- display: block;
- justify-content: center;
- flex: 1;
-
- @include breakpoint(lima) {
- flex: 2;
- display: flex;
- }
-
- div {
- padding: 0 16px;
- margin-bottom: 20px;
-
- @include breakpoint(tango) {
- margin-bottom: 0;
- }
- }
-}
-
-.inline-flex-left {
- display: block;
- justify-content: left;
- flex: 1;
- align-items: center;
-
- @include breakpoint(lima) {
- display: inline-flex;
- }
-
- > * {
- margin-bottom: 20px;
- margin-right: var(--rh-space-2xl);
-
- @include breakpoint(tango) {
- margin-bottom: 0;
- }
- }
-}
-
-.inline-stacked {
- display: grid;
- grid-template-columns: 1fr;
- gap: var(--rh-space-4xl);
-}
-
-.inline-stack-mobile {
- > * {
- margin-bottom: 20px;
- margin-right: var(--rh-space-2xl);
-
- @include breakpoint(tango) {
- margin-bottom: 0;
- }
- }
-}
-
-.description-box {
- h4 {
- a {
- color: #151515;
- text-decoration: none;
- font-size: 24px;
-
- &:hover {
- text-decoration: underline;
- }
- }
- }
-}
-
-.padding-stacked {
- margin-bottom: 40px;
-
- .example {
- margin-bottom: 16px;
- }
-
- h3 {
- margin-bottom: 0;
- padding-bottom: 8px;
- margin-top: 0;
- font-size: 24px;
- }
-
- p {
- margin-top: 0;
- padding-top: 0;
- }
-
- a {
- text-decoration: none;
- color: #151515;
-
- p {
- color: #151515;
- }
-
- h4 {
- text-decoration: none;
- color: #151515;
-
- &:visited,
- &:hover {
- color: #151515;
- }
- }
- }
-}
-
-.label {
- display: inline-block;
-
- &.outlined {
- border: 1px solid #d2d2d2;
- border-radius: 15px;
- padding: 4px 8px;
- font-size: 14px;
-
- &.green {
- border-color: #bde5b8;
- }
-
- &.red {
- border-color: #c9190b;
- }
-
- &.purple {
- border-color: #cbc1ff;
- }
-
- &.light-blue {
- border-color: #bee1f4;
- }
-
- &.light-teal {
- border-color: #a2d9d9;
- }
-
- &.yellow {
- border-color: #f9e0a2;
- }
- }
-
- + .label {
- margin-left: 8px;
- }
-}
-
-.back-to-top {
- position: absolute;
- top: 100vh;
- right: 32px;
- bottom: 32px;
- width: 3em;
- pointer-events: none;
- z-index: 1;
-}
-
-.back-to-top-link {
- position: fixed;
- position: sticky;
- top: calc(100vh - 100px);
- display: inline-block;
- transition: transform 80ms ease-in;
- z-index: 1;
- pointer-events: all;
-
- img {
- transition: 0.3s ease all;
- }
-
- img:hover,
- img:focus {
- filter: saturate(80%);
- }
-}
-
-// Adding sticky styles
-.sticky {
- position: sticky;
- top: 0;
-}
-
-.page-jump-links {
- // right: 48px;
- // top: 320px;
- position: sticky;
- z-index: 9999;
- display: none;
- top: 0;
-
- @include breakpoint(zeta) {
- display: block;
- }
-
- @media screen and (max-height: 850px) {
- display: none;
- }
-}
-
-pfe-jump-links-nav {
- position: sticky;
- top: 0;
- padding: 0;
-}
-
-// Status table styles
-.status-table {
- .success {
- color: #51a549;
- }
-
- .deemphasized {
- color: #6a6e73;
- }
-
- .blocked {
- color: #ee0000;
- }
-}
-
-.stacked-group {
- margin-top: 32px;
-
- h3 {
- margin-top: 16px;
-
- a {
- text-decoration: none;
- color: #151515;
-
- &:visited,
- &:hover {
- color: #151515;
- text-decoration: underline;
- }
- }
- }
-}
-
-.inline-list {
- li {
- display: inline-block;
- margin: 0 4px;
-
- &:after {
- content: "/";
- padding-left: 12px;
- }
-
- &:last-child:after {
- content: "";
- }
- }
-}
-
-.related {
- ul {
- list-style-type: none;
- padding: 0;
- margin: 0;
-
- li {
- line-height: 40px;
-
- a { /* stylelint-disable-line */
- text-decoration: none;
- }
- }
- }
-}
-
-// Alternating layout
-
-.alternating {
- display: grid;
- grid-template-columns: 1fr;
- grid-column-gap: var(--rh-space-4xl);
- align-items: center;
-
- @include breakpoint(tango) {
- grid-template-columns: 1fr 1fr;
- }
-
- &--item {
- margin: 40px 0;
- flex-direction: column;
- flex: 1;
-
- &:last-child {
- margin-bottom: 0;
- }
-
- &:nth-child(1) {
- order: 1;
- }
-
- &:nth-child(2) {
- order: 2;
- }
-
- &:nth-child(3) {
- order: 4;
- }
-
- &:nth-child(4) {
- order: 3;
- }
-
- &:nth-child(5) {
- order: 5;
- }
-
- &:nth-child(6) {
- order: 6;
- }
-
- &:nth-child(7) {
- order: 8;
- }
-
- &:nth-child(8) {
- order: 7;
- }
-
- @include breakpoint(tango) { /* stylelint-disable-line */
- &:nth-child(1) {
- order: 1;
- }
-
- &:nth-child(2) {
- order: 2;
- }
-
- &:nth-child(3) {
- order: 3;
- }
-
- &:nth-child(4) {
- order: 4;
- }
-
- &:nth-child(5) {
- order: 5;
- }
-
- &:nth-child(6) {
- order: 6;
- }
-
- &:nth-child(7) {
- order: 7;
- }
-
- &:nth-child(8) {
- order: 8;
- }
- }
-
- h3 {
- margin-top: 0;
- }
- }
-}
-
-// Alert styles
-
-rh-alert {
- margin-top: 32px;
- margin-bottom: 32px;
-}
-
-.asset-header {
- background-color: #f5f5f5;
- padding: var(--rh-space-4xl) var(--rh-space-5xl);
- text-align: center;
-}
-
-// Step boxes
-
-.card-grid {
- --number-size: 56px;
-
- display: grid;
- grid-template-columns: 1fr;
- gap: var(--rh-space-4xl);
- margin-block-start: var(--rh-space-2xl);
-
- @include breakpoint(papa) {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
-
- & rh-card {
- & [slot="header"] {
- &:is(h2, h3, h4, h5, h6) {
- margin: var(--rh-space-xl) 0;
- }
-
- &.number {
- justify-content: center;
- text-align: center;
- margin-bottom: var(--rh-space-lg);
- background-color: var(--rh-color-surface-lighter);
- border-radius: 50%;
- width: var(--number-size);
- height: var(--number-size);
- font-size: 28px;
- display: block;
- padding: 10px;
- color: var(--rh-color-brand-red-on-light);
- font-weight: var(--rh-font-weight-heading-bold);
- line-height: 37px;
- margin-inline-end: var(--rh-space-4xl);
- }
- }
- }
-}
-
-// Adding style for modal launch
-
-.modal-launch {
- cursor: pointer;
-}
-
-// PFE modal headline styles
-
-.section rh-dialog {
- h3 {
- margin-top: 32px;
- }
-}
-
-.multi-column--min-300-wide:last-of-type {
- .section {
- margin-bottom: 0;
- }
-}
-
-// Notes below example containers
-
-ol.example-notes,
-.example-note {
- font-size: var(--rh-font-size-body-text-sm, 0.875rem);
- color: var(--rh-color-text-secondary-on-light, #4d4d4d);
- line-height: var(--rh-line-height-body-text, 1.5);
-}
-
-ol.example-notes {
- padding-inline-start: 0;
- margin-block-start: var(--rh-space-lg, 16px);
- counter-reset: list;
-
- @include breakpoint(tango) {
- margin-top: -48px;
- }
-
- & > li {
- list-style: none;
- line-height: var(--rh-line-height-body-text, 1.5);
- }
-
- & > li:before {
- content: counter(list) ") ";
- counter-increment: list;
- }
-}
-
-.full-width {
- width: 100%;
-}
-
-.col-211 th { width: 25%; }
-.col-211 th:first-of-type { width: 50%; }
-.col-111 th { width: 33%; }
-.col-11 th { width: 50%; }
-.col-13 th { width: 25%; }
-.col-13 th:last-of-type { width: 75%; }
diff --git a/docs/scss/components/_best-practices.scss b/docs/scss/components/_best-practices.scss
deleted file mode 100644
index 69827b7747..0000000000
--- a/docs/scss/components/_best-practices.scss
+++ /dev/null
@@ -1,38 +0,0 @@
-.best-practices-grid {
- width: 100%;
- display: grid;
- grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
- gap: var(--rh-space-4xl, 64px);
- padding-block-start: var(--rh-space-2xl, 32px);
-}
-
-.correct {
- color: #3d7317;
-}
-
-.correct:before {
- content: url("../best-practices-success-icon.svg");
- display: inline-block;
- width: var(--rh-length-xl, 24px);
- height: var(--rh-length-xl, 24px);
- vertical-align: text-top;
- margin-inline-end: var(--rh-space-xs, 4px);
-}
-
-.wrong {
- color: #b1380b;
-}
-
-.wrong:before {
- content: url("../best-practices-danger-icon-red-orange.svg");
- display: inline-block;
- width: var(--rh-length-xl, 24px);
- height: var(--rh-length-xl, 24px);
- vertical-align: text-top;
- margin-inline-end: var(--rh-space-xs, 4px);
-}
-
-.best-practices-grid img {
- margin-inline: auto;
- border-radius: 8px;
-}
diff --git a/docs/scss/components/_component-status-table.scss b/docs/scss/components/_component-status-table.scss
deleted file mode 100644
index 5a4100862b..0000000000
--- a/docs/scss/components/_component-status-table.scss
+++ /dev/null
@@ -1,80 +0,0 @@
-.component-status-list-heading {
- display: flex;
- justify-content: space-between;
- align-items: flex-end;
- p {
- font-size: var(--rh-font-size-body-text-sm);
- }
-}
-
-.component-status-list-container {
- border: var(--rh-border-width-sm) solid var(--rh-color-border-subtle-on-light);
- border-radius: 8px;
-
- dl {
- display: flex;
- align-items: flex-start;
- column-gap: var(--rh-space-2xl);
- margin-block: var(--rh-space-lg) var(--rh-space-lg);
- margin-inline: var(--rh-space-xl) var(--rh-space-xl);
- }
-
- dl div {
- display: flex;
- column-gap: var(--rh-space-md);
- align-items: center;
- }
-
- dl dd {
- text-transform: capitalize;
- }
-
- dl dt {
- font-size: var(--rh-font-size-body-text-md);
- &:after {
- content: ": ";
- }
- }
-
- dl dt,
- dl dd {
- margin: 0;
- padding: 0;
- }
-
-}
-
-.component-status-table {
- table tbody td:first-child {
- text-transform: capitalize;
- }
-}
-
-@media only screen and (max-width: 991px) {
- .component-status-list-container {
- dl {
- flex-direction: column;
- row-gap: 16px;
- }
- }
-
- .component-status-list-heading {
- flex-direction: column;
- align-items: flex-start;
- }
-
- .component-status-table {
- table thead ~ tbody tr:nth-child(even) {
- background: none;
- }
- table thead ~ tbody tr:first-child {
- border-top: none;
- }
- table thead ~ tbody tr:last-child {
- border-bottom: none;
- }
- table tr td {
- border: none;
- }
- }
-}
diff --git a/docs/scss/components/_example.scss b/docs/scss/components/_example.scss
deleted file mode 100644
index e5a38d8d88..0000000000
--- a/docs/scss/components/_example.scss
+++ /dev/null
@@ -1,257 +0,0 @@
-@use "sass:map";
-@use "../__core/variables" as *;
-@use "../__core/mixins" as *;
-
-.example {
- display: flex;
- align-items: center;
- padding: 32px;
-
- @include breakpoint(tango) {
- width: calc(100vw - #{$fixed-sidebar-width + 240px});
- padding: 64px;
- margin-bottom: 64px;
- max-width: 100%;
- }
-
- + .example {
- margin-block-start: var(--rh-space-2xl);
-
- @include breakpoint(tango) {
- margin-top: calc(-1 * var(--rh-space-2xl));
- }
- }
-
- + .footnote {
- display: inline-block;
- margin-top: 16px;
- }
-
- + .footnote-alignment {
- display: inline-block;
- margin-top: 16px;
-
- @include breakpoint(tango) {
- margin-top: -48px;
- }
- }
-
- + table {
- margin-top: 16px;
-
- @include breakpoint(tango) {
- margin-top: -48px;
- }
- }
-
- &.component {
- justify-content: center;
- }
-
- rh-cta {
- margin-bottom: 16px;
- }
-
- & img:only-child {
- display: block;
- margin: 0 auto;
- }
-
- rh-alert + & {
- margin-top: 32px;
- }
-}
-
-.example--descriptor {
- font-size: 16px;
- align-items: center;
- justify-content: center;
- text-align: left;
-
- & img {
- display: block;
- margin-bottom: 16px;
- flex-shrink: 0;
- }
-}
-
-.example--palette-none {
- padding: 0;
- border: none;
- border-radius: none;
-
- img:only-child {
- margin: 0;
- }
-
- @include breakpoint(tango) {
- padding: 0;
- }
-}
-
-.example--palette-light {
- background: #ffffff;
- border: 1px solid #c7c7c7;
- border-radius: 8px;
-}
-
-.example--palette-light-compact {
- background: #ffffff;
- border: 1px solid #c7c7c7;
- border-radius: 8px;
- padding-top: 32px;
- padding-bottom: 32px;
-}
-
-.example--palette-lightest {
- background: transparent;
- border: 1px solid #c7c7c7;
- border-radius: 8px;
-}
-
-.example--palette-lighter-gray {
- background: #f2f2f2;
- border: 1px solid #d2d2d2;
- border-radius: 8px;
-}
-
-.example--palette-darkest {
- color: #ffffff;
- background: #151515;
- border-radius: 8px;
-}
-
-.example--palette-wrong {
- background-color: transparent;
- background-image: url("../best-practices-danger-icon.svg");
- background-repeat: no-repeat;
- background-size: 24px;
- background-position-x: 8px;
- background-position-y: 8px;
- border: 1px solid #ee0000;
- border-radius: 8px;
-}
-
-.example--palette-medium {
- background: #f0f0f0;
- border-radius: 8px;
-}
-
-.example--palette-dark {
- background: #15151580;
- border-radius: 8px;
-}
-
-.example--palette-descriptive {
- background: transparent;
- border: 1px solid #c7c7c7;
- border-radius: 8px;
- padding-top: 32px;
- padding-bottom: 32px;
- margin-bottom: 24px;
-
- img {
- width: auto;
- max-width: var(--inline-img-max-width, 100%);
- max-height: var(--inline-img-max-height, auto);
- }
-}
-
-.example--palette-descriptive-blue {
- background: #0066cc;
-
- /* border: 1px solid #c7c7c7; */
- border-radius: 8px;
- padding-top: 32px;
- padding-bottom: 32px;
- margin-bottom: 24px;
-
- img {
- width: auto;
- max-width: var(--inline-img-max-width, 100%);
- max-height: var(--inline-img-max-height, auto);
- }
-}
-
-.example--palette-descriptive-dark-gray {
- background: rgba(0, 0, 0, 0.65);
-
- /* border: 1px solid #c7c7c7; */
- border-radius: 8px;
- padding-top: 32px;
- padding-bottom: 32px;
- margin-bottom: 24px;
-
- img {
- width: auto;
- max-width: var(--inline-img-max-width, 100%);
- max-height: var(--inline-img-max-height, auto);
- }
-}
-
-.example--palette-descriptive-gray {
- background: rgba(0, 0, 0, 0.25);
- border: 1px solid #c7c7c7;
- border-radius: 8px;
- padding-top: 32px;
- padding-bottom: 32px;
- margin-bottom: 24px;
-
- img {
- width: auto;
- max-width: var(--inline-img-max-width, 100%);
- max-height: var(--inline-img-max-height, auto);
- }
-}
-
-.example--palette-descriptive-light-gray {
- background: #f0f0f0;
- border-radius: 8px;
- padding-top: 32px;
- padding-bottom: 32px;
- margin-bottom: 24px;
-
- img {
- width: auto;
- max-width: var(--inline-img-max-width, 100%);
- max-height: var(--inline-img-max-height, auto);
- }
-}
-
-.example--palette-descriptive {
- &.gray-bg {
- background-color: rgb(var(--rh-color-gray-90-rgb, 31 31 31) / var(--rh-opacity-60, 60%));
- border: none;
- }
-
- &.blue-bg {
- background-color: var(--rh-color-blue-50, #0066cc);
- border: none;
- }
-}
-
-.example--typography {
- .example & {
- padding: 32px;
-
- p {
- margin: 0;
- }
- }
-}
-
-.section {
- .example {
- img {
- width: auto;
- max-height: var(--example-img-max-height, auto);
- object-fit: contain;
- overflow: hidden;
- }
- }
-}
-
-.example + .example {
- margin-block-start: var(--rh-space-2xl);
-}
-
diff --git a/docs/scss/components/_feature.scss b/docs/scss/components/_feature.scss
deleted file mode 100644
index a905bffb06..0000000000
--- a/docs/scss/components/_feature.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-@use "../__core/mixins" as *;
-@use "../__core/variables" as *;
-
-// Featured card on homepage
-.feature-box {
- border: 1px solid #d2d2d2;
- padding: var(--rh-space-4xl) 24px;
- border-radius: 8px;
- margin: var(--rh-space-5xl) 0;
-
- @include breakpoint(tango) {
- padding: 48px var(--rh-space-4xl);
- }
-
- a {
- color: #0066cc;
- text-decoration: none;
-
- &:hover {
- color: #004080;
- text-decoration: underline;
- }
- }
-}
-
-.feature-headline {
- margin: 0 0 24px;
- font-size: 29px;
- color: #ee0000;
- font-weight: 300;
- line-height: 39px;
-
- @include breakpoint(tango) {
- font-size: 40px;
- line-height: 53px;
- }
-}
diff --git a/docs/scss/components/_feedback.scss b/docs/scss/components/_feedback.scss
deleted file mode 100644
index 9d7737840f..0000000000
--- a/docs/scss/components/_feedback.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-@use "../__core/variables" as *;
-
-.feedback:is(.section) {
- margin-block-start: var(--rh-space-5xl, 80px);
-
- &.feedback :is(h2):first-of-type {
- margin-block-start: 0;
- }
-}
diff --git a/docs/scss/components/_header.scss b/docs/scss/components/_header.scss
deleted file mode 100644
index 039c238fc0..0000000000
--- a/docs/scss/components/_header.scss
+++ /dev/null
@@ -1,149 +0,0 @@
-@use "sass:map";
-@use "sass:math";
-@use "../__core/variables" as *;
-@use "../__core/mixins" as *;
-
-.header {
- padding-block: var(--rh-space-2xl);
-
- @include breakpoint(tango) {
- padding-block: var(--rh-space-5xl);
- }
-
- .page-title {
- margin: 0;
-
- &:only-child {
- margin-block-end: 0;
- }
-
- + rh-subnav {
- margin-block-start: var(--rh-space-2xl);
- }
- }
-}
-
-.l-main__header {
- position: sticky;
- z-index: 1;
-
- // because the header still uses legacy sass instead of design tokens,
- // we have to fudge this a little bit. The goal is to subtract out the
- // height of the h1 and whitespace which precedes the subnav
- // in the block direction from the top of the main article header
-
- --_height-of-logo-header: 72px;
- --_main-header-top-padding: 32px;
- --_h1-font-size: 35px;
- --_line-height: 1.3;
- --_bottom-margin-of-h1: 0.67;
-
- top:
- calc(
- var(
- --_height-of-logo-header
- ) - var(
- --_main-header-top-padding
- ) - (var(--_h1-font-size) * var(--_line-height)
- ) - (
- var(--_h1-font-size) * var(--_bottom-margin-of-h1)
- )
- );
-
- @media (min-width: 1400px) {
- --_main-header-top-padding: 80px;
- --_h1-font-size: 48px;
- }
-}
-
-#main-header {
- & .burger-icon {
- /** Scale is to take advantage of anti-aliasing and avoid subpixel rounding bugs */
- --scale: 4;
- --animation-duration: 0.3s;
- --animation-timing: cubic-bezier(0.55, 0.085, 0, 0.99);
- --burger-color: #ffffff;
- --space-between-bars: calc(var(--rh-space-sm) * var(--scale));
- --bar-width: calc(var(--rh-length-xl) * var(--scale));
- --bar-height: calc(var(--rh-length-xs) / 2 * var(--scale));
-
- display: block;
- position: absolute;
- top: 50%;
- left: calc(50% - var(--rh-length-xl) / 2);
- scale: calc(1 / var(--scale));
- transform-origin: left top;
-
- &:before,
- &:after {
- content: "";
- position: absolute;
- top: 0;
- left: 0;
- box-sizing: border-box;
- display: block;
- width: var(--bar-width);
- }
-
- &:before {
- height: 0;
- border-top: var(--bar-height) solid var(--burger-color);
- background: var(--burger-color);
- translate: 0 calc(-1 * (var(--bar-height) + var(--space-between-bars)));
- transform-origin: left top;
- transition:
- rotate var(--animation-duration) var(--animation-timing),
- translate var(--animation-duration) var(--animation-timing);
- }
-
- &:after {
- height: calc(var(--bar-height) * 2 + var(--space-between-bars));
- border: var(--bar-height) solid var(--burger-color);
- border-width: var(--bar-height) 0 var(--bar-height) 0;
- transition:
- border var(--animation-duration) var(--animation-timing),
- rotate var(--animation-duration) var(--animation-timing),
- translate var(--animation-duration) var(--animation-timing);
- transform-origin: left bottom;
- }
- }
-
- #mobile-menu-toggle:checked ~ .menu-toggle-button .burger-icon {
- &:before {
- rotate: 45deg;
- }
-
- &:after {
- rotate: -45deg;
- border-top-color: transparent;
- }
- }
-
- & #mobile-menu-toggle,
- & .mobile-menu-toggle {
- position: fixed;
- top: 0;
- right: 0;
-
- @include breakpoint($nav-break) {
- display: none;
- }
- }
-
- & .mobile-menu-toggle {
- width: 72px;
- height: map.get($header-height, default);
- color: #ffffff;
- z-index: 200;
- }
-
- & #mobile-menu-toggle:checked ~ .menu-toggle-toggleable {
- width: 100%;
- background-color: rgba(21, 21, 21, 0.5);
-
- @include breakpoint($nav-break) {
- background-color: transparent;
- width: auto;
- }
- }
-}
diff --git a/docs/scss/components/_menu-toggle.scss b/docs/scss/components/_menu-toggle.scss
deleted file mode 100644
index 457dd29328..0000000000
--- a/docs/scss/components/_menu-toggle.scss
+++ /dev/null
@@ -1,51 +0,0 @@
-@use "sass:map";
-@use "../__core/variables" as *;
-@use "../__core/mixins" as *;
-
-.menu-toggle {
- @include visually-hidden;
-
- @include breakpoint($nav-break) {
- display: none;
- }
-}
-
-.menu-toggle-button {
- display: block;
- cursor: pointer;
- border: 0;
- overflow: hidden;
- background: transparent;
- appearance: none;
- user-select: none;
-
- @include breakpoint($nav-break) {
- display: none;
- }
-}
-
-// NOTE: the JS solution is more accessible
-
-#mobile-menu-toggle ~ .menu-toggle-toggleable,
-.menu-toggle-toggleable.js {
- width: 0;
- overflow: hidden;
- background: #ffffff;
- visibility: var(--toggle-visibility, hidden);
- transition:
- visibility 0s var(--visibility-delay, 0.4s),
- width 0.25s ease-in-out;
-
- @include breakpoint($nav-break) {
- overflow: visible;
- visibility: visible;
- }
-}
-
-#mobile-menu-toggle:checked ~ .menu-toggle-toggleable,
-.menu-toggle-toggleable.js.open {
- --toggle-visibility: visible;
- --visibility-delay: 0s;
-
- width: $fixed-sidebar-width;
-}
diff --git a/docs/scss/components/_playgrounds.scss b/docs/scss/components/_playgrounds.scss
deleted file mode 100644
index 5e54611c9b..0000000000
--- a/docs/scss/components/_playgrounds.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-playground-project > *:defined {
- border-block-end: var(--rh-border-width-sm) solid var(--rh-border-subtle-on-light);
- border-inline-start: var(--rh-border-width-sm) solid var(--rh-border-subtle-on-lightc7c7c7);
- border-inline-end: var(--rh-border-width-sm) solid var(--rh-border-subtle-on-lightc7c7c7);
-}
-
-playground-project > *:defined:first-child {
- border-block-start: var(--rh-border-width-sm) solid var(--rh-border-subtle-on-light);
-}
diff --git a/docs/scss/components/_related-elements-or-patterns.scss b/docs/scss/components/_related-elements-or-patterns.scss
deleted file mode 100644
index ba997b29c8..0000000000
--- a/docs/scss/components/_related-elements-or-patterns.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-#related-items-list {
- list-style: none;
- padding-inline-start: 0;
-
- li {
- line-height: 1.6;
- }
-}
diff --git a/docs/scss/components/_section.scss b/docs/scss/components/_section.scss
deleted file mode 100644
index 59615a6657..0000000000
--- a/docs/scss/components/_section.scss
+++ /dev/null
@@ -1,180 +0,0 @@
-@use "sass:map";
-@use "../__core/variables" as *;
-@use "../__core/mixins" as *;
-
-.section {
- + .section {
- @include breakpoint(tango) {
- margin-block-start: var(--rh-space-5xl, 80px);
- }
- }
-
- .container &,
- .section & {
- margin-block-end: var(--rh-space-4xl, 64px);
- padding-left: 0;
- padding-right: 0;
-
- @include breakpoint(tango) {
- margin-block-end: var(--rh-space-5xl, 80px);
- }
- }
-
- h2 {
- font-size: 24px;
- line-height: 31px;
-
- @include breakpoint(romeo) {
- font-size: 28px;
- line-height: 37px;
- }
- }
-
- h3 {
- margin-top: 16px;
- font-size: 20px;
- margin-bottom: 16px;
-
- @include breakpoint(romeo) {
- font-size: 24px;
- margin-top: var(--rh-space-4xl);
- }
- }
-
- h2 + h3,
- h2 + h4 {
- margin-top: 32px;
- }
-
- h4 {
- font-weight: 500;
- margin: 32px 0 16px;
- font-size: 18px;
- line-height: 25px;
-
- @include breakpoint(lima) {
- font-size: 20px;
- line-height: 26px;
- }
-
- a {
- text-decoration: none;
- }
- }
-
- p {
- max-width: 1000px;
- margin-top: 16px;
- margin-bottom: 16px;
-
- a {
- text-decoration: none;
- color: #0066cc;
-
- &:hover {
- text-decoration: underline;
- color: #004080;
- }
- }
-
- + .example {
- margin-top: 32px;
- }
- }
-
- p + ul {
- margin-bottom: 24px;
- margin-top: 0;
- }
-
- img {
- width: auto;
- max-width: var(--inline-img-max-width, 100%);
- max-height: var(--inline-img-max-height, auto);
- }
-
- table {
- border: 0;
-
- tbody {
- border: 0;
- }
-
- th {
- text-align: left;
- font-size: 14px;
- }
-
- tr {
- border: 1px solid #d2d2d2;
- border-top: 0;
- border-left: 0;
- border-right: 0;
-
- td {
- border: 1px solid #d2d2d2;
- border-right: 0;
- border-left: 0;
- font-size: 16px;
-
- a {
- text-decoration: none;
- }
-
- img {
- width: auto;
- }
- }
-
- &:first-child {
- td {
- border-top: 0;
- }
- }
-
- &.font-scale-altered {
- td:nth-child(2) {
- color: #b8bbbe;
- }
-
- td:nth-child(3) {
- color: #ee0000;
- }
- }
-
- &.font-scale-same {
- td:nth-child(3) {
- color: #51a549;
- }
- }
- }
- }
-
- ul {
- li {
- line-height: 40px;
-
- a {
- text-decoration: none;
-
- &:hover {
- text-decoration: underline;
- }
- }
- }
- }
-
- ol {
- li {
- line-height: 40px;
-
- a {
- text-decoration: none;
-
- &:hover {
- text-decoration: underline;
- }
- }
- }
- }
-}
diff --git a/docs/scss/components/_site-navigation.scss b/docs/scss/components/_site-navigation.scss
deleted file mode 100644
index 012f312465..0000000000
--- a/docs/scss/components/_site-navigation.scss
+++ /dev/null
@@ -1,137 +0,0 @@
-@use "sass:map";
-@use "../__core/variables" as *;
-@use "../__core/mixins" as *;
-
-.site-navigation-outer-wrapper {
- $current-header-height: map.get($header-height, default);
-
- position: fixed;
- top: map.get($header-height, default);
- left: 0;
- z-index: 10;
- height: calc(100vh - #{$current-header-height});
-
- @include breakpoint($nav-break) {
- $current-header-height: map.get($header-height, $nav-break);
-
- position: fixed;
- top: $current-header-height;
- bottom: 0;
- left: 0;
- height: calc(100vh - #{$current-header-height});
- }
-}
-
-.site-navigation {
- $current-header-height: map.get($header-height, default);
-
- width: $fixed-sidebar-width;
- padding-top: 30px;
- height: calc(100vh - #{$current-header-height});
- overflow-y: auto;
- color: #151515;
- background: #ffffff;
- border-right: 1px solid #d2d2d2;
-
- @include breakpoint($nav-break) {
- $current-header-height: map.get($header-height, $nav-break);
-
- width: $fixed-sidebar-width;
- height: calc(100vh - #{$current-header-height});
- padding-bottom: 40px;
- visibility: visible;
- }
-
- &:before {
- // content: 'Navigation';
- display: block;
- margin: 0 1em 1em;
- padding: 0.5em 32px 1em;
- border-bottom: 1px solid #dbdbdb;
- text-transform: uppercase;
- color: #999999;
- }
-
- summary::-webkit-details-marker {
- display: none;
- }
-
- & .link,
- & .heading,
- & .sub-menu .link {
- display: block;
- text-decoration: none;
- transition: background-color 0.25s;
- font-size: 18px;
- padding: 0.5em 32px;
- color: #151515;
-
- &:hover,
- &:focus {
- color: #151515;
- background: var(--rh-color-surface-lighter, #f2f2f2);
- box-shadow: inset 3px 0 0 0 #d2d2d2;
- }
- }
-
- & .heading {
- &:after {
- content: "";
- color: #151515;
- width: 9px;
- height: 9px;
- transform: rotate(45deg);
- border-right: 3px solid #151515;
- border-top: 3px solid #151515;
- display: flex;
- float: right;
- top: 13px;
- position: relative;
- }
- }
-
- details[open] { /* stylelint-disable-line */
- & .heading { /* stylelint-disable-line */
- &:after {
- transform: rotate(135deg);
- }
- }
- }
-
- & .item {
- line-height: 36px;
- }
-
- // had to add additional selector to
- // override the base.css
- & .link.active,
- & .sub-menu .link.active {
- background: var(--rh-color-surface-lighter, #f2f2f2);
- box-shadow: inset 3px 0 0 0 var(--rh-color-icon-primary-on-light, #ee0000);
- color: var(--rh-color-text-primary-on-light, #151515);
- }
-
- & .wrapper,
- & .sub-menu {
- margin: 0;
- list-style: none;
- }
-
- & .wrapper {
- padding: 0;
- }
-
- & .sub-menu {
- padding-left: 32px;
-
- & .link {
- font-size: 16px;
- line-height: 24px;
- padding-left: 16px;
-
- &:hover {
- color: #151515;
- }
- }
- }
-}
diff --git a/docs/scss/components/_spacer-table.scss b/docs/scss/components/_spacer-table.scss
deleted file mode 100644
index ed40696eeb..0000000000
--- a/docs/scss/components/_spacer-table.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-// Status table styles
-.spacer-table {
- width: 100%;
-
- img {
- width: auto;
- }
-
- table {
- th {
- font-weight: bold;
- }
-
- tr td {
- &:nth-child(1) {
- font-family: var(--rh-font-family-code);
- font-size: 14px;
- }
- }
- }
-}
diff --git a/docs/scss/components/_spacer-tokens-table.scss b/docs/scss/components/_spacer-tokens-table.scss
deleted file mode 100644
index a6af46f918..0000000000
--- a/docs/scss/components/_spacer-tokens-table.scss
+++ /dev/null
@@ -1,67 +0,0 @@
-.spacer-tokens-table {
- tbody th {
- font-size: var(--rh-font-size-body-text-md, 1rem) !important;
- font-weight: var(--rh-font-weight-heading-medium, 500);
- }
-
- tbody td {
- width: 33%;
- }
-
- :is(th, td):first-child {
- text-align: left !important;
- }
-
- samp {
- width: var(--samp-width);
- aspect-ratio: 1 / 1;
- outline: var(--rh-border-width-sm, 1px) dashed var(--samp-color, var(--rh-color-surface-darkest, #151515));
- color: var(--samp-color, var(--rh-color-text-primary-on-light, #151515));
- display: flex;
- justify-content: center;
- align-items: center;
- position: relative;
- font-size: var(--rh-font-size-body-text-xs, 0.75rem);
- }
-
- samp span {
- display: flex;
- align-items: center;
- justify-content: center;
- line-height: 1rem;
- min-height: 100%;
- }
-
- samp:before {
- content: "";
- width: var(--samp-width);
- aspect-ratio: 1 / 1;
- background-color: var(--samp-color, var(--rh-color-surface-darkest, #151515));
- opacity: 0.125;
- z-index: -1;
- position: absolute;
- }
-
- samp.offset span {
- position: absolute;
- left: calc(var(--samp-width) + 2px);
- }
-
- samp.size-4 {
- &:before {
- opacity: 1;
- }
- }
-
- samp.size-6 {
- color: #c58c00;
-
- &:before {
- opacity: 1;
- }
- }
-
- samp.size-8 {
- color: #51a549;
- }
-}
diff --git a/docs/scss/components/_table-of-contents.scss b/docs/scss/components/_table-of-contents.scss
deleted file mode 100644
index b1995b6218..0000000000
--- a/docs/scss/components/_table-of-contents.scss
+++ /dev/null
@@ -1,51 +0,0 @@
-@use "../__core/mixins" as *;
-
-.table-of-contents {
- background: var(--rh-color-surface-lighter, #f2f2f2);
- padding: 16px 24px;
-
- @include breakpoint(tango) {
- margin-bottom: 80px;
- }
-}
-
-.table-of-contents h2 {
- font-size: 0.75em;
- text-transform: uppercase;
- letter-spacing: 0.15em;
-}
-
-.table-of-contents ol {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-.table-of-contents > ol {
- margin: 1em 0;
-}
-
-.table-of-contents li {
- padding: 0;
-}
-
-.table-of-contents li a {
- display: inline-block;
- margin: 0 0 0.5em;
-}
-
-.table-of-contents > ol li li {
- padding-left: 1em;
-}
-
-.table-of-contents > ol li li li {
- padding-left: 2em;
-}
-
-.table-of-contents > ol li li li li {
- padding-left: 3em;
-}
-
-.table-of-contents > ol li li li li li {
- padding-left: 4em;
-}
diff --git a/docs/scss/foundations/_colorswatch.scss b/docs/scss/foundations/_colorswatch.scss
deleted file mode 100644
index fd1f92b8a4..0000000000
--- a/docs/scss/foundations/_colorswatch.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-.swatch {
- width: 40px;
- height: 40px;
- display: block;
- border-radius: var(--rh-border-radius-pill, 64px);
- background-color: var(--color, #000000);
-}
diff --git a/docs/scss/styles.scss b/docs/scss/styles.scss
deleted file mode 100644
index 579dfeb464..0000000000
--- a/docs/scss/styles.scss
+++ /dev/null
@@ -1,172 +0,0 @@
-@use "__core/css-properties";
-@use "__core/variables";
-@use "__core/mixins";
-@use "_base/normalize";
-@use "_base/base";
-@use "components/site-navigation";
-@use "components/menu-toggle";
-@use "components/header";
-@use "components/section";
-@use "components/example";
-@use "components/playgrounds";
-@use "components/feature";
-@use "components/feedback";
-@use "components/table-of-contents";
-@use "components/component-status-table";
-@use "components/spacer-table";
-@use "components/spacer-tokens-table";
-@use "components/related-elements-or-patterns";
-@use "components/best-practices";
-@use "foundations/colorswatch";
-@use "layout";
-@use "utility";
-
-body.element-docs rh-subnav img {
- --inline-img-max-width: 992px;
-}
-
-.header.container.has-subnav {
- padding-bottom: 0;
-}
-
-section.api.band {
- margin-block-end: var(--rh-space-4xl);
- padding-inline: 0;
-}
-
-.section.feedback {
- margin-block-end: 0;
-}
-
-.section table {
- width: 100%;
-}
-
-copy-permalink {
- display: flex;
- margin-block-end: var(--rh-space-lg);
-}
-
-copy-permalink:focus-within {
- --perma-signifier-display: initial;
-}
-
-a.heading-anchor {
- position: relative;
- text-decoration: inherit;
-}
-
-a.heading-anchor,
-a.heading-anchor:visited {
- color: inherit;
-}
-
-a.heading-anchor:hover:before {
- content: "#";
- display: block;
- position: absolute;
- inset-inline-start: -1em;
-}
-
-copy-permalink > :is(h1, h2, h3, h4, h5, h6) {
- margin-block: 0;
-}
-
-body.element-docs copy-permalink.h2,
-body.element-docs copy-permalink.h3,
-body.page-docs copy-permalink.h2,
-body.page-docs copy-permalink.h3,
-body.token-docs copy-permalink.h2,
-body.token-docs copy-permalink.h3 {
- margin-block-start: 82px;
-}
-
-body.element-docs copy-permalink.h2 + copy-permalink.h3,
-body.page-docs copy-permalink.h2 + copy-permalink.h3,
-body.token-docs copy-permalink.h2 + copy-permalink.h3 {
- margin-block-start: var(--rh-space-2xl, 32px);
-}
-
-:not(rh-cta) a[href^="https://red.ht/"]:after,
-:not(rh-cta) a[href^="https://url.corp.redhat.com/"]:after {
- content: "";
- display: inline-block;
- width: 1em;
- height: 1em;
- background-image: url("/assets/padlock-locked.svg");
- margin-inline-start: var(--rh-space-xs);
- vertical-align: middle;
- margin-block-end: 0.2em;
-}
-
-/* Release Notes & Roadmap styling */
-.releases-links {
- margin-block-start: var(--rh-space-3xl) !important;
- display: flex;
- gap: 2rem;
-}
-
-rh-block a {
- display: flex;
- flex-direction: column;
- min-width: 20rem;
- padding: var(--rh-space-lg);
- border: 1px solid var(--rh-color-border-subtle-on-light);
- border-radius: var(--rh-border-radius-default);
- text-decoration: none;
- font-weight: bold;
-}
-
-rh-block a:hover {
- text-decoration: underline;
- background: var(--rh-color-surface-light);
-}
-
-rh-block a:after {
- align-self: flex-end;
- content: url('data:image/svg+xml;utf8,');
-}
-
-rh-block a[href*="github"]:before {
- content: url('data:image/svg+xml;utf8,');
-}
-
-rh-block [slot="header"] {
- font-size: 1rem;
-}
-
-.release-version h3 {
- margin-top: var(--rh-space-lg);
-}
-
-body.page-docs .release-version copy-permalink.h3 {
- margin-block-start: var(--rh-space-xl);
-}
-
-.release-version table + p {
- margin-block-start: var(--rh-space-2xl);
-}
-
-/* could arguably be for all external links, not just within body.page-docs */
-body.page-docs a[href^="http"]:after {
- display: inline-block;
- vertical-align: middle;
- margin-inline-start: 0.25em;
- content: url('data:image/svg+xml;utf8,');
-}
-
-body.page-docs rh-cta a[href^="http"]:after {
- display: none;
-}
-
-.feedback-contact-link {
- white-space: nowrap; /* fix orphan issue on the Feedback shortcode's contact us link */
-}
-
-:is(rh-table) th {
- font-size: unset;
-}
-
-rh-playground pre {
- max-height: 785px;
-}
diff --git a/docs/styles/dev-server/styles.css b/docs/styles/dev-server/styles.css
new file mode 100644
index 0000000000..083be14d72
--- /dev/null
+++ b/docs/styles/dev-server/styles.css
@@ -0,0 +1,51 @@
+@layer
+ reset,
+ fonts,
+ typography,
+ base,
+ layout,
+ third-party;
+
+@import url("../reset.css") layer(reset);
+@import url("../fonts.css") layer(fonts);
+@import url("../typography.css") layer(typography);
+@import url("../third-party/prism-rhds.css") layer(third-party);
+
+@layer base {
+ /**
+ * PFE based styles as we do not have control over the
+ * html layout that is upstream with no current override
+ */
+ #main-header {
+ --pf-theme--color--surface--accent: black;
+ --pf-theme--color--accent: black;
+ }
+}
+
+@layer layout {
+ [data-demo] {
+ padding: var(--rh-space-xl, 24px);
+ min-height: 100%;
+ height: 100%;
+ }
+
+ main {
+ display: block;
+ position: relative;
+ max-height: initial;
+ }
+
+ #nav {
+ height: 100%;
+ }
+
+ #main-header a img {
+ margin-right: 0;
+ }
+
+ /* offset the padding on the demo container from above */
+ rh-context-demo {
+ height: calc(100% + 2 * var(--rh-space-xl, 24px));
+ margin: calc(-1 * var(--rh-space-xl, 24px));
+ }
+}
diff --git a/docs/styles/fonts.css b/docs/styles/fonts.css
new file mode 100644
index 0000000000..f6e70bb9c2
--- /dev/null
+++ b/docs/styles/fonts.css
@@ -0,0 +1,49 @@
+@font-face {
+ font-family: RedHatDisplay;
+ src: url("../assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff");
+
+ /* Modern Browsers */
+ font-style: normal;
+ font-weight: 300;
+ text-rendering: optimizelegibility;
+}
+
+@font-face {
+ font-family: RedHatDisplay;
+ src: url("../assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff");
+
+ /* Modern Browsers */
+ font-style: normal;
+ font-weight: 400;
+ text-rendering: optimizelegibility;
+}
+
+@font-face {
+ font-family: RedHatDisplay;
+ src: url("../assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff");
+
+ /* Modern Browsers */
+ font-style: normal;
+ font-weight: 700;
+ text-rendering: optimizelegibility;
+}
+
+@font-face {
+ font-family: RedHatText;
+ src: url("../assets/fonts/RedHatText/RedHatText-Regular.woff");
+
+ /* Modern Browsers */
+ font-style: normal;
+ font-weight: 400;
+ text-rendering: optimizelegibility;
+}
+
+@font-face {
+ font-family: RedHatText;
+ src: url("../assets/fonts/RedHatText/RedHatText-Medium.woff");
+
+ /* Modern Browsers */
+ font-style: normal;
+ font-weight: 700;
+ text-rendering: optimizelegibility;
+}
diff --git a/docs/styles/grid.css b/docs/styles/grid.css
new file mode 100644
index 0000000000..29a9d0b644
--- /dev/null
+++ b/docs/styles/grid.css
@@ -0,0 +1,29 @@
+/* possible need for variant of gap */
+
+.grid {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: var(--rh-space-2xl, 32px);
+}
+
+@container container (min-width: 576px) {
+ .grid.xs-two-columns {
+ grid-template-columns: 1fr 1fr;
+ }
+}
+
+@container container (min-width: 768px) {
+ .grid.sm-two-columns {
+ grid-template-columns: 1fr 1fr;
+ }
+
+ .grid.sm-three-columns {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+}
+
+@container container (min-width: 992px) {
+ .grid.md-three-columns {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+}
diff --git a/docs/styles/lightdom.css b/docs/styles/lightdom.css
new file mode 100644
index 0000000000..089792f40f
--- /dev/null
+++ b/docs/styles/lightdom.css
@@ -0,0 +1,7 @@
+@layer masthead, sidenav, permalink, repo-status-list, footer;
+
+@import url('../assets/javascript/elements/uxdot-masthead-lightdom.css') layer(masthead);
+@import url('../assets/javascript/elements/uxdot-sidenav-lightdom.css') layer(sidenav);
+@import url('../assets/javascript/elements/uxdot-copy-permalink-lightdom.css') layer(permalink);
+@import url('../assets/javascript/elements/uxdot-repo-status-list-lightdom.css') layer(repo-status-list);
+@import url('../assets/packages/@rhds/elements/elements/rh-footer/rh-footer-lightdom.css') layer(footer);
diff --git a/docs/styles/not-defined.css b/docs/styles/not-defined.css
new file mode 100644
index 0000000000..df1ba1a22b
--- /dev/null
+++ b/docs/styles/not-defined.css
@@ -0,0 +1,51 @@
+/* Decrease CLS */
+uxdot-hero:not(:defined) {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+uxdot-hero:not(:defined) [slot="header"] {
+ color: var(--rh-color-text-brand-on-light, #ee0000);
+ margin-block-end: 0;
+ text-transform: uppercase;
+ font-weight: var(--rh-font-weight-code-medium, 500);
+ font-size: var(--rh-font-size-code-lg, 1.125rem) !important;
+}
+
+uxdot-hero:not(:defined) [slot="tagline"] {
+ font-size: var(--rh-font-size-heading-2xl, 3rem) !important;
+ margin-block: var(--rh-space-lg, 16px) !important;
+ text-align: center;
+}
+
+uxdot-hero:not(:defined) [slot="image"] {
+ width: 100%;
+ margin-block-start: var(--rh-space-4xl, 64px);
+}
+
+uxdot-example:not(:defined) img {
+ max-width: 100%;
+}
+
+rh-subnav:not(:defined) {
+ display: flex;
+ flex-direction: row;
+ gap: var(--rh-space-md, 8px);
+ margin-block-start: var(--rh-space-2xl, 32px);
+ max-width: 100%;
+ overflow-x: scroll;
+}
+
+rh-subnav:not(:defined) a {
+ display: block;
+ white-space: nowrap;
+ padding: var(--rh-space-lg, 16px) var(--rh-space-2xl, 32px);
+ text-decoration: none;
+ color: var(--rh-color-text-secondary-on-light, #4d4d4d);
+ position: relative;
+}
+
+rh-subnav:not(:defined) a[active] {
+ border-block-end: 3px solid var(--rh-color-accent-brand-on-light, #ee0000);
+}
diff --git a/docs/styles/pages/backpage.css b/docs/styles/pages/backpage.css
new file mode 100644
index 0000000000..14aedd650e
--- /dev/null
+++ b/docs/styles/pages/backpage.css
@@ -0,0 +1,168 @@
+@layer page {
+ article {
+ display: grid;
+ width: 100%;
+ grid-template-columns: 1fr;
+ grid-template-areas:
+ "header"
+ "content";
+ row-gap: var(--rh-space-4xl, 64px);
+ }
+
+ article.has-toc {
+ grid-template-areas:
+ "header"
+ "aside"
+ "content";
+ }
+
+ uxdot-header {
+ grid-area: header;
+ }
+
+ .container {
+ grid-area: content;
+ container-type: inline-size;
+ container-name: container;
+ }
+
+ .container h2,
+ uxdot-copy-permalink h2 {
+ font-size: var(--rh-font-size-heading-md, 1.75rem); /* RHDS h4 heading font size */
+ }
+
+ .container h3,
+ uxdot-copy-permalink h3 {
+ font-size: var(--rh-font-size-heading-sm, 1.5rem); /* RHDS h5 heading font size */
+ }
+
+ .container h4,
+ uxdot-copy-permalink h4 {
+ font-size: var(--rh-font-size-heading-xs, 1.25rem); /* RHDS h6 heading font size */
+ }
+
+ .container h5,
+ uxdot-copy-permalink h5 {
+ font-size: 1.125rem; /* Not a RHDS token */
+ }
+
+ .container h6,
+ uxdot-copy-permalink h6 {
+ font-size: 1rem; /* Not a RHDS token */
+ }
+
+ aside {
+ grid-area: aside;
+ padding-inline: var(--rh-space-lg, 16px);
+ position: relative;
+ }
+
+ /* when a section is used */
+ .container > section {
+ margin-block-start: var(--rh-space-6xl, 96px);
+ }
+
+ .container > section:first-of-type {
+ margin-block-start: 0;
+ }
+
+ /*
+ when in a article container
+ where a h2 or uxdot-copy-permalink is used
+ as a section break (no landmark)
+ */
+ .container > :where(uxdot-copy-permalink.h2, h2),
+ /* not when the h2 is a child of a section */
+ .container > :not(section, uxdot-copy-permalink) > :where(uxdot-copy-permalink.h2, h2),
+ /* if a section landmark is used */
+ .container > section > :where(uxdot-copy-permalink.h2, h2) {
+ margin-block-start: var(--rh-space-6xl, 96px);
+ }
+
+ /* TODO: get rid of inline style/link/script tags inside of container
+ if a section, h2 or uxdot-copy-permalink is the first child of an article container */
+ .container :where(uxdot-copy-permalink.h2, h2, section):first-child,
+ .container :where(style, link, script):first-child + :where(uxdot-copy-permalink.h2, h2, section),
+ .container :where(style, link, script):first-child + :where(
+ style, link) + :where(uxdot-copy-permalink.h2, h2, section),
+ .container :where(style, link, script):first-child + :where(
+ style, link, script) + :where(style, link, script) + :where(
+ uxdot-copy-permalink.h2, h2, section) {
+ margin-block-start: 0;
+ }
+
+ /*
+ when in a article container
+ where a h3 or uxdot-copy-permalink is used
+ as a section break (no landmark)
+ */
+ .container > :where(uxdot-copy-permalink.h3, h3),
+ /* not when the h2 is a child of a section */
+ .container > :not(section, uxdot-copy-permalink) > :where(uxdot-copy-permalink.h3, h3),
+ /* if a section landmark is used */
+ .container > section > :where(uxdot-copy-permalink.h3, h3){
+ margin-block-start: var(--rh-space-4xl, 64px);
+ }
+
+ /*
+ when in a article container
+ where a h4 or uxdot-copy-permalink is used
+ as a section break (no landmark)
+ */
+ .container > :where(uxdot-copy-permalink.h4, h4),
+ /* not when the h2 is a child of a section */
+ .container > :not(section, uxdot-copy-permalink) > :where(uxdot-copy-permalink.h4, h4),
+ /* if a section landmark is used */
+ .container > section > :where(uxdot-copy-permalink.h4, h4) {
+ margin-block-start: var(--rh-space-3xl, 48px);
+ }
+
+ @container main (min-width: 576px) {
+ aside {
+ padding-inline: var(--rh-space-2xl, 32px);
+ }
+ }
+
+ @container main (min-width: 768px) {
+ aside {
+ padding-inline: var(--rh-space-3xl, 48px);
+ }
+ }
+
+ @container main (min-width: 992px) {
+ article {
+ row-gap: var(--rh-space-6xl, 96px);
+ }
+
+ aside {
+ padding-inline: var(--rh-space-6xl, 96px);
+ }
+ }
+
+ /* this follows the @media queries so that it can override the aside */
+ @container main (min-width: 1440px) {
+ article {
+ grid-template-columns:
+ minmax(
+ var(--container-min-width),
+ var(--container-max-width)
+ )
+ minmax(14rem, 1fr);
+ grid-template-areas:
+ "header header"
+ "content content";
+ }
+
+ article.has-toc {
+ grid-template-areas:
+ "header header"
+ "content aside";
+ }
+
+ aside {
+ padding-inline-start: 0;
+ padding-inline-end: var(--rh-space-2xl, 32px);
+ max-width: 320px;
+ }
+ }
+}
diff --git a/docs/styles/pages/home.css b/docs/styles/pages/home.css
new file mode 100644
index 0000000000..87d328d9e4
--- /dev/null
+++ b/docs/styles/pages/home.css
@@ -0,0 +1,142 @@
+@layer page {
+ /* Homepage */
+ .container {
+ padding-block-start: var(--rh-space-4xl, 64px);
+ }
+
+ #feature {
+ display: block;
+ padding-block: var(--rh-space-3xl, 48px);
+ }
+
+ #feature::part(container),
+ #feature::part(header),
+ #feature::part(body),
+ #feature::part(footer) {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ }
+
+ #feature::part(header) {
+ font-size: var(--rh-font-size-heading-xl, 2.5rem);
+ color: var(--rh-color-text-brand-on-light, #ee0000);
+ margin-block-start: var(--rh-space-3xl, 48px);
+ margin-inline: var(--rh-space-3xl, 48px);
+ text-align: center;
+ }
+
+ #feature::part(body) {
+ justify-content: center;
+ text-align: center;
+ font-size: var(--rh-font-size-body-text-lg, 1.125rem);
+ max-width: 55rem;
+ }
+
+ #feature::part(footer) {
+ gap: var(--rh-space-3xl, 48px);
+ margin-block-end: var(--rh-space-3xl, 48px);
+ }
+
+ #get-started {
+ container-type: inline-size;
+ container-name: get-started;
+ text-align: center;
+ }
+
+ #get-started > h2 {
+ font-size: var(--rh-font-size-heading-lg, 2.25rem);
+ font-weight: var(--rh-font-weight-heading-medium, 500);
+ margin-block-start: var(--rh-space-3xl, 48px);
+ margin-block-end: var(--rh-space-xl, 24px);
+ max-width: 100%; /* overrides base max width */
+ }
+
+ #get-started > p {
+ text-align: center;
+ max-width: 100%; /* overrides base max width */
+ margin: 0 auto var(--rh-space-3xl, 48px);
+ }
+
+ #get-started .card-group {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: var(--rh-space-2xl, 32px);
+ max-width: 100%;
+ }
+
+ #get-started rh-card img {
+ width: 100%;
+ }
+
+ #get-started rh-card .stylized-image {
+ display: flex;
+ align-items: center;
+ padding: var(--rh-space-4xl, 64px);
+ background-color: var(--rh-color-surface-light, #e0e0e0);
+ }
+
+ #get-started rh-card::part(header) {
+ margin: 0;
+ }
+
+ #get-started rh-card h2 {
+ margin-block-start: var(--rh-space-2xl, 32px) !important;
+ margin-inline: var(--rh-space-xl, 24px) !important;
+ }
+
+ @container main (min-width: 768px) {
+ #get-started rh-card h2 {
+ margin-block-start: var(--rh-space-2xl, 32px) !important;
+ margin-inline: var(--rh-space-2xl, 32px) !important;
+ }
+ }
+
+ #contribute::part(header),
+ #contribute::part(body),
+ #contribute::part(footer) {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ }
+
+ #contribute {
+ display: block;
+ margin-block-start: var(--rh-space-5xl, 80px);
+ }
+
+ #contribute::part(container) {
+ border: none;
+ }
+
+ #contribute::part(header) {
+ font-family: var(--rh-font-family-heading, RedHatDisplay, "Red Hat Display", "Noto Sans Arabic", "Noto Sans Hebrew", "Noto Sans JP", "Noto Sans KR", "Noto Sans Malayalam", "Noto Sans SC", "Noto Sans TC", "Noto Sans Thai", Helvetica, Arial, sans-serif);
+ font-size: var(--rh-font-size-heading-lg, 2.25rem);
+ }
+
+ #contribute::part(body) {
+ font-size: var(--rh-font-size-body-text-lg, 1.125rem);
+ }
+
+ #contribute::part(footer) {
+ padding-block-start: var(--rh-space-xl, 24px);
+ }
+
+ @container get-started (min-width: 768px) {
+ #get-started .card-group {
+ grid-template-columns: 1fr 1fr;
+ }
+ }
+
+ @container get-started (min-width: 992px) {
+ #get-started .card-group {
+ gap: var(--rh-space-4xl, 64px);
+ }
+ }
+
+ @container main (min-width: 576px) {
+ .container {
+ padding-block-start: var(--rh-space-6xl, 96px);
+ }
+ }
+}
diff --git a/docs/styles/reset.css b/docs/styles/reset.css
new file mode 100644
index 0000000000..c7c8da7cce
--- /dev/null
+++ b/docs/styles/reset.css
@@ -0,0 +1,53 @@
+
+ /* Box sizing rules */
+ *,
+ *:before,
+ *:after {
+ box-sizing: border-box;
+ }
+
+ /* Remove default margin */
+ :where(body,
+ h1,
+ h2,
+ h3,
+ h4,
+ p,
+ li,
+ figure,
+ figcaption,
+ blockquote,
+ dl,
+ dd) {
+ margin: 0;
+ }
+
+ /* Default scroll behavior */
+ html:focus-within {
+ scroll-behavior: smooth;
+ }
+
+ /* Inherit fonts for inputs and buttons */
+ :where(input,
+ button,
+ textarea,
+ select) {
+ font: inherit;
+ }
+
+ /* Remove all animations and transitions for people that prefer not to see them */
+ @media (prefers-reduced-motion: reduce) {
+ html:focus-within {
+ scroll-behavior: auto;
+ }
+
+ *,
+ *:before,
+ *:after {
+ animation-duration: 0.01ms !important;
+ animation-iteration-count: 1 !important;
+ transition-duration: 0.01ms !important;
+ scroll-behavior: auto !important;
+ }
+ }
+}
diff --git a/docs/styles/samp.css b/docs/styles/samp.css
new file mode 100644
index 0000000000..62c2d2e809
--- /dev/null
+++ b/docs/styles/samp.css
@@ -0,0 +1,183 @@
+/* Spacers */
+samp.space {
+ width: var(--samp-space-size);
+ aspect-ratio: 1/1;
+ outline:
+ var(--rh-border-width-sm, 1px)
+ dashed
+ var(--samp-space-color, var(--rh-color-surface-darkest, #151515));
+ color: var(--samp-space-color, var(--rh-color-text-primary-on-light, #151515));
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: relative;
+ font-size: var(--rh-font-size-body-text-xs, 0.75rem);
+}
+
+samp.space span {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ line-height: 1rem;
+ min-height: 100%;
+}
+
+samp.space:before {
+ content: "";
+ width: var(--samp-space-size);
+ aspect-ratio: 1/1;
+ background-color: var(--samp-space-color, var(--rh-color-surface-darkest, #151515));
+ opacity: 0.125;
+ z-index: -1;
+ position: absolute;
+}
+
+samp.space span.offset {
+ position: absolute;
+ left: calc(var(--samp-space-size) + 2px);
+}
+
+samp.space.size-4:before {
+ opacity: 1;
+}
+
+samp.space.sm,
+samp.space.size-6 {
+ color: #c58c00;
+}
+
+samp.space.size-6:before {
+ opacity: 1;
+}
+
+samp.space.md,
+samp.space.size-8 {
+ color: #51a549;
+}
+
+/* Lengths */
+samp.length {
+ width: var(--samp-length-size);
+ background-color: var(--rh-color-surface-darkest, #151515);
+
+ /* Linting rule issue */
+ /* stylelint-disable-next-line rhds/token-values */
+ opacity: var(--rh-opacity-60, 0.6);
+ display: block;
+ border-bottom: 2px solid var(--rh-color-border-strong-on-light, #151515);
+ position: relative;
+}
+
+samp.length:before,
+samp.length:after {
+ content: " ";
+ position: absolute;
+ display: block;
+ height: var(--rh-length-xs, 4px);
+ width: 0;
+ inset-block: calc(-1 * var(--rh-length-xs, 4px));
+ border-style: solid;
+ border-inline-width: var(--rh-border-width-md, 2px) 0;
+ border-color: var(--rh-color-border-interactive-on-light, #0066cc);
+}
+
+samp.length:before {
+ inset-inline: -2px 100%;
+}
+
+samp.length:after {
+ inset-inline: 100% 2px;
+}
+
+/* Icons */
+samp.icon {
+ aspect-ratio: 1;
+ display: block;
+ width: var(--samp-icon-size);
+ border: var(--rh-border-width-md, 2px) dotted var(--rh-color-border-strong-on-light, #151515);
+}
+
+/* Fonts */
+samp.font {
+ font-size: var(--samp-font-size, var(--rh-font-size-body-text-md, 1rem));
+ font-family: var(--samp-font-family, var(--rh-font-family-body-text, RedHatText, "Red Hat Text", "Noto Sans Arabic", "Noto Sans Hebrew", "Noto Sans JP", "Noto Sans KR", "Noto Sans Malayalam", "Noto Sans SC", "Noto Sans TC", "Noto Sans Thai", Helvetica, Arial, sans-serif));
+ font-weight: var(--samp-font-weight, var(--rh-font-weight-body-text-regular, 400));
+}
+
+samp.font.heading {
+ font-size: var(--samp-font-size, var(--rh-font-size-heading-md, 1.75rem));
+ font-family: var(--rh-font-family-heading, RedHatDisplay, "Red Hat Display", "Noto Sans Arabic", "Noto Sans Hebrew", "Noto Sans JP", "Noto Sans KR", "Noto Sans Malayalam", "Noto Sans SC", "Noto Sans TC", "Noto Sans Thai", Helvetica, Arial, sans-serif);
+}
+
+samp.font.code {
+ font-family: var(--rh-font-family-code, RedHatMono, "Red Hat Mono", "Courier New", Courier, monospace);
+}
+
+/* Colors */
+samp.color {
+ color: var(--samp-color);
+}
+
+samp.color:not(.border, .text) {
+ aspect-ratio: 1;
+ height: var(--rh-length-xl, 24px);
+ display: block;
+ border-radius: 100%;
+ border: 1px solid transparent;
+ background: var(--samp-color);
+}
+
+samp.color:not(.border, .text, .dark) {
+ border-color: var(--rh-color-border-strong-on-light, #151515);
+}
+
+/* Line height */
+samp.line-height {
+ line-height: var(--samp-line-height);
+}
+
+/* Box shadow */
+samp.box-shadow {
+ height: var(--rh-length-2xl, 32px);
+ aspect-ratio: 1;
+ border-radius: var(--rh-border-radius-default, 3px);
+ box-shadow: var(--samp-box-shadow);
+ display: block;
+}
+
+/* Border */
+samp.border {
+ width: var(--rh-length-2xl, 32px);
+ aspect-ratio: 2;
+ display: block;
+ border-style: solid;
+ border-width: var(--samp-space-size, var(--rh-border-width-md, 2px));
+ border-color: var(--samp-color, var(--rh-color-border-strong-on-light, #151515));
+ border-radius: var(--samp-radius, var(--rh-border-radius-default, 3px));
+}
+
+samp.border.sm {
+ border-width: var(--samp-space-size, var(--rh-border-width-sm, 1px));
+}
+
+samp.border.md {
+ border-width: var(--samp-space-size, var(--rh-border-width-md, 2px));
+}
+
+samp.border.lg {
+ border-width: var(--samp-space-size, var(--rh-border-width-lg, 3px));
+}
+
+/* Opacity */
+samp.opacity {
+ opacity: var(--samp-opacity);
+ background-color: black;
+ display: block;
+ width: var(--rh-length-xl, 24px);
+ aspect-ratio: 1;
+}
+
+/* Breakpoints */
+samp.breakpoint img {
+ max-height: var(--rh-length-3xl, 48px);
+}
diff --git a/docs/styles/styles.css b/docs/styles/styles.css
new file mode 100644
index 0000000000..123318648b
--- /dev/null
+++ b/docs/styles/styles.css
@@ -0,0 +1,328 @@
+@layer
+ reset,
+ fonts,
+ typography,
+ base,
+ grid,
+ layout,
+ flow,
+ third-party,
+ not-defined,
+ lightdom,
+ patterns,
+ page,
+ overrides;
+
+@import url("not-defined.css") layer(not-defined);
+@import url("reset.css") layer(reset);
+@import url("fonts.css") layer(fonts);
+@import url("typography.css") layer(typography);
+@import url("grid.css") layer(grid);
+@import url("lightdom.css") layer(lightdom);
+@import url("third-party/prism-rhds.css") layer(third-party);
+
+@layer base {
+ body {
+ color: var(--rh-color-text-primary-on-light, #151515);
+ }
+
+ :where(p, ul, ol, dl) {
+ font-size: var(--rh-font-size-body-text-lg, 1.125rem);
+ }
+
+ :where(h1, h2, h3, h4, h5, h6) {
+ font-weight: var(--rh-font-weight-heading-medium, 500);
+ }
+
+ a {
+ color: var(--rh-color-interactive-blue-darker, #0066cc);
+ }
+
+ a:hover {
+ color: var(--rh-color-interactive-blue-darkest, #003366);
+ }
+
+ a:visited {
+ color: var(--rh-color-interactive-purple-darker, #5e40be);
+ }
+
+ hr {
+ border-block-start:
+ var(--rh-border-width-sm, 1px)
+ solid
+ var(--rh-color-border-subtle-on-light, #c7c7c7);
+ border-inline: none;
+ border-block-end: none;
+ margin-block-end: var(--rh-space-2xl, 32px);
+ }
+
+ figure > img {
+ max-width: 100%;
+ }
+
+ figcaption {
+ color: var(--rh-color-text-secondary-on-light, #4d4d4d);
+ }
+}
+
+@layer layout {
+ :root {
+ --uxdot-masthead-max-height: 72px;
+ --container-min-width: 992px;
+ --container-max-width: 1332px;
+ }
+
+ :target {
+ /* Set padding for #hash links */
+ scroll-margin-top: calc(var(--uxdot-masthead-max-height) + var(--rh-space-5xl, 80px));
+ }
+
+ body {
+ display: grid;
+ grid-template-rows: max-content 1fr max-content;
+ grid-template-areas: "header" "main" "footer";
+ position: relative;
+ min-height: 100dvh;
+ }
+
+ body:has(uxdot-sidenav:not(:defined)) {
+ grid-template-rows: max-content max-content 1fr max-content;
+ grid-template-areas: "header" "nav" "main" "footer";
+ }
+
+ main {
+ grid-area: main;
+ border-inline-start:
+ var(--rh-border-width-sm, 1px)
+ solid
+ var(--rh-color-border-subtle-on-light, #c7c7c7);
+ container-type: inline-size;
+ container-name: main;
+ padding-block-start: var(--uxdot-masthead-max-height);
+ }
+
+ .container {
+ padding-inline: var(--rh-space-lg, 16px);
+ padding-block-end: var(--rh-space-lg, 16px);
+ }
+
+ uxdot-masthead {
+ grid-area: header;
+ }
+
+ uxdot-sidenav {
+ grid-area: nav;
+ }
+
+ rh-footer-universal {
+ grid-area: footer;
+ }
+
+ @media (min-width: 992px) {
+ body {
+ grid-template-rows: max-content 1fr max-content;
+ grid-template-columns: minmax(300px, 320px) max-content 1fr;
+ grid-template-areas:
+ "header header header"
+ "nav main main"
+ "nav footer footer";
+ }
+
+ body:has(uxdot-sidenav:not(:defined)) {
+ grid-template-rows: max-content 1fr max-content;
+ grid-template-areas:
+ "header header header"
+ "nav main main"
+ "nav footer footer";
+ }
+ }
+
+ @container main (min-width: 576px) {
+ .container {
+ padding-inline: var(--rh-space-2xl, 32px);
+ padding-block-end: var(--rh-space-2xl, 32px);
+ }
+ }
+
+ @container main (min-width: 768px) {
+ .container {
+ padding-inline: var(--rh-space-3xl, 48px);
+ padding-block-end: var(--rh-space-3xl, 48px);
+ }
+ }
+
+ @container main (min-width: 992px) {
+ .container {
+ max-width: var(--container-max-width);
+ padding-inline: var(--rh-space-6xl, 96px);
+ padding-block-start: 0;
+ padding-block-end: var(--rh-space-6xl, 96px);
+ }
+ }
+}
+
+@layer flow {
+ :where(p, ul, ol, dl) {
+ margin-block-start: var(--rh-space-lg, 16px);
+ margin-block-end: var(--rh-space-2xl, 32px);
+ }
+
+ :where(li) {
+ margin-block: var(--rh-space-md, 8px);
+ }
+
+ :where(h1, h2, h3, h4, h5, h6) + :where(h2, h3, h4, h5, h6),
+ /* any where copy-permalink is used as a sibling to another */
+ :where(uxdot-copy-permalink + uxdot-copy-permalink) {
+ margin-block-start: var(--rh-space-2xl, 32px);
+ }
+
+ figure uxdot-example {
+ margin-block-end: 0;
+ }
+
+ rh-alert + uxdot-example {
+ margin-block-start: var(--rh-space-2xl, 32px);
+ }
+
+ rh-table {
+ margin-block: var(--rh-space-3xl, 48px);
+ }
+
+ /* TODO: look into this do we need this rule? */
+ uxdot-copy-permalink.h2 + uxdot-copy-permalink.h3 {
+ --uxdot-copy-permalink-margin-block-start: 0;
+ }
+
+ rh-alert + rh-alert {
+ margin-block-start: var(--rh-space-xl, 24px);
+ }
+
+ uxdot-example + figcaption,
+ figcaption + uxdot-example {
+ margin-block: var(--rh-space-xl, 24px);
+ }
+}
+
+@layer patterns {
+ /**
+ * Patterns layer for defining component and site patterns
+ **/
+
+ /**
+ * KBD and code pattern
+ **/
+
+ :where(code) {
+ padding-inline: var(--rh-space-xs, 4px);
+ background: var(--rh-color-surface-light, #e0e0e0);
+ border-radius: var(--rh-border-radius-default, 3px);
+ font-size: var(--rh-font-size-code-md, 1rem);
+ font-weight: var(--rh-font-weight-code-regular, 400);
+ }
+
+ :where(code:empty) {
+ display: none;
+ }
+
+ /* prism js, when a code is used in a pre remove the background color */
+ pre:has(code) :where(code) {
+ background: none;
+ }
+
+ :where(kbd) {
+ --_uxdot-kbd-color-border: var(--rh-color-border-subtle-on-light, #c7c7c7);
+
+ background-color: var(--rh-color-surface-lightest, #ffffff);
+ border-radius: var(--rh-border-radius-default, 3px);
+ border: var(--rh-border-width-sm, 1px) solid var(--_uxdot-kbd-color-border);
+ box-shadow: 0 2px 0 1px var(--_uxdot-kbd-color-border);
+ cursor: default;
+ font-size: var(--rh-font-size-body-text-md, 1rem);
+ line-height: 1;
+ min-width: 0.75rem;
+ display: inline-block;
+ text-align: center;
+ padding: 2px var(--rh-space-sm, 6px);
+ margin-inline: var(--rh-space-xs, 4px);
+ position: relative;
+ top: -1px;
+ }
+
+ :where(kbd):hover {
+ box-shadow: 0 1px 0 0.5px var(--_uxdot-kbd-color-border);
+ top: 1px;
+ }
+
+ :where(kbd):has(kbd),
+ :where(kbd):has(kbd):hover {
+ background-color: unset;
+ border-radius: unset;
+ border: unset;
+ box-shadow: unset;
+ min-width: unset;
+ padding: unset;
+ position: unset;
+ top: unset;
+ }
+
+ /**
+ * Sticky header pattern
+ * progressive enhancement sticky, using :has()
+ **/
+ uxdot-header:has(rh-subnav) {
+ position: sticky;
+ top: -54px; /* masthead height (72px) + subnav height (56px) - header mobile height (182px) */
+ z-index: 2;
+ }
+
+ /**
+ * Sticky table of contents pattern w/o subnav
+ * progressive enhancement sticky, using :has()
+ **/
+ uxdot-header + aside > uxdot-toc {
+ position: sticky;
+
+ /* masthead height (72px) + padding (32px) */
+ top: calc(var(--uxdot-masthead-max-height, 72px) + var(--rh-space-2xl, 32px));
+ }
+
+ uxdot-header:has(rh-subnav) + aside > uxdot-toc {
+ /* masthead height (72px) + subnav height 56px + padding (32px) */
+ top: calc(var(--uxdot-masthead-max-height, 72px) + 56px + var(--rh-space-2xl, 32px));
+ }
+
+ @container main (min-width: 768px) {
+ uxdot-header:has(rh-subnav) {
+ top: -70px; /* masthead (72px) + subnav (56px) - header tablet (198px) */
+ }
+ }
+
+ @container main (min-width: 992px) {
+ uxdot-header:has(rh-subnav) {
+ top: -118px; /* masthead (72px) + subnav (56px) - header desktop (246px) */
+ }
+ }
+}
+
+@layer overrides {
+ /**
+ * Overrides layer for overriding component and site styles
+ */
+
+ /* TODO: Document this bug table overflows vertically causing a scrollbar when it shouldn't */
+ rh-table {
+ overflow: unset;
+ }
+
+ /* Compact tile + Uxdot Example reduce overall spacing */
+ rh-tile[compact] uxdot-example::part(container) {
+ margin-block-end: 0;
+ }
+
+ rh-alert p {
+ /* TODO: Document this bug shouldn't have to force the font size
+ the component is trying to set internally on #description */
+ font-size: var(--rh-font-size-body-text-sm, 0.875rem) !important;
+ }
+}
diff --git a/docs/assets/prism.css b/docs/styles/third-party/prism-rhds.css
similarity index 98%
rename from docs/assets/prism.css
rename to docs/styles/third-party/prism-rhds.css
index de6f14aa00..aa2a504129 100644
--- a/docs/assets/prism.css
+++ b/docs/styles/third-party/prism-rhds.css
@@ -5,11 +5,15 @@
* @see https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+bash+jsx&plugins=toolbar+copy-to-clipboard
*/
+/**
+ * RHDS Theme
+ * Based off prism.css
+ **/
+
:is(code, pre)[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
- font-family: var(--rh-font-family-code);
font-size: 1em;
text-align: left;
white-space: pre;
@@ -196,5 +200,3 @@ div.code-toolbar > .toolbar span:focus {
color: inherit;
text-decoration: none;
}
-
-
diff --git a/docs/styles/typography.css b/docs/styles/typography.css
new file mode 100644
index 0000000000..846dfdb884
--- /dev/null
+++ b/docs/styles/typography.css
@@ -0,0 +1,53 @@
+body {
+ font-family: var(--rh-font-family-body-text, RedHatText, "Red Hat Text", "Noto Sans Arabic", "Noto Sans Hebrew", "Noto Sans JP", "Noto Sans KR", "Noto Sans Malayalam", "Noto Sans SC", "Noto Sans TC", "Noto Sans Thai", Helvetica, Arial, sans-serif);
+ font-size: 1rem;
+ line-height: var(--rh-line-height-body-text, 1.5);
+}
+
+:where(h1, h2, h3, h4, h5, h6) {
+ font-family: var(--rh-font-family-heading, RedHatDisplay, "Red Hat Display", "Noto Sans Arabic", "Noto Sans Hebrew", "Noto Sans JP", "Noto Sans KR", "Noto Sans Malayalam", "Noto Sans SC", "Noto Sans TC", "Noto Sans Thai", Helvetica, Arial, sans-serif);
+ line-height: var(--rh-line-height-heading, 1.3);
+}
+
+:where(code) {
+ font-family: var(--rh-font-family-code, RedHatMono, "Red Hat Mono", "Courier New", Courier, monospace);
+ line-height: var(--rh-line-height-code, 1.5);
+}
+
+:where(kbd) {
+ font-family: var(--rh-font-family-body-text, RedHatText, "Red Hat Text", "Noto Sans Arabic", "Noto Sans Hebrew", "Noto Sans JP", "Noto Sans KR", "Noto Sans Malayalam", "Noto Sans SC", "Noto Sans TC", "Noto Sans Thai", Helvetica, Arial, sans-serif);
+ font-size: 1rem;
+ line-height: var(--rh-line-height-body-text, 1.5);
+}
+
+:where(h1) {
+ font-size: var(--rh-font-size-heading-2xl, 3rem);
+}
+
+:where(h2) {
+ font-size: var(--rh-font-size-heading-xl, 2.5rem);
+}
+
+:where(h3) {
+ font-size: var(--rh-font-size-heading-lg, 2.25rem);
+}
+
+:where(h4) {
+ font-size: var(--rh-font-size-heading-md, 1.75rem);
+}
+
+:where(h5) {
+ font-size: var(--rh-font-size-heading-sm, 1.5rem);
+}
+
+:where(h6) {
+ font-size: var(--rh-font-size-heading-xs, 1.25rem);
+}
+
+:where(p) {
+ font-size: var(--rh-font-size-body-text-md, 1rem);
+}
+
+:where(p, h1, h2, h3, h4, h5, h6, li) {
+ max-width: 56rem;
+}
diff --git a/docs/tokens/index.md b/docs/tokens/index.md
index 3c7986778e..276c891351 100644
--- a/docs/tokens/index.md
+++ b/docs/tokens/index.md
@@ -1,24 +1,28 @@
---
-layout: layout-tokens.njk
+layout: layouts/pages/basic.njk
title: Overview
-bodyClasses: token-docs
+hasToc: true
+tokenSearch: true
+importElements:
+ - rh-tile
+ - rh-code-block
---
+
+
## Introduction
@@ -31,117 +35,117 @@ flexible yet seamless user experiences across a variety of platforms and
technologies. Design tokens will soon be directly integrated into all of our
websites, libraries, and tools.
-{% example palette="lightest",
- alt="Flow showing how a color like brand red becomes a token, how it is named, and how it is applied to a call to action",
- src="images/design-tokens-intro.png" %}
+
+
+
## Installation
To install design tokens, please visit our dedicated repo for instructions.
-{% cta href="https://github.com/redhat-ux/red-hat-design-tokens" %}
-Install our design tokens
-{% endcta %}
+
+ Install our design tokens
+
## Token categories
We want your feedback on our tokens. [Contact us][contact] if there are missing
values or if you have an idea for an output format or tool integration.
-
-
## Layout
@@ -73,25 +71,27 @@ In general, header labels should be as short as possible. However, if columns ha
A table should be the same width as nearby blocks of content on the page.
-{% example palette="none",
- alt="Image of examples of placeholder content and a table having the same width, one is wide and one is narrow",
- src="../table-layout-placement.png" %}
+
+
+
### Scrolling
A table will scroll horizontally or vertically if content exceeds the max-width or max-height.
-{% example palette="light",
- alt="Image of two tables, one with no scrolling and the other with scrolling columns and rows",
- src="../table-layout-scrolling.png" %}
+
+
+
+
### Logos
Logos can be used in cells along with text if necessary.
-{% example palette="light",
- alt="Image of table with logos and links among text",
- src="../table-layout-logos.png" %}
+
+
+
+
## Behavior
@@ -103,24 +103,26 @@ Columns can be sorted in ascending or descending order. Sorting controls are loc
- Sorted up (arrow pointing up)
- Sorted down (arrow pointing down)
+
+
+
-{% example palette="light",
- alt="Image of tables with various sorting options",
- src="../table-behavior-sorting.png" %}
## Responsive design
### Large viewport sizes
-{% example palette="none",
- alt="Image of table on large viewport sizes",
- src="../table-viewport-sizes-large.png" %}
+
+
+
+
### Small viewport sizes
-{% example palette="none",
- alt="Image of table on small viewport sizes",
- src="../table-viewport-sizes-small.png" %}
+
+
+
+
## Best practices
@@ -128,22 +130,24 @@ Columns can be sorted in ascending or descending order. Sorting controls are loc
A table should display at least two columns.
-{% example palette="wrong",
- alt="Image of table with one column which is incorrect usage",
- src="../table-best-practices-1.png" %}
+
+
+
+
### Large cell height
In some edge cases, a table can have large cell height if there are more element types than just text.
-{% example palette="wrong",
- alt="Image of table with lots of vertical padding which is incorrect usage",
- src="../table-best-practices-2.png" %}
+
+
+
+
### Wrong size
Do not use the small viewport size table on large viewports.
-{% example palette="wrong",
- alt="Image of small viewport table used on a large viewport which is incorrect usage",
- src="../table-best-practices-3.png" %}
\ No newline at end of file
+
+
+
diff --git a/elements/rh-table/docs/30-code.md b/elements/rh-table/docs/30-code.md
index 259aa3aea3..eeea8593b8 100644
--- a/elements/rh-table/docs/30-code.md
+++ b/elements/rh-table/docs/30-code.md
@@ -1,8 +1,12 @@
-{% renderInstallation lightdomcss=true %}{% endrenderInstallation %}
+{% renderInstall lightdomcss=true %}{% endrenderInstall %}
## Usage
-{% alert state="warning", title="Warning" %} Ensure that the table follows the recommendations on the [accessibility tab](../accessibility) so that the table works with assistive technology. {% endalert %}
+
+ Warning
+ Ensure that the table follows the recommendations on the accessibility tab so that the table works with assistive technology.
+
+
### Title
diff --git a/elements/rh-table/docs/40-accessibility.md b/elements/rh-table/docs/40-accessibility.md
index 4021d772a0..3f98d580ff 100644
--- a/elements/rh-table/docs/40-accessibility.md
+++ b/elements/rh-table/docs/40-accessibility.md
@@ -1,6 +1,10 @@
## Markup Guidance
-{% alert state="warning", title="Warning" %} Tables are strictly intended for tabular data, and should never be used for layout purposes. {% endalert %}
+
+ Warning
+ Tables are strictly intended for tabular data, and should never be used for layout purposes.
+
+
Since tables are inherently complex HTML structures, they can create barriers for users and assistive technologies ([View WCAG guidelines](#web-content-accessibility-guidelines)) if their markup does not clearly define the relationships within the tabular data. Therefore, it is essential for tables to contain as much context as possible through the application of appropriate structural markup.
@@ -60,9 +64,9 @@ Since tables are inherently complex HTML structures, they can create barriers fo
If a table is in a container that can receive keyboard focus (e.g., with a `tabindex="0"` attribute), then a user can place focus on the container and scroll the table horizontally or vertically using the arrow keys.
-{% example palette="light",
- alt="Image of table with scrollbars and purple buttons showing keyboard navigation",
- src="../table-a11y-keyboard-navigation.png" %}
+
+
+
@@ -81,57 +85,50 @@ If a table is in a container that can receive keyboard focus (e.g., with a `tabi
- Up Arrow
+ Up Arrow
Moves the table view up
- Left Arrow
+ Left Arrow
Moves the table view left
- Right Arrow
+ Right Arrow
Moves the table view right
- Down Arrow
+ Down Arrow
Moves the table view down
- Tab
+ Tab
Moves focus to next interactive element within a cell or outside of the table
- Shift+Tab
+ Shift+Tab
Moves focus to previous interactive element within a cell or outside of the table
-
-
## Focus order
A logical focus order helps keyboard users operate our websites and apps. Elements need to receive focus in an order that preserves meaning, therefore the focus order should make sense and not jump around randomly. Focus within a table moves from top to bottom and left to right.
-{% example palette="light",
- alt="Image of table with links, focus indicators, and numbers showing the focus order",
- src="../table-a11y-focus-order.png" %}
+
+
+
+
## Touch targets
Each cell includes enough spacing for selecting interactive elements.
-{% example palette="light",
- alt="Image of table with links and focus indicators showing touch target size",
- src="../table-a11y-touch-targets.png" %}
+
+
+
+
## Additional guidelines
@@ -140,11 +137,11 @@ Each cell includes enough spacing for selecting interactive elements.
- Avoid merged cells. When possible consider breaking a complex table into a series of simpler tables
- Do not place multiple inactive elements in a single cell
-{% include 'accessibility/ariaguide.md' %}
+{% include 'partials/accessibility/ariaguide.md' %}
-{% include 'accessibility/wcag.md' %}
-{% include 'accessibility/1.3.1-A.md' %}
-{% include 'accessibility/2.1.1-A.md' %}
-{% include 'accessibility/2.1.3-AAA.md' %}
-{% include 'accessibility/2.4.3-A.md' %}
-{% include 'accessibility/2.5.5-AAA.md' %}
+{% include 'partials/accessibility/wcag.md' %}
+{% include 'partials/accessibility/1.3.1-A.md' %}
+{% include 'partials/accessibility/2.1.1-A.md' %}
+{% include 'partials/accessibility/2.1.3-AAA.md' %}
+{% include 'partials/accessibility/2.4.3-A.md' %}
+{% include 'partials/accessibility/2.5.5-AAA.md' %}
diff --git a/elements/rh-tabs/docs/00-overview.md b/elements/rh-tabs/docs/00-overview.md
index ce64595bf2..7188abab29 100644
--- a/elements/rh-tabs/docs/00-overview.md
+++ b/elements/rh-tabs/docs/00-overview.md
@@ -1,29 +1,38 @@
## Overview
- {{ tagName | getElementDescription }}
- {% example palette="light", alt="Image of open tabs, box tabs, and tabs with overflow buttons", src="./tabs-sample.png" %}
+{{ tagName | getElementDescription }}
+
+
+
+
+
{% repoStatusList %}
+
## Sample element
-
- Connected clouds
- Connected clouds panel
- Elevated apps
- Elevated apps panel
- Automated tasks
- Automated tasks panel
-
+
+
+ Connected clouds
+ Connected clouds panel
+ Elevated apps
+ Elevated apps panel
+ Automated tasks
+ Automated tasks panel
+
+
## Demo
- {% playground tagName=tagName %}{% endplayground %}
- {% cta href="./demo/", target="_blank" %}View the demo{% endcta %}
+{% playground tagName=tagName %}{% endplayground %}
+
+Full screen demo
+
## When to use
- When you need to group related information into different categories
- When users need to read sections of content in the same view without leaving the page
- When you need to group other types of content in the same view like forms, settings, dashboards, etc.
- {% repoStatusChecklist %}
+{% repoStatusChecklist %}
diff --git a/elements/rh-tabs/docs/10-style.md b/elements/rh-tabs/docs/10-style.md
index 5ee37e051c..2890c02635 100644
--- a/elements/rh-tabs/docs/10-style.md
+++ b/elements/rh-tabs/docs/10-style.md
@@ -1,151 +1,355 @@
## Style
- Tabs are used to group related content allowing users to navigate a view without leaving the page) Each tab is a text label placed in a visible or invisible container. There are two variants in two orientations and some of the styles and padding shift slightly depending on which variant is used.
+
+Tabs are used to group related content allowing users to navigate a view without leaving the page) Each tab is a text label placed in a visible or invisible container. There are two variants in two orientations and some of the styles and padding shift slightly depending on which variant is used.
### Anatomy
- {% example palette="light", alt="Image of tabs anatomy showing horizontal and vertical open tabs and box tabs with lots of annotations", src="../tabs-anatomy.png" %}
-
- 1) Active tab
- 2) Active tab accent
- 3) Inactive tab
- 4) Divider line
- 5) Content area
- 6) Overflow button - left
- 7) Overflow button - right
- 8) Inactive tab surface
- {.example-notes}
+
+
### Variants
- There are two available variants. Open tabs has a more understated style whereas Box tabs has a more traditional style.
- {% example palette="light", alt="Image of open tabs on top and box tabs below", src="../tabs-variations.png" %}
+There are two available variants. Open tabs has a more understated style whereas Box tabs has a more traditional style.
+
+
+
+
+
### Orientations
- There are two available orientations and the only difference is padding.
- {% example palette="light", alt="Image of horizontal, vertical, and tabs with overflow buttons showing padding spacers", src="../tabs-orientation.png" %}
+There are two available orientations and the only difference is padding.
+
+
+
+
+
## Theme
- Both variants and orientations are available in both light and dark themes.
+
+Both variants and orientations are available in both light and dark themes.
+
+
### Light theme
- {% example palette="light", alt="Image of light theme tabs", src="../tabs-theme-light.png" %}
-
- | Property {style="width: 50%;"} | Light theme |
- | ------------------------------ | ------------- |
- | Color - active tab text |#151515 |
- | Color - active tab accent |#EE0000 |
- | Color - active tab surface (Box tabs only) |#FFFFFF |
- | Color - inactive tab text |#4D4D4D |
- | Color - inactive tab surface (Box tabs only) |#F2F2F2 |
- | Color - disabled chevron icon |#C7C7C7 |
- | Color - active chevron icon |#151515 |
- | Color - chevron button surface |#FFFFFF |
- | Border width - active tab and chevron button accent | 4px |
- | Border width - divider line and borders | 1px |
+
+
+
+
+
+
+
+
+ Property
+ Light theme
+
+
+
+
+ Color - active tab text
+ #151515
+
+
+ Color - active tab accent
+ #EE0000
+
+
+ Color - active tab surface (Box tabs only)
+ #FFFFFF
+
+
+ Color - inactive tab text
+ #4D4D4D
+
+
+ Color - inactive tab surface (Box tabs only)
+ #F2F2F2
+
+
+ Color - disabled chevron icon
+ #C7C7C7
+
+
+ Color - active chevron icon
+ #151515
+
+
+ Color - chevron button surface
+ #FFFFFF
+
+
+ Border width - active tab and chevron button accent
+ 4px
+
+
+ Border width - divider line and borders
+ 1px
+
+
+
+
+
### Dark theme
- {% example palette="darkest", alt="Image of dark theme tabs", src="../tabs-theme-dark.png" %}
-
- | Property {style="width: 50%;"} | Dark theme |
- | ------------------------------ | ------------- |
- | Color - active tab text |#FFFFFF |
- | Color - active tab accent |#FF542E |
- | Color - active tab surface (Box tabs only) |#151515 |
- | Color - inactive tab text |#C7C7C7 |
- | Color - inactive tab surface (Box tabs only) |#292929 |
- | Color - disabled chevron icon |#707070 |
- | Color - active chevron icon |#FFFFFF |
- | Color - chevron button surface |#151515 |
- | Border width - active tab and chevron button accent | 4px |
- | Border width - divider line and borders | 1px |
+
+
+
+
+
+
+
+
+ Property
+ Dark theme
+
+
+
+
+ Color - active tab text
+ #FFFFFF
+
+
+ Color - active tab accent
+ #FF542E
+
+
+ Color - active tab surface (Box tabs only)
+ #151515
+
+
+ Color - inactive tab text
+ #C7C7C7
+
+
+ Color - inactive tab surface (Box tabs only)
+ #292929
+
+
+ Color - disabled chevron icon
+ #707070
+
+
+ Color - active chevron icon
+ #FFFFFF
+
+
+ Color - chevron button surface
+ #151515
+
+
+ Border width - active tab and chevron button accent
+ 4px
+
+
+ Border width - divider line and borders
+ 1px
+
+
+
+
+
## Configuration
- The panel for both orientations of tabs does not have a maximum height and should not scroll.
- {% example palette="light", alt="Image of horizontal and vertical tabs construction; several examples showing details like alignment, height, width, and more", src="../tabs-configuration.png" %}
+The panel for both orientations of tabs does not have a maximum height and should not scroll.
+
+
+
+
+
### Overflow buttons
- Overflow buttons are containers with chevron icons that are added to tabs on small breakpoints.
- {% example palette="light", alt="Image of horizontal and vertical tabs with overflow buttons showing padding spacers", src="../tabs-configuration-overflow-buttons.png" %}
+Overflow buttons are containers with chevron icons that are added to tabs on small breakpoints.
+
+
+
+
-## Space
- Box tabs are separated by a 1px divider.
- {% example palette="light", alt="Image of open tabs spacing for all sizes and orientations", src="../tabs-space-open.png" %}
+## Space
- {% example palette="light", alt="Image of box tabs spacing for all sizes and orientations", src="../tabs-space-box.png" %}
+Box tabs are separated by a 1px divider.
- {% spacerTokensTable headline="", caption='', headingLevel="4", tokens="--rh-space-md, --rh-space-lg, --rh-space-2xl" %} {% endspacerTokensTable %}
+
+
+
-## Interaction states
- Interactive elements include inactive tabs and overflow buttons.
-### Hover - Open tabs
- Inactive tabs and overflow buttons have the same hover state.
+
+
+
- {% example palette="light", alt="Image of light theme open tabs hover states", src="../tabs-open-interaction-state-hover-theme-light.png" %}
+
+{% spacerTokensTable headline="", caption='', headingLevel="4", tokens="--rh-space-md, --rh-space-lg, --rh-space-2xl" %} {% endspacerTokensTable %}
+
- {% example palette="darkest", alt="Image of dark theme open tabs hover states", src="../tabs-open-interaction-state-hover-theme-dark.png" %}
-
-### Hover - Box tabs
- {% example palette="light", alt="Image of light theme box tabs hover states", src="../tabs-box-interaction-state-hover-theme-light.png" %}
+## Interaction states
- {% example palette="darkest", alt="Image of dark theme box tabs hover states", src="../tabs-box-interaction-state-hover-theme-dark.png" %}
+Interactive elements include inactive tabs and overflow buttons.
- {% tokensTable %}
- | Property {style="width: 50%;"} | Light theme {style="width: 25%;"} | Dark theme |
- | ------------------------------ | --------------------------------- | ---------- |
- | Color - accent |#707070 |#C7C7C7 |
- | Color - text and chevron icon |#FFFFFF |#151515 |
+### Hover - Open tabs
- {% endtokensTable %}
+Inactive tabs and overflow buttons have the same hover state.
-### Focus - Open tabs
+
+
+
- {% alert state="info", title="Helpful Tip" %} The Focus state has the same styles as the Hover state. {% endalert %}
+
+
+
- {% example palette="light", alt="Image of light theme open tabs focus states", src="../tabs-open-interaction-state-focus-theme-light.png" %}
- {% example palette="darkest", alt="Image of dark theme open tabs focus states", src="../tabs-open-interaction-state-focus-theme-dark.png" %}
+### Hover - Box tabs
-### Focus - Box tabs
+
+
+
+
+
+
+
+
+
+
+
+
+ Property
+ Light theme
+ Dark theme
+
+
+
+
+ Color - accent
+ #707070
+ #C7C7C7
+
+
+ Color - text and chevron icon
+ #FFFFFF
+ #151515
+
+
+
+
- {% alert state="info", title="Helpful Tip" %} The Focus state has the same styles as the Hover state. {% endalert %}
- {% example palette="light", alt="Image of light theme box tabs focus states", src="../tabs-box-interaction-state-focus-theme-light.png" %}
+### Focus - Open tabs
- {% example palette="darkest", alt="Image of dark theme box tabs focus states", src="../tabs-box-interaction-state-focus-theme-dark.png" %}
+
+ Helpful Tip
+ The Focus state has the same styles as the Hover state.
+
- {% tokensTable %}
+
+
+
- | Property {style="width: 50%;"} | Light theme {style="width: 25%;"} | Dark theme |
- | ------------------------------ | --------------------------------- | ---------- |
- | Color - focus ring |#0066CC |#73BCF7 |
+
+
+
- {% endtokensTable %}
-### Active - Open tabs
- {% alert state="info", title="Helpful Tip" %} The Active state has the same styles as the Hover state. {% endalert %}
+### Focus - Box tabs
- {% example palette="light", alt="Image of light theme open tabs active states", src="../tabs-open-interaction-state-active-theme-light.png" %}
+
+ Helpful Tip
+ The Focus state has the same styles as the Hover state.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Property
+ Light theme
+ Dark theme
+
+
+
+
+ Color - focus ring
+ #0066CC
+ #73BCF7
+
+
+
+
- {% example palette="darkest", alt="Image of dark theme open tabs active states", src="../tabs-open-interaction-state-active-theme-dark.png" %}
-### Active - Box tabs
- {% alert state="info", title="Helpful Tip" %} The Active state has the same styles as the Hover state. {% endalert %}
+### Active - Open tabs
+
+ Helpful Tip
+ The Active state has the same styles as the Hover state.
+
- {% example palette="light", alt="Image of light theme box tabs active states", src="../tabs-box-interaction-state-active-theme-light.png" %}
+
+
+
- {% example palette="darkest", alt="Image of dark theme box tabs active states", src="../tabs-box-interaction-state-active-theme-dark.png" %}
+
+
+
- {% tokensTable %}
- | Property {style="width: 50%;"} | Light theme {style="width: 25%;"} | Dark theme |
- | ------------------------------ | --------------------------------- | ---------- |
- | Color - focus ring |#0066CC |#73BCF7 |
+### Active - Box tabs
- {% endtokensTable %}
+
+ Helpful Tip
+ The Active state has the same styles as the Hover state.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Property
+ Light theme
+ Dark theme
+
+
+
+
+ Color - focus ring
+ #0066CC
+ #73BCF7
+
+
+
+
diff --git a/elements/rh-tabs/docs/20-guidelines.md b/elements/rh-tabs/docs/20-guidelines.md
index bb26cda2d5..d0b481de3e 100644
--- a/elements/rh-tabs/docs/20-guidelines.md
+++ b/elements/rh-tabs/docs/20-guidelines.md
@@ -1,138 +1,256 @@
## Usage
+
Use tabs to help users navigate information while staying on the same page. Text labels and content in the panel should be related so users know what to expect when they select each tab. Never force users to switch back and forth between tabs to complete a task.
+
### When to use tabs
+
Use tabs to organize lots of information into logical sections. Consider using an accordion if that information needs to be viewed simultaneously because using tabs is not suitable as it forces users to rely on short-term memory when switching back and forth. Using an accordion can also accommodate more sections with longer text labels whereas tabs should only display three or four sections with short text labels. Therefore, if viewing lots of sections of content simultaneously is critical to the user experience or if important information requires more focus and less clicking, use an accordion instead.
+
### Tabs vs. accordion
+
Tabs allow users to click through content one section at a time whereas an accordion allows users to view multiple sections of content simultaneously.
-{% example palette="light", alt="Image of tabs on top and an accordion below with two panels expanded", src="../tabs-vs-accordion.png" %}
+
+
+
+
### Number of tabs
+
To reduce cognitive load and a cluttered user interface, avoid using more than three or four tabs.
-{% example palette="light", alt="Image of open tabs with three tabs on top and box tabs with three tabs below", src="../tabs-number-of-tabs.png" %}
+
+
+
+
## Variants
+
When choosing one variation over the other, consider where it is being used. If using tabs multiple times on one page, use one variation only.
Open tabs - use if you want to keep your design clean and maintain a minimal look and feel
Box tabs - use if your design includes a lot of boxes or you want to maintain the classic tabs look and feel
-{% example palette="light", alt="Image of open tabs on top and box tabs below", src="../tabs-variations.png" %}
+
+
+
+
### Orientation
+
When choosing one orientation over the other, consider the content in the panel, other elements in the layout, and how you want users to read the content:
-Horizontal tabs are placed in the middle of a container and offer users a top-to-bottom reading experience
-Vertical tabs are placed on the left side of a container and offer users a left-to-right reading experience
+- Horizontal tabs are placed in the middle of a container and offer users a top-to-bottom reading experience
+- Vertical tabs are placed on the left side of a container and offer users a left-to-right reading experience
+
+
+
+
-{% example palette="light", alt="Image of horizontal tabs on top and vertical tabs below", src="../tabs-orientation.png" %}
### Alignment
+
If using horizontal tabs, the default orientation is left aligned, but center aligned is also an option.
-{% example palette="light", alt="Image of open tabs with left and center alignment and box tabs with left and center alignment", src="../tabs-alignment.png" %}
+
+
+
+
### Inset and tab panel spacing
+
An inset is used to ensure consistent alignment and padding between text labels, overflow buttons, and content in the panel.
-{% alert state="info", title="Helpful Tip" %} With horizontal tabs, there are two inset options. With vertical tabs, there is only one. {% endalert %}
+
+ Helpful Tip
+ With horizontal tabs, there are two inset options. With vertical tabs, there is only one.
+
-{% example palette="light", alt=" Image of open tabs showing detailed inset specs", src="../tabs-inset-open.png" %}
+
+
+
-{% example palette="light", alt="Image of box tabs showing detailed inset specs", src="../tabs-inset-box.png" %}
+
+
+
-{% example palette="light", alt="Image of vertical tabs showing detailed inset specs", src="../tabs-inset-vertical.png" %}
+
+
+
Certain content layouts may require removing the inset. While this is not a default style, it is possible with custom CSS.
### Logos
+
In certain edge cases, logos can be used instead of text labels.
-{% example palette="light", alt="Image of open tabs with small logos in place of text labels", src="../tabs-logos.png" %}
+
+
+
+
## Tab panel
+
The panel is below or to the right of tabs. Use this area to place other elements or content like text, links, calls to action, and more. Text blocks should not exceed 750px
to maintain optimal readability.
-{% alert state="warning", title="Warning" %} The Tabs element has no control over the panel in terms of content, layout, spacing, etc. {% endalert %}
+
+ Warning
+ The Tabs element has no control over the panel in terms of content, layout, spacing, etc.
+
-{% example palette="light", alt="Image of open tabs with a text block and a card", src="../tabs-tab-panel-1.png" %}
+
+
+
-{% example palette="light", alt="Image of open tabs with a title and a wide card", src="../tabs-tab-panel-2.png" %}
+
+
+
+
+
+
+
-{% example palette="light", alt="Image of open tabs with a text block and a blockquote", src="../tabs-tab-panel-3.png" %}
## Writing content
+
### Text labels
+
Text labels should be concise, scannable, and descriptive of content in the panel. They should not exceed more than two or three short words. If they do, work with a content strategist to shorten them.
-{% example palette="light", alt="Image of open tabs with examples of adequate and long text labels", src="../tabs-text-labels.png" %}
+
+
+
+
### Character count
+
In general, tabs should have three or four text labels maximum. Text labels should be short but descriptive.
Text labels should be short but descriptive.
-| Character count | Word count |
-| --------------- | ---------- |
-| 20 | 2 to 3 |
+
+
+
+
+ Column count
+ Character count
+
+
+
+
+ 3 to 4
+ 20 to 30
+
+
+
+
+
## Layout
+
### Horizontal tabs width
+
The divider line can be set to any width or be the same width as the list of tabs.
-{% example palette="light", alt="Image of open tabs with a stretched divider line on top and box tabs with a divider line constrained to the width of text labels below", src="../tabs-layout-horizontal-width.png" %}
+
+
+
+
### Vertical tabs height
+
The divider line will become taller if the height of content in the panel exceeds the height of vertical tabs.
-{% example palette="light", alt="Image of vertical tabs with a short amount of content in the panel on top and vertical tabs with a long amount of content in the panel below", src="../tabs-layout-vertical-height.png" %}
+
+
+
+
### Card
+
Tabs can be used in a card if the layout is wide enough and there are fewer tabs.
-{% example palette="light", alt="Image of open tabs in a card with only two tabs", src="../tabs-layout-card.png" %}
+
+
+
+
## Behavior
+
### Overflow
+
If the number of tabs exceeds the container width or breakpoint, overflow buttons with chevron icons are added to each side so users can horizontally scroll to reveal hidden tabs.
-{% alert state="warning", title="Warning" %} Long text labels will make overflow buttons appear sooner, try and write text labels as short as possible. {% endalert %}
+
+ Warning
+ Long text labels will make overflow buttons appear sooner, try and write text labels as short as possible.
+
+
+
+
+
-{% example palette="light", alt="Image of open tabs at various widths showing overflow buttons on top and box tabs at various widths showing overflow buttons below", src="../tabs-behavior-overflow.png" %}
### Navigating overflow tabs
+
When the first tab is active, the left overflow button is disabled. When the last tab is active, the right overflow button is disabled. When a tab that is cut off is selected, the list of tabs shifts so the selected tab is in full view.
-{% example palette="light", alt="Image of selecting a cut off tab and the list of tabs shifting to reveal the selected tab in full vie", src="../tabs-behavior-navigating-overflow-tabs.png" %}
+
+
+
+
## Responsive design
+
### Large breakpoints
-{% example palette="light", alt="Image of horizontal and vertical tabs on desktop and tablet breakpoints", src="../tabs-responsive-design-breakpoints-large.png" %}
+
+
+
+
### Small breakpoints
+
Vertical tabs switch to horizontal tabs with overflow buttons on small breakpoints.
-{% example palette="light", alt="Image of tabs with overflow buttons on small breakpoints", src="../tabs-responsive-design-breakpoints-small.png" %}
+
+
+
+
## Best practices
+
### Not enough tabs
+
There should be at least two tabs minimum.
-{% example palette="light", alt="Image of horizontal open and box tabs with one tab each which is incorrect usage", src="../tabs-best-practice-1.png" %}
+
+
+
+
### Too many tabs
+
Be careful about displaying too many tabs, some of them will become hidden even at large breakpoints.
-{% example palette="light", alt="Image of horizontal tabs with five tabs and overflow buttons which is incorrect usage", src="../tabs-best-practice-2.png" %}
+
+
+
+
### Extra spacing
+
Do not add extra spacing or stretch the width of tabs.
-{% example palette="light", alt="Image of horizontal tabs with three tabs that are stretched which is incorrect usage", src="../tabs-best-practice-3.png" %}
+
+
+
+
### Overflow buttons
+
Overflow buttons should not be visible if all tabs are visible.
-{% example palette="light", alt="Image of horizontal tabs with three visible tabs and overflow buttons which is incorrect usage", src="../tabs-best-practice-4.png" %}
+
+
+
diff --git a/elements/rh-tabs/docs/40-accessibility.md b/elements/rh-tabs/docs/40-accessibility.md
index b0d18c77e8..e4db771091 100644
--- a/elements/rh-tabs/docs/40-accessibility.md
+++ b/elements/rh-tabs/docs/40-accessibility.md
@@ -1,48 +1,90 @@
## Keyboard interactions
- Each tab is a focus stop. Pressing the Arrow
keys moves the focus and activates the next or previous tab. Pressing Tab
when a tab has focus moves the focus out of the list and onto the next interactive element.
+Each tab is a focus stop. Pressing the Arrow
keys moves the focus and activates the next or previous tab. Pressing Tab
when a tab has focus moves the focus out of the list and onto the next interactive element.
- {% alert state="info", title="Helpful tip" %}Overflow buttons do not have focus so there are no keyboard interactions.{% endalert %}
+
+ Helpful tip
+ Overflow buttons do not have focus so there are no keyboard interactions.
+
- {% example palette="light", alt="Image of horizontal tabs with diagrams of what happens when Arrow or Tab keys are pressed", src="../tabs-a11y-keyboard-interactions.png" %}
+
+
+
+
+
+
+
+
+ Key
+ Result
+
+
+
+
+ Left Arrow
+ Moves focus to the previous tab and activates it (horizontal tabs)
+
+
+ Right Arrow
+ Moves focus to the next tab and activates it (horizontal tabs)
+
+
+ Up Arrow
+ Moves focus to the previous tab and activates it (vertical tabs)
+
+
+ Down Arrow
+ Moves focus to the next tab and activates it (vertical tabs)
+
+
+ Tab
+ Moves focus to the next tab and activates it (vertical tabs)
+
+
+ Shift+Tab
+ Moves focus from the first interactive element in the panel to the active tab
+
+
+
+
- | Key | Result { style="width: 66%;" } |
- | ----------- | ------------------------------- |
- | Left Arrow | Moves focus to the previous tab and activates it (horizontal tabs) |
- | Right Arrow | Moves focus to the next tab and activates it (horizontal tabs) |
- | Up Arrow | Moves focus to the previous tab and activates it (vertical tabs) |
- | Down Arrow | Moves focus to the next tab and activates it (vertical tabs) |
- | Tab | Moves focus to the next tab and activates it (vertical tabs) |
- | Shift+Tab | Moves focus from the first interactive element in the panel to the active tab |
## Focus order
- A logical focus order helps keyboard users operate our websites. Elements need to receive focus in an order that preserves meaning, therefore the focus order should make sense and not jump around randomly. For both sizes and orientations, the focus order is from left to right and top to bottom. Disabled buttons are not included in the focus order.
- {% example palette="light", alt="Image of horizontal, vertical, and tabs with overflow buttons showing the focus order from left to right and top to bottom", src="../tabs-a11y-focus-order.png" %}
+A logical focus order helps keyboard users operate our websites. Elements need to receive focus in an order that preserves meaning, therefore the focus order should make sense and not jump around randomly. For both sizes and orientations, the focus order is from left to right and top to bottom. Disabled buttons are not included in the focus order.
+
+
+
+
+
### Touch targets
- Tabs are adequately spaced for optimal touch targets.
- {% example palette="light", alt="Image of open, box, and tabs with overflow buttons showing adequate touch target spacing", src="../tabs-a11y-touch-targets.png" %}
+Tabs are adequately spaced for optimal touch targets.
+
+
+
+
+
## Additional guidelines
- - Tabs must communicate to users which tab in the list is currently selected and the total number of tabs available
- - There should only be one active tab
- - Inactive tabs can inherit hover, focus, and active states
- - The active tab can only inherit a focus state
- - Each tab must have a unique text label that clearly describes content in the panel
- - This is helpful for users of assistive technologies so they have the necessary information to efficiently navigate
- - Content authors need to ensure content added to the panel is accessible
- - For example, if an image is added to the panel, alternative text needs to be provided to pass testing
+- Tabs must communicate to users which tab in the list is currently selected and the total number of tabs available
+- There should only be one active tab
+- Inactive tabs can inherit hover, focus, and active states
+- The active tab can only inherit a focus state
+- Each tab must have a unique text label that clearly describes content in the panel
+- This is helpful for users of assistive technologies so they have the necessary information to efficiently navigate
+- Content authors need to ensure content added to the panel is accessible
+- For example, if an image is added to the panel, alternative text needs to be provided to pass testing
- {% include 'accessibility/ariaguide.md' %}
+{% include 'partials/accessibility/ariaguide.md' %}
- {% include 'accessibility/wcag.md' %}
+{% include 'partials/accessibility/wcag.md' %}
- {% include 'accessibility/2.1.1-A.md' %}
+{% include 'partials/accessibility/2.1.1-A.md' %}
- {% include 'accessibility/2.1.3-AAA.md' %}
+{% include 'partials/accessibility/2.1.3-AAA.md' %}
- {% include 'accessibility/2.4.3-A.md' %}
+{% include 'partials/accessibility/2.4.3-A.md' %}
- {% include 'accessibility/2.5.5-AAA.md' %}
+{% include 'partials/accessibility/2.5.5-AAA.md' %}
diff --git a/elements/rh-tag/docs/00-overview.md b/elements/rh-tag/docs/00-overview.md
index 5e18af3d4f..49a2fb7b4e 100644
--- a/elements/rh-tag/docs/00-overview.md
+++ b/elements/rh-tag/docs/00-overview.md
@@ -2,18 +2,16 @@
{{ tagName | getElementDescription }}
-{% example palette="light",
- alt="Two rows of tags; the top row is ‘Filled’ tags and the bottom row is ‘Unfilled’ tags; from left to right, both rows of tags include red, orange, green, cyan, blue, purple, and gray colors",
- src="tag-sample-element.png" %}
+
+
+
{% repoStatusList %}
-
## Sample element
-### Filled
-
+### Filled
RedHat
Orange
@@ -23,6 +21,7 @@
Purple
Gray
+
### Unfilled
RedHat
Gray
-
## Demo
- View a live version of this element and see how it can be customized.
- {% playground tagName=tagName %}{% endplayground %}
- {% cta href="./demo/", target="_blank" %}
- View the `` demo in a new tab
- {% endcta %}
+
+{% playground tagName=tagName %}{% endplayground %}
+
+Full screen demo
## When to use
diff --git a/elements/rh-tag/docs/10-style.md b/elements/rh-tag/docs/10-style.md
index 41da5f35c9..8ff1a17894 100644
--- a/elements/rh-tag/docs/10-style.md
+++ b/elements/rh-tag/docs/10-style.md
@@ -1,4 +1,3 @@
-
## Style
A tag is colored text on a pill background which may include an optional icon. A
@@ -6,17 +5,21 @@ tag background can be colored, white, or transparent and it always includes a
border.
-
-
### Anatomy
-{% example palette="light",
- alt="Anatomy of a tag with annotations; number 1 is pointing to the container, number 2 is pointing to the text label, and number 3 is pointing to an optional icon",
- src="../tag-anatomy.png" %}
-
-1. Container and border
-2. Text label
-3. Optional icon
-{.example-notes}
+
+
+
### Variants
@@ -24,51 +27,59 @@ There are two available variants and the only difference is the background
colors. Both variants include an optional slot for displaying a small icon to
the left of the text label.
-{% example palette="light",
- alt="Tags with text describing each variant",
- src="../tag-variants.png" %}
+
+
+
+
## Theme
Both variants are available in the light theme. There is an unfilled white tag
available in the dark theme if necessary.
+
### Light theme
-
-{% example palette="light",
- alt="Light theme tag examples",
- src="../tag-theme-light.png" %}
+
+
+
+
+
### Dark theme
-{% example palette="darkest",
- alt="Dark theme tag examples",
- src="../tag-theme-dark.png" %}
+
+
+
+
+
## Configuration
Both variants have the same height and border radius.
-{% example palette="light",
- alt="How a tag is constructed showing border radius, icon, and height details",
- src="../tag-configuration.png" %}
+
+
+
+
## Space
-{% example palette="light",
- alt="Light theme tag spacing within the element and when grouped",
- src="../tag-space-theme-light.png" %}
+
+
+
+
+
+
+
-{% example palette="darkest",
- alt="Light theme tag spacing within the element",
- src="../tag-space-theme-dark.png" %}
+
+ {% spacerTokensTable
+ headline='',
+ caption='',
+ tokens="--rh-space-xs, --rh-space-md" %}
+ {% endspacerTokensTable %}
+
-{% spacerTokensTable
- headline='',
- caption='',
- tokens="--rh-space-xs, --rh-space-md" %}
-{% endspacerTokensTable %}
## Interaction states
A tag includes only text and an optional icon and is not interactive right now.
-
diff --git a/elements/rh-tag/docs/20-guidelines.md b/elements/rh-tag/docs/20-guidelines.md
index dd47dcfc02..c91c5cd0b4 100644
--- a/elements/rh-tag/docs/20-guidelines.md
+++ b/elements/rh-tag/docs/20-guidelines.md
@@ -4,12 +4,15 @@
Use a tag to highlight an element on a page to draw attention to it or make it
more searchable.
+
### Tag vs. badge
If you need to reflect counts like number of objects, events, or unread items,
use a Badge instead.
+
## Variants
+
Both variants come in `red`, `orange`, `green`, `cyan`, `blue`, `purple`, and
`gray` colors. The white variants is for the dark theme only. A filled tag can
be used to add more visual prominence whereas an unfilled tag can be used for
@@ -17,30 +20,31 @@ grouping. You can use both variants in the same layout or user interface, just
not in the same area or container. Whatever you choose, be sure to maintain
consistency as best as possible.
-{% alert state='warning', title='Warning' %}
-Relying on color alone to communicate information causes barriers to access for
-many users. Learn more in the [Accessibility](/accessibility) section.
-{% endalert %}
+
+ Warning
+ Relying on color alone to communicate information causes barriers to access for many users. Learn more in the Accessibility section.
+
+
+
+
+
-{% example palette="light",
- width=404,
- alt="A row of filled tags with text ‘Filled tags’ underneath and a row
- of unfilled tags with text ‘Unfilled tags’ underneath",
- src="../tag-variants-colors.png" %}
## Icons
Add an icon when additional visual information is helpful or to distinguish tags
of the same color.
-{% alert title="Helpful tip" %}
-Add an icon when additional visual information is helpful or to distinguish
-tags of the same color.
-{% endalert %}
+
+ Helpful tip
+ Add an icon when additional visual information is helpful or to distinguish tags of the same color.
+
+
+
+
+
-{% example palette="light",
- alt="A row of tags showing examples of optional icons",
- src="../tag-icons.png" %}
## White tag
@@ -49,34 +53,37 @@ It should also be used on its own and not be grouped. The text should not
indicate a status, it should be written to be a descriptive caption to elements
nearby.
-![A white tag used on top of two blocks of various text styles](../tag-white-tag.png){style="--inline-img-max-width:1000px;"}
+
+
+
+
## Status
+
### Color
Colors may be used to indicate status if desired. Regardless of what the text
says, it is recommended **not** to use a red tag unless it is
communicating a danger or error state.
-{% alert title="Helpful tip" %}
-Filled tags may communicate a status or message more effectively than unfilled
-tags because they are more visually prominent.
-{% endalert %}
+
+ Helpful tip
+ Filled tags may communicate a status or message more effectively than unfilled tags because they are more visually prominent.
+
+
+
+
+
-{% example palette="light",
- alt="A row of filled tags with examples of unique status text labels per each color",
- src="../tag-status-color.png" %}
### Text
The text you write can communicate a status as well, so choose a corresponding
color that makes sense.
-{% example palette="light",
- alt="Two groups of two tags with examples of correct status text labels",
- src="../tag-status-text.png" %}
-
-
+
+
+
## Writing content
@@ -87,25 +94,40 @@ Text labels should be written to add context or clarity using as few words as
possible. If text needs to be longer, use a caption or another text style
instead.
-{% example palette="light",
- alt="Two groups of two tags with examples of correct and incorrect text labels",
- src="../tag-text-labels.png" %}
+
+
+
The recommended maximum character count for the elements of a tag are listed below and include spaces.
-| Element {style="width: 50%" } | Character count |
-| ----------------------------- | --------------- |
-| Text label | 20 |
+
+
+
+
+ Element
+ Character count
+
+
+
+
+ Text label
+ 20
+
+
+
+
+
## Grouping
A tag can be used on its own or grouped in a row. When there are too many tags
in one row, a new row will appear.
-{% example palette="light",
- alt="Two groups of two tags, one group is three tags in one row and the other group is two tags in one row and one tag in a second row",
- src="../tag-grouping.png" %}
+
+
+
+
## Best practices
@@ -114,28 +136,29 @@ in one row, a new row will appear.
Do not mix variants or tags with and without icons in the same area or
container.
-{% example palette="wrong",
- alt="Two rows of tags; the first row shows a mix of variants and the second row shows a mix of tags with and without icons, both are incorrect usage",
- src="../tag-best-practice-1.png" %}
+
+
+
+
### Dark theme tags
Do not use light theme tags in the dark theme, [contact us][contact] if you need
dark theme tags.
-{% example palette="wrong",
- alt="Light theme tags used on a dark background which is incorrect usage",
- src="../tag-best-practice-2.png" %}
+
+
+
+
### Custom tags
Do not make your own custom tags. If you need a custom set of tags designed,
[contact us][contact].
-{% example palette="wrong",
- alt="Three tags with custom colors which is incorrect usage",
- src="../tag-best-practice-3.png" %}
-
+
+
+
[contact]: https://github.com/RedHat-UX/red-hat-design-system/discussions
diff --git a/elements/rh-tag/docs/40-accessibility.md b/elements/rh-tag/docs/40-accessibility.md
index 443a21973b..9364cdddf7 100644
--- a/elements/rh-tag/docs/40-accessibility.md
+++ b/elements/rh-tag/docs/40-accessibility.md
@@ -14,20 +14,24 @@ Since a tag does not get an accessible name and is not focusable by default, eac
Compare Figure 1 to Figure 2. Both figures include a blue informational tag, a red danger tag , and a cyan link tag. In Figure 1, note how difficult it is to determine the differences between the tags due to the lack of visual cues. In Figure 2, including icons and more descriptive text have increased the amount of helpful information available without using color alone.
### Figure 1
-{% example palette="darkest",
- alt="A row of three gray tags that all look the same",
- src="../tag-a11y-figure-1.png" %}
+
+
+
+
+
### Figure 2
-{% example palette="darkest",
- alt="A row of three gray tags all with a unique icon and a unique text label",
- src="../tag-a11y-figure-2.png" %}
-{% include 'accessibility/ariaguide.md' %}
+
+
+
+
+
+{% include 'partials/accessibility/ariaguide.md' %}
-{% include 'accessibility/wcag.md' %}
-{% include 'accessibility/2.1.1-A.md' %}
-{% include 'accessibility/2.1.3-AAA.md' %}
-{% include 'accessibility/2.4.3-A.md' %}
-{% include 'accessibility/2.5.5-AAA.md' %}
+{% include 'partials/accessibility/wcag.md' %}
+{% include 'partials/accessibility/2.1.1-A.md' %}
+{% include 'partials/accessibility/2.1.3-AAA.md' %}
+{% include 'partials/accessibility/2.4.3-A.md' %}
+{% include 'partials/accessibility/2.5.5-AAA.md' %}
diff --git a/elements/rh-tile/docs/00-overview.md b/elements/rh-tile/docs/00-overview.md
index 95f97a7cd8..b8e15517ef 100644
--- a/elements/rh-tile/docs/00-overview.md
+++ b/elements/rh-tile/docs/00-overview.md
@@ -2,29 +2,31 @@
{{ tagName | getElementDescription }}
-{% example palette="light",
- alt="Example of a default link tile and a selectable tile",
- src="./tile-sample.png" %}
+
+
+
+
{% repoStatusList %}
## Sample element
-
- Title
- Link
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
- Suspendisse eu turpis elementum
+
+ Title
+ Link
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Suspendisse eu turpis elementum
## Demo
- View a live version of this element and see how it can be customized.
- {% playground tagName=tagName %}{% endplayground %}
- {% cta href="./demo/", target="_blank" %}
- View the `` demo in a new tab
- {% endcta %}
+View a live version of this element and see how it can be customized.
+
+{% playground tagName=tagName %}{% endplayground %}
+
+Full screen demo
+
## When to use
diff --git a/elements/rh-tile/docs/10-style.md b/elements/rh-tile/docs/10-style.md
index c7f8ccaf2d..3711a72aab 100644
--- a/elements/rh-tile/docs/10-style.md
+++ b/elements/rh-tile/docs/10-style.md
@@ -1,84 +1,101 @@
-
## Style
A tile is available as a Link tile or Selectable tile. A link tile has two sizes and heading color options; the blue arrow in the bottom right corner helps distinguish it from card. A selectable tile has a consistent style for both the checkbox and radio button variants.
### Anatomy
-{% example palette="light",
- alt="Default link tile with numbers pointing to locations of an image, an icon, text, and a footer",
- src="../link-tile-anatomy.png" %}
-
-1) Image
-2) Icon
-3) Title
-4) Heading
-5) Body text
-6) Footer
-{.example-notes}
-
-{% example palette="light",
- alt="Selectable tiles with numbers pointing to locations of text, a checkbox or radio button, and a footer",
- src="../selectable-tile-anatomy.png" %}
-
-1) Heading
-2) Form input (checkbox or radio button)
-3) Body text
-4) Footer
-{.example-notes}
+
+
+
+
+
+
### Sizes
A link tile is available in Default and Compact sizes. A selectable tile has only one size which is based on the size of a compact tile.
-{% example palette="light",
- alt="Examples of a link tile, compact tile, and selectable tile to show size differences",
- src="../tile-sizes.png" %}
+
+
+
+
## Theme
Both the link tile and the selectable tile are available in dark and light themes.
-
-{% example palette="light",
- alt="Light theme tiles use a white background, blue or black heading, black text, and a blue arrow icon",
- src="../tile-light-theme.png" %}
-{% example palette="darkest",
- alt="Dark theme tiles use a dark gray background, blue or white heading, white text, and a light blue arrow icon",
- src="../tile-dark-theme.png" %}
+
+
+
+
+
+
+
+
## Heading color
A link tile has a blue heading by default, but a desaturated variant exists for both light and dark themes. The desaturated heading uses either a black or white heading. A selectable tile has a desaturated heading only and does not have the option for a blue heading.
-{% example palette="light",
- alt="Examples of a light theme link tile with a blue heading, link tile with a black heading, and selectable tile with a black heading",
- src="../tile-heading-color-light-theme.png" %}
+
+
+
+
+
+
+
-{% example palette="darkest",
- alt="Examples of a dark theme link tile with a light blue heading, link tile with a white heading, and selectable tile with a white heading",
- src="../tile-heading-color-dark-theme.png" %}
## Space
Space values remain the same at all breakpoints.
+
### Link tile without image
-{% example palette="light",
- alt="Default link tile and compact link tile with spacers showing padding and margins",
- src="../space-link-tile-no-image.png" %}
+
+
+
+
### Link tile with an image
-{% example palette="light",
- alt="Link tiles that have full-width and default image sizes with spacers showing padding and margins",
- src="../space-link-tile-with-image.png" %}
+
+
+
+
### Selectable tile
-{% example palette="light",
- alt="Selectable tile with spacers showing padding and margins",
- src="../space-selectable-tile.png" %}
+
+
+
+
## Interaction states
@@ -88,62 +105,68 @@ Interaction states are visual representations used to communicate the status of
The hover state of a link tile also includes the arrow icon moving 3px to the right.
-{% example palette="light",
- alt="On hover, light theme tiles have a light gray background, an underlined (and sometimes darker blue) heading, a darker blue arrow icon ",
- src="../tile-states-hover-light-theme.png" %}
+
+
+
+
+
+
+
-{% example palette="darkest",
- alt="On hover, dark theme tiles have a lighter gray background, an underlined (and sometimes lighter blue) heading, a lighter blue arrow icon ",
- src="../tile-states-hover-dark-theme.png" %}
### Focus
-{% alert title="Helpful tip" %}
-The Focus state has the same styles as the Hover state, except for the arrow icon animation.
-{% endalert %}
+
+ Helpful tip
+ Focus state has the same styles as the hover state, except for the arrow icon animation.
+
+
+
+
+
-{% example palette="light",
- alt="Focused light theme tiles have a blue focus ring and use hover state styling",
- src="../tile-states-focus-light-theme.png" %}
+
+
+
-{% example palette="darkest",
- alt="Focused dark theme tiles have a light blue focus ring and use hover state styling",
- src="../tile-states-focus-dark-theme.png" %}
### Active
Only link tiles have an active state. Selectable tiles have a selected state instead.
-{% alert title="Helpful tip" %}
-The Active state has the same styles as the Hover state.
-{% endalert %}
+
+ Helpful tip
+ The Active state has the same styles as the Hover state.
+
-{% example palette="light",
- alt="Active light theme link tiles use the focus state styles",
- src="../tile-states-active-light-theme.png" %}
+
+
+
+
+
+
+
-{% example palette="darkest",
- alt="Active dark theme link tiles use the focus state styles",
- src="../tile-states-active-dark-theme.png" %}
### Selected
Only a selectable tile has a selected state. A link tile has an active state instead.
-{% example palette="light",
- alt="When selected, the form input of light theme selectable tiles appears blue and filled or checked",
- src="../tile-states-selected-light-theme.png" %}
+
+
+
+
+
+
+
-{% example palette="darkest",
- alt="When selected, the form input of dark theme selectable tiles appears light blue and filled or checked",
- src="../tile-states-selected-dark-theme.png" %}
### Disabled
-{% example palette="light",
- alt="Disabled light theme tiles have a light gray background and lighter gray text. Disabled link tiles have a ban icon.",
- src="../tile-states-disabled-light-theme.png" %}
+
+
+
-{% example palette="darkest",
- alt="Disabled dark theme tiles have a lighter gray background and light gray text. Disabled link tiles have a ban icon.",
- src="../tile-states-disabled-dark-theme.png" %}
+
+
+
diff --git a/elements/rh-tile/docs/20-guidelines.md b/elements/rh-tile/docs/20-guidelines.md
index 1fbba35d8b..cb1dac23ee 100644
--- a/elements/rh-tile/docs/20-guidelines.md
+++ b/elements/rh-tile/docs/20-guidelines.md
@@ -1,37 +1,46 @@
+
## Usage
A tile can be used when a clickable container is needed to provide one call to action or show one form input option. It can be grouped with similarly-structured and styled tiles in a tile group. There are two types, link tiles and selectable tiles. Both can be used in groups or individually, except for a selectable tile with a radio button, which always has to be grouped.
+
### Tile vs. card
The primary distinguishing factor between a tile and a card is that each tile can perform only one action because the whole surface is clickable. A tile also has the ability to be used as selectable items in a form. Tiles can be grouped together like card, however.
+
## Variants
### Link tiles
A link tile has many different use cases, but it is especially helpful to use in place of a card group that would have repetitive calls to action. They can also be used in place of Brick calls to action if adding icons or images is necessary.
+
#### Compact link tile
A link tile has a compact variant that can be used in sections that need a denser concentration of information. To further condense each tile, a compact link tile does not have a title slot and the icon appears to the left of content, rather than above it.
+
#### Desaturated heading
The desaturated heading variant is best used for pages with many link tiles. For example, it can help prevent a blue heading from appearing visually overwhelming on a search results page, especially if each tile includes a logo. Other than the heading color, the hover, focus, and active states look the same as a default link tile and the arrow will always be blue.
+
#### Image sizes
For a link tile, there are two image sizes available. The Default size has spacing around the entire image. The Full-width image size bleeds to the top, left, and right edges. The default image size is recommended for logos, while illustrations or photos would work well as a full-width image.
-{% example palette="light",
- alt="Examples of a logo in a tile with the default image size and a photo in a tile with the full-width image size",
- src="../tile-variants-image-sizes.png" %}
+
+
+
+
### Selectable tiles
-{% alert state="warning", title="Warning" %}
-A selectable tile with a radio button must be used in a group. If there is only one choice listed, use a checkbox.{% endalert %}
+
+ Helpful tip
+ A selectable tile with a radio button must be used in a group. If there is only one choice listed, use a checkbox.
+
A selectable tile is a form element and can be used as either a radio button or a checkbox. The radio button should be used if only one option can be selected. A selectable tile with checkboxes should be used when a user can select more than one option.
@@ -39,43 +48,89 @@ A selectable tile is a form element and can be used as either a radio button or
The four content slots within a tile are title, heading, body, and footer.
-- ### Title
- A title provides secondary descriptive context. A selectable tile does not have title slots.
-
-- ### Heading
- In a link tile, the heading should indicate what clicking on the tile will do. In a selectable tile, the heading labels the radio button or checkbox.
+
+
+
+
+ Slot
+ Content
+
+
+
+
+ Title
+ A title provides secondary descriptive context. A selectable tile does not have title slots.
+
+
+ Heading
+ In a link tile, the heading should indicate what clicking on the tile will do. In a selectable tile, the heading labels the radio button or checkbox.
+
+
+ Body
+ The body text expands on heading content and gives the user more information.
+
+
+ Footer
+ Footer text should be brief and be used for supplementary information only.
+
+
+
+
-- ### Body
- The body text expands on heading content and gives the user more information.
-
-- ### Footer
- Footer text should be brief and be used for supplementary information only.
- {.multi-column--min-400-wide style="padding:0;list-style-type:none;"}
### Character count
The recommended character counts below include spaces. Line counts are based on a default link tile at minimum width.
-| Element {style="width: 50%" } | Character count | Line count |
-| ------------------------------| ---------------- | ---------- |
-| Title text | 20 | 1 |
-| Heading text | 64 | 3 |
-| Body text | 160 | 7 |
-| Footer text | 25 | 1 |
+
+
+
+
+ Element
+ Character count
+ Line count
+
+
+
+
+ Title text
+ 20
+ 1
+
+
+ Heading text
+ 64
+ 3
+
+
+ Body text
+ 160
+ 7
+
+
+ Footer text
+ 25
+ 1
+
+
+
+
+
## Layouts
Like a card, the default tile should have a minimum width of four grid columns, so there is a maximum of three default link tiles in one row.
-{% example palette="light",
- alt="Three default link tiles in a row",
- src="../tile-layouts-default-tile.png" %}
+
+
+
The compact link tiles or selectable tiles can condense to a minimum width of three grid columns or a max of four compact tiles in a row.
-{% example palette="light",
- alt="Four compact link tiles in a row",
- src="../tile-layouts-compact-tile.png" %}
+
+
+
+
## Behavior
@@ -83,9 +138,10 @@ The compact link tiles or selectable tiles can condense to a minimum width of th
The vertical height of a tile will increase as more content is added. The vertical height of multiple tiles in one row matches the height of the tallest tile.
-{% example palette="light",
- alt="Three link tiles with different amounts of content have the same height",
- src="../tile-behavior-vertical-height.png" %}
+
+
+
+
## Best practices
@@ -93,40 +149,43 @@ The vertical height of a tile will increase as more content is added. The vertic
Do not use a link tile if it needs to link to more than one destination.
-{% example palette="wrong",
- alt="Example of an incorrectly used link tile with a call to action in the body",
- src="../best-practices-link-tile-actions-1.png" %}
+
+
+
+
A link tile should not be used as a button. A link tile is akin to a call to action and should navigate a user somewhere else.
-{% example palette="wrong",
- alt="Example of an incorrectly used link tile with “submit” as a heading and no other text",
- src="../best-practices-link-tile-actions-2.png" %}
+
+
+
+
### Tile groups
Do not use different variants of a tile in one tile group.
-{% example palette="wrong",
- alt="Example of an incorrectly styled tile group with a default link tile and a compact link tile",
- src="../best-practices-tile-groups-1.png" %}
+
+
+
When grouped, use the same number of content slots to make them easy to scan.
-{% example palette="wrong",
- alt="Example of an incorrectly styled tile group with one tile that has only text and a second tile that includes a logo and a title",
- src="../best-practices-tile-groups-2.png" %}
+
+
+
If tiles have images, the images should have the same height. This will help the headings of each tile align vertically which also helps users scan more easily.
-{% example palette="wrong",
- alt="Example of an incorrectly styled tile group with two tiles using different image heights",
- src="../best-practices-tile-groups-3.png" %}
+
+
+
+
### Footer content
The footer of a link tile or selectable tile should not include calls to action, links, or buttons, but it can include non-interactive elements, like tags or badges. Ideally, footer content should be able to fit on one line, but it can wrap to two when necessary.
-{% example palette="wrong",
- alt="Example of incorrectly adding a link in the footer of a link tile",
- src="../best-practices-tile-footer-content.png" %}
\ No newline at end of file
+
+
+
diff --git a/elements/rh-tile/docs/30-code.md b/elements/rh-tile/docs/30-code.md
index 22ea693cda..b5e63ea9ab 100644
--- a/elements/rh-tile/docs/30-code.md
+++ b/elements/rh-tile/docs/30-code.md
@@ -1,15 +1,18 @@
-{% renderInstallation %}{% endrenderInstallation %}
+{% renderInstall lightdomcss=true %}{% endrenderInstall %}
## Usage
-{% alert state="warning", title="Warning" %}
- Tiles require light DOM CSS to be included on the page in order to style links properly.
-{% endalert %}
+
+ Warning
+ Tiles require light DOM CSS to be included on the page in order to style links properly.
+
+
{% playground tagName=tile %}{% endplayground %}
-{% cta href="../demo/", target="_blank" %}
-View the demo in a new tab
-{% endcta %}
+
+
+ Full screen demo
+
{% renderCodeDocs hideDescription=true %}{% endrenderCodeDocs %}
-{% renderCodeDocs for='rh-tile-group' %}{% endrenderCodeDocs %}
+{% renderCodeDocs for='rh-tile-group', hideDescription=true %}{% endrenderCodeDocs %}
diff --git a/elements/rh-tile/docs/40-accessibility.md b/elements/rh-tile/docs/40-accessibility.md
index d04705d611..0f8c8afe4c 100644
--- a/elements/rh-tile/docs/40-accessibility.md
+++ b/elements/rh-tile/docs/40-accessibility.md
@@ -2,41 +2,77 @@
A user should have the ability to use the Tab key to navigate to a tile or into a tile group. When tiles are in a group, a user will need to use arrow keys to navigate from one tile to another. Pressing the `Enter`/`Return` key will activate a link tile or select a selectable tile.
-{% example palette="light",
- alt="Tile groups with labels showing which key to use for navigating",
- src="../tile-keyboard-interactions.png" %}
-
-| Key {style="width: 25%" } | Result |
-| ------------------------- | ------------------------------------------------------------------------------- |
-| Tab | Moves focus to a solo tile or the first tile in a group |
-| Shift + Tab | Moves focus to a previous solo tile or the last tile in a previous tile group |
-| Left Arrow | Moves focus to the previous tile and activates it (horizontal tabs) |
-| Right Arrow | Moves focus to the next tile and activates it (horizontal tabs) |
-| Up Arrow | Moves focus to the previous tile and activates it (vertical tabs) |
-| Arrow keys | Moves focus from one tile to another in a tile group |
-| Enter | Activates a link tile or selects a selectable tile |
+
+
+
+
+
+
+
+
+
+
+ Key
+ Result
+
+
+
+
+ Tab
+ Moves focus to a solo tile or the first tile in a group
+
+
+ Shift + Tab
+ Moves focus to a previous solo tile or the last tile in a previous tile group
+
+
+ Left Arrow
+ Moves focus to the previous tile and activates it (horizontal tabs)
+
+
+ Right Arrow
+ Moves focus to the next tile and activates it (horizontal tabs)
+
+
+ Up Arrow
+ Moves focus to the previous tile and activates it (vertical tabs)
+
+
+ Arrow keys
+ Moves focus from one tile to another in a tile group
+
+
+ Enter
+ Activates a link tile or selects a selectable tile
+
+
+
+
+
## Focus order
A logical focus order helps keyboard users operate our websites. Elements need to receive focus in an order that preserves meaning, therefore the focus order should make sense and not jump around randomly. In tile groups, focus moves from left to right and top to bottom.
-{% example palette="light",
- alt="Tile groups with numbers showing the focus order",
- src="../tile-focus-order.png" %}
+
+
+
+
## Touch targets
The whole tile is selectable, and the required heading or image would make each tile a large enough touch target.
+
## Additional guidelines
- Include alt text for a slotted image especially if it is wrapped in a link
-{% include 'accessibility/ariaguide.md' %}
+{% include 'partials/accessibility/ariaguide.md' %}
-{% include 'accessibility/wcag.md' %}
+{% include 'partials/accessibility/wcag.md' %}
-{% include 'accessibility/2.1.1-A.md' %}
-{% include 'accessibility/2.1.3-AAA.md' %}
-{% include 'accessibility/2.4.3-A.md' %}
-{% include 'accessibility/2.5.5-AAA.md' %}
\ No newline at end of file
+{% include 'partials/accessibility/2.1.1-A.md' %}
+{% include 'partials/accessibility/2.1.3-AAA.md' %}
+{% include 'partials/accessibility/2.4.3-A.md' %}
+{% include 'partials/accessibility/2.5.5-AAA.md' %}
\ No newline at end of file
diff --git a/elements/rh-timestamp/docs/00-overview.md b/elements/rh-timestamp/docs/00-overview.md
index 53f4ca0c02..6c206b0311 100644
--- a/elements/rh-timestamp/docs/00-overview.md
+++ b/elements/rh-timestamp/docs/00-overview.md
@@ -1,17 +1,22 @@
## Overview
+
{{ tagName | getElementDescription }}
{% repoStatusList %}
+
## Sample element
+
+
## Demos
+
View a live version of this element to see how it can be customized.
+
{% playground tagName=tagName %}{% endplayground %}
-{% cta href="./demo/", target="_blank" %}
- View the demo
-{% endcta %}
+
+Full screen demo
## When to use
diff --git a/elements/rh-timestamp/docs/10-style.md b/elements/rh-timestamp/docs/10-style.md
index 9aa0222b02..37e190adc5 100644
--- a/elements/rh-timestamp/docs/10-style.md
+++ b/elements/rh-timestamp/docs/10-style.md
@@ -2,41 +2,53 @@
A timestamp is a simple line of text that displays date and time values.
### Anatomy
-{% example palette="light",
- alt="Anatomy of a timestamp which is a simple line of text showing the date first and then the time after",
- src="../timestamp-anatomy.png" %}
-1. Date
-2. Time
-{.example-notes}
+
+
## Size
The size of a timestamp is determined by the text size it is applied to.
-{% example palette="light",
- alt="Two lines of text of various sizes with timestamps applied, one is 18px and the other is 24px",
- src="../timestamp-size.png" %}
+
+
+
+
## Tooltip
Two lines of text with timestamps applied, one is showing no styling and the other is showing a dashed underline.
-{% example palette="light",
- alt="Light theme badges",
- src="../timestamp-style-tooltip.png" %}
+
+
+
+
## Theme
A timestamp can be used in the same themes as text.
+
### Light theme
-
-
-
+
+
+
+
### Dark theme
-
-
-
-## Interaction states
-If a timestamp is linked, the interaction states are the same as a [link](https://ux.redhat.com/patterns/link/). Go to the Link page to see the interaction states.
\ No newline at end of file
+
+
+
+
+## Interaction states
+
+If a timestamp is linked, the interaction states are the same as a [link](https://ux.redhat.com/patterns/link/). Go to the Link page to see the interaction states.
diff --git a/elements/rh-timestamp/docs/20-guidelines.md b/elements/rh-timestamp/docs/20-guidelines.md
index 148b7fc219..c332b08143 100644
--- a/elements/rh-timestamp/docs/20-guidelines.md
+++ b/elements/rh-timestamp/docs/20-guidelines.md
@@ -1,211 +1,261 @@
+
+
## Usage
+
Use a timestamp to display date and time values.
+
### Default
+
By default, a timestamp will display the current date and time based on the current locale if the `date` attribute is not set.
-
-
-
+
+
+
+
## Basic formats
+
The format of the displayed content can be customized by setting the `date-format` and/or `time-format` attributes. Setting only one of the attributes will display only the date or time, depending on which attribute is set. The possible options are **full**, **long**, **medium**, and **short**.
You can also set the `display-suffix` attribute to display a custom suffix at the end of the displayed content. This will not override a timezone that is already displayed from the applied time format.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
## Behavior
+
### Custom format
+
The format of the displayed content can be further customized by setting the custom-format attributes. Read [datetime format options](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options) for a list of options that can be set.
-
+
-
-
-
+
+
+
### Adding a tooltip
+
To add a tooltip that displays the timestamp content as a UTC time, you can wrap `rh-timestamp` with `rh-tooltip` and set the `UTC` attribute on an additional `rh-timestamp`.
-{% example palette="light",
- alt="Timestamp with a tooltip on top showing the time with the UTC acronym at the end",
- src="../timestamp-tooltip-1.png" %}
+
+
+
-{% example palette="light",
- alt="Timestamp with a tooltip on top showing the time and the words Coordinated Universal Time at the end",
- src="../timestamp-tooltip-2.png" %}
+
+
+
+
### Relative time
-To display relative time, set the `relative` attribute on `rh-timestamp`.
-
-
-
+To display relative time, set the `relative` attribute on `rh-timestamp`.
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
### Relative time with tooltip
+
To display relative time, set the `relative` attribute on `rh-timestamp`.
-{% example palette="light",
- alt="Timestamp with a tooltip on top showing what the date and time would be 11 months previous",
- src="../timestamp-tooltip-3.png" %}
+
+
+
-{% example palette="light",
- alt="Timestamp with a tooltip on top showing what the date and time would be in one year",
- src="../timestamp-tooltip-4.png" %}
+
+
+
+
### Set a locale other than default
-The default locale is inferred by the browser. To set the locale to something else, set the `locale` attribute.
-
-
-
+The default locale is inferred by the browser. To set the locale to something else, set the `locale` attribute.
-
-
-
+
+
+
+
-
+
+
+
+
+
+
-
-
-
### UTC timestamp
Set the `UTC` attribute.
-
+
-
+
+
+
+
-
-
-
## Responsive design
+
Just like text, a timestamp will break to two lines as breakpoints get smaller.
+
### Large breakpoints
-{% example palette="none",
- alt="Timestamp text on desktop and tablet breakpoints",
- src="../timestamp-breakpoints-large.png" %}
+
+
+
+
+
### Small breakpoints
-{% example palette="none",
- alt="Timestamp text on large and small mobile breakpoints with the smallest mobile example breaking to two lines",
- src="../timestamp-breakpoints-small.png" %}
+
+
+
+
+
## Best practices
+
### Headings
+
Do not apply a timestamp to headings.
-
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/elements/rh-timestamp/docs/30-code.md b/elements/rh-timestamp/docs/30-code.md
index 2e1c7934bb..a83e7a5e0c 100644
--- a/elements/rh-timestamp/docs/30-code.md
+++ b/elements/rh-timestamp/docs/30-code.md
@@ -6,14 +6,5 @@
```
-{% renderSlots %}{% endrenderSlots %}
+{% renderCodeDocs hideDescription=true %}{% endrenderCodeDocs %}
-{% renderAttributes %}{% endrenderAttributes %}
-
-{% renderMethods %}{% endrenderMethods %}
-
-{% renderEvents %}{% endrenderEvents %}
-
-{% renderCssParts for='rh-timestamp', level=3 %}{% endrenderCssParts %}
-
-{% renderCssCustomProperties for='rh-timestamp', level=3 %}{% endrenderCssCustomProperties %}
diff --git a/elements/rh-timestamp/docs/40-accessibility.md b/elements/rh-timestamp/docs/40-accessibility.md
index 034c87e741..4f482bdce0 100644
--- a/elements/rh-timestamp/docs/40-accessibility.md
+++ b/elements/rh-timestamp/docs/40-accessibility.md
@@ -1,6 +1,6 @@
-{% include 'accessibility/ariaguide.md' %}
-{% include 'accessibility/wcag.md' %}
-{% include 'accessibility/2.1.1-A.md' %}
-{% include 'accessibility/2.1.3-AAA.md' %}
-{% include 'accessibility/2.4.3-A.md' %}
-{% include 'accessibility/2.5.5-AAA.md' %}
\ No newline at end of file
+{% include 'partials/accessibility/ariaguide.md' %}
+{% include 'partials/accessibility/wcag.md' %}
+{% include 'partials/accessibility/2.1.1-A.md' %}
+{% include 'partials/accessibility/2.1.3-AAA.md' %}
+{% include 'partials/accessibility/2.4.3-A.md' %}
+{% include 'partials/accessibility/2.5.5-AAA.md' %}
\ No newline at end of file
diff --git a/elements/rh-tooltip/docs/00-overview.md b/elements/rh-tooltip/docs/00-overview.md
index 44d5fd80c2..73f1787980 100644
--- a/elements/rh-tooltip/docs/00-overview.md
+++ b/elements/rh-tooltip/docs/00-overview.md
@@ -1,45 +1,44 @@
## Overview
+
{{ tagName | getElementDescription }}
-{% example palette="light",
- class="inline-flex centered",
- style="margin-block:var(--rh-space-2xl);width:auto",
- alt=" A black tooltip on top of a gray disabled button",
- src="./tooltip-sample-element.png" %}
+
+
+
{% repoStatusList %}
## Sample element
-
-
- Top Tooltip
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
- labore et dolore magna aliqua. Mi eget mauris pharetra et ultrices.
-
-
- Left Tooltip
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
- labore et dolore magna aliqua. Mi eget mauris pharetra et ultrices.
-
-
- Right Tooltip
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
- labore et dolore magna aliqua. Mi eget mauris pharetra et ultrices.
-
-
- Bottom Tooltip
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
- labore et dolore magna aliqua. Mi eget mauris pharetra et ultrices.
-
-
+
+
+ Top Tooltip
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
+ labore et dolore magna aliqua. Mi eget mauris pharetra et ultrices.
+
+
+ Left Tooltip
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
+ labore et dolore magna aliqua. Mi eget mauris pharetra et ultrices.
+
+
+ Right Tooltip
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
+ labore et dolore magna aliqua. Mi eget mauris pharetra et ultrices.
+
+
+ Bottom Tooltip
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
+ labore et dolore magna aliqua. Mi eget mauris pharetra et ultrices.
+
## Demos
- View a live version of this component and see how it can be customized.
- {% playground tagName=tagName %}{% endplayground %}
- {% cta href="./demo/", target="_blank" %}
- View the `` demo in a new tab
- {% endcta %}
+View a live version of this component and see how it can be customized.
+
+{% playground tagName=tagName %}{% endplayground %}
+
+Full screen demo
+
## When to use
- When users need help making a decision
diff --git a/elements/rh-tooltip/docs/10-style.md b/elements/rh-tooltip/docs/10-style.md
index 403b90968e..805345ab71 100644
--- a/elements/rh-tooltip/docs/10-style.md
+++ b/elements/rh-tooltip/docs/10-style.md
@@ -1,52 +1,77 @@
## Style
+
A tooltip is a container with text that includes an arrow and sometimes a drop shadow. It can be anchored to various elements like buttons, icons, etc.
+
+
### Anatomy
-{% example palette="light",
- alt="Anatomy of a tooltip with annotations; number 1 is pointing to the container, number 2 is pointing to the text, number 3 is pointing to the arrow, and number 4 is pointing to the trigger",
- src="../tooltip-anatomy.png" %}
+
-1) Container
-2) Text
-3) Arrow
-4) Trigger
-{.example-notes}
## Theme
+
A tooltip is available in both light and dark themes. The dark theme tooltip container does not include a drop shadow.
+
+
### Light theme
-{% example palette="light",
- alt="Light theme tooltip which is black",
- src="../tooltip-theme-light.png" %}
+
+
+
+
+
### Dark theme
-{% example palette="darkest",
- alt="Dark theme tooltip which is white",
- src="../tooltip-theme-dark.png" %}
+
+
+
+
+
## Configuration
+
All badges have the same height and border radius.
-{% example palette="light",
- alt="How a tooltip is constructed showing alignment, border radius, and arrow details",
- src="../tooltip-configuration.png" %}
+
+
+
+
## Space
-{% example palette="light",
- alt="Tooltip spacing both within the element and in between the element and trigger",
- src="../tooltip-space.png" %}
-{% spacerTokensTable
- headline="",
- caption='',
- headingLevel="4",
- tokens="--rh-space-md, --rh-space-lg" %}
-{% endspacerTokensTable %}
+
+
+
+
+
+ {% spacerTokensTable
+ headline="",
+ caption='',
+ headingLevel="4",
+ tokens="--rh-space-md, --rh-space-lg" %}
+ {% endspacerTokensTable %}
+
+
## Animation
+
A tooltip has a `300ms` entry delay on hover by default, but this can be customized. For example, if you would like it to appear immediately, set the delay to `0ms`.
+
+
## Interaction states
+
A tooltip appears near an icon or element on hover, focus, or when tapped. A tooltip contains only text and is not interactive.
-{% example palette="light",
- alt="Tooltip trigger interaction states",
- src="../tooltip-interaction-states.png" %}
+
+
+
diff --git a/elements/rh-tooltip/docs/20-guidelines.md b/elements/rh-tooltip/docs/20-guidelines.md
index f102ae6330..b6e30ee2f2 100644
--- a/elements/rh-tooltip/docs/20-guidelines.md
+++ b/elements/rh-tooltip/docs/20-guidelines.md
@@ -1,65 +1,99 @@
## Usage
+
Use a tooltip as a way for users to see more information before they select an element, go to a new page, or trigger an action on the page.
+
+
### Tooltip vs. popover
+
A tooltip and [Popover](/elements/popover) provide more information in context for users. However, they are different in the following ways.
- A tooltip is used for simple communication purposes while a popover is more descriptive
- Content in a tooltip is generally shorter while content in a popover can be longer and include a heading, images, or links
- A tooltip is triggered on hover (or a tap on mobile devices) while a popover is triggered by a click
+
+
## Content
+
Content in a tooltip is limited to text only. Consider the following when writing tooltip content.
-{% example palette="light",
- alt="Various text examples; from left to right, the text length starts very short, but gets longer and longer",
- src="../tooltip-content.png" %}
+
+
+
+
### Character count
A tooltip's body text should be short and descriptive.
-| Element {style="width: 50%" } | Character count |
-| ----------------------------- | --------------- |
-| Body | 60 |
+
+
+
+
+ Element
+ Character count
+
+
+
+
+ Body
+ 60
+
+
+
+
+
## Orientation
+
The correct orientation of a tooltip depends on the amount of content and browser window. If a tooltip covers up important information or gets cut off, choose a different orientation.
-{% example palette="light",
- alt="Various orientation examples; from left to right and top to bottom, top, right, bottom, and left",
- src="../tooltip-orientation.png" %}
+
+
+
+
## Behavior
+
When a cursor or focus is moved, the tooltip disappears. On mobile devices, users must tap to trigger a tooltip and then tap again to make it disappear.
-{% example palette="light",
- alt="Various behavior examples; from top to bottom, how a tooltip behaves when the trigger is hovered, focused, and tapped",
- src="../tooltip-behavior.png" %}
+
+
+
+
## Responsive design
+
A tooltip can generally be used on both large and small breakpoints if the content is not too long.
-{% example palette="none",
- alt="Examples of a tooltip used on large and small breakpoints",
- src="../tooltip-responsive-design.png" %}
+
+
+
+
## Best practices
+
### White on white
+
Do not use a dark theme tooltip in light theme environments.
-{% example palette="wrong",
- alt="A dark theme or white tooltip used on a white background is incorrect usage",
- src="../tooltip-best-practice-1.png" %}
+
+
+
+
### Cut off by browser window
+
A tooltip should not be cut off by the browser window. Change the orientation if it does.
-{% example palette="wrong",
- alt="If using the top orientation will cause the tooltip to get cut off, that is incorrect usage",
- src="../tooltip-best-practice-2.png" %}
+
+
+
+
### Unnecessary pairing
+
Do not add a tooltip to interface elements or actions that do not require further explanation.
-{% example palette="wrong",
- alt="Pairing a tooltip with an element that already has adequate descriptive text is incorrect usage",
- src="../tooltip-best-practice-3.png" %}
+
+
+
diff --git a/elements/rh-tooltip/docs/30-code.md b/elements/rh-tooltip/docs/30-code.md
index 77ebc925c0..4402c98b78 100644
--- a/elements/rh-tooltip/docs/30-code.md
+++ b/elements/rh-tooltip/docs/30-code.md
@@ -1,9 +1,10 @@
{% renderInstall %}{% endrenderInstall %}
+
## Usage
- {% playground tagName=button %}{% endplayground %}
- {% cta href="../demo/", target="_blank" %}
-View the demo in a new tab
- {% endcta %}
+
+{% playground tagName=button %}{% endplayground %}
+
+Full screen demo
{% renderCodeDocs hideDescription=true %}{% endrenderCodeDocs %}
diff --git a/elements/rh-tooltip/docs/40-accessibility.md b/elements/rh-tooltip/docs/40-accessibility.md
index f35ae29cda..53937830d5 100644
--- a/elements/rh-tooltip/docs/40-accessibility.md
+++ b/elements/rh-tooltip/docs/40-accessibility.md
@@ -1,15 +1,35 @@
## Keyboard interactions
+
A tooltip will appear when the trigger receives focus and disappear when moving focus away from the trigger.
-{% example palette="light",
- alt="Tooltip keyboard interactions; pressing tab to focus the trigger will show the tooltip, but pressing tab again will hide the tooltip",
- src="../tooltip-keyboard-interactions.png" %}
+
+
+
-| Key {style="width: 50%" } | Result |
-| ------------------------- | ------------------------------------------------------------ |
-| Tab | Moves focus to the trigger, tooltip appear |
-| Tab | Moves focus away from the trigger, tooltip disappears |
-| Esc | Removes a tooltip without moving focus away from the trigger |
+
+
+
+
+ Key
+ Result
+
+
+
+
+ Tab
+ Moves focus to the trigger, tooltip appear
+
+
+ Tab
+ Moves focus away from the trigger, tooltip disappears
+
+
+ Esc
+ Removes a tooltip without moving focus away from the trigger
+
+
+
+
## Additional guidelines
- Do not use a tooltip on static elements
@@ -18,9 +38,9 @@ A tooltip will appear when the trigger receives focus and disappear when moving
- Users navigating via screen reader must have tooltip text announced to them when it is triggered
- If a tooltip is added to a disabled trigger, that trigger must be able to receive focus
-{% include 'accessibility/ariaguide.md' %}
-{% include 'accessibility/wcag.md' %}
-{% include 'accessibility/2.1.1-A.md' %}
-{% include 'accessibility/2.1.3-AAA.md' %}
-{% include 'accessibility/2.4.3-A.md' %}
-{% include 'accessibility/2.5.5-AAA.md' %}
\ No newline at end of file
+{% include 'partials/accessibility/ariaguide.md' %}
+{% include 'partials/accessibility/wcag.md' %}
+{% include 'partials/accessibility/2.1.1-A.md' %}
+{% include 'partials/accessibility/2.1.3-AAA.md' %}
+{% include 'partials/accessibility/2.4.3-A.md' %}
+{% include 'partials/accessibility/2.5.5-AAA.md' %}
\ No newline at end of file
diff --git a/eleventy.config.cjs b/eleventy.config.cjs
index 2d1c761d7c..97967c1116 100644
--- a/eleventy.config.cjs
+++ b/eleventy.config.cjs
@@ -6,16 +6,12 @@ const DirectoryOutputPlugin = require('@11ty/eleventy-plugin-directory-output');
const AnchorsPlugin = require('@patternfly/pfe-tools/11ty/plugins/anchors.cjs');
const CustomElementsManifestPlugin =
require('@patternfly/pfe-tools/11ty/plugins/custom-elements-manifest.cjs');
-const CEMShortcodesPlugin = require('./docs/_plugins/cem-shortcodes.cjs');
-const OrderTagsPlugin = require('@patternfly/pfe-tools/11ty/plugins/order-tags.cjs');
-const TOCPlugin = require('@patternfly/pfe-tools/11ty/plugins/table-of-contents.cjs');
-const SassPlugin = require('eleventy-plugin-dart-sass');
+const TOCPlugin = require('./docs/_plugins/table-of-contents.cjs');
const RHDSPlugin = require('./docs/_plugins/rhds.cjs');
const DesignTokensPlugin = require('./docs/_plugins/tokens.cjs');
const RHDSMarkdownItPlugin = require('./docs/_plugins/markdown-it.cjs');
const ImportMapPlugin = require('./docs/_plugins/importMap.cjs');
-
-const path = require('node:path');
+const litPlugin = require('@lit-labs/eleventy-plugin-lit');
const isWatch =
process.argv.includes('--serve') || process.argv.includes('--watch');
@@ -30,41 +26,44 @@ module.exports = function(eleventyConfig) {
eleventyConfig.watchIgnores?.add('**/*.js.map');
eleventyConfig.watchIgnores?.add('elements/*/test/');
eleventyConfig.watchIgnores?.add('lib/elements/*/test/');
- eleventyConfig.addPassthroughCopy('docs/public/red-hat-outfit.css');
eleventyConfig.addPassthroughCopy('docs/patterns/**/*.{svg,jpg,jpeg,png}');
eleventyConfig.addPassthroughCopy('docs/CNAME');
eleventyConfig.addPassthroughCopy('docs/.nojekyll');
eleventyConfig.addPassthroughCopy('docs/robots.txt');
eleventyConfig.addPassthroughCopy('docs/assets/**/*');
+ eleventyConfig.addPassthroughCopy('docs/styles/**/*');
+
+ eleventyConfig.addWatchTarget('docs/styles/');
eleventyConfig.on('eleventy.before', function({ runMode }) {
eleventyConfig.addGlobalData('runMode', runMode);
});
- eleventyConfig.addPlugin(RHDSMarkdownItPlugin);
+ eleventyConfig.addGlobalData('sideNavDropdowns', [
+ { 'title': 'About', 'url': '/about', 'collection': 'about' },
+ { 'title': 'Get started', 'url': '/get-started', 'collection': 'getstarted' },
+ { 'title': 'Foundations', 'url': '/foundations', 'collection': 'foundations' },
+ { 'title': 'Tokens', 'url': '/tokens', 'collection': 'token' },
+ { 'title': 'Elements', 'url': '/elements', 'collection': 'elementDocs' },
+ { 'title': 'Patterns', 'url': '/patterns', 'collection': 'pattern' },
+ { 'title': 'Accessibility', 'url': '/accessibility', 'collection': 'accessibility' },
+ ]);
- eleventyConfig.addPlugin(SassPlugin, {
- sassLocation: `${path.join(__dirname, 'docs', 'scss')}/`,
- sassIndexFile: 'styles.scss',
- includePaths: ['node_modules', '**/*.{scss,sass}'],
- domainName: '',
- outDir: path.join(__dirname, '_site'),
- });
+ eleventyConfig.addPlugin(RHDSMarkdownItPlugin);
/** Table of Contents Shortcode */
eleventyConfig.addPlugin(TOCPlugin, {
- tags: ['h2', 'h3', 'h4', 'h5', 'h6'],
- wrapperClass: 'table-of-contents',
- headingText: 'Table of Contents',
+ wrapper: '',
+ wrapperClass: '',
+ tags: ['h2'],
+ headingText: 'On this page',
});
/** Bespoke import map for ux-dot pages and demos */
eleventyConfig.addPassthroughCopy({
'node_modules/@lit/reactive-element': '/assets/packages/@lit/reactive-element',
});
- eleventyConfig.addPassthroughCopy({
- 'elements': 'assets/packages/@rhds/elements/elements/',
- });
+ eleventyConfig.addPassthroughCopy({ 'elements': 'assets/packages/@rhds/elements/elements/' });
eleventyConfig.addPassthroughCopy({ 'lib': 'assets/packages/@rhds/elements/lib/' });
eleventyConfig.addPlugin(ImportMapPlugin, {
nodemodulesPublicPath: '/assets/packages',
@@ -99,9 +98,12 @@ module.exports = function(eleventyConfig) {
// Vendor
'lit',
'lit/directives/if-defined.js',
- 'lit-html',
+ 'lit/directives/class-map.js',
+ 'lit/static-html.js',
'lit-element',
'@lit/reactive-element',
+ '@lit-labs/ssr-client/',
+ '@lit-labs/ssr-client/lit-element-hydrate-support.js',
'@lit/context',
'tslib',
'@floating-ui/dom',
@@ -124,10 +126,6 @@ module.exports = function(eleventyConfig) {
eleventyConfig.addPlugin(CustomElementsManifestPlugin, {
renderTitleInOverview: false,
});
- eleventyConfig.addPlugin(CEMShortcodesPlugin);
-
- /** Collections to organize by order instead of date */
- eleventyConfig.addPlugin(OrderTagsPlugin, { tags: ['develop'] });
/** fancy syntax highlighting with diff support */
eleventyConfig.addPlugin(SyntaxHighlightPlugin);
@@ -138,8 +136,8 @@ module.exports = function(eleventyConfig) {
formatter($, existingids) {
if (
!existingids.includes($.attr('id'))
- && $.attr('slot')
- && $.closest('pf-card')
+ && $.attr('slot')
+ && $.closest('pf-card')
) {
return null;
} else {
@@ -149,6 +147,27 @@ module.exports = function(eleventyConfig) {
},
});
+ eleventyConfig.addPlugin(litPlugin, {
+ mode: 'worker',
+ componentModules: [
+ 'docs/assets/javascript/elements/uxdot-skip-navigation.js',
+ 'docs/assets/javascript/elements/uxdot-masthead.js',
+ 'docs/assets/javascript/elements/uxdot-header.js',
+ 'docs/assets/javascript/elements/uxdot-sidenav.js',
+ 'docs/assets/javascript/elements/uxdot-hero.js',
+ 'docs/assets/javascript/elements/uxdot-feedback.js',
+ 'docs/assets/javascript/elements/uxdot-feedback.js',
+ 'docs/assets/javascript/elements/uxdot-copy-permalink.js',
+ 'docs/assets/javascript/elements/uxdot-copy-button.js',
+ 'docs/assets/javascript/elements/uxdot-repo-status-list.js',
+ 'docs/assets/javascript/elements/uxdot-best-practice.js',
+ 'docs/assets/javascript/elements/uxdot-search.js',
+ 'docs/assets/javascript/elements/uxdot-toc.js',
+ // 'docs/assets/javascript/elements/uxdot-example.js', // Uses context API need to work around issues
+ // 'docs/assets/javascript/elements/uxdot-installation-tabs.js', // extends RhTabs so cant DSD yet
+ ],
+ });
+
!isWatch && eleventyConfig.addPlugin(DirectoryOutputPlugin, {
// Customize columns
columns: {
diff --git a/package-lock.json b/package-lock.json
index f9719dbfc7..d107f3d0b4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,7 +1,7 @@
{
"name": "@rhds/elements",
"version": "1.4.1",
- "lockfileVersion": 3,
+ "lockfileVersion": 2,
"requires": true,
"packages": {
"": {
@@ -9,7 +9,6 @@
"version": "1.4.1",
"license": "MIT",
"dependencies": {
- "@esbuild/linux-x64": "*",
"@lit/context": "^1.1.1",
"@patternfly/elements": "^3.0.1",
"@patternfly/icons": "^1.0.2",
@@ -25,6 +24,7 @@
"@commitlint/cli": "^19.2.2",
"@commitlint/config-conventional": "^19.2.2",
"@jspm/generator": "^1.1.7",
+ "@lit-labs/eleventy-plugin-lit": "^1.0.3",
"@lit/reactive-element": "^2.0.4",
"@parse5/tools": "^0.3.0",
"@patternfly/create-element": "^1.0.2",
@@ -3064,10 +3064,107 @@
"npm": ">=7.0.0"
}
},
+ "node_modules/@lit-labs/eleventy-plugin-lit": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@lit-labs/eleventy-plugin-lit/-/eleventy-plugin-lit-1.0.3.tgz",
+ "integrity": "sha512-24824crd4P0D2Y6fyfO2c0SyfU9x0vpRwxabypmp3bTXrNrTOZflREATL57Qa9EEgirZvA/ervKy5Y0WCkjGag==",
+ "dev": true,
+ "dependencies": {
+ "@lit-labs/ssr": "^3.1.8",
+ "lit": "^2.7.0 || ^3.0.0"
+ },
+ "engines": {
+ "node": ">=12.16.0"
+ }
+ },
+ "node_modules/@lit-labs/ssr": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@lit-labs/ssr/-/ssr-3.2.2.tgz",
+ "integrity": "sha512-He5TzeNPM9ECmVpgXRYmVlz0UA5YnzHlT43kyLi2Lu6mUidskqJVonk9W5K699+2DKhoXp8Ra4EJmHR6KrcW1Q==",
+ "dev": true,
+ "dependencies": {
+ "@lit-labs/ssr-client": "^1.1.7",
+ "@lit-labs/ssr-dom-shim": "^1.2.0",
+ "@lit/reactive-element": "^2.0.4",
+ "@parse5/tools": "^0.3.0",
+ "@types/node": "^16.0.0",
+ "enhanced-resolve": "^5.10.0",
+ "lit": "^3.1.2",
+ "lit-element": "^4.0.4",
+ "lit-html": "^3.1.2",
+ "node-fetch": "^3.2.8",
+ "parse5": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=13.9.0"
+ }
+ },
+ "node_modules/@lit-labs/ssr-client": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/@lit-labs/ssr-client/-/ssr-client-1.1.7.tgz",
+ "integrity": "sha512-VvqhY/iif3FHrlhkzEPsuX/7h/NqnfxLwVf0p8ghNIlKegRyRqgeaJevZ57s/u/LiFyKgqksRP5n+LmNvpxN+A==",
+ "dev": true,
+ "dependencies": {
+ "@lit/reactive-element": "^2.0.4",
+ "lit": "^3.1.2",
+ "lit-html": "^3.1.2"
+ }
+ },
+ "node_modules/@lit-labs/ssr-client/node_modules/lit-html": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.3.tgz",
+ "integrity": "sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA==",
+ "dev": true,
+ "dependencies": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ },
"node_modules/@lit-labs/ssr-dom-shim": {
"version": "1.2.0",
"license": "BSD-3-Clause"
},
+ "node_modules/@lit-labs/ssr/node_modules/@types/node": {
+ "version": "16.18.97",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.97.tgz",
+ "integrity": "sha512-4muilE1Lbfn57unR+/nT9AFjWk0MtWi5muwCEJqnOvfRQDbSfLCUdN7vCIg8TYuaANfhLOV85ve+FNpiUsbSRg==",
+ "dev": true
+ },
+ "node_modules/@lit-labs/ssr/node_modules/data-uri-to-buffer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/@lit-labs/ssr/node_modules/lit-html": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.3.tgz",
+ "integrity": "sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA==",
+ "dev": true,
+ "dependencies": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ },
+ "node_modules/@lit-labs/ssr/node_modules/node-fetch": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
+ "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
+ "dev": true,
+ "dependencies": {
+ "data-uri-to-buffer": "^4.0.0",
+ "fetch-blob": "^3.1.4",
+ "formdata-polyfill": "^4.0.10"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/node-fetch"
+ }
+ },
"node_modules/@lit/context": {
"version": "1.1.1",
"license": "BSD-3-Clause",
@@ -12091,6 +12188,19 @@
}
}
},
+ "node_modules/enhanced-resolve": {
+ "version": "5.16.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz",
+ "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
"node_modules/enquirer": {
"version": "2.4.1",
"dev": true,
@@ -13515,6 +13625,29 @@
"pend": "~1.2.0"
}
},
+ "node_modules/fetch-blob": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "dependencies": {
+ "node-domexception": "^1.0.0",
+ "web-streams-polyfill": "^3.0.3"
+ },
+ "engines": {
+ "node": "^12.20 || >= 14.13"
+ }
+ },
"node_modules/figures": {
"version": "3.2.0",
"dev": true,
@@ -13968,6 +14101,18 @@
"node": "*"
}
},
+ "node_modules/formdata-polyfill": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+ "dev": true,
+ "dependencies": {
+ "fetch-blob": "^3.1.2"
+ },
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
"node_modules/fraction.js": {
"version": "4.3.7",
"dev": true,
@@ -14550,9 +14695,8 @@
},
"node_modules/glob": {
"version": "10.3.12",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz",
- "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^2.3.6",
@@ -14582,18 +14726,16 @@
},
"node_modules/glob/node_modules/brace-expansion": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/glob/node_modules/minimatch": {
"version": "9.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
- "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -14606,9 +14748,8 @@
},
"node_modules/glob/node_modules/minipass": {
"version": "7.1.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.0.tgz",
- "integrity": "sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -19137,6 +19278,25 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "github",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "engines": {
+ "node": ">=10.5.0"
+ }
+ },
"node_modules/node-fetch": {
"version": "2.6.11",
"dev": true,
@@ -22230,18 +22390,16 @@
},
"node_modules/rimraf/node_modules/brace-expansion": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/rimraf/node_modules/glob": {
"version": "9.3.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz",
- "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"minimatch": "^8.0.2",
@@ -22257,9 +22415,8 @@
},
"node_modules/rimraf/node_modules/minimatch": {
"version": "8.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz",
- "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -22272,9 +22429,8 @@
},
"node_modules/rimraf/node_modules/minipass": {
"version": "4.2.8",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
- "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=8"
}
@@ -24732,6 +24888,15 @@
"node": ">=12.17"
}
},
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/tar": {
"version": "6.1.15",
"dev": true,
@@ -26120,6 +26285,15 @@
"@rollup/pluginutils": "^5.1.0"
}
},
+ "node_modules/web-streams-polyfill": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/webidl-conversions": {
"version": "7.0.0",
"dev": true,
@@ -26524,5 +26698,17417 @@
"url": "https://github.com/sponsors/colinhacks"
}
}
+ },
+ "dependencies": {
+ "@11ty/dependency-tree": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "@11ty/eleventy": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "@11ty/dependency-tree": "^2.0.1",
+ "@11ty/eleventy-dev-server": "^1.0.4",
+ "@11ty/eleventy-utils": "^1.0.1",
+ "@11ty/lodash-custom": "^4.17.21",
+ "@iarna/toml": "^2.2.5",
+ "@sindresorhus/slugify": "^1.1.2",
+ "bcp-47-normalize": "^1.1.1",
+ "chokidar": "^3.5.3",
+ "cross-spawn": "^7.0.3",
+ "debug": "^4.3.4",
+ "dependency-graph": "^0.11.0",
+ "ejs": "^3.1.9",
+ "fast-glob": "^3.2.12",
+ "graceful-fs": "^4.2.11",
+ "gray-matter": "^4.0.3",
+ "hamljs": "^0.6.2",
+ "handlebars": "^4.7.7",
+ "is-glob": "^4.0.3",
+ "iso-639-1": "^2.1.15",
+ "kleur": "^4.1.5",
+ "liquidjs": "^10.7.0",
+ "luxon": "^3.3.0",
+ "markdown-it": "^13.0.1",
+ "micromatch": "^4.0.5",
+ "minimist": "^1.2.8",
+ "moo": "^0.5.2",
+ "multimatch": "^5.0.0",
+ "mustache": "^4.2.0",
+ "normalize-path": "^3.0.0",
+ "nunjucks": "^3.2.3",
+ "path-to-regexp": "^6.2.1",
+ "please-upgrade-node": "^3.2.0",
+ "posthtml": "^0.16.6",
+ "posthtml-urls": "^1.0.0",
+ "pug": "^3.0.2",
+ "recursive-copy": "^2.0.14",
+ "semver": "^7.3.8",
+ "slugify": "^1.6.6"
+ }
+ },
+ "@11ty/eleventy-dev-server": {
+ "version": "1.0.4",
+ "dev": true,
+ "requires": {
+ "@11ty/eleventy-utils": "^1.0.1",
+ "chokidar": "^3.5.3",
+ "debug": "^4.3.4",
+ "dev-ip": "^1.0.1",
+ "finalhandler": "^1.2.0",
+ "mime": "^3.0.0",
+ "minimist": "^1.2.8",
+ "morphdom": "^2.7.0",
+ "please-upgrade-node": "^3.2.0",
+ "ssri": "^8.0.1",
+ "ws": "^8.13.0"
+ }
+ },
+ "@11ty/eleventy-fetch": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "debug": "^4.3.3",
+ "flat-cache": "^3.0.4",
+ "node-fetch": "^2.6.7",
+ "p-queue": "^6.6.2"
+ }
+ },
+ "@11ty/eleventy-img": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "@11ty/eleventy-fetch": "^3.0.0",
+ "debug": "^4.3.4",
+ "entities": "^4.4.0",
+ "image-size": "^1.0.2",
+ "p-queue": "^6.6.2",
+ "sharp": "^0.32.0"
+ }
+ },
+ "@11ty/eleventy-plugin-directory-output": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "kleur": "^4.1.4",
+ "strip-color": "^0.1.0"
+ }
+ },
+ "@11ty/eleventy-plugin-rss": {
+ "version": "1.2.0",
+ "dev": true,
+ "requires": {
+ "debug": "^4.3.4",
+ "posthtml": "^0.16.6",
+ "posthtml-urls": "1.0.0"
+ }
+ },
+ "@11ty/eleventy-plugin-syntaxhighlight": {
+ "version": "4.2.0",
+ "requires": {
+ "linkedom": "^0.14.19",
+ "prismjs": "^1.29.0"
+ }
+ },
+ "@11ty/eleventy-utils": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0"
+ }
+ },
+ "@11ty/lodash-custom": {
+ "version": "4.17.21",
+ "dev": true
+ },
+ "@75lb/deep-merge": {
+ "version": "1.1.1",
+ "dev": true,
+ "requires": {
+ "lodash.assignwith": "^4.2.0",
+ "typical": "^7.1.1"
+ },
+ "dependencies": {
+ "typical": {
+ "version": "7.1.1",
+ "dev": true
+ }
+ }
+ },
+ "@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "dev": true
+ },
+ "@ampproject/remapping": {
+ "version": "2.2.1",
+ "dev": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.21.4",
+ "requires": {
+ "@babel/highlight": "^7.18.6"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.22.3",
+ "dev": true
+ },
+ "@babel/core": {
+ "version": "7.22.1",
+ "dev": true,
+ "requires": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.21.4",
+ "@babel/generator": "^7.22.0",
+ "@babel/helper-compilation-targets": "^7.22.1",
+ "@babel/helper-module-transforms": "^7.22.1",
+ "@babel/helpers": "^7.22.0",
+ "@babel/parser": "^7.22.0",
+ "@babel/template": "^7.21.9",
+ "@babel/traverse": "^7.22.1",
+ "@babel/types": "^7.22.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.2",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.22.3",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.3",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.18.6",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.22.1",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.22.0",
+ "@babel/helper-validator-option": "^7.21.0",
+ "browserslist": "^4.21.3",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.22.1",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-environment-visitor": "^7.22.1",
+ "@babel/helper-function-name": "^7.21.0",
+ "@babel/helper-member-expression-to-functions": "^7.22.0",
+ "@babel/helper-optimise-call-expression": "^7.18.6",
+ "@babel/helper-replace-supers": "^7.22.1",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-environment-visitor": {
+ "version": "7.22.1",
+ "dev": true
+ },
+ "@babel/helper-function-name": {
+ "version": "7.21.0",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.20.7",
+ "@babel/types": "^7.21.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.18.6",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.22.3",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.3"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.21.4",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.21.4"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.22.1",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.22.1",
+ "@babel/helper-module-imports": "^7.21.4",
+ "@babel/helper-simple-access": "^7.21.5",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/helper-validator-identifier": "^7.19.1",
+ "@babel/template": "^7.21.9",
+ "@babel/traverse": "^7.22.1",
+ "@babel/types": "^7.22.0"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.18.6",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.21.5",
+ "dev": true
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.22.1",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.22.1",
+ "@babel/helper-member-expression-to-functions": "^7.22.0",
+ "@babel/helper-optimise-call-expression": "^7.18.6",
+ "@babel/template": "^7.21.9",
+ "@babel/traverse": "^7.22.1",
+ "@babel/types": "^7.22.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.21.5",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.21.5"
+ }
+ },
+ "@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.20.0",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.20.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.18.6",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-string-parser": {
+ "version": "7.21.5",
+ "dev": true
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.22.20"
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.21.0",
+ "dev": true
+ },
+ "@babel/helpers": {
+ "version": "7.22.3",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.21.9",
+ "@babel/traverse": "^7.22.1",
+ "@babel/types": "^7.22.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.18.6",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3"
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5"
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@babel/parser": {
+ "version": "7.22.4",
+ "dev": true
+ },
+ "@babel/plugin-syntax-import-assertions": {
+ "version": "7.20.0",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.19.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.21.4",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.20.2"
+ }
+ },
+ "@babel/plugin-syntax-typescript": {
+ "version": "7.21.4",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.20.2"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.21.5",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.21.5",
+ "@babel/helper-plugin-utils": "^7.21.5",
+ "@babel/helper-simple-access": "^7.21.5"
+ }
+ },
+ "@babel/plugin-transform-typescript": {
+ "version": "7.22.3",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-create-class-features-plugin": "^7.22.1",
+ "@babel/helper-plugin-utils": "^7.21.5",
+ "@babel/plugin-syntax-typescript": "^7.21.4"
+ }
+ },
+ "@babel/preset-typescript": {
+ "version": "7.21.5",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.21.5",
+ "@babel/helper-validator-option": "^7.21.0",
+ "@babel/plugin-syntax-jsx": "^7.21.4",
+ "@babel/plugin-transform-modules-commonjs": "^7.21.5",
+ "@babel/plugin-transform-typescript": "^7.21.3"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.24.1",
+ "dev": true,
+ "requires": {
+ "regenerator-runtime": "^0.14.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.21.9",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.21.4",
+ "@babel/parser": "^7.21.9",
+ "@babel/types": "^7.21.5"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.22.4",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.21.4",
+ "@babel/generator": "^7.22.3",
+ "@babel/helper-environment-visitor": "^7.22.1",
+ "@babel/helper-function-name": "^7.21.0",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.22.4",
+ "@babel/types": "^7.22.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.22.4",
+ "dev": true,
+ "requires": {
+ "@babel/helper-string-parser": "^7.21.5",
+ "@babel/helper-validator-identifier": "^7.19.1",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@chainsafe/is-ip": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "@chainsafe/netmask": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "@chainsafe/is-ip": "^2.0.1"
+ }
+ },
+ "@changesets/apply-release-plan": {
+ "version": "7.0.0",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.20.1",
+ "@changesets/config": "^3.0.0",
+ "@changesets/get-version-range-type": "^0.4.0",
+ "@changesets/git": "^3.0.0",
+ "@changesets/types": "^6.0.0",
+ "@manypkg/get-packages": "^1.1.3",
+ "detect-indent": "^6.0.0",
+ "fs-extra": "^7.0.1",
+ "lodash.startcase": "^4.4.0",
+ "outdent": "^0.5.0",
+ "prettier": "^2.7.1",
+ "resolve-from": "^5.0.0",
+ "semver": "^7.5.3"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ }
+ }
+ },
+ "@changesets/assemble-release-plan": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.20.1",
+ "@changesets/errors": "^0.2.0",
+ "@changesets/get-dependents-graph": "^2.0.0",
+ "@changesets/types": "^6.0.0",
+ "@manypkg/get-packages": "^1.1.3",
+ "semver": "^7.5.3"
+ }
+ },
+ "@changesets/changelog-git": {
+ "version": "0.2.0",
+ "dev": true,
+ "requires": {
+ "@changesets/types": "^6.0.0"
+ }
+ },
+ "@changesets/cli": {
+ "version": "2.27.1",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.20.1",
+ "@changesets/apply-release-plan": "^7.0.0",
+ "@changesets/assemble-release-plan": "^6.0.0",
+ "@changesets/changelog-git": "^0.2.0",
+ "@changesets/config": "^3.0.0",
+ "@changesets/errors": "^0.2.0",
+ "@changesets/get-dependents-graph": "^2.0.0",
+ "@changesets/get-release-plan": "^4.0.0",
+ "@changesets/git": "^3.0.0",
+ "@changesets/logger": "^0.1.0",
+ "@changesets/pre": "^2.0.0",
+ "@changesets/read": "^0.6.0",
+ "@changesets/types": "^6.0.0",
+ "@changesets/write": "^0.3.0",
+ "@manypkg/get-packages": "^1.1.3",
+ "@types/semver": "^7.5.0",
+ "ansi-colors": "^4.1.3",
+ "chalk": "^2.1.0",
+ "ci-info": "^3.7.0",
+ "enquirer": "^2.3.0",
+ "external-editor": "^3.1.0",
+ "fs-extra": "^7.0.1",
+ "human-id": "^1.0.2",
+ "meow": "^6.0.0",
+ "outdent": "^0.5.0",
+ "p-limit": "^2.2.0",
+ "preferred-pm": "^3.0.0",
+ "resolve-from": "^5.0.0",
+ "semver": "^7.5.3",
+ "spawndamnit": "^2.0.0",
+ "term-size": "^2.1.0",
+ "tty-table": "^4.1.5"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@changesets/config": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "@changesets/errors": "^0.2.0",
+ "@changesets/get-dependents-graph": "^2.0.0",
+ "@changesets/logger": "^0.1.0",
+ "@changesets/types": "^6.0.0",
+ "@manypkg/get-packages": "^1.1.3",
+ "fs-extra": "^7.0.1",
+ "micromatch": "^4.0.2"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ }
+ }
+ },
+ "@changesets/errors": {
+ "version": "0.2.0",
+ "dev": true,
+ "requires": {
+ "extendable-error": "^0.1.5"
+ }
+ },
+ "@changesets/get-dependents-graph": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "@changesets/types": "^6.0.0",
+ "@manypkg/get-packages": "^1.1.3",
+ "chalk": "^2.1.0",
+ "fs-extra": "^7.0.1",
+ "semver": "^7.5.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@changesets/get-release-plan": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.20.1",
+ "@changesets/assemble-release-plan": "^6.0.0",
+ "@changesets/config": "^3.0.0",
+ "@changesets/pre": "^2.0.0",
+ "@changesets/read": "^0.6.0",
+ "@changesets/types": "^6.0.0",
+ "@manypkg/get-packages": "^1.1.3"
+ }
+ },
+ "@changesets/get-version-range-type": {
+ "version": "0.4.0",
+ "dev": true
+ },
+ "@changesets/git": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.20.1",
+ "@changesets/errors": "^0.2.0",
+ "@changesets/types": "^6.0.0",
+ "@manypkg/get-packages": "^1.1.3",
+ "is-subdir": "^1.1.1",
+ "micromatch": "^4.0.2",
+ "spawndamnit": "^2.0.0"
+ }
+ },
+ "@changesets/logger": {
+ "version": "0.1.0",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@changesets/parse": {
+ "version": "0.4.0",
+ "dev": true,
+ "requires": {
+ "@changesets/types": "^6.0.0",
+ "js-yaml": "^3.13.1"
+ }
+ },
+ "@changesets/pre": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.20.1",
+ "@changesets/errors": "^0.2.0",
+ "@changesets/types": "^6.0.0",
+ "@manypkg/get-packages": "^1.1.3",
+ "fs-extra": "^7.0.1"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ }
+ }
+ },
+ "@changesets/read": {
+ "version": "0.6.0",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.20.1",
+ "@changesets/git": "^3.0.0",
+ "@changesets/logger": "^0.1.0",
+ "@changesets/parse": "^0.4.0",
+ "@changesets/types": "^6.0.0",
+ "chalk": "^2.1.0",
+ "fs-extra": "^7.0.1",
+ "p-filter": "^2.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@changesets/types": {
+ "version": "6.0.0",
+ "dev": true
+ },
+ "@changesets/write": {
+ "version": "0.3.0",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.20.1",
+ "@changesets/types": "^6.0.0",
+ "fs-extra": "^7.0.1",
+ "human-id": "^1.0.2",
+ "prettier": "^2.7.1"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ }
+ }
+ },
+ "@commitlint/cli": {
+ "version": "19.2.2",
+ "dev": true,
+ "requires": {
+ "@commitlint/format": "^19.0.3",
+ "@commitlint/lint": "^19.2.2",
+ "@commitlint/load": "^19.2.0",
+ "@commitlint/read": "^19.2.1",
+ "@commitlint/types": "^19.0.3",
+ "execa": "^8.0.1",
+ "yargs": "^17.0.0"
+ }
+ },
+ "@commitlint/config-conventional": {
+ "version": "19.2.2",
+ "dev": true,
+ "requires": {
+ "@commitlint/types": "^19.0.3",
+ "conventional-changelog-conventionalcommits": "^7.0.2"
+ }
+ },
+ "@commitlint/config-validator": {
+ "version": "19.0.3",
+ "dev": true,
+ "requires": {
+ "@commitlint/types": "^19.0.3",
+ "ajv": "^8.11.0"
+ }
+ },
+ "@commitlint/ensure": {
+ "version": "19.0.3",
+ "dev": true,
+ "requires": {
+ "@commitlint/types": "^19.0.3",
+ "lodash.camelcase": "^4.3.0",
+ "lodash.kebabcase": "^4.1.1",
+ "lodash.snakecase": "^4.1.1",
+ "lodash.startcase": "^4.4.0",
+ "lodash.upperfirst": "^4.3.1"
+ }
+ },
+ "@commitlint/execute-rule": {
+ "version": "19.0.0",
+ "dev": true
+ },
+ "@commitlint/format": {
+ "version": "19.0.3",
+ "dev": true,
+ "requires": {
+ "@commitlint/types": "^19.0.3",
+ "chalk": "^5.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "5.3.0",
+ "dev": true
+ }
+ }
+ },
+ "@commitlint/is-ignored": {
+ "version": "19.2.2",
+ "dev": true,
+ "requires": {
+ "@commitlint/types": "^19.0.3",
+ "semver": "^7.6.0"
+ }
+ },
+ "@commitlint/lint": {
+ "version": "19.2.2",
+ "dev": true,
+ "requires": {
+ "@commitlint/is-ignored": "^19.2.2",
+ "@commitlint/parse": "^19.0.3",
+ "@commitlint/rules": "^19.0.3",
+ "@commitlint/types": "^19.0.3"
+ }
+ },
+ "@commitlint/load": {
+ "version": "19.2.0",
+ "dev": true,
+ "requires": {
+ "@commitlint/config-validator": "^19.0.3",
+ "@commitlint/execute-rule": "^19.0.0",
+ "@commitlint/resolve-extends": "^19.1.0",
+ "@commitlint/types": "^19.0.3",
+ "chalk": "^5.3.0",
+ "cosmiconfig": "^9.0.0",
+ "cosmiconfig-typescript-loader": "^5.0.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "lodash.uniq": "^4.5.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "5.3.0",
+ "dev": true
+ },
+ "cosmiconfig": {
+ "version": "9.0.0",
+ "dev": true,
+ "requires": {
+ "env-paths": "^2.2.1",
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0"
+ }
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ }
+ }
+ },
+ "@commitlint/message": {
+ "version": "19.0.0",
+ "dev": true
+ },
+ "@commitlint/parse": {
+ "version": "19.0.3",
+ "dev": true,
+ "requires": {
+ "@commitlint/types": "^19.0.3",
+ "conventional-changelog-angular": "^7.0.0",
+ "conventional-commits-parser": "^5.0.0"
+ },
+ "dependencies": {
+ "conventional-changelog-angular": {
+ "version": "7.0.0",
+ "dev": true,
+ "requires": {
+ "compare-func": "^2.0.0"
+ }
+ },
+ "conventional-commits-parser": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "is-text-path": "^2.0.0",
+ "JSONStream": "^1.3.5",
+ "meow": "^12.0.1",
+ "split2": "^4.0.0"
+ }
+ },
+ "is-text-path": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "text-extensions": "^2.0.0"
+ }
+ },
+ "meow": {
+ "version": "12.1.1",
+ "dev": true
+ },
+ "split2": {
+ "version": "4.2.0",
+ "dev": true
+ },
+ "text-extensions": {
+ "version": "2.4.0",
+ "dev": true
+ }
+ }
+ },
+ "@commitlint/read": {
+ "version": "19.2.1",
+ "dev": true,
+ "requires": {
+ "@commitlint/top-level": "^19.0.0",
+ "@commitlint/types": "^19.0.3",
+ "execa": "^8.0.1",
+ "git-raw-commits": "^4.0.0",
+ "minimist": "^1.2.8"
+ },
+ "dependencies": {
+ "dargs": {
+ "version": "8.1.0",
+ "dev": true
+ },
+ "git-raw-commits": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "dargs": "^8.0.0",
+ "meow": "^12.0.1",
+ "split2": "^4.0.0"
+ }
+ },
+ "meow": {
+ "version": "12.1.1",
+ "dev": true
+ },
+ "split2": {
+ "version": "4.2.0",
+ "dev": true
+ }
+ }
+ },
+ "@commitlint/resolve-extends": {
+ "version": "19.1.0",
+ "dev": true,
+ "requires": {
+ "@commitlint/config-validator": "^19.0.3",
+ "@commitlint/types": "^19.0.3",
+ "global-directory": "^4.0.1",
+ "import-meta-resolve": "^4.0.0",
+ "lodash.mergewith": "^4.6.2",
+ "resolve-from": "^5.0.0"
+ }
+ },
+ "@commitlint/rules": {
+ "version": "19.0.3",
+ "dev": true,
+ "requires": {
+ "@commitlint/ensure": "^19.0.3",
+ "@commitlint/message": "^19.0.0",
+ "@commitlint/to-lines": "^19.0.0",
+ "@commitlint/types": "^19.0.3",
+ "execa": "^8.0.1"
+ }
+ },
+ "@commitlint/to-lines": {
+ "version": "19.0.0",
+ "dev": true
+ },
+ "@commitlint/top-level": {
+ "version": "19.0.0",
+ "dev": true,
+ "requires": {
+ "find-up": "^7.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "7.0.0",
+ "dev": true,
+ "requires": {
+ "locate-path": "^7.2.0",
+ "path-exists": "^5.0.0",
+ "unicorn-magic": "^0.1.0"
+ }
+ },
+ "locate-path": {
+ "version": "7.2.0",
+ "dev": true,
+ "requires": {
+ "p-locate": "^6.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {
+ "p-limit": "^4.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "5.0.0",
+ "dev": true
+ },
+ "yocto-queue": {
+ "version": "1.0.0",
+ "dev": true
+ }
+ }
+ },
+ "@commitlint/types": {
+ "version": "19.0.3",
+ "dev": true,
+ "requires": {
+ "@types/conventional-commits-parser": "^5.0.0",
+ "chalk": "^5.3.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "5.3.0",
+ "dev": true
+ }
+ }
+ },
+ "@csstools/css-parser-algorithms": {
+ "version": "2.3.1",
+ "requires": {}
+ },
+ "@csstools/css-tokenizer": {
+ "version": "2.2.0"
+ },
+ "@csstools/media-query-list-parser": {
+ "version": "2.1.3",
+ "requires": {}
+ },
+ "@csstools/selector-specificity": {
+ "version": "3.0.0",
+ "requires": {}
+ },
+ "@custom-elements-manifest/analyzer": {
+ "version": "0.5.7",
+ "dev": true,
+ "requires": {
+ "@web/config-loader": "0.1.3",
+ "chokidar": "3.5.2",
+ "command-line-args": "5.1.2",
+ "comment-parser": "1.2.4",
+ "custom-elements-manifest": "1.0.0",
+ "debounce": "1.2.1",
+ "globby": "11.0.4",
+ "typescript": "~4.3.2"
+ },
+ "dependencies": {
+ "chokidar": {
+ "version": "3.5.2",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
+ "custom-elements-manifest": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "typescript": {
+ "version": "4.3.5",
+ "dev": true
+ }
+ }
+ },
+ "@es-joy/jsdoccomment": {
+ "version": "0.42.0",
+ "dev": true,
+ "requires": {
+ "comment-parser": "1.4.1",
+ "esquery": "^1.5.0",
+ "jsdoc-type-pratt-parser": "~4.0.0"
+ },
+ "dependencies": {
+ "comment-parser": {
+ "version": "1.4.1",
+ "dev": true
+ }
+ }
+ },
+ "@esbuild/aix-ppc64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
+ "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz",
+ "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz",
+ "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz",
+ "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz",
+ "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz",
+ "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz",
+ "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz",
+ "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz",
+ "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz",
+ "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ia32": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz",
+ "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz",
+ "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-mips64el": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz",
+ "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ppc64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz",
+ "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-riscv64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz",
+ "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-s390x": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz",
+ "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-x64": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.3.tgz",
+ "integrity": "sha512-IOXOIm9WaK7plL2gMhsWJd+l2bfrhfilv0uPTptoRoSb2p09RghhQQp9YY6ZJhk/kqmeRt6siRdMSLLwzuT0KQ==",
+ "optional": true
+ },
+ "@esbuild/netbsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz",
+ "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/openbsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz",
+ "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/sunos-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz",
+ "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz",
+ "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-ia32": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz",
+ "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
+ "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
+ "dev": true,
+ "optional": true
+ },
+ "@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@eslint-community/regexpp": {
+ "version": "4.10.0",
+ "dev": true
+ },
+ "@eslint/eslintrc": {
+ "version": "2.1.4",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "globals": {
+ "version": "13.24.0",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "dev": true
+ }
+ }
+ },
+ "@eslint/js": {
+ "version": "9.0.0",
+ "dev": true
+ },
+ "@esm-bundle/chai": {
+ "version": "4.3.4-fix.0",
+ "dev": true,
+ "requires": {
+ "@types/chai": "^4.2.12"
+ }
+ },
+ "@floating-ui/core": {
+ "version": "1.6.0",
+ "requires": {
+ "@floating-ui/utils": "^0.2.1"
+ }
+ },
+ "@floating-ui/dom": {
+ "version": "1.6.3",
+ "requires": {
+ "@floating-ui/core": "^1.0.0",
+ "@floating-ui/utils": "^0.2.0"
+ }
+ },
+ "@floating-ui/utils": {
+ "version": "0.2.1"
+ },
+ "@formatjs/ecma402-abstract": {
+ "version": "1.18.2",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@formatjs/intl-localematcher": "0.5.4",
+ "tslib": "^2.4.0"
+ }
+ },
+ "@formatjs/fast-memoize": {
+ "version": "2.2.0",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "@formatjs/icu-messageformat-parser": {
+ "version": "2.7.6",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@formatjs/ecma402-abstract": "1.18.2",
+ "@formatjs/icu-skeleton-parser": "1.8.0",
+ "tslib": "^2.4.0"
+ }
+ },
+ "@formatjs/icu-skeleton-parser": {
+ "version": "1.8.0",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@formatjs/ecma402-abstract": "1.18.2",
+ "tslib": "^2.4.0"
+ }
+ },
+ "@formatjs/intl-localematcher": {
+ "version": "0.5.4",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "@gar/promisify": {
+ "version": "1.1.3",
+ "dev": true
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.12.3",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^2.0.3",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ }
+ },
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "dev": true
+ },
+ "@hutson/parse-repository-url": {
+ "version": "3.0.2",
+ "dev": true
+ },
+ "@iarna/toml": {
+ "version": "2.2.5",
+ "dev": true
+ },
+ "@import-maps/resolve": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "@improbable-eng/grpc-web": {
+ "version": "0.15.0",
+ "dev": true,
+ "requires": {
+ "browser-headers": "^0.4.1"
+ }
+ },
+ "@ipld/dag-cbor": {
+ "version": "8.0.1",
+ "dev": true,
+ "requires": {
+ "cborg": "^1.6.0",
+ "multiformats": "^11.0.0"
+ },
+ "dependencies": {
+ "multiformats": {
+ "version": "11.0.2",
+ "dev": true
+ }
+ }
+ },
+ "@ipld/dag-json": {
+ "version": "9.1.1",
+ "dev": true,
+ "requires": {
+ "cborg": "^1.5.4",
+ "multiformats": "^11.0.0"
+ },
+ "dependencies": {
+ "multiformats": {
+ "version": "11.0.2",
+ "dev": true
+ }
+ }
+ },
+ "@ipld/dag-pb": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "multiformats": "^11.0.0"
+ },
+ "dependencies": {
+ "multiformats": {
+ "version": "11.0.2",
+ "dev": true
+ }
+ }
+ },
+ "@isaacs/cliui": {
+ "version": "8.0.2",
+ "dev": true,
+ "requires": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "6.0.1",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "6.2.1",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "9.2.2",
+ "dev": true
+ },
+ "string-width": {
+ "version": "5.1.2",
+ "dev": true,
+ "requires": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "8.1.0",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ }
+ }
+ }
+ },
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "dev": true,
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "dev": true
+ },
+ "@jridgewell/set-array": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "dev": true
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.18",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
+ },
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "dev": true
+ }
+ }
+ },
+ "@jspm/generator": {
+ "version": "1.1.9",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.20.12",
+ "@babel/plugin-syntax-import-assertions": "^7.20.0",
+ "@babel/preset-typescript": "^7.18.6",
+ "@jspm/import-map": "^1.0.7",
+ "abort-controller": "^3.0.0",
+ "es-module-lexer": "^1.1.1",
+ "ipfs-client": "^0.9.2",
+ "make-fetch-happen": "^8.0.14",
+ "rimraf": "^4.1.2",
+ "sver": "^1.8.4"
+ }
+ },
+ "@jspm/import-map": {
+ "version": "1.0.7",
+ "dev": true
+ },
+ "@koa/router": {
+ "version": "12.0.1",
+ "dev": true,
+ "requires": {
+ "debug": "^4.3.4",
+ "http-errors": "^2.0.0",
+ "koa-compose": "^4.1.0",
+ "methods": "^1.1.2",
+ "path-to-regexp": "^6.2.1"
+ }
+ },
+ "@libp2p/interface-connection": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "@libp2p/interface-peer-id": "^2.0.0",
+ "@libp2p/interfaces": "^3.0.0",
+ "@multiformats/multiaddr": "^12.0.0",
+ "it-stream-types": "^1.0.4",
+ "uint8arraylist": "^2.1.2"
+ },
+ "dependencies": {
+ "@multiformats/multiaddr": {
+ "version": "12.1.3",
+ "dev": true,
+ "requires": {
+ "@chainsafe/is-ip": "^2.0.1",
+ "@chainsafe/netmask": "^2.0.0",
+ "@libp2p/interfaces": "^3.3.1",
+ "dns-over-http-resolver": "^2.1.0",
+ "multiformats": "^11.0.0",
+ "uint8arrays": "^4.0.2",
+ "varint": "^6.0.0"
+ }
+ },
+ "multiformats": {
+ "version": "11.0.2",
+ "dev": true
+ }
+ }
+ },
+ "@libp2p/interface-keychain": {
+ "version": "1.0.8",
+ "dev": true,
+ "requires": {
+ "multiformats": "^10.0.0"
+ }
+ },
+ "@libp2p/interface-peer-id": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "multiformats": "^11.0.0"
+ },
+ "dependencies": {
+ "multiformats": {
+ "version": "11.0.2",
+ "dev": true
+ }
+ }
+ },
+ "@libp2p/interface-peer-info": {
+ "version": "1.0.10",
+ "dev": true,
+ "requires": {
+ "@libp2p/interface-peer-id": "^2.0.0",
+ "@multiformats/multiaddr": "^12.0.0"
+ },
+ "dependencies": {
+ "@multiformats/multiaddr": {
+ "version": "12.1.3",
+ "dev": true,
+ "requires": {
+ "@chainsafe/is-ip": "^2.0.1",
+ "@chainsafe/netmask": "^2.0.0",
+ "@libp2p/interfaces": "^3.3.1",
+ "dns-over-http-resolver": "^2.1.0",
+ "multiformats": "^11.0.0",
+ "uint8arrays": "^4.0.2",
+ "varint": "^6.0.0"
+ }
+ },
+ "multiformats": {
+ "version": "11.0.2",
+ "dev": true
+ }
+ }
+ },
+ "@libp2p/interface-pubsub": {
+ "version": "3.0.7",
+ "dev": true,
+ "requires": {
+ "@libp2p/interface-connection": "^4.0.0",
+ "@libp2p/interface-peer-id": "^2.0.0",
+ "@libp2p/interfaces": "^3.0.0",
+ "it-pushable": "^3.0.0",
+ "uint8arraylist": "^2.1.2"
+ }
+ },
+ "@libp2p/interfaces": {
+ "version": "3.3.2",
+ "dev": true
+ },
+ "@libp2p/logger": {
+ "version": "2.0.7",
+ "dev": true,
+ "requires": {
+ "@libp2p/interface-peer-id": "^2.0.0",
+ "debug": "^4.3.3",
+ "interface-datastore": "^8.0.0",
+ "multiformats": "^11.0.0"
+ },
+ "dependencies": {
+ "multiformats": {
+ "version": "11.0.2",
+ "dev": true
+ }
+ }
+ },
+ "@libp2p/peer-id": {
+ "version": "1.1.18",
+ "dev": true,
+ "requires": {
+ "@libp2p/interface-peer-id": "^1.0.0",
+ "err-code": "^3.0.1",
+ "multiformats": "^10.0.0",
+ "uint8arrays": "^4.0.2"
+ },
+ "dependencies": {
+ "@libp2p/interface-peer-id": {
+ "version": "1.1.2",
+ "dev": true,
+ "requires": {
+ "multiformats": "^10.0.0"
+ }
+ }
+ }
+ },
+ "@lit-labs/eleventy-plugin-lit": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@lit-labs/eleventy-plugin-lit/-/eleventy-plugin-lit-1.0.3.tgz",
+ "integrity": "sha512-24824crd4P0D2Y6fyfO2c0SyfU9x0vpRwxabypmp3bTXrNrTOZflREATL57Qa9EEgirZvA/ervKy5Y0WCkjGag==",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr": "^3.1.8",
+ "lit": "^2.7.0 || ^3.0.0"
+ }
+ },
+ "@lit-labs/ssr": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@lit-labs/ssr/-/ssr-3.2.2.tgz",
+ "integrity": "sha512-He5TzeNPM9ECmVpgXRYmVlz0UA5YnzHlT43kyLi2Lu6mUidskqJVonk9W5K699+2DKhoXp8Ra4EJmHR6KrcW1Q==",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-client": "^1.1.7",
+ "@lit-labs/ssr-dom-shim": "^1.2.0",
+ "@lit/reactive-element": "^2.0.4",
+ "@parse5/tools": "^0.3.0",
+ "@types/node": "^16.0.0",
+ "enhanced-resolve": "^5.10.0",
+ "lit": "^3.1.2",
+ "lit-element": "^4.0.4",
+ "lit-html": "^3.1.2",
+ "node-fetch": "^3.2.8",
+ "parse5": "^7.1.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "16.18.97",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.97.tgz",
+ "integrity": "sha512-4muilE1Lbfn57unR+/nT9AFjWk0MtWi5muwCEJqnOvfRQDbSfLCUdN7vCIg8TYuaANfhLOV85ve+FNpiUsbSRg==",
+ "dev": true
+ },
+ "data-uri-to-buffer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
+ "dev": true
+ },
+ "lit-html": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.3.tgz",
+ "integrity": "sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA==",
+ "dev": true,
+ "requires": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ },
+ "node-fetch": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
+ "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
+ "dev": true,
+ "requires": {
+ "data-uri-to-buffer": "^4.0.0",
+ "fetch-blob": "^3.1.4",
+ "formdata-polyfill": "^4.0.10"
+ }
+ }
+ }
+ },
+ "@lit-labs/ssr-client": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/@lit-labs/ssr-client/-/ssr-client-1.1.7.tgz",
+ "integrity": "sha512-VvqhY/iif3FHrlhkzEPsuX/7h/NqnfxLwVf0p8ghNIlKegRyRqgeaJevZ57s/u/LiFyKgqksRP5n+LmNvpxN+A==",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^2.0.4",
+ "lit": "^3.1.2",
+ "lit-html": "^3.1.2"
+ },
+ "dependencies": {
+ "lit-html": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.3.tgz",
+ "integrity": "sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA==",
+ "dev": true,
+ "requires": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ }
+ }
+ },
+ "@lit-labs/ssr-dom-shim": {
+ "version": "1.2.0"
+ },
+ "@lit/context": {
+ "version": "1.1.1",
+ "requires": {
+ "@lit/reactive-element": "^1.6.2 || ^2.0.0"
+ }
+ },
+ "@lit/reactive-element": {
+ "version": "2.0.4",
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.2.0"
+ }
+ },
+ "@manypkg/find-root": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.5.5",
+ "@types/node": "^12.7.1",
+ "find-up": "^4.1.0",
+ "fs-extra": "^8.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "12.20.55",
+ "dev": true
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ }
+ }
+ },
+ "@manypkg/get-packages": {
+ "version": "1.1.3",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.5.5",
+ "@changesets/types": "^4.0.1",
+ "@manypkg/find-root": "^1.1.0",
+ "fs-extra": "^8.1.0",
+ "globby": "^11.0.0",
+ "read-yaml-file": "^1.1.0"
+ },
+ "dependencies": {
+ "@changesets/types": {
+ "version": "4.1.0",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ }
+ }
+ },
+ "@material/animation": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/base": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/density": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/dom": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/elevation": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/animation": "14.0.0-canary.53b3cad2f.0",
+ "@material/base": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/rtl": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/feature-targeting": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/floating-label": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/animation": "14.0.0-canary.53b3cad2f.0",
+ "@material/base": "14.0.0-canary.53b3cad2f.0",
+ "@material/dom": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/rtl": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "@material/typography": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/focus-ring": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/dom": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/rtl": "14.0.0-canary.53b3cad2f.0"
+ }
+ },
+ "@material/line-ripple": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/animation": "14.0.0-canary.53b3cad2f.0",
+ "@material/base": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/linear-progress": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/animation": "14.0.0-canary.53b3cad2f.0",
+ "@material/base": "14.0.0-canary.53b3cad2f.0",
+ "@material/dom": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/progress-indicator": "14.0.0-canary.53b3cad2f.0",
+ "@material/rtl": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/list": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/base": "14.0.0-canary.53b3cad2f.0",
+ "@material/density": "14.0.0-canary.53b3cad2f.0",
+ "@material/dom": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/ripple": "14.0.0-canary.53b3cad2f.0",
+ "@material/rtl": "14.0.0-canary.53b3cad2f.0",
+ "@material/shape": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "@material/typography": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/menu": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/base": "14.0.0-canary.53b3cad2f.0",
+ "@material/dom": "14.0.0-canary.53b3cad2f.0",
+ "@material/elevation": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/list": "14.0.0-canary.53b3cad2f.0",
+ "@material/menu-surface": "14.0.0-canary.53b3cad2f.0",
+ "@material/ripple": "14.0.0-canary.53b3cad2f.0",
+ "@material/rtl": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/menu-surface": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/animation": "14.0.0-canary.53b3cad2f.0",
+ "@material/base": "14.0.0-canary.53b3cad2f.0",
+ "@material/elevation": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/rtl": "14.0.0-canary.53b3cad2f.0",
+ "@material/shape": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/mwc-base": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/base": "=14.0.0-canary.53b3cad2f.0",
+ "@material/dom": "=14.0.0-canary.53b3cad2f.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-button": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/mwc-icon": "^0.27.0",
+ "@material/mwc-ripple": "^0.27.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-checkbox": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/mwc-base": "^0.27.0",
+ "@material/mwc-ripple": "^0.27.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-floating-label": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/floating-label": "=14.0.0-canary.53b3cad2f.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-icon": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-icon-button": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/mwc-ripple": "^0.27.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-line-ripple": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/line-ripple": "=14.0.0-canary.53b3cad2f.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-linear-progress": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/linear-progress": "=14.0.0-canary.53b3cad2f.0",
+ "@material/mwc-base": "^0.27.0",
+ "@material/theme": "=14.0.0-canary.53b3cad2f.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-list": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/base": "=14.0.0-canary.53b3cad2f.0",
+ "@material/dom": "=14.0.0-canary.53b3cad2f.0",
+ "@material/list": "=14.0.0-canary.53b3cad2f.0",
+ "@material/mwc-base": "^0.27.0",
+ "@material/mwc-checkbox": "^0.27.0",
+ "@material/mwc-radio": "^0.27.0",
+ "@material/mwc-ripple": "^0.27.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-menu": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/menu": "=14.0.0-canary.53b3cad2f.0",
+ "@material/menu-surface": "=14.0.0-canary.53b3cad2f.0",
+ "@material/mwc-base": "^0.27.0",
+ "@material/mwc-list": "^0.27.0",
+ "@material/shape": "=14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "=14.0.0-canary.53b3cad2f.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-notched-outline": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/mwc-base": "^0.27.0",
+ "@material/notched-outline": "=14.0.0-canary.53b3cad2f.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-radio": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/mwc-base": "^0.27.0",
+ "@material/mwc-ripple": "^0.27.0",
+ "@material/radio": "=14.0.0-canary.53b3cad2f.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-ripple": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/dom": "=14.0.0-canary.53b3cad2f.0",
+ "@material/mwc-base": "^0.27.0",
+ "@material/ripple": "=14.0.0-canary.53b3cad2f.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/mwc-textfield": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@material/floating-label": "=14.0.0-canary.53b3cad2f.0",
+ "@material/line-ripple": "=14.0.0-canary.53b3cad2f.0",
+ "@material/mwc-base": "^0.27.0",
+ "@material/mwc-floating-label": "^0.27.0",
+ "@material/mwc-line-ripple": "^0.27.0",
+ "@material/mwc-notched-outline": "^0.27.0",
+ "@material/textfield": "=14.0.0-canary.53b3cad2f.0",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.1"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "@material/notched-outline": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/base": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/floating-label": "14.0.0-canary.53b3cad2f.0",
+ "@material/rtl": "14.0.0-canary.53b3cad2f.0",
+ "@material/shape": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/progress-indicator": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/radio": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/animation": "14.0.0-canary.53b3cad2f.0",
+ "@material/base": "14.0.0-canary.53b3cad2f.0",
+ "@material/density": "14.0.0-canary.53b3cad2f.0",
+ "@material/dom": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/focus-ring": "14.0.0-canary.53b3cad2f.0",
+ "@material/ripple": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "@material/touch-target": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/ripple": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/animation": "14.0.0-canary.53b3cad2f.0",
+ "@material/base": "14.0.0-canary.53b3cad2f.0",
+ "@material/dom": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/rtl": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/rtl": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/shape": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/rtl": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/textfield": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/animation": "14.0.0-canary.53b3cad2f.0",
+ "@material/base": "14.0.0-canary.53b3cad2f.0",
+ "@material/density": "14.0.0-canary.53b3cad2f.0",
+ "@material/dom": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/floating-label": "14.0.0-canary.53b3cad2f.0",
+ "@material/line-ripple": "14.0.0-canary.53b3cad2f.0",
+ "@material/notched-outline": "14.0.0-canary.53b3cad2f.0",
+ "@material/ripple": "14.0.0-canary.53b3cad2f.0",
+ "@material/rtl": "14.0.0-canary.53b3cad2f.0",
+ "@material/shape": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "@material/tokens": "14.0.0-canary.53b3cad2f.0",
+ "@material/typography": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/theme": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/tokens": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/elevation": "14.0.0-canary.53b3cad2f.0"
+ }
+ },
+ "@material/touch-target": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/base": "14.0.0-canary.53b3cad2f.0",
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/rtl": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@material/typography": {
+ "version": "14.0.0-canary.53b3cad2f.0",
+ "dev": true,
+ "requires": {
+ "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0",
+ "@material/theme": "14.0.0-canary.53b3cad2f.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@mdn/browser-compat-data": {
+ "version": "4.2.1",
+ "dev": true
+ },
+ "@multiformats/multiaddr": {
+ "version": "11.6.1",
+ "dev": true,
+ "requires": {
+ "@chainsafe/is-ip": "^2.0.1",
+ "dns-over-http-resolver": "^2.1.0",
+ "err-code": "^3.0.1",
+ "multiformats": "^11.0.0",
+ "uint8arrays": "^4.0.2",
+ "varint": "^6.0.0"
+ },
+ "dependencies": {
+ "multiformats": {
+ "version": "11.0.2",
+ "dev": true
+ }
+ }
+ },
+ "@multiformats/multiaddr-to-uri": {
+ "version": "9.0.7",
+ "dev": true,
+ "requires": {
+ "@multiformats/multiaddr": "^12.0.0"
+ },
+ "dependencies": {
+ "@multiformats/multiaddr": {
+ "version": "12.1.3",
+ "dev": true,
+ "requires": {
+ "@chainsafe/is-ip": "^2.0.1",
+ "@chainsafe/netmask": "^2.0.0",
+ "@libp2p/interfaces": "^3.3.1",
+ "dns-over-http-resolver": "^2.1.0",
+ "multiformats": "^11.0.0",
+ "uint8arrays": "^4.0.2",
+ "varint": "^6.0.0"
+ }
+ },
+ "multiformats": {
+ "version": "11.0.2",
+ "dev": true
+ }
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5"
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@npmcli/fs": {
+ "version": "1.1.1",
+ "dev": true,
+ "requires": {
+ "@gar/promisify": "^1.0.1",
+ "semver": "^7.3.5"
+ }
+ },
+ "@npmcli/move-file": {
+ "version": "1.1.2",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "@open-wc/dedupe-mixin": {
+ "version": "1.4.0",
+ "dev": true
+ },
+ "@open-wc/scoped-elements": {
+ "version": "3.0.5",
+ "dev": true,
+ "requires": {
+ "@open-wc/dedupe-mixin": "^1.4.0",
+ "lit": "^3.0.0"
+ }
+ },
+ "@open-wc/semantic-dom-diff": {
+ "version": "0.20.1",
+ "dev": true,
+ "requires": {
+ "@types/chai": "^4.3.1",
+ "@web/test-runner-commands": "^0.9.0"
+ }
+ },
+ "@open-wc/testing": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "@esm-bundle/chai": "^4.3.4-fix.0",
+ "@open-wc/semantic-dom-diff": "^0.20.0",
+ "@open-wc/testing-helpers": "^3.0.0",
+ "@types/chai-dom": "^1.11.0",
+ "@types/sinon-chai": "^3.2.3",
+ "chai-a11y-axe": "^1.5.0"
+ }
+ },
+ "@open-wc/testing-helpers": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "@open-wc/scoped-elements": "^3.0.2",
+ "lit": "^2.0.0 || ^3.0.0",
+ "lit-html": "^2.0.0 || ^3.0.0"
+ }
+ },
+ "@parse5/tools": {
+ "version": "0.3.0",
+ "dev": true,
+ "requires": {
+ "parse5": "^7.0.0"
+ }
+ },
+ "@patternfly/create-element": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "case": "1.6.3",
+ "chalk": "5.0.1",
+ "execa": "^7.1.0",
+ "ncp": "2.0.0",
+ "prompts": "2.4.2",
+ "tslib": "2.5.0",
+ "yargs": "17.7.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "5.0.1",
+ "dev": true
+ },
+ "cliui": {
+ "version": "8.0.1",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "execa": {
+ "version": "7.1.1",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.1",
+ "human-signals": "^4.3.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^3.0.7",
+ "strip-final-newline": "^3.0.0"
+ }
+ },
+ "human-signals": {
+ "version": "4.3.1",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "onetime": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^4.0.0"
+ }
+ },
+ "tslib": {
+ "version": "2.5.0",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "dev": true
+ },
+ "yargs": {
+ "version": "17.7.1",
+ "dev": true,
+ "requires": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ }
+ }
+ }
+ },
+ "@patternfly/elements": {
+ "version": "3.0.1",
+ "requires": {
+ "@lit/context": "^1.1.0",
+ "@patternfly/icons": "^1.0.2",
+ "@patternfly/pfe-core": "^3.0.0",
+ "lit": "^3.1.2",
+ "tslib": "^2.6.2"
+ }
+ },
+ "@patternfly/eslint-config-elements": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "@eslint/eslintrc": "^3.0.2",
+ "@eslint/js": "^9.0.0",
+ "@stylistic/eslint-plugin": "^1.7.0",
+ "@types/eslint": "^8.56.7",
+ "eslint": "^9.0.0",
+ "eslint-config-google": "^0.14.0",
+ "eslint-plugin-html": "^8.1.0",
+ "eslint-plugin-jsdoc": "^48.2.3",
+ "eslint-plugin-json-schema-validator": "^5.1.0",
+ "eslint-plugin-jsonc": "^2.15.0",
+ "eslint-plugin-lit-a11y": "^4.1.2",
+ "eslint-plugin-no-only-tests": "^3.1.0",
+ "eslint-plugin-unicorn": "^52.0.0",
+ "typescript-eslint": "^7.6.0"
+ },
+ "dependencies": {
+ "@eslint/eslintrc": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "espree": {
+ "version": "10.0.1",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.11.3",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.0.0"
+ }
+ },
+ "globals": {
+ "version": "14.0.0",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "dev": true
+ }
+ }
+ },
+ "@patternfly/eslint-plugin-elements": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "glob": "^10.3.12"
+ }
+ },
+ "@patternfly/icons": {
+ "version": "1.0.2"
+ },
+ "@patternfly/pfe-core": {
+ "version": "3.0.0",
+ "requires": {
+ "@floating-ui/dom": "^1.6.3",
+ "@lit/context": "^1.1.0",
+ "lit": "^3.1.2"
+ }
+ },
+ "@patternfly/pfe-tools": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "@11ty/eleventy": "^2.0.1",
+ "@11ty/eleventy-plugin-directory-output": "^1.0.1",
+ "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0",
+ "@changesets/cli": "^2.27.1",
+ "@custom-elements-manifest/analyzer": "^0.5.7",
+ "@jspm/generator": "^2.0.1",
+ "@koa/router": "^12.0.1",
+ "@open-wc/testing": "^4.0.0",
+ "@playwright/test": "^1.43.0",
+ "@rollup/plugin-replace": "^5.0.5",
+ "@types/dedent": "^0.7.2",
+ "@types/estree": "^1.0.5",
+ "@types/koa-send": "^4.1.6",
+ "@types/mocha": "^10.0.6",
+ "@types/node": "^20.12.7",
+ "@types/nunjucks": "^3.2.6",
+ "@types/sinon": "^17.0.3",
+ "@types/yargs": "^17.0.32",
+ "@web/dev-server": "^0.4.4",
+ "@web/dev-server-esbuild": "^1.0.2",
+ "@web/dev-server-import-maps": "^0.2.0",
+ "@web/dev-server-rollup": "^0.6.1",
+ "@web/test-runner": "^0.18.1",
+ "@web/test-runner-commands": "^0.9.0",
+ "@web/test-runner-junit-reporter": "^0.7.1",
+ "@web/test-runner-playwright": "^0.11.0",
+ "cem-plugin-module-file-extensions": "^0.0.5",
+ "cem-plugin-readonly": "^0.0.5",
+ "chalk": "^5.3.0",
+ "clean-css": "^5.3.3",
+ "colorjs.io": "^0.5.0",
+ "compression": "^1.7.4",
+ "construct-style-sheets-polyfill": "^3.1.0",
+ "custom-elements-manifest": "^2.0.0",
+ "dedent": "^1.5.1",
+ "dotenv": "^16.4.5",
+ "element-internals-polyfill": "^1.3.10",
+ "eleventy-plugin-toc": "^1.1.5",
+ "es-module-shims": "^1.9.0",
+ "esbuild": "^0.20.2",
+ "esbuild-plugin-lit-css": "^3.0.0",
+ "esbuild-plugin-minify-html-literals": "^2.0.0",
+ "eslint": "^9.0.0",
+ "execa": "^8.0.1",
+ "glob": "^10.3.12",
+ "html-include-element": "^0.3.0",
+ "koa-send": "^5.0.1",
+ "lit": "^3.1.2",
+ "markdown-it-anchor": "^8.6.7",
+ "nunjucks": "^3.2.4",
+ "patch-package": "^8.0.0",
+ "playwright": "^1.43.0",
+ "playwright-lighthouse": "^4.0.0",
+ "pwa-helpers": "^0.9.1",
+ "rollup-plugin-lit-css": "^5.0.0",
+ "sinon": "^17.0.1",
+ "ts-lit-plugin": "^2.0.2",
+ "ts-patch": "^3.1.2",
+ "typescript": "^5.4.4",
+ "urlpattern-polyfill": "^10.0.0",
+ "web-dev-server-plugin-lit-css": "^3.0.0"
+ },
+ "dependencies": {
+ "@11ty/eleventy-plugin-syntaxhighlight": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "prismjs": "^1.29.0"
+ }
+ },
+ "@esbuild/android-arm": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
+ "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
+ "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
+ "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
+ "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
+ "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
+ "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
+ "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
+ "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
+ "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ia32": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
+ "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
+ "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-mips64el": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
+ "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ppc64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
+ "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-riscv64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
+ "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-s390x": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
+ "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
+ "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/netbsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
+ "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/openbsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
+ "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/sunos-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
+ "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
+ "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-ia32": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
+ "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
+ "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@jspm/generator": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.20.12",
+ "@babel/plugin-syntax-import-assertions": "^7.20.0",
+ "@babel/preset-typescript": "^7.18.6",
+ "@jspm/import-map": "^1.0.7",
+ "abort-controller": "^3.0.0",
+ "es-module-lexer": "^1.1.1",
+ "make-fetch-happen": "^8.0.14",
+ "rimraf": "^4.1.2",
+ "sver": "^1.8.4"
+ }
+ },
+ "@sinonjs/fake-timers": {
+ "version": "11.2.2",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^3.0.0"
+ }
+ },
+ "chalk": {
+ "version": "5.3.0",
+ "dev": true
+ },
+ "esbuild": {
+ "version": "0.20.2",
+ "dev": true,
+ "requires": {
+ "@esbuild/aix-ppc64": "0.20.2",
+ "@esbuild/android-arm": "0.20.2",
+ "@esbuild/android-arm64": "0.20.2",
+ "@esbuild/android-x64": "0.20.2",
+ "@esbuild/darwin-arm64": "0.20.2",
+ "@esbuild/darwin-x64": "0.20.2",
+ "@esbuild/freebsd-arm64": "0.20.2",
+ "@esbuild/freebsd-x64": "0.20.2",
+ "@esbuild/linux-arm": "0.20.2",
+ "@esbuild/linux-arm64": "0.20.2",
+ "@esbuild/linux-ia32": "0.20.2",
+ "@esbuild/linux-loong64": "0.20.2",
+ "@esbuild/linux-mips64el": "0.20.2",
+ "@esbuild/linux-ppc64": "0.20.2",
+ "@esbuild/linux-riscv64": "0.20.2",
+ "@esbuild/linux-s390x": "0.20.2",
+ "@esbuild/linux-x64": "0.20.2",
+ "@esbuild/netbsd-x64": "0.20.2",
+ "@esbuild/openbsd-x64": "0.20.2",
+ "@esbuild/sunos-x64": "0.20.2",
+ "@esbuild/win32-arm64": "0.20.2",
+ "@esbuild/win32-ia32": "0.20.2",
+ "@esbuild/win32-x64": "0.20.2"
+ }
+ },
+ "sinon": {
+ "version": "17.0.1",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^3.0.0",
+ "@sinonjs/fake-timers": "^11.2.2",
+ "@sinonjs/samsam": "^8.0.0",
+ "diff": "^5.1.0",
+ "nise": "^5.1.5",
+ "supports-color": "^7.2.0"
+ }
+ }
+ }
+ },
+ "@paulirish/trace_engine": {
+ "version": "0.0.12",
+ "dev": true,
+ "peer": true
+ },
+ "@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "dev": true,
+ "optional": true
+ },
+ "@pkgr/core": {
+ "version": "0.1.1",
+ "dev": true
+ },
+ "@playwright/test": {
+ "version": "1.43.1",
+ "dev": true,
+ "requires": {
+ "playwright": "1.43.1"
+ }
+ },
+ "@protobufjs/aspromise": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "@protobufjs/base64": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "@protobufjs/codegen": {
+ "version": "2.0.4",
+ "dev": true
+ },
+ "@protobufjs/eventemitter": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "@protobufjs/fetch": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "@protobufjs/aspromise": "^1.1.1",
+ "@protobufjs/inquire": "^1.1.0"
+ }
+ },
+ "@protobufjs/float": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "@protobufjs/inquire": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "@protobufjs/path": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "@protobufjs/pool": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "@protobufjs/utf8": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "@puppeteer/browsers": {
+ "version": "2.2.0",
+ "dev": true,
+ "requires": {
+ "debug": "4.3.4",
+ "extract-zip": "2.0.1",
+ "progress": "2.0.3",
+ "proxy-agent": "6.4.0",
+ "semver": "7.6.0",
+ "tar-fs": "3.0.5",
+ "unbzip2-stream": "1.4.3",
+ "yargs": "17.7.2"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "7.1.1",
+ "dev": true,
+ "requires": {
+ "debug": "^4.3.4"
+ }
+ },
+ "data-uri-to-buffer": {
+ "version": "6.0.2",
+ "dev": true
+ },
+ "degenerator": {
+ "version": "5.0.1",
+ "dev": true,
+ "requires": {
+ "ast-types": "^0.13.4",
+ "escodegen": "^2.1.0",
+ "esprima": "^4.0.1"
+ }
+ },
+ "escodegen": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2",
+ "source-map": "~0.6.1"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "dev": true
+ },
+ "get-uri": {
+ "version": "6.0.3",
+ "dev": true,
+ "requires": {
+ "basic-ftp": "^5.0.2",
+ "data-uri-to-buffer": "^6.0.2",
+ "debug": "^4.3.4",
+ "fs-extra": "^11.2.0"
+ }
+ },
+ "http-proxy-agent": {
+ "version": "7.0.2",
+ "dev": true,
+ "requires": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "7.0.4",
+ "dev": true,
+ "requires": {
+ "agent-base": "^7.0.2",
+ "debug": "4"
+ }
+ },
+ "lru-cache": {
+ "version": "7.18.3",
+ "dev": true
+ },
+ "pac-proxy-agent": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "@tootallnate/quickjs-emscripten": "^0.23.0",
+ "agent-base": "^7.0.2",
+ "debug": "^4.3.4",
+ "get-uri": "^6.0.1",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.2",
+ "pac-resolver": "^7.0.0",
+ "socks-proxy-agent": "^8.0.2"
+ }
+ },
+ "pac-resolver": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "degenerator": "^5.0.0",
+ "netmask": "^2.0.2"
+ }
+ },
+ "proxy-agent": {
+ "version": "6.4.0",
+ "dev": true,
+ "requires": {
+ "agent-base": "^7.0.2",
+ "debug": "^4.3.4",
+ "http-proxy-agent": "^7.0.1",
+ "https-proxy-agent": "^7.0.3",
+ "lru-cache": "^7.14.1",
+ "pac-proxy-agent": "^7.0.1",
+ "proxy-from-env": "^1.1.0",
+ "socks-proxy-agent": "^8.0.2"
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "8.0.3",
+ "dev": true,
+ "requires": {
+ "agent-base": "^7.1.1",
+ "debug": "^4.3.4",
+ "socks": "^2.7.1"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "dev": true,
+ "optional": true
+ },
+ "tar-fs": {
+ "version": "3.0.5",
+ "dev": true,
+ "requires": {
+ "bare-fs": "^2.1.1",
+ "bare-path": "^2.1.0",
+ "pump": "^3.0.0",
+ "tar-stream": "^3.1.5"
+ }
+ },
+ "tar-stream": {
+ "version": "3.1.7",
+ "dev": true,
+ "requires": {
+ "b4a": "^1.6.4",
+ "fast-fifo": "^1.2.0",
+ "streamx": "^2.15.0"
+ }
+ }
+ }
+ },
+ "@pwrs/lit-css": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "cssnano": "^6.1.2"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "7.2.0",
+ "dev": true
+ },
+ "css-declaration-sorter": {
+ "version": "7.2.0",
+ "dev": true,
+ "requires": {}
+ },
+ "cssnano": {
+ "version": "6.1.2",
+ "dev": true,
+ "requires": {
+ "cssnano-preset-default": "^6.1.2",
+ "lilconfig": "^3.1.1"
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "6.1.2",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.23.0",
+ "css-declaration-sorter": "^7.2.0",
+ "cssnano-utils": "^4.0.2",
+ "postcss-calc": "^9.0.1",
+ "postcss-colormin": "^6.1.0",
+ "postcss-convert-values": "^6.1.0",
+ "postcss-discard-comments": "^6.0.2",
+ "postcss-discard-duplicates": "^6.0.3",
+ "postcss-discard-empty": "^6.0.3",
+ "postcss-discard-overridden": "^6.0.2",
+ "postcss-merge-longhand": "^6.0.5",
+ "postcss-merge-rules": "^6.1.1",
+ "postcss-minify-font-values": "^6.1.0",
+ "postcss-minify-gradients": "^6.0.3",
+ "postcss-minify-params": "^6.1.0",
+ "postcss-minify-selectors": "^6.0.4",
+ "postcss-normalize-charset": "^6.0.2",
+ "postcss-normalize-display-values": "^6.0.2",
+ "postcss-normalize-positions": "^6.0.2",
+ "postcss-normalize-repeat-style": "^6.0.2",
+ "postcss-normalize-string": "^6.0.2",
+ "postcss-normalize-timing-functions": "^6.0.2",
+ "postcss-normalize-unicode": "^6.1.0",
+ "postcss-normalize-url": "^6.0.2",
+ "postcss-normalize-whitespace": "^6.0.2",
+ "postcss-ordered-values": "^6.0.2",
+ "postcss-reduce-initial": "^6.1.0",
+ "postcss-reduce-transforms": "^6.0.2",
+ "postcss-svgo": "^6.0.3",
+ "postcss-unique-selectors": "^6.0.4"
+ }
+ },
+ "cssnano-utils": {
+ "version": "4.0.2",
+ "dev": true,
+ "requires": {}
+ },
+ "csso": {
+ "version": "5.0.5",
+ "dev": true,
+ "requires": {
+ "css-tree": "~2.2.0"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "2.2.1",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ }
+ }
+ }
+ },
+ "lilconfig": {
+ "version": "3.1.1",
+ "dev": true
+ },
+ "mdn-data": {
+ "version": "2.0.28",
+ "dev": true
+ },
+ "postcss-calc": {
+ "version": "9.0.1",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.11",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-colormin": {
+ "version": "6.1.0",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.23.0",
+ "caniuse-api": "^3.0.0",
+ "colord": "^2.9.3",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "6.1.0",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.23.0",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-discard-duplicates": {
+ "version": "6.0.3",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-discard-empty": {
+ "version": "6.0.3",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-discard-overridden": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-merge-longhand": {
+ "version": "6.0.5",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0",
+ "stylehacks": "^6.1.1"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "6.1.1",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.23.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-utils": "^4.0.2",
+ "postcss-selector-parser": "^6.0.16"
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "6.1.0",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "6.0.3",
+ "dev": true,
+ "requires": {
+ "colord": "^2.9.3",
+ "cssnano-utils": "^4.0.2",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "6.1.0",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.23.0",
+ "cssnano-utils": "^4.0.2",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "6.0.4",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.16"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-normalize-display-values": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "6.1.0",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.23.0",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^4.0.2",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "6.1.0",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.23.0",
+ "caniuse-api": "^3.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-svgo": {
+ "version": "6.0.3",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0",
+ "svgo": "^3.2.0"
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "6.0.4",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.16"
+ }
+ },
+ "stylehacks": {
+ "version": "6.1.1",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.23.0",
+ "postcss-selector-parser": "^6.0.16"
+ }
+ },
+ "svgo": {
+ "version": "3.2.0",
+ "dev": true,
+ "requires": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^2.3.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.0.0"
+ }
+ }
+ }
+ },
+ "@rhds/tokens": {
+ "version": "2.0.1",
+ "requires": {
+ "@11ty/eleventy-plugin-syntaxhighlight": "^4.2.0",
+ "highlight.js": "^11.7.0",
+ "postcss-value-parser": "^4.2.0",
+ "stylelint": "^15.2.0"
+ }
+ },
+ "@rollup/plugin-dynamic-import-vars": {
+ "version": "2.0.6",
+ "dev": true,
+ "requires": {
+ "@rollup/pluginutils": "^5.0.1",
+ "astring": "^1.8.5",
+ "estree-walker": "^2.0.2",
+ "fast-glob": "^3.2.12",
+ "magic-string": "^0.27.0"
+ }
+ },
+ "@rollup/plugin-node-resolve": {
+ "version": "15.2.3",
+ "dev": true,
+ "requires": {
+ "@rollup/pluginutils": "^5.0.1",
+ "@types/resolve": "1.20.2",
+ "deepmerge": "^4.2.2",
+ "is-builtin-module": "^3.2.1",
+ "is-module": "^1.0.0",
+ "resolve": "^1.22.1"
+ }
+ },
+ "@rollup/plugin-replace": {
+ "version": "5.0.5",
+ "dev": true,
+ "requires": {
+ "@rollup/pluginutils": "^5.0.1",
+ "magic-string": "^0.30.3"
+ },
+ "dependencies": {
+ "magic-string": {
+ "version": "0.30.8",
+ "dev": true,
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ }
+ }
+ },
+ "@rollup/plugin-typescript": {
+ "version": "11.1.6",
+ "dev": true,
+ "requires": {
+ "@rollup/pluginutils": "^5.1.0",
+ "resolve": "^1.22.1"
+ }
+ },
+ "@rollup/pluginutils": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "@rollup/rollup-android-arm-eabi": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.0.tgz",
+ "integrity": "sha512-jwXtxYbRt1V+CdQSy6Z+uZti7JF5irRKF8hlKfEnF/xJpcNGuuiZMBvuoYM+x9sr9iWGnzrlM0+9hvQ1kgkf1w==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-android-arm64": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.0.tgz",
+ "integrity": "sha512-fI9nduZhCccjzlsA/OuAwtFGWocxA4gqXGTLvOyiF8d+8o0fZUeSztixkYjcGq1fGZY3Tkq4yRvHPFxU+jdZ9Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-arm64": {
+ "version": "4.14.0",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-x64": {
+ "version": "4.14.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.2.tgz",
+ "integrity": "sha512-o/HAIrQq0jIxJAhgtIvV5FWviYK4WB0WwV91SLUnsliw1lSAoLsmgEEgRWzDguAFeUEUUoIWXiJrPqU7vGiVkA==",
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.0.tgz",
+ "integrity": "sha512-ygrGVhQP47mRh0AAD0zl6QqCbNsf0eTo+vgwkY6LunBcg0f2Jv365GXlDUECIyoXp1kKwL5WW6rsO429DBY/bA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.0.tgz",
+ "integrity": "sha512-x+uJ6MAYRlHGe9wi4HQjxpaKHPM3d3JjqqCkeC5gpnnI6OWovLdXTpfa8trjxPLnWKyBsSi5kne+146GAxFt4A==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-musl": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.0.tgz",
+ "integrity": "sha512-nrRw8ZTQKg6+Lttwqo6a2VxR9tOroa2m91XbdQ2sUUzHoedXlsyvY1fN4xWdqz8PKmf4orDwejxXHjh7YBGUCA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.0.tgz",
+ "integrity": "sha512-xV0d5jDb4aFu84XKr+lcUJ9y3qpIWhttO3Qev97z8DKLXR62LC3cXT/bMZXrjLF9X+P5oSmJTzAhqwUbY96PnA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.0.tgz",
+ "integrity": "sha512-SDDhBQwZX6LPRoPYjAZWyL27LbcBo7WdBFWJi5PI9RPCzU8ijzkQn7tt8NXiXRiFMJCVpkuMkBf4OxSxVMizAw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.0.tgz",
+ "integrity": "sha512-RxB/qez8zIDshNJDufYlTT0ZTVut5eCpAZ3bdXDU9yTxBzui3KhbGjROK2OYTTor7alM7XBhssgoO3CZ0XD3qA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-gnu": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.0.tgz",
+ "integrity": "sha512-C6y6z2eCNCfhZxT9u+jAM2Fup89ZjiG5pIzZIDycs1IwESviLxwkQcFRGLjnDrP+PT+v5i4YFvlcfAs+LnreXg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-musl": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.0.tgz",
+ "integrity": "sha512-i0QwbHYfnOMYsBEyjxcwGu5SMIi9sImDVjDg087hpzXqhBSosxkE7gyIYFHgfFl4mr7RrXksIBZ4DoLoP4FhJg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.0.tgz",
+ "integrity": "sha512-Fq52EYb0riNHLBTAcL0cun+rRwyZ10S9vKzhGKKgeD+XbwunszSY0rVMco5KbOsTlwovP2rTOkiII/fQ4ih/zQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.0.tgz",
+ "integrity": "sha512-e/PBHxPdJ00O9p5Ui43+vixSgVf4NlLsmV6QneGERJ3lnjIua/kim6PRFe3iDueT1rQcgSkYP8ZBBXa/h4iPvw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-x64-msvc": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.0.tgz",
+ "integrity": "sha512-aGg7iToJjdklmxlUlJh/PaPNa4PmqHfyRMLunbL3eaMO0gp656+q1zOKkpJ/CVe9CryJv6tAN1HDoR8cNGzkag==",
+ "dev": true,
+ "optional": true
+ },
+ "@schibstedpl/circuit-breaker-js": {
+ "version": "0.0.2",
+ "dev": true
+ },
+ "@sentry/core": {
+ "version": "6.19.7",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@sentry/hub": "6.19.7",
+ "@sentry/minimal": "6.19.7",
+ "@sentry/types": "6.19.7",
+ "@sentry/utils": "6.19.7",
+ "tslib": "^1.9.3"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
+ "@sentry/hub": {
+ "version": "6.19.7",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@sentry/types": "6.19.7",
+ "@sentry/utils": "6.19.7",
+ "tslib": "^1.9.3"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
+ "@sentry/minimal": {
+ "version": "6.19.7",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@sentry/hub": "6.19.7",
+ "@sentry/types": "6.19.7",
+ "tslib": "^1.9.3"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
+ "@sentry/node": {
+ "version": "6.19.7",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@sentry/core": "6.19.7",
+ "@sentry/hub": "6.19.7",
+ "@sentry/types": "6.19.7",
+ "@sentry/utils": "6.19.7",
+ "cookie": "^0.4.1",
+ "https-proxy-agent": "^5.0.0",
+ "lru_map": "^0.3.3",
+ "tslib": "^1.9.3"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
+ "@sentry/types": {
+ "version": "6.19.7",
+ "dev": true,
+ "peer": true
+ },
+ "@sentry/utils": {
+ "version": "6.19.7",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@sentry/types": "6.19.7",
+ "tslib": "^1.9.3"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
+ "@sindresorhus/is": {
+ "version": "4.6.0",
+ "dev": true
+ },
+ "@sindresorhus/slugify": {
+ "version": "1.1.2",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/transliterate": "^0.1.1",
+ "escape-string-regexp": "^4.0.0"
+ }
+ },
+ "@sindresorhus/transliterate": {
+ "version": "0.1.2",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^2.0.0",
+ "lodash.deburr": "^4.1.0"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "2.0.0",
+ "dev": true
+ }
+ }
+ },
+ "@sinonjs/commons": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "@sinonjs/fake-timers": {
+ "version": "10.2.0",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^3.0.0"
+ }
+ },
+ "@sinonjs/samsam": {
+ "version": "8.0.0",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^2.0.0",
+ "lodash.get": "^4.4.2",
+ "type-detect": "^4.0.8"
+ },
+ "dependencies": {
+ "@sinonjs/commons": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ }
+ }
+ },
+ "@sinonjs/text-encoding": {
+ "version": "0.7.2",
+ "dev": true
+ },
+ "@socket.io/component-emitter": {
+ "version": "3.1.0",
+ "dev": true
+ },
+ "@stylistic/eslint-plugin": {
+ "version": "1.7.2",
+ "dev": true,
+ "requires": {
+ "@stylistic/eslint-plugin-js": "1.7.2",
+ "@stylistic/eslint-plugin-jsx": "1.7.2",
+ "@stylistic/eslint-plugin-plus": "1.7.2",
+ "@stylistic/eslint-plugin-ts": "1.7.2",
+ "@types/eslint": "^8.56.8"
+ }
+ },
+ "@stylistic/eslint-plugin-js": {
+ "version": "1.7.2",
+ "dev": true,
+ "requires": {
+ "@types/eslint": "^8.56.8",
+ "acorn": "^8.11.3",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1"
+ }
+ },
+ "@stylistic/eslint-plugin-jsx": {
+ "version": "1.7.2",
+ "dev": true,
+ "requires": {
+ "@stylistic/eslint-plugin-js": "^1.7.2",
+ "@types/eslint": "^8.56.8",
+ "estraverse": "^5.3.0",
+ "picomatch": "^4.0.2"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "4.0.2",
+ "dev": true
+ }
+ }
+ },
+ "@stylistic/eslint-plugin-plus": {
+ "version": "1.7.2",
+ "dev": true,
+ "requires": {
+ "@types/eslint": "^8.56.8",
+ "@typescript-eslint/utils": "^6.21.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/utils": {
+ "version": "6.21.0",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "semver": "^7.5.4"
+ }
+ }
+ }
+ },
+ "@stylistic/eslint-plugin-ts": {
+ "version": "1.7.2",
+ "dev": true,
+ "requires": {
+ "@stylistic/eslint-plugin-js": "1.7.2",
+ "@types/eslint": "^8.56.8",
+ "@typescript-eslint/utils": "^6.21.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/utils": {
+ "version": "6.21.0",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "semver": "^7.5.4"
+ }
+ }
+ }
+ },
+ "@szmarczak/http-timer": {
+ "version": "4.0.6",
+ "dev": true,
+ "requires": {
+ "defer-to-connect": "^2.0.0"
+ }
+ },
+ "@tootallnate/once": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "@tootallnate/quickjs-emscripten": {
+ "version": "0.23.0",
+ "dev": true
+ },
+ "@trysound/sax": {
+ "version": "0.2.0",
+ "dev": true
+ },
+ "@types/accepts": {
+ "version": "1.3.7",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/babel__code-frame": {
+ "version": "7.0.6",
+ "dev": true
+ },
+ "@types/body-parser": {
+ "version": "1.19.5",
+ "dev": true,
+ "requires": {
+ "@types/connect": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/cacheable-request": {
+ "version": "6.0.3",
+ "dev": true,
+ "requires": {
+ "@types/http-cache-semantics": "*",
+ "@types/keyv": "^3.1.4",
+ "@types/node": "*",
+ "@types/responselike": "^1.0.0"
+ }
+ },
+ "@types/chai": {
+ "version": "4.3.14",
+ "dev": true
+ },
+ "@types/chai-dom": {
+ "version": "1.11.3",
+ "dev": true,
+ "requires": {
+ "@types/chai": "*"
+ }
+ },
+ "@types/clean-css": {
+ "version": "4.2.11",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "dev": true
+ }
+ }
+ },
+ "@types/co-body": {
+ "version": "6.1.3",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "@types/qs": "*"
+ }
+ },
+ "@types/codemirror": {
+ "version": "5.60.10",
+ "dev": true,
+ "requires": {
+ "@types/tern": "*"
+ }
+ },
+ "@types/command-line-args": {
+ "version": "5.2.3",
+ "dev": true
+ },
+ "@types/connect": {
+ "version": "3.4.38",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/content-disposition": {
+ "version": "0.5.8",
+ "dev": true
+ },
+ "@types/conventional-commits-parser": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/convert-source-map": {
+ "version": "2.0.3",
+ "dev": true
+ },
+ "@types/cookie": {
+ "version": "0.4.1",
+ "dev": true
+ },
+ "@types/cookies": {
+ "version": "0.9.0",
+ "dev": true,
+ "requires": {
+ "@types/connect": "*",
+ "@types/express": "*",
+ "@types/keygrip": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/cors": {
+ "version": "2.8.13",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/debounce": {
+ "version": "1.2.4",
+ "dev": true
+ },
+ "@types/dedent": {
+ "version": "0.7.2",
+ "dev": true
+ },
+ "@types/eslint": {
+ "version": "8.56.9",
+ "dev": true,
+ "requires": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "@types/estree": {
+ "version": "1.0.5",
+ "dev": true
+ },
+ "@types/express": {
+ "version": "4.17.21",
+ "dev": true,
+ "requires": {
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^4.17.33",
+ "@types/qs": "*",
+ "@types/serve-static": "*"
+ }
+ },
+ "@types/express-serve-static-core": {
+ "version": "4.17.43",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*",
+ "@types/send": "*"
+ }
+ },
+ "@types/html-minifier": {
+ "version": "3.5.3",
+ "dev": true,
+ "requires": {
+ "@types/clean-css": "*",
+ "@types/relateurl": "*",
+ "@types/uglify-js": "*"
+ }
+ },
+ "@types/http-assert": {
+ "version": "1.5.5",
+ "dev": true
+ },
+ "@types/http-cache-semantics": {
+ "version": "4.0.1",
+ "dev": true
+ },
+ "@types/http-errors": {
+ "version": "2.0.4",
+ "dev": true
+ },
+ "@types/istanbul-lib-coverage": {
+ "version": "2.0.6",
+ "dev": true
+ },
+ "@types/istanbul-lib-report": {
+ "version": "3.0.3",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "@types/istanbul-reports": {
+ "version": "3.0.4",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "@types/json-schema": {
+ "version": "7.0.15",
+ "dev": true
+ },
+ "@types/keygrip": {
+ "version": "1.0.6",
+ "dev": true
+ },
+ "@types/keyv": {
+ "version": "3.1.4",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/koa": {
+ "version": "2.15.0",
+ "dev": true,
+ "requires": {
+ "@types/accepts": "*",
+ "@types/content-disposition": "*",
+ "@types/cookies": "*",
+ "@types/http-assert": "*",
+ "@types/http-errors": "*",
+ "@types/keygrip": "*",
+ "@types/koa-compose": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/koa-compose": {
+ "version": "3.2.8",
+ "dev": true,
+ "requires": {
+ "@types/koa": "*"
+ }
+ },
+ "@types/koa-send": {
+ "version": "4.1.6",
+ "dev": true,
+ "requires": {
+ "@types/koa": "*"
+ }
+ },
+ "@types/linkify-it": {
+ "version": "3.0.2",
+ "dev": true,
+ "peer": true
+ },
+ "@types/markdown-it": {
+ "version": "12.2.3",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@types/linkify-it": "*",
+ "@types/mdurl": "*"
+ }
+ },
+ "@types/mdurl": {
+ "version": "1.0.2",
+ "dev": true,
+ "peer": true
+ },
+ "@types/mime": {
+ "version": "1.3.5",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.5",
+ "dev": true
+ },
+ "@types/minimist": {
+ "version": "1.2.2"
+ },
+ "@types/mocha": {
+ "version": "10.0.6",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "20.12.7",
+ "dev": true,
+ "requires": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.1"
+ },
+ "@types/nunjucks": {
+ "version": "3.2.6",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "6.0.3",
+ "dev": true
+ },
+ "@types/qs": {
+ "version": "6.9.14",
+ "dev": true
+ },
+ "@types/range-parser": {
+ "version": "1.2.7",
+ "dev": true
+ },
+ "@types/relateurl": {
+ "version": "0.2.33",
+ "dev": true
+ },
+ "@types/resolve": {
+ "version": "1.20.2",
+ "dev": true
+ },
+ "@types/responselike": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/semver": {
+ "version": "7.5.8",
+ "dev": true
+ },
+ "@types/send": {
+ "version": "0.17.4",
+ "dev": true,
+ "requires": {
+ "@types/mime": "^1",
+ "@types/node": "*"
+ }
+ },
+ "@types/serve-static": {
+ "version": "1.15.7",
+ "dev": true,
+ "requires": {
+ "@types/http-errors": "*",
+ "@types/node": "*",
+ "@types/send": "*"
+ }
+ },
+ "@types/sinon": {
+ "version": "17.0.3",
+ "dev": true,
+ "requires": {
+ "@types/sinonjs__fake-timers": "*"
+ }
+ },
+ "@types/sinon-chai": {
+ "version": "3.2.12",
+ "dev": true,
+ "requires": {
+ "@types/chai": "*",
+ "@types/sinon": "*"
+ }
+ },
+ "@types/sinonjs__fake-timers": {
+ "version": "8.1.5",
+ "dev": true
+ },
+ "@types/tern": {
+ "version": "0.23.5",
+ "dev": true,
+ "requires": {
+ "@types/estree": "*"
+ }
+ },
+ "@types/trusted-types": {
+ "version": "2.0.3"
+ },
+ "@types/uglify-js": {
+ "version": "3.17.5",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "dev": true
+ }
+ }
+ },
+ "@types/ws": {
+ "version": "7.4.7",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.32",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "@types/yargs-parser": {
+ "version": "21.0.3",
+ "dev": true
+ },
+ "@types/yauzl": {
+ "version": "2.10.3",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "6.21.0",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "6.21.0",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "6.21.0",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "globby": {
+ "version": "11.1.0",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.3",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "6.21.0",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "6.21.0",
+ "eslint-visitor-keys": "^3.4.1"
+ }
+ },
+ "@vscode/web-custom-data": {
+ "version": "0.4.9",
+ "dev": true
+ },
+ "@web/browser-logs": {
+ "version": "0.4.0",
+ "dev": true,
+ "requires": {
+ "errorstacks": "^2.2.0"
+ }
+ },
+ "@web/config-loader": {
+ "version": "0.1.3",
+ "dev": true,
+ "requires": {
+ "semver": "^7.3.4"
+ }
+ },
+ "@web/dev-server": {
+ "version": "0.4.4",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.12.11",
+ "@types/command-line-args": "^5.0.0",
+ "@web/config-loader": "^0.3.0",
+ "@web/dev-server-core": "^0.7.1",
+ "@web/dev-server-rollup": "^0.6.1",
+ "camelcase": "^6.2.0",
+ "command-line-args": "^5.1.1",
+ "command-line-usage": "^7.0.1",
+ "debounce": "^1.2.0",
+ "deepmerge": "^4.2.2",
+ "ip": "^2.0.1",
+ "nanocolors": "^0.2.1",
+ "open": "^8.0.2",
+ "portfinder": "^1.0.32"
+ },
+ "dependencies": {
+ "@web/config-loader": {
+ "version": "0.3.1",
+ "dev": true
+ },
+ "ip": {
+ "version": "2.0.1",
+ "dev": true
+ }
+ }
+ },
+ "@web/dev-server-core": {
+ "version": "0.7.1",
+ "dev": true,
+ "requires": {
+ "@types/koa": "^2.11.6",
+ "@types/ws": "^7.4.0",
+ "@web/parse5-utils": "^2.1.0",
+ "chokidar": "^3.4.3",
+ "clone": "^2.1.2",
+ "es-module-lexer": "^1.0.0",
+ "get-stream": "^6.0.0",
+ "is-stream": "^2.0.0",
+ "isbinaryfile": "^5.0.0",
+ "koa": "^2.13.0",
+ "koa-etag": "^4.0.0",
+ "koa-send": "^5.0.1",
+ "koa-static": "^5.0.0",
+ "lru-cache": "^8.0.4",
+ "mime-types": "^2.1.27",
+ "parse5": "^6.0.1",
+ "picomatch": "^2.2.2",
+ "ws": "^7.4.2"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "8.0.5",
+ "dev": true
+ },
+ "parse5": {
+ "version": "6.0.1",
+ "dev": true
+ },
+ "ws": {
+ "version": "7.5.9",
+ "dev": true,
+ "requires": {}
+ }
+ }
+ },
+ "@web/dev-server-esbuild": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "@mdn/browser-compat-data": "^4.0.0",
+ "@web/dev-server-core": "^0.7.0",
+ "esbuild": "^0.19.11",
+ "get-tsconfig": "^4.7.2",
+ "parse5": "^6.0.1",
+ "ua-parser-js": "^1.0.33"
+ },
+ "dependencies": {
+ "@esbuild/aix-ppc64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
+ "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
+ "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
+ "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
+ "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
+ "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
+ "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
+ "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
+ "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
+ "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
+ "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ia32": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
+ "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
+ "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-mips64el": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
+ "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ppc64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
+ "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-riscv64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
+ "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-s390x": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
+ "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
+ "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/netbsd-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
+ "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/openbsd-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
+ "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/sunos-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
+ "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
+ "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-ia32": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
+ "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
+ "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild": {
+ "version": "0.19.12",
+ "dev": true,
+ "requires": {
+ "@esbuild/aix-ppc64": "0.19.12",
+ "@esbuild/android-arm": "0.19.12",
+ "@esbuild/android-arm64": "0.19.12",
+ "@esbuild/android-x64": "0.19.12",
+ "@esbuild/darwin-arm64": "0.19.12",
+ "@esbuild/darwin-x64": "0.19.12",
+ "@esbuild/freebsd-arm64": "0.19.12",
+ "@esbuild/freebsd-x64": "0.19.12",
+ "@esbuild/linux-arm": "0.19.12",
+ "@esbuild/linux-arm64": "0.19.12",
+ "@esbuild/linux-ia32": "0.19.12",
+ "@esbuild/linux-loong64": "0.19.12",
+ "@esbuild/linux-mips64el": "0.19.12",
+ "@esbuild/linux-ppc64": "0.19.12",
+ "@esbuild/linux-riscv64": "0.19.12",
+ "@esbuild/linux-s390x": "0.19.12",
+ "@esbuild/linux-x64": "0.19.12",
+ "@esbuild/netbsd-x64": "0.19.12",
+ "@esbuild/openbsd-x64": "0.19.12",
+ "@esbuild/sunos-x64": "0.19.12",
+ "@esbuild/win32-arm64": "0.19.12",
+ "@esbuild/win32-ia32": "0.19.12",
+ "@esbuild/win32-x64": "0.19.12"
+ }
+ },
+ "parse5": {
+ "version": "6.0.1",
+ "dev": true
+ }
+ }
+ },
+ "@web/dev-server-import-maps": {
+ "version": "0.2.0",
+ "dev": true,
+ "requires": {
+ "@import-maps/resolve": "^1.0.1",
+ "@types/parse5": "^6.0.1",
+ "@web/dev-server-core": "^0.7.0",
+ "@web/parse5-utils": "^2.1.0",
+ "parse5": "^6.0.1",
+ "picomatch": "^2.2.2"
+ },
+ "dependencies": {
+ "parse5": {
+ "version": "6.0.1",
+ "dev": true
+ }
+ }
+ },
+ "@web/dev-server-rollup": {
+ "version": "0.6.1",
+ "dev": true,
+ "requires": {
+ "@rollup/plugin-node-resolve": "^15.0.1",
+ "@web/dev-server-core": "^0.7.0",
+ "nanocolors": "^0.2.1",
+ "parse5": "^6.0.1",
+ "rollup": "^4.4.0",
+ "whatwg-url": "^11.0.0"
+ },
+ "dependencies": {
+ "@rollup/rollup-darwin-x64": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.0.tgz",
+ "integrity": "sha512-LDyFB9GRolGN7XI6955aFeI3wCdCUszFWumWU0deHA8VpR3nWRrjG6GtGjBrQxQKFevnUTHKCfPR4IvrW3kCgQ==",
+ "dev": true,
+ "optional": true
+ },
+ "parse5": {
+ "version": "6.0.1",
+ "dev": true
+ },
+ "rollup": {
+ "version": "4.14.0",
+ "dev": true,
+ "requires": {
+ "@rollup/rollup-android-arm-eabi": "4.14.0",
+ "@rollup/rollup-android-arm64": "4.14.0",
+ "@rollup/rollup-darwin-arm64": "4.14.0",
+ "@rollup/rollup-darwin-x64": "4.14.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.14.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.14.0",
+ "@rollup/rollup-linux-arm64-musl": "4.14.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.14.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.14.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.14.0",
+ "@rollup/rollup-linux-x64-gnu": "4.14.0",
+ "@rollup/rollup-linux-x64-musl": "4.14.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.14.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.14.0",
+ "@rollup/rollup-win32-x64-msvc": "4.14.0",
+ "@types/estree": "1.0.5",
+ "fsevents": "~2.3.2"
+ }
+ }
+ }
+ },
+ "@web/parse5-utils": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "^6.0.1",
+ "parse5": "^6.0.1"
+ },
+ "dependencies": {
+ "parse5": {
+ "version": "6.0.1",
+ "dev": true
+ }
+ }
+ },
+ "@web/rollup-plugin-import-meta-assets": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "@rollup/plugin-dynamic-import-vars": "^2.0.5",
+ "@rollup/pluginutils": "^5.0.2",
+ "estree-walker": "^2.0.2",
+ "globby": "^13.2.2",
+ "magic-string": "^0.30.0"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "13.2.2",
+ "dev": true,
+ "requires": {
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.3.0",
+ "ignore": "^5.2.4",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ }
+ },
+ "magic-string": {
+ "version": "0.30.4",
+ "dev": true,
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
+ "slash": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "@web/test-runner": {
+ "version": "0.18.1",
+ "dev": true,
+ "requires": {
+ "@web/browser-logs": "^0.4.0",
+ "@web/config-loader": "^0.3.0",
+ "@web/dev-server": "^0.4.0",
+ "@web/test-runner-chrome": "^0.16.0",
+ "@web/test-runner-commands": "^0.9.0",
+ "@web/test-runner-core": "^0.13.0",
+ "@web/test-runner-mocha": "^0.9.0",
+ "camelcase": "^6.2.0",
+ "command-line-args": "^5.1.1",
+ "command-line-usage": "^7.0.1",
+ "convert-source-map": "^2.0.0",
+ "diff": "^5.0.0",
+ "globby": "^11.0.1",
+ "nanocolors": "^0.2.1",
+ "portfinder": "^1.0.32",
+ "source-map": "^0.7.3"
+ },
+ "dependencies": {
+ "@web/config-loader": {
+ "version": "0.3.1",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "2.0.0",
+ "dev": true
+ }
+ }
+ },
+ "@web/test-runner-chrome": {
+ "version": "0.16.0",
+ "dev": true,
+ "requires": {
+ "@web/test-runner-core": "^0.13.0",
+ "@web/test-runner-coverage-v8": "^0.8.0",
+ "async-mutex": "0.4.0",
+ "chrome-launcher": "^0.15.0",
+ "puppeteer-core": "^22.0.0"
+ }
+ },
+ "@web/test-runner-commands": {
+ "version": "0.9.0",
+ "dev": true,
+ "requires": {
+ "@web/test-runner-core": "^0.13.0",
+ "mkdirp": "^1.0.4"
+ }
+ },
+ "@web/test-runner-core": {
+ "version": "0.13.1",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.12.11",
+ "@types/babel__code-frame": "^7.0.2",
+ "@types/co-body": "^6.1.0",
+ "@types/convert-source-map": "^2.0.0",
+ "@types/debounce": "^1.2.0",
+ "@types/istanbul-lib-coverage": "^2.0.3",
+ "@types/istanbul-reports": "^3.0.0",
+ "@web/browser-logs": "^0.4.0",
+ "@web/dev-server-core": "^0.7.0",
+ "chokidar": "^3.4.3",
+ "cli-cursor": "^3.1.0",
+ "co-body": "^6.1.0",
+ "convert-source-map": "^2.0.0",
+ "debounce": "^1.2.0",
+ "dependency-graph": "^0.11.0",
+ "globby": "^11.0.1",
+ "ip": "^2.0.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-report": "^3.0.1",
+ "istanbul-reports": "^3.0.2",
+ "log-update": "^4.0.0",
+ "nanocolors": "^0.2.1",
+ "nanoid": "^3.1.25",
+ "open": "^8.0.2",
+ "picomatch": "^2.2.2",
+ "source-map": "^0.7.3"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "ip": {
+ "version": "2.0.1",
+ "dev": true
+ }
+ }
+ },
+ "@web/test-runner-coverage-v8": {
+ "version": "0.8.0",
+ "dev": true,
+ "requires": {
+ "@web/test-runner-core": "^0.13.0",
+ "istanbul-lib-coverage": "^3.0.0",
+ "lru-cache": "^8.0.4",
+ "picomatch": "^2.2.2",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "8.0.5",
+ "dev": true
+ }
+ }
+ },
+ "@web/test-runner-junit-reporter": {
+ "version": "0.7.1",
+ "dev": true,
+ "requires": {
+ "@web/test-runner-chrome": "^0.16.0",
+ "@web/test-runner-core": "^0.13.0",
+ "array-flat-polyfill": "^1.0.1",
+ "xml": "^1.0.1"
+ }
+ },
+ "@web/test-runner-mocha": {
+ "version": "0.9.0",
+ "dev": true,
+ "requires": {
+ "@web/test-runner-core": "^0.13.0"
+ }
+ },
+ "@web/test-runner-playwright": {
+ "version": "0.11.0",
+ "dev": true,
+ "requires": {
+ "@web/test-runner-core": "^0.13.0",
+ "@web/test-runner-coverage-v8": "^0.8.0",
+ "playwright": "^1.22.2"
+ }
+ },
+ "@yarnpkg/lockfile": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "a-sync-waterfall": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "abort-controller": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "event-target-shim": "^5.0.0"
+ }
+ },
+ "accepts": {
+ "version": "1.3.8",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ }
+ },
+ "acorn": {
+ "version": "8.11.3",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "dev": true,
+ "requires": {}
+ },
+ "acorn-walk": {
+ "version": "8.2.0",
+ "dev": true
+ },
+ "add-stream": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "debug": "4"
+ }
+ },
+ "agentkeepalive": {
+ "version": "4.3.0",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "depd": "^2.0.0",
+ "humanize-ms": "^1.2.1"
+ }
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ajv": {
+ "version": "8.12.0",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-colors": {
+ "version": "4.1.3",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "4.3.2",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.21.3"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.21.3",
+ "dev": true
+ }
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1"
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "any-promise": {
+ "version": "0.1.0",
+ "dev": true
+ },
+ "any-signal": {
+ "version": "3.0.1",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "3.1.3",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "are-docs-informative": {
+ "version": "0.0.2",
+ "dev": true
+ },
+ "argparse": {
+ "version": "2.0.1"
+ },
+ "aria-query": {
+ "version": "5.3.0",
+ "dev": true,
+ "requires": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "dev": true
+ },
+ "array-back": {
+ "version": "6.2.2",
+ "dev": true
+ },
+ "array-buffer-byte-length": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ }
+ },
+ "array-differ": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "array-flat-polyfill": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "array-ify": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "array-union": {
+ "version": "2.1.0"
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "dev": true
+ },
+ "array.prototype.flat": {
+ "version": "1.3.2",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "arraybuffer.prototype.slice": {
+ "version": "1.0.3",
+ "dev": true,
+ "requires": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
+ "is-shared-array-buffer": "^1.0.2"
+ }
+ },
+ "arrify": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "asap": {
+ "version": "2.0.6",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.6",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-never": {
+ "version": "1.2.1",
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "ast-types": {
+ "version": "0.13.4",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.0.1"
+ }
+ },
+ "astral-regex": {
+ "version": "2.0.0"
+ },
+ "astring": {
+ "version": "1.8.6",
+ "dev": true
+ },
+ "async": {
+ "version": "3.2.4",
+ "dev": true
+ },
+ "async-csv": {
+ "version": "2.1.3",
+ "dev": true,
+ "requires": {
+ "csv": "^5.1.3"
+ }
+ },
+ "async-each-series": {
+ "version": "0.1.1",
+ "dev": true
+ },
+ "async-mutex": {
+ "version": "0.4.0",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "dev": true
+ },
+ "at-least-node": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "10.4.19",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.23.0",
+ "caniuse-lite": "^1.0.30001599",
+ "fraction.js": "^4.3.7",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "available-typed-arrays": {
+ "version": "1.0.7",
+ "dev": true,
+ "requires": {
+ "possible-typed-array-names": "^1.0.0"
+ }
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.12.0",
+ "dev": true
+ },
+ "axe-core": {
+ "version": "4.9.0",
+ "dev": true
+ },
+ "axios": {
+ "version": "0.21.4",
+ "dev": true,
+ "requires": {
+ "follow-redirects": "^1.14.0"
+ }
+ },
+ "axobject-query": {
+ "version": "2.2.0",
+ "dev": true
+ },
+ "b4a": {
+ "version": "1.6.6",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.2"
+ },
+ "bare-events": {
+ "version": "2.2.2",
+ "dev": true,
+ "optional": true
+ },
+ "bare-fs": {
+ "version": "2.2.2",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "bare-events": "^2.0.0",
+ "bare-os": "^2.0.0",
+ "bare-path": "^2.0.0",
+ "streamx": "^2.13.0"
+ }
+ },
+ "bare-os": {
+ "version": "2.2.1",
+ "dev": true,
+ "optional": true
+ },
+ "bare-path": {
+ "version": "2.1.0",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "bare-os": "^2.1.0"
+ }
+ },
+ "base": {
+ "version": "0.11.2",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "dev": true
+ },
+ "base64id": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "basic-ftp": {
+ "version": "5.0.5",
+ "dev": true
+ },
+ "batch": {
+ "version": "0.6.1",
+ "dev": true
+ },
+ "bcp-47": {
+ "version": "1.0.8",
+ "dev": true,
+ "requires": {
+ "is-alphabetical": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ }
+ },
+ "bcp-47-match": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "bcp-47-normalize": {
+ "version": "1.1.1",
+ "dev": true,
+ "requires": {
+ "bcp-47": "^1.0.0",
+ "bcp-47-match": "^1.0.0"
+ }
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "better-path-resolve": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "is-windows": "^1.0.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "dev": true
+ },
+ "bl": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "blob-to-it": {
+ "version": "2.0.3",
+ "dev": true,
+ "requires": {
+ "browser-readablestream-to-it": "^2.0.0"
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0"
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "breakword": {
+ "version": "1.0.6",
+ "dev": true,
+ "requires": {
+ "wcwidth": "^1.0.1"
+ }
+ },
+ "browser-headers": {
+ "version": "0.4.1",
+ "dev": true
+ },
+ "browser-readablestream-to-it": {
+ "version": "2.0.3",
+ "dev": true
+ },
+ "browser-sync": {
+ "version": "2.27.9",
+ "dev": true,
+ "requires": {
+ "browser-sync-client": "^2.27.9",
+ "browser-sync-ui": "^2.27.9",
+ "bs-recipes": "1.3.4",
+ "bs-snippet-injector": "^2.0.1",
+ "chokidar": "^3.5.1",
+ "connect": "3.6.6",
+ "connect-history-api-fallback": "^1",
+ "dev-ip": "^1.0.1",
+ "easy-extender": "^2.3.4",
+ "eazy-logger": "3.1.0",
+ "etag": "^1.8.1",
+ "fresh": "^0.5.2",
+ "fs-extra": "3.0.1",
+ "http-proxy": "^1.18.1",
+ "immutable": "^3",
+ "localtunnel": "^2.0.1",
+ "micromatch": "^4.0.2",
+ "opn": "5.3.0",
+ "portscanner": "2.1.1",
+ "qs": "6.2.3",
+ "raw-body": "^2.3.2",
+ "resp-modifier": "6.0.2",
+ "rx": "4.1.0",
+ "send": "0.16.2",
+ "serve-index": "1.9.1",
+ "serve-static": "1.13.2",
+ "server-destroy": "1.0.1",
+ "socket.io": "^4.4.1",
+ "ua-parser-js": "1.0.2",
+ "yargs": "^17.3.1"
+ },
+ "dependencies": {
+ "connect": {
+ "version": "3.6.6",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "finalhandler": "1.1.0",
+ "parseurl": "~1.3.2",
+ "utils-merge": "1.0.1"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.1",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "statuses": "~1.3.1",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "3.0.1",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^3.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "http-proxy": {
+ "version": "1.18.1",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "immutable": {
+ "version": "3.8.2",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "3.0.1",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "opn": {
+ "version": "5.3.0",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "qs": {
+ "version": "6.2.3",
+ "dev": true
+ },
+ "serve-static": {
+ "version": "1.13.2",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.2",
+ "send": "0.16.2"
+ }
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "1.0.2",
+ "dev": true
+ }
+ }
+ },
+ "browser-sync-client": {
+ "version": "2.29.3",
+ "dev": true,
+ "requires": {
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "mitt": "^1.1.3"
+ },
+ "dependencies": {
+ "mitt": {
+ "version": "1.2.0",
+ "dev": true
+ }
+ }
+ },
+ "browser-sync-ui": {
+ "version": "2.29.3",
+ "dev": true,
+ "requires": {
+ "async-each-series": "0.1.1",
+ "chalk": "4.1.2",
+ "connect-history-api-fallback": "^1",
+ "immutable": "^3",
+ "server-destroy": "1.0.1",
+ "socket.io-client": "^4.4.1",
+ "stream-throttle": "^0.1.3"
+ },
+ "dependencies": {
+ "immutable": {
+ "version": "3.8.2",
+ "dev": true
+ }
+ }
+ },
+ "browserslist": {
+ "version": "4.23.0",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001587",
+ "electron-to-chromium": "^1.4.668",
+ "node-releases": "^2.0.14",
+ "update-browserslist-db": "^1.0.13"
+ }
+ },
+ "bs-recipes": {
+ "version": "1.3.4",
+ "dev": true
+ },
+ "bs-snippet-injector": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "buffer": {
+ "version": "5.7.1",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "3.3.0",
+ "dev": true
+ },
+ "busboy": {
+ "version": "1.6.0",
+ "dev": true,
+ "requires": {
+ "streamsearch": "^1.1.0"
+ }
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "cacache": {
+ "version": "15.3.0",
+ "dev": true,
+ "requires": {
+ "@npmcli/fs": "^1.0.0",
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "cache-content-type": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "mime-types": "^2.1.18",
+ "ylru": "^1.2.0"
+ }
+ },
+ "cacheable-lookup": {
+ "version": "5.0.4",
+ "dev": true
+ },
+ "cacheable-request": {
+ "version": "7.0.2",
+ "dev": true,
+ "requires": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^4.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^6.0.1",
+ "responselike": "^2.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "5.2.0",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ }
+ }
+ },
+ "call-bind": {
+ "version": "1.0.7",
+ "dev": true,
+ "requires": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0"
+ },
+ "camel-case": {
+ "version": "4.1.2",
+ "dev": true,
+ "requires": {
+ "pascal-case": "^3.1.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "camelcase": {
+ "version": "6.3.0"
+ },
+ "camelcase-keys": {
+ "version": "6.2.2",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "dev": true
+ }
+ }
+ },
+ "caniuse-api": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001605",
+ "dev": true
+ },
+ "capital-case": {
+ "version": "1.0.4",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3",
+ "upper-case-first": "^2.0.2"
+ }
+ },
+ "capitalize": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "case": {
+ "version": "1.6.3",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "dev": true
+ },
+ "cborg": {
+ "version": "1.10.2",
+ "dev": true
+ },
+ "cem-plugin-module-file-extensions": {
+ "version": "0.0.5",
+ "dev": true,
+ "requires": {}
+ },
+ "cem-plugin-readonly": {
+ "version": "0.0.5",
+ "dev": true,
+ "requires": {}
+ },
+ "chai-a11y-axe": {
+ "version": "1.5.0",
+ "dev": true,
+ "requires": {
+ "axe-core": "^4.3.3"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "chalk-template": {
+ "version": "0.4.0",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.2"
+ }
+ },
+ "change-case": {
+ "version": "4.1.2",
+ "dev": true,
+ "requires": {
+ "camel-case": "^4.1.2",
+ "capital-case": "^1.0.4",
+ "constant-case": "^3.0.4",
+ "dot-case": "^3.0.4",
+ "header-case": "^2.0.4",
+ "no-case": "^3.0.4",
+ "param-case": "^3.0.4",
+ "pascal-case": "^3.1.2",
+ "path-case": "^3.0.4",
+ "sentence-case": "^3.0.4",
+ "snake-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "character-parser": {
+ "version": "2.2.0",
+ "dev": true,
+ "requires": {
+ "is-regex": "^1.0.3"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "dev": true
+ },
+ "cheerio": {
+ "version": "1.0.0-rc.12",
+ "dev": true,
+ "requires": {
+ "cheerio-select": "^2.1.0",
+ "dom-serializer": "^2.0.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "htmlparser2": "^8.0.1",
+ "parse5": "^7.0.0",
+ "parse5-htmlparser2-tree-adapter": "^7.0.0"
+ },
+ "dependencies": {
+ "dom-serializer": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ }
+ },
+ "domhandler": {
+ "version": "5.0.3",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.3.0"
+ }
+ },
+ "domutils": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ }
+ },
+ "htmlparser2": {
+ "version": "8.0.2",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "entities": "^4.4.0"
+ }
+ }
+ }
+ },
+ "cheerio-select": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-select": "^5.1.0",
+ "css-what": "^6.1.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1"
+ },
+ "dependencies": {
+ "dom-serializer": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ }
+ },
+ "domhandler": {
+ "version": "5.0.3",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.3.0"
+ }
+ },
+ "domutils": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ }
+ }
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
+ "chownr": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "chrome-launcher": {
+ "version": "0.15.2",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "escape-string-regexp": "^4.0.0",
+ "is-wsl": "^2.2.0",
+ "lighthouse-logger": "^1.0.0"
+ }
+ },
+ "chromium-bidi": {
+ "version": "0.5.16",
+ "dev": true,
+ "requires": {
+ "mitt": "3.0.1",
+ "urlpattern-polyfill": "10.0.0",
+ "zod": "3.22.4"
+ }
+ },
+ "ci-info": {
+ "version": "3.9.0",
+ "dev": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "dev": true
+ }
+ }
+ },
+ "clean-css": {
+ "version": "5.3.3",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "dev": true
+ }
+ }
+ },
+ "clean-regexp": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true
+ }
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "2.9.0",
+ "dev": true
+ },
+ "cli-width": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "cliui": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "dev": true
+ },
+ "clone-response": {
+ "version": "1.0.3",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ },
+ "dependencies": {
+ "mimic-response": {
+ "version": "1.0.1",
+ "dev": true
+ }
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "dev": true
+ },
+ "co-body": {
+ "version": "6.1.0",
+ "dev": true,
+ "requires": {
+ "inflation": "^2.0.0",
+ "qs": "^6.5.2",
+ "raw-body": "^2.3.3",
+ "type-is": "^1.6.16"
+ }
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color": {
+ "version": "4.2.3",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4"
+ },
+ "color-string": {
+ "version": "1.9.1",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "colord": {
+ "version": "2.9.3"
+ },
+ "colorjs.io": {
+ "version": "0.5.0",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "comlink": {
+ "version": "4.3.1",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.1.2",
+ "dev": true,
+ "requires": {
+ "array-back": "^6.1.2",
+ "find-replace": "^3.0.0",
+ "lodash.camelcase": "^4.3.0",
+ "typical": "^4.0.0"
+ }
+ },
+ "command-line-usage": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "array-back": "^6.2.2",
+ "chalk-template": "^0.4.0",
+ "table-layout": "^3.0.0",
+ "typical": "^7.1.1"
+ },
+ "dependencies": {
+ "typical": {
+ "version": "7.1.1",
+ "dev": true
+ }
+ }
+ },
+ "commander": {
+ "version": "10.0.1",
+ "dev": true
+ },
+ "comment-parser": {
+ "version": "1.2.4",
+ "dev": true
+ },
+ "compare-func": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "array-ify": "^1.0.0",
+ "dot-prop": "^5.1.0"
+ }
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "dev": true
+ },
+ "compressible": {
+ "version": "2.0.18",
+ "dev": true,
+ "requires": {
+ "mime-db": ">= 1.43.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "dev": true
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1"
+ },
+ "configstore": {
+ "version": "5.0.1",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^3.0.0",
+ "unique-string": "^2.0.0",
+ "write-file-atomic": "^3.0.0",
+ "xdg-basedir": "^4.0.0"
+ },
+ "dependencies": {
+ "make-dir": {
+ "version": "3.1.0",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.1",
+ "dev": true,
+ "peer": true
+ },
+ "write-file-atomic": {
+ "version": "3.0.3",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
+ }
+ }
+ }
+ },
+ "connect": {
+ "version": "3.7.0",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "finalhandler": "1.1.2",
+ "parseurl": "~1.3.3",
+ "utils-merge": "1.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "dev": true
+ }
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.6.0",
+ "dev": true
+ },
+ "constant-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3",
+ "upper-case": "^2.0.2"
+ }
+ },
+ "constantinople": {
+ "version": "4.0.1",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.6.0",
+ "@babel/types": "^7.6.1"
+ }
+ },
+ "construct-style-sheets-polyfill": {
+ "version": "3.1.0",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.4",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.2.1"
+ }
+ },
+ "content-type": {
+ "version": "1.0.5",
+ "dev": true
+ },
+ "conventional-changelog": {
+ "version": "3.1.25",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-angular": "^5.0.12",
+ "conventional-changelog-atom": "^2.0.8",
+ "conventional-changelog-codemirror": "^2.0.8",
+ "conventional-changelog-conventionalcommits": "^4.5.0",
+ "conventional-changelog-core": "^4.2.1",
+ "conventional-changelog-ember": "^2.0.9",
+ "conventional-changelog-eslint": "^3.0.9",
+ "conventional-changelog-express": "^2.0.6",
+ "conventional-changelog-jquery": "^3.0.11",
+ "conventional-changelog-jshint": "^2.0.9",
+ "conventional-changelog-preset-loader": "^2.3.4"
+ },
+ "dependencies": {
+ "conventional-changelog-conventionalcommits": {
+ "version": "4.6.3",
+ "dev": true,
+ "requires": {
+ "compare-func": "^2.0.0",
+ "lodash": "^4.17.15",
+ "q": "^1.5.1"
+ }
+ }
+ }
+ },
+ "conventional-changelog-angular": {
+ "version": "5.0.13",
+ "dev": true,
+ "requires": {
+ "compare-func": "^2.0.0",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-atom": {
+ "version": "2.0.8",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-cli": {
+ "version": "2.1.1",
+ "dev": true,
+ "requires": {
+ "add-stream": "^1.0.0",
+ "conventional-changelog": "^3.1.24",
+ "lodash": "^4.17.15",
+ "meow": "^8.0.0",
+ "tempfile": "^3.0.0"
+ },
+ "dependencies": {
+ "meow": {
+ "version": "8.1.2",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ }
+ },
+ "type-fest": {
+ "version": "0.18.1",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "dev": true
+ }
+ }
+ },
+ "conventional-changelog-codemirror": {
+ "version": "2.0.8",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-conventionalcommits": {
+ "version": "7.0.2",
+ "dev": true,
+ "requires": {
+ "compare-func": "^2.0.0"
+ }
+ },
+ "conventional-changelog-core": {
+ "version": "4.2.4",
+ "dev": true,
+ "requires": {
+ "add-stream": "^1.0.0",
+ "conventional-changelog-writer": "^5.0.0",
+ "conventional-commits-parser": "^3.2.0",
+ "dateformat": "^3.0.0",
+ "get-pkg-repo": "^4.0.0",
+ "git-raw-commits": "^2.0.8",
+ "git-remote-origin-url": "^2.0.0",
+ "git-semver-tags": "^4.1.1",
+ "lodash": "^4.17.15",
+ "normalize-package-data": "^3.0.0",
+ "q": "^1.5.1",
+ "read-pkg": "^3.0.0",
+ "read-pkg-up": "^3.0.0",
+ "through2": "^4.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ },
+ "dependencies": {
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "dev": true
+ }
+ }
+ },
+ "conventional-changelog-ember": {
+ "version": "2.0.9",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-eslint": {
+ "version": "3.0.9",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-express": {
+ "version": "2.0.6",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-jquery": {
+ "version": "3.0.11",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-jshint": {
+ "version": "2.0.9",
+ "dev": true,
+ "requires": {
+ "compare-func": "^2.0.0",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-preset-loader": {
+ "version": "2.3.4",
+ "dev": true
+ },
+ "conventional-changelog-writer": {
+ "version": "5.0.1",
+ "dev": true,
+ "requires": {
+ "conventional-commits-filter": "^2.0.7",
+ "dateformat": "^3.0.0",
+ "handlebars": "^4.7.7",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "^4.17.15",
+ "meow": "^8.0.0",
+ "semver": "^6.0.0",
+ "split": "^1.0.0",
+ "through2": "^4.0.0"
+ },
+ "dependencies": {
+ "meow": {
+ "version": "8.1.2",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.18.1",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "dev": true
+ }
+ }
+ },
+ "conventional-commits-filter": {
+ "version": "2.0.7",
+ "dev": true,
+ "requires": {
+ "lodash.ismatch": "^4.4.0",
+ "modify-values": "^1.0.0"
+ }
+ },
+ "conventional-commits-parser": {
+ "version": "3.2.4",
+ "dev": true,
+ "requires": {
+ "is-text-path": "^1.0.1",
+ "JSONStream": "^1.0.4",
+ "lodash": "^4.17.15",
+ "meow": "^8.0.0",
+ "split2": "^3.0.0",
+ "through2": "^4.0.0"
+ },
+ "dependencies": {
+ "meow": {
+ "version": "8.1.2",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ }
+ },
+ "type-fest": {
+ "version": "0.18.1",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "dev": true
+ }
+ }
+ },
+ "convert-source-map": {
+ "version": "1.9.0",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.4.2",
+ "dev": true
+ },
+ "cookies": {
+ "version": "0.9.1",
+ "dev": true,
+ "requires": {
+ "depd": "~2.0.0",
+ "keygrip": "~1.1.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "dev": true
+ },
+ "core-js-compat": {
+ "version": "3.37.0",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.23.0"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "cors": {
+ "version": "2.8.5",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4",
+ "vary": "^1"
+ }
+ },
+ "cosmiconfig": {
+ "version": "8.2.0",
+ "requires": {
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0"
+ },
+ "dependencies": {
+ "js-yaml": {
+ "version": "4.1.0",
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ }
+ }
+ },
+ "cosmiconfig-typescript-loader": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "jiti": "^1.19.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "crypto-random-string": {
+ "version": "2.0.0",
+ "dev": true,
+ "peer": true
+ },
+ "csp_evaluator": {
+ "version": "1.1.1",
+ "dev": true,
+ "peer": true
+ },
+ "css-declaration-sorter": {
+ "version": "6.4.0",
+ "dev": true,
+ "requires": {}
+ },
+ "css-functions-list": {
+ "version": "3.2.0"
+ },
+ "css-select": {
+ "version": "5.1.0",
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "dependencies": {
+ "dom-serializer": {
+ "version": "2.0.0",
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ }
+ },
+ "domhandler": {
+ "version": "5.0.3",
+ "requires": {
+ "domelementtype": "^2.3.0"
+ }
+ },
+ "domutils": {
+ "version": "3.1.0",
+ "requires": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ }
+ }
+ }
+ },
+ "css-tree": {
+ "version": "2.3.1",
+ "requires": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "6.1.0"
+ },
+ "cssesc": {
+ "version": "3.0.0"
+ },
+ "cssnano": {
+ "version": "5.1.15",
+ "dev": true,
+ "requires": {
+ "cssnano-preset-default": "^5.2.14",
+ "lilconfig": "^2.0.3",
+ "yaml": "^1.10.2"
+ },
+ "dependencies": {
+ "yaml": {
+ "version": "1.10.2",
+ "dev": true
+ }
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "5.2.14",
+ "dev": true,
+ "requires": {
+ "css-declaration-sorter": "^6.3.1",
+ "cssnano-utils": "^3.1.0",
+ "postcss-calc": "^8.2.3",
+ "postcss-colormin": "^5.3.1",
+ "postcss-convert-values": "^5.1.3",
+ "postcss-discard-comments": "^5.1.2",
+ "postcss-discard-duplicates": "^5.1.0",
+ "postcss-discard-empty": "^5.1.1",
+ "postcss-discard-overridden": "^5.1.0",
+ "postcss-merge-longhand": "^5.1.7",
+ "postcss-merge-rules": "^5.1.4",
+ "postcss-minify-font-values": "^5.1.0",
+ "postcss-minify-gradients": "^5.1.1",
+ "postcss-minify-params": "^5.1.4",
+ "postcss-minify-selectors": "^5.2.1",
+ "postcss-normalize-charset": "^5.1.0",
+ "postcss-normalize-display-values": "^5.1.0",
+ "postcss-normalize-positions": "^5.1.1",
+ "postcss-normalize-repeat-style": "^5.1.1",
+ "postcss-normalize-string": "^5.1.0",
+ "postcss-normalize-timing-functions": "^5.1.0",
+ "postcss-normalize-unicode": "^5.1.1",
+ "postcss-normalize-url": "^5.1.0",
+ "postcss-normalize-whitespace": "^5.1.1",
+ "postcss-ordered-values": "^5.1.3",
+ "postcss-reduce-initial": "^5.1.2",
+ "postcss-reduce-transforms": "^5.1.0",
+ "postcss-svgo": "^5.1.0",
+ "postcss-unique-selectors": "^5.1.1"
+ }
+ },
+ "cssnano-utils": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {}
+ },
+ "csso": {
+ "version": "4.2.0",
+ "dev": true,
+ "requires": {
+ "css-tree": "^1.1.2"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "1.1.3",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.14",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "dev": true
+ }
+ }
+ },
+ "cssom": {
+ "version": "0.5.0"
+ },
+ "csv": {
+ "version": "5.5.3",
+ "dev": true,
+ "requires": {
+ "csv-generate": "^3.4.3",
+ "csv-parse": "^4.16.3",
+ "csv-stringify": "^5.6.5",
+ "stream-transform": "^2.1.3"
+ }
+ },
+ "csv-generate": {
+ "version": "3.4.3",
+ "dev": true
+ },
+ "csv-parse": {
+ "version": "4.16.3",
+ "dev": true
+ },
+ "csv-stringify": {
+ "version": "5.6.5",
+ "dev": true
+ },
+ "current-module-paths": {
+ "version": "1.1.1",
+ "dev": true
+ },
+ "custom-elements-manifest": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "dag-jose": {
+ "version": "3.0.1",
+ "dev": true,
+ "requires": {
+ "@ipld/dag-cbor": "^8.0.0",
+ "multiformats": "^10.0.1"
+ }
+ },
+ "dargs": {
+ "version": "7.0.0",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "data-uri-to-buffer": {
+ "version": "3.0.1",
+ "dev": true
+ },
+ "data-view-buffer": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ }
+ },
+ "data-view-byte-length": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ }
+ },
+ "data-view-byte-offset": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ }
+ },
+ "dateformat": {
+ "version": "3.0.3",
+ "dev": true
+ },
+ "debounce": {
+ "version": "1.2.1",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.4",
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2"
+ }
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0"
+ },
+ "decamelize-keys": {
+ "version": "1.1.1",
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "map-obj": {
+ "version": "1.0.1"
+ }
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.2",
+ "dev": true
+ },
+ "decompress-response": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^3.1.0"
+ }
+ },
+ "dedent": {
+ "version": "1.5.1",
+ "dev": true,
+ "requires": {}
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "dev": true
+ },
+ "deepmerge": {
+ "version": "4.3.1",
+ "dev": true
+ },
+ "defaults": {
+ "version": "1.0.4",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.4",
+ "dev": true
+ }
+ }
+ },
+ "defer-to-connect": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "define-data-property": {
+ "version": "1.1.4",
+ "dev": true,
+ "requires": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ }
+ },
+ "define-lazy-prop": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.2.1",
+ "dev": true,
+ "requires": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "degenerator": {
+ "version": "3.0.4",
+ "dev": true,
+ "requires": {
+ "ast-types": "^0.13.2",
+ "escodegen": "^1.8.1",
+ "esprima": "^4.0.0",
+ "vm2": "^3.9.17"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "depd": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "dependency-graph": {
+ "version": "0.11.0",
+ "dev": true
+ },
+ "dequal": {
+ "version": "2.0.3",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.2.0",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "6.1.0",
+ "dev": true
+ },
+ "detect-libc": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "dev-ip": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "devtools-protocol": {
+ "version": "0.0.1232444",
+ "dev": true,
+ "peer": true
+ },
+ "didyoumean2": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.10.2",
+ "leven": "^3.1.0",
+ "lodash.deburr": "^4.1.0"
+ }
+ },
+ "diff": {
+ "version": "5.1.0",
+ "dev": true
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "dlv": {
+ "version": "1.1.3",
+ "dev": true
+ },
+ "dns-over-http-resolver": {
+ "version": "2.1.1",
+ "dev": true,
+ "requires": {
+ "debug": "^4.3.1",
+ "native-fetch": "^4.0.2",
+ "receptacle": "^1.3.2",
+ "undici": "^5.12.0"
+ }
+ },
+ "doctypes": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "dom-serializer": {
+ "version": "1.4.1",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "2.2.0",
+ "dev": true
+ }
+ }
+ },
+ "dom5": {
+ "version": "3.0.1",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "^2.2.34",
+ "clone": "^2.1.0",
+ "parse5": "^4.0.0"
+ },
+ "dependencies": {
+ "@types/parse5": {
+ "version": "2.2.34",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "domelementtype": {
+ "version": "2.3.0"
+ },
+ "domhandler": {
+ "version": "4.3.1",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.2.0"
+ }
+ },
+ "domutils": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ }
+ },
+ "dot-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "dot-prop": {
+ "version": "5.3.0",
+ "dev": true,
+ "requires": {
+ "is-obj": "^2.0.0"
+ }
+ },
+ "dotenv": {
+ "version": "16.4.5",
+ "dev": true
+ },
+ "eastasianwidth": {
+ "version": "0.2.0",
+ "dev": true
+ },
+ "easy-extender": {
+ "version": "2.3.4",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "eazy-logger": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "tfunk": "^4.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "dev": true
+ },
+ "ejs": {
+ "version": "3.1.9",
+ "dev": true,
+ "requires": {
+ "jake": "^10.8.5"
+ }
+ },
+ "electron-fetch": {
+ "version": "1.9.1",
+ "dev": true,
+ "requires": {
+ "encoding": "^0.1.13"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.4.724",
+ "dev": true
+ },
+ "element-internals-polyfill": {
+ "version": "1.3.11",
+ "dev": true
+ },
+ "eleventy-plugin-dart-sass": {
+ "version": "1.0.3",
+ "dev": true,
+ "requires": {
+ "sass": "~1.45.1"
+ }
+ },
+ "eleventy-plugin-nesting-toc": {
+ "version": "1.3.0",
+ "dev": true,
+ "requires": {
+ "cheerio": "^1.0.0-rc.3"
+ }
+ },
+ "eleventy-plugin-toc": {
+ "version": "1.1.5",
+ "dev": true,
+ "requires": {
+ "cheerio": "^1.0.0-rc.10"
+ }
+ },
+ "emitter-component": {
+ "version": "1.1.1",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0"
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "encoding": {
+ "version": "0.1.13",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "^0.6.2"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.6.3",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ }
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "engine.io": {
+ "version": "6.4.2",
+ "dev": true,
+ "requires": {
+ "@types/cookie": "^0.4.1",
+ "@types/cors": "^2.8.12",
+ "@types/node": ">=10.0.0",
+ "accepts": "~1.3.4",
+ "base64id": "2.0.0",
+ "cookie": "~0.4.1",
+ "cors": "~2.8.5",
+ "debug": "~4.3.1",
+ "engine.io-parser": "~5.0.3",
+ "ws": "~8.11.0"
+ },
+ "dependencies": {
+ "ws": {
+ "version": "8.11.0",
+ "dev": true,
+ "requires": {}
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "6.4.0",
+ "dev": true,
+ "requires": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.3.1",
+ "engine.io-parser": "~5.0.3",
+ "ws": "~8.11.0",
+ "xmlhttprequest-ssl": "~2.0.0"
+ },
+ "dependencies": {
+ "ws": {
+ "version": "8.11.0",
+ "dev": true,
+ "requires": {}
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "5.0.7",
+ "dev": true
+ },
+ "enhanced-resolve": {
+ "version": "5.16.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz",
+ "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ }
+ },
+ "enquirer": {
+ "version": "2.4.1",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^4.1.1",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "entities": {
+ "version": "4.5.0"
+ },
+ "env-paths": {
+ "version": "2.2.1",
+ "dev": true
+ },
+ "eol": {
+ "version": "0.9.1",
+ "dev": true
+ },
+ "err-code": {
+ "version": "3.0.1",
+ "dev": true
+ },
+ "errno": {
+ "version": "0.1.8",
+ "dev": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "errorstacks": {
+ "version": "2.4.1",
+ "dev": true
+ },
+ "es-abstract": {
+ "version": "1.23.3",
+ "dev": true,
+ "requires": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.6",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.3",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.13",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.13.1",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.6",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.15"
+ }
+ },
+ "es-define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.4"
+ }
+ },
+ "es-errors": {
+ "version": "1.3.0",
+ "dev": true
+ },
+ "es-module-lexer": {
+ "version": "1.2.1",
+ "dev": true
+ },
+ "es-module-shims": {
+ "version": "1.9.0",
+ "dev": true
+ },
+ "es-object-atoms": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "es-errors": "^1.3.0"
+ }
+ },
+ "es-set-tostringtag": {
+ "version": "2.0.3",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
+ }
+ },
+ "es-shim-unscopables": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "hasown": "^2.0.0"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "esbuild": {
+ "version": "0.17.19",
+ "dev": true,
+ "requires": {
+ "@esbuild/android-arm": "0.17.19",
+ "@esbuild/android-arm64": "0.17.19",
+ "@esbuild/android-x64": "0.17.19",
+ "@esbuild/darwin-arm64": "0.17.19",
+ "@esbuild/darwin-x64": "0.17.19",
+ "@esbuild/freebsd-arm64": "0.17.19",
+ "@esbuild/freebsd-x64": "0.17.19",
+ "@esbuild/linux-arm": "0.17.19",
+ "@esbuild/linux-arm64": "0.17.19",
+ "@esbuild/linux-ia32": "0.17.19",
+ "@esbuild/linux-loong64": "0.17.19",
+ "@esbuild/linux-mips64el": "0.17.19",
+ "@esbuild/linux-ppc64": "0.17.19",
+ "@esbuild/linux-riscv64": "0.17.19",
+ "@esbuild/linux-s390x": "0.17.19",
+ "@esbuild/linux-x64": "0.17.19",
+ "@esbuild/netbsd-x64": "0.17.19",
+ "@esbuild/openbsd-x64": "0.17.19",
+ "@esbuild/sunos-x64": "0.17.19",
+ "@esbuild/win32-arm64": "0.17.19",
+ "@esbuild/win32-ia32": "0.17.19",
+ "@esbuild/win32-x64": "0.17.19"
+ },
+ "dependencies": {
+ "@esbuild/linux-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz",
+ "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "esbuild-plugin-lit-css": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "@pwrs/lit-css": "^3.0.0"
+ }
+ },
+ "esbuild-plugin-minify-html-literals": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "minify-html-literals": "^1.3.5"
+ }
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.14.3",
+ "dev": true,
+ "requires": {
+ "esprima": "^4.0.1",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "levn": {
+ "version": "0.3.0",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "dev": true,
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ }
+ }
+ },
+ "eslint": {
+ "version": "9.0.0",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^3.0.2",
+ "@eslint/js": "9.0.0",
+ "@humanwhocodes/config-array": "^0.12.3",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.0.1",
+ "eslint-visitor-keys": "^4.0.0",
+ "espree": "^10.0.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "@eslint/eslintrc": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "espree": {
+ "version": "10.0.1",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.11.3",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.0.0"
+ }
+ },
+ "file-entry-cache": {
+ "version": "8.0.0",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^4.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "4.0.1",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "globals": {
+ "version": "14.0.0",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "dev": true
+ }
+ }
+ },
+ "eslint-compat-utils": {
+ "version": "0.5.0",
+ "dev": true,
+ "requires": {
+ "semver": "^7.5.4"
+ }
+ },
+ "eslint-config-google": {
+ "version": "0.14.0",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-plugin-html": {
+ "version": "8.1.0",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^9.1.0"
+ },
+ "dependencies": {
+ "dom-serializer": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ }
+ },
+ "domhandler": {
+ "version": "5.0.3",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.3.0"
+ }
+ },
+ "domutils": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ }
+ },
+ "htmlparser2": {
+ "version": "9.1.0",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.1.0",
+ "entities": "^4.5.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-jsdoc": {
+ "version": "48.2.3",
+ "dev": true,
+ "requires": {
+ "@es-joy/jsdoccomment": "~0.42.0",
+ "are-docs-informative": "^0.0.2",
+ "comment-parser": "1.4.1",
+ "debug": "^4.3.4",
+ "escape-string-regexp": "^4.0.0",
+ "esquery": "^1.5.0",
+ "is-builtin-module": "^3.2.1",
+ "semver": "^7.6.0",
+ "spdx-expression-parse": "^4.0.0"
+ },
+ "dependencies": {
+ "comment-parser": {
+ "version": "1.4.1",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-json-schema-validator": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.3.0",
+ "ajv": "^8.0.0",
+ "debug": "^4.3.1",
+ "eslint-compat-utils": "^0.5.0",
+ "json-schema-migrate": "^2.0.0",
+ "jsonc-eslint-parser": "^2.0.0",
+ "minimatch": "^8.0.0",
+ "synckit": "^0.9.0",
+ "toml-eslint-parser": "^0.9.0",
+ "tunnel-agent": "^0.6.0",
+ "yaml-eslint-parser": "^1.0.0"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "8.0.4",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
+ }
+ },
+ "eslint-plugin-jsonc": {
+ "version": "2.15.0",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "eslint-compat-utils": "^0.5.0",
+ "espree": "^9.6.1",
+ "graphemer": "^1.4.0",
+ "jsonc-eslint-parser": "^2.0.4",
+ "natural-compare": "^1.4.0",
+ "synckit": "^0.6.0"
+ },
+ "dependencies": {
+ "synckit": {
+ "version": "0.6.2",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.3.1"
+ }
+ }
+ }
+ },
+ "eslint-plugin-lit": {
+ "version": "1.11.0",
+ "dev": true,
+ "requires": {
+ "parse5": "^6.0.1",
+ "parse5-htmlparser2-tree-adapter": "^6.0.1",
+ "requireindex": "^1.2.0"
+ },
+ "dependencies": {
+ "parse5": {
+ "version": "6.0.1",
+ "dev": true
+ },
+ "parse5-htmlparser2-tree-adapter": {
+ "version": "6.0.1",
+ "dev": true,
+ "requires": {
+ "parse5": "^6.0.1"
+ }
+ }
+ }
+ },
+ "eslint-plugin-lit-a11y": {
+ "version": "4.1.2",
+ "dev": true,
+ "requires": {
+ "aria-query": "^5.1.3",
+ "axe-core": "^4.3.3",
+ "axobject-query": "^2.2.0",
+ "dom5": "^3.0.1",
+ "emoji-regex": "^10.2.1",
+ "eslint-plugin-lit": "^1.10.1",
+ "eslint-rule-extender": "0.0.1",
+ "language-tags": "^1.0.5",
+ "parse5": "^7.1.2",
+ "parse5-htmlparser2-tree-adapter": "^6.0.1",
+ "requireindex": "~1.2.0"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "10.3.0",
+ "dev": true
+ },
+ "parse5-htmlparser2-tree-adapter": {
+ "version": "6.0.1",
+ "dev": true,
+ "requires": {
+ "parse5": "^6.0.1"
+ },
+ "dependencies": {
+ "parse5": {
+ "version": "6.0.1",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "eslint-plugin-no-only-tests": {
+ "version": "3.1.0",
+ "dev": true
+ },
+ "eslint-plugin-unicorn": {
+ "version": "52.0.0",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@eslint/eslintrc": "^2.1.4",
+ "ci-info": "^4.0.0",
+ "clean-regexp": "^1.0.0",
+ "core-js-compat": "^3.34.0",
+ "esquery": "^1.5.0",
+ "indent-string": "^4.0.0",
+ "is-builtin-module": "^3.2.1",
+ "jsesc": "^3.0.2",
+ "pluralize": "^8.0.0",
+ "read-pkg-up": "^7.0.1",
+ "regexp-tree": "^0.1.27",
+ "regjsparser": "^0.10.0",
+ "semver": "^7.5.4",
+ "strip-indent": "^3.0.0"
+ },
+ "dependencies": {
+ "ci-info": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "3.0.2",
+ "dev": true
+ }
+ }
+ },
+ "eslint-rule-extender": {
+ "version": "0.0.1",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "8.0.1",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "dev": true
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.4.3",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.6.1",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.5.0",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "2.0.2",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "dev": true
+ },
+ "event-target-shim": {
+ "version": "5.0.1",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "4.0.7",
+ "dev": true
+ },
+ "execa": {
+ "version": "8.0.1",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "8.0.1",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "onetime": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^4.0.0"
+ }
+ },
+ "signal-exit": {
+ "version": "4.1.0",
+ "dev": true
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ }
+ }
+ },
+ "expand-template": {
+ "version": "2.0.3",
+ "dev": true
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "extendable-error": {
+ "version": "0.1.7",
+ "dev": true
+ },
+ "external-editor": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ }
+ }
+ },
+ "extract-zip": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "@types/yauzl": "^2.9.1",
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "5.2.0",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3"
+ },
+ "fast-diff": {
+ "version": "1.3.0",
+ "dev": true
+ },
+ "fast-fifo": {
+ "version": "1.2.0",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.3.1",
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "dev": true
+ },
+ "fastest-levenshtein": {
+ "version": "1.0.16"
+ },
+ "fastq": {
+ "version": "1.15.0",
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "fd-slicer": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
+ "fetch-blob": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
+ "dev": true,
+ "requires": {
+ "node-domexception": "^1.0.0",
+ "web-streams-polyfill": "^3.0.3"
+ }
+ },
+ "figures": {
+ "version": "3.2.0",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true
+ }
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "file-set": {
+ "version": "5.1.3",
+ "dev": true,
+ "requires": {
+ "array-back": "^6.2.2",
+ "glob": "^7.2.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "file-uri-to-path": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "filelist": {
+ "version": "1.0.4",
+ "dev": true,
+ "requires": {
+ "minimatch": "^5.0.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "5.1.6",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "finalhandler": {
+ "version": "1.2.0",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ }
+ }
+ },
+ "find-replace": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "array-back": "^3.0.1"
+ },
+ "dependencies": {
+ "array-back": {
+ "version": "3.1.0",
+ "dev": true
+ }
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "find-yarn-workspace-root": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "micromatch": "^4.0.2"
+ }
+ },
+ "find-yarn-workspace-root2": {
+ "version": "1.2.16",
+ "dev": true,
+ "requires": {
+ "micromatch": "^4.0.2",
+ "pkg-dir": "^4.2.0"
+ }
+ },
+ "findup-sync": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "2.3.2",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ }
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ }
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "flatted": {
+ "version": "3.3.1"
+ },
+ "follow-redirects": {
+ "version": "1.15.2",
+ "dev": true
+ },
+ "for-each": {
+ "version": "0.3.3",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "foreground-child": {
+ "version": "3.1.1",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "dependencies": {
+ "signal-exit": {
+ "version": "4.1.0",
+ "dev": true
+ }
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "dev": true
+ },
+ "formdata-polyfill": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+ "dev": true,
+ "requires": {
+ "fetch-blob": "^3.1.2"
+ }
+ },
+ "fraction.js": {
+ "version": "4.3.7",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "dev": true
+ },
+ "fs-constants": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "11.2.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "dependencies": {
+ "jsonfile": {
+ "version": "6.1.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "universalify": {
+ "version": "2.0.0",
+ "dev": true
+ }
+ }
+ },
+ "fs-minipass": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0"
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "dev": true,
+ "optional": true
+ },
+ "ftp": {
+ "version": "0.3.10",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.x",
+ "xregexp": "2.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "dev": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.2"
+ },
+ "function.prototype.name": {
+ "version": "1.1.6",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ }
+ },
+ "functions-have-names": {
+ "version": "1.2.3",
+ "dev": true
+ },
+ "fuse.js": {
+ "version": "6.6.2",
+ "dev": true
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.2.4",
+ "dev": true,
+ "requires": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ }
+ },
+ "get-iterator": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "get-pkg-repo": {
+ "version": "4.2.1",
+ "dev": true,
+ "requires": {
+ "@hutson/parse-repository-url": "^3.0.0",
+ "hosted-git-info": "^4.0.0",
+ "through2": "^2.0.0",
+ "yargs": "^16.2.0"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "7.0.4",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "dev": true
+ }
+ }
+ },
+ "get-stdin": {
+ "version": "9.0.0",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "dev": true
+ },
+ "get-symbol-description": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
+ }
+ },
+ "get-tsconfig": {
+ "version": "4.7.3",
+ "dev": true,
+ "requires": {
+ "resolve-pkg-maps": "^1.0.0"
+ }
+ },
+ "get-uri": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "@tootallnate/once": "1",
+ "data-uri-to-buffer": "3",
+ "debug": "4",
+ "file-uri-to-path": "2",
+ "fs-extra": "^8.1.0",
+ "ftp": "^0.3.10"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "8.1.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ }
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "git-branch": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "findup-sync": "^2.0.0"
+ }
+ },
+ "git-raw-commits": {
+ "version": "2.0.11",
+ "dev": true,
+ "requires": {
+ "dargs": "^7.0.0",
+ "lodash": "^4.17.15",
+ "meow": "^8.0.0",
+ "split2": "^3.0.0",
+ "through2": "^4.0.0"
+ },
+ "dependencies": {
+ "meow": {
+ "version": "8.1.2",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ }
+ },
+ "type-fest": {
+ "version": "0.18.1",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "dev": true
+ }
+ }
+ },
+ "git-remote-origin-url": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "gitconfiglocal": "^1.0.0",
+ "pify": "^2.3.0"
+ }
+ },
+ "git-semver-tags": {
+ "version": "4.1.1",
+ "dev": true,
+ "requires": {
+ "meow": "^8.0.0",
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "meow": {
+ "version": "8.1.2",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.18.1",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "dev": true
+ }
+ }
+ },
+ "gitconfiglocal": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.2"
+ },
+ "dependencies": {
+ "ini": {
+ "version": "1.3.8",
+ "dev": true
+ }
+ }
+ },
+ "github-from-package": {
+ "version": "0.0.0",
+ "dev": true
+ },
+ "glob": {
+ "version": "10.3.12",
+ "dev": true,
+ "requires": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.6",
+ "minimatch": "^9.0.1",
+ "minipass": "^7.0.4",
+ "path-scurry": "^1.10.2"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.4",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "minipass": {
+ "version": "7.1.0",
+ "dev": true
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "global-directory": {
+ "version": "4.0.1",
+ "dev": true,
+ "requires": {
+ "ini": "4.1.1"
+ },
+ "dependencies": {
+ "ini": {
+ "version": "4.1.1",
+ "dev": true
+ }
+ }
+ },
+ "global-dirs": {
+ "version": "3.0.1",
+ "dev": true,
+ "requires": {
+ "ini": "2.0.0"
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "dependencies": {
+ "ini": {
+ "version": "1.3.8",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "dev": true
+ },
+ "globalthis": {
+ "version": "1.0.3",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3"
+ }
+ },
+ "globby": {
+ "version": "11.0.4",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.1.1",
+ "ignore": "^5.1.4",
+ "merge2": "^1.3.0",
+ "slash": "^3.0.0"
+ }
+ },
+ "globjoin": {
+ "version": "0.1.4"
+ },
+ "good-guy-http": {
+ "version": "1.14.0",
+ "dev": true,
+ "requires": {
+ "@schibstedpl/circuit-breaker-js": "0.0.2",
+ "capitalize": "^1.0.0",
+ "clone": "2.1.1",
+ "request": "2.87.0",
+ "underscore": "1.12.1"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "5.5.2",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "har-validator": {
+ "version": "5.0.3",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.1.0",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.3",
+ "dev": true
+ },
+ "request": {
+ "version": "2.87.0",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.6.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.1",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.1",
+ "har-validator": "~5.0.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.17",
+ "oauth-sign": "~0.8.2",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.1",
+ "safe-buffer": "^5.1.1",
+ "tough-cookie": "~2.3.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.1.0"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.4",
+ "dev": true,
+ "requires": {
+ "punycode": "^1.4.1"
+ }
+ }
+ }
+ },
+ "google-protobuf": {
+ "version": "3.21.2",
+ "dev": true,
+ "peer": true
+ },
+ "gopd": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.3"
+ }
+ },
+ "got": {
+ "version": "11.8.2",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/is": "^4.0.0",
+ "@szmarczak/http-timer": "^4.0.5",
+ "@types/cacheable-request": "^6.0.1",
+ "@types/responselike": "^1.0.0",
+ "cacheable-lookup": "^5.0.3",
+ "cacheable-request": "^7.0.1",
+ "decompress-response": "^6.0.0",
+ "http2-wrapper": "^1.0.0-beta.5.2",
+ "lowercase-keys": "^2.0.0",
+ "p-cancelable": "^2.0.0",
+ "responselike": "^2.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.11",
+ "dev": true
+ },
+ "grapheme-splitter": {
+ "version": "1.0.4",
+ "dev": true
+ },
+ "graphemer": {
+ "version": "1.4.0",
+ "dev": true
+ },
+ "gray-matter": {
+ "version": "4.0.3",
+ "dev": true,
+ "requires": {
+ "js-yaml": "^3.13.1",
+ "kind-of": "^6.0.2",
+ "section-matter": "^1.0.0",
+ "strip-bom-string": "^1.0.0"
+ }
+ },
+ "hamljs": {
+ "version": "0.6.2",
+ "dev": true
+ },
+ "handlebars": {
+ "version": "4.7.7",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "dev": true
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "hard-rejection": {
+ "version": "2.1.0"
+ },
+ "has": {
+ "version": "1.0.3",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "dev": true
+ }
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0"
+ },
+ "has-property-descriptors": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "es-define-property": "^1.0.0"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "has-tostringtag": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hasown": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.2"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "dev": true
+ },
+ "header-case": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "capital-case": "^1.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "highlight.js": {
+ "version": "11.8.0"
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "4.1.0",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "6.0.0",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0"
+ }
+ }
+ },
+ "hostile": {
+ "version": "1.3.3",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "minimist": "^1.2.5",
+ "once": "^1.4.0",
+ "split": "^1.0.1",
+ "through": "^2.3.8"
+ }
+ },
+ "html-escaper": {
+ "version": "2.0.2",
+ "dev": true
+ },
+ "html-include-element": {
+ "version": "0.3.0",
+ "dev": true
+ },
+ "html-minifier": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "camel-case": "^3.0.0",
+ "clean-css": "^4.2.1",
+ "commander": "^2.19.0",
+ "he": "^1.2.0",
+ "param-case": "^2.1.1",
+ "relateurl": "^0.2.7",
+ "uglify-js": "^3.5.1"
+ },
+ "dependencies": {
+ "camel-case": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
+ }
+ },
+ "clean-css": {
+ "version": "4.2.4",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.6.0"
+ }
+ },
+ "commander": {
+ "version": "2.20.3",
+ "dev": true
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "dev": true
+ },
+ "no-case": {
+ "version": "2.3.2",
+ "dev": true,
+ "requires": {
+ "lower-case": "^1.1.1"
+ }
+ },
+ "param-case": {
+ "version": "2.1.1",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "dev": true
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "dev": true
+ }
+ }
+ },
+ "html-tags": {
+ "version": "3.3.1"
+ },
+ "htmlparser2": {
+ "version": "7.2.0",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.2",
+ "domutils": "^2.8.0",
+ "entities": "^3.0.1"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "3.0.1",
+ "dev": true
+ }
+ }
+ },
+ "http-assert": {
+ "version": "1.5.0",
+ "dev": true,
+ "requires": {
+ "deep-equal": "~1.0.1",
+ "http-errors": "~1.8.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.8.1",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.1"
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "dev": true
+ }
+ }
+ },
+ "http-cache-semantics": {
+ "version": "4.1.1",
+ "dev": true
+ },
+ "http-equiv-refresh": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ }
+ },
+ "http-link-header": {
+ "version": "1.1.3",
+ "dev": true,
+ "peer": true
+ },
+ "http-proxy": {
+ "version": "1.17.0",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^3.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "dependencies": {
+ "eventemitter3": {
+ "version": "3.1.2",
+ "dev": true
+ }
+ }
+ },
+ "http-proxy-agent": {
+ "version": "4.0.1",
+ "dev": true,
+ "requires": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "http2-wrapper": {
+ "version": "1.0.3",
+ "dev": true,
+ "requires": {
+ "quick-lru": "^5.1.1",
+ "resolve-alpn": "^1.0.0"
+ },
+ "dependencies": {
+ "quick-lru": {
+ "version": "5.1.1",
+ "dev": true
+ }
+ }
+ },
+ "https-proxy-agent": {
+ "version": "5.0.1",
+ "dev": true,
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "human-id": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "human-signals": {
+ "version": "5.0.0",
+ "dev": true
+ },
+ "humanize-ms": {
+ "version": "1.2.1",
+ "dev": true,
+ "requires": {
+ "ms": "^2.0.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "dev": true
+ },
+ "ignore": {
+ "version": "5.3.1"
+ },
+ "image-size": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "queue": "6.0.2"
+ }
+ },
+ "image-ssim": {
+ "version": "0.2.0",
+ "dev": true,
+ "peer": true
+ },
+ "immutable": {
+ "version": "4.3.0",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "4.0.0"
+ }
+ }
+ },
+ "import-lazy": {
+ "version": "4.0.0"
+ },
+ "import-meta-resolve": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4"
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "dev": true
+ },
+ "inflation": {
+ "version": "2.1.0",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4"
+ },
+ "ini": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "8.1.5",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.1.1",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^3.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.21",
+ "mute-stream": "0.0.8",
+ "ora": "^5.4.1",
+ "run-async": "^2.4.0",
+ "rxjs": "^7.2.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "interface-datastore": {
+ "version": "8.2.0",
+ "dev": true,
+ "requires": {
+ "interface-store": "^5.0.0",
+ "nanoid": "^4.0.0",
+ "uint8arrays": "^4.0.2"
+ },
+ "dependencies": {
+ "nanoid": {
+ "version": "4.0.2",
+ "dev": true
+ }
+ }
+ },
+ "interface-store": {
+ "version": "5.1.0",
+ "dev": true
+ },
+ "internal-slot": {
+ "version": "1.0.7",
+ "dev": true,
+ "requires": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.0",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "intl-messageformat": {
+ "version": "10.5.11",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@formatjs/ecma402-abstract": "1.18.2",
+ "@formatjs/fast-memoize": "2.2.0",
+ "@formatjs/icu-messageformat-parser": "2.7.6",
+ "tslib": "^2.4.0"
+ }
+ },
+ "ip": {
+ "version": "1.1.8",
+ "dev": true
+ },
+ "ipfs-client": {
+ "version": "0.9.2",
+ "dev": true,
+ "requires": {
+ "ipfs-grpc-client": "^0.12.0",
+ "ipfs-http-client": "^59.0.0",
+ "merge-options": "^3.0.4"
+ }
+ },
+ "ipfs-core-types": {
+ "version": "0.13.0",
+ "dev": true,
+ "requires": {
+ "@ipld/dag-pb": "^3.0.0",
+ "@libp2p/interface-keychain": "^1.0.3",
+ "@libp2p/interface-peer-id": "^1.0.4",
+ "@libp2p/interface-peer-info": "^1.0.2",
+ "@libp2p/interface-pubsub": "^3.0.0",
+ "@multiformats/multiaddr": "^11.0.0",
+ "@types/node": "^18.0.0",
+ "interface-datastore": "^7.0.0",
+ "ipfs-unixfs": "^8.0.0",
+ "multiformats": "^10.0.0"
+ },
+ "dependencies": {
+ "@libp2p/interface-peer-id": {
+ "version": "1.1.2",
+ "dev": true,
+ "requires": {
+ "multiformats": "^10.0.0"
+ }
+ },
+ "@types/node": {
+ "version": "18.16.16",
+ "dev": true
+ },
+ "interface-datastore": {
+ "version": "7.0.4",
+ "dev": true,
+ "requires": {
+ "interface-store": "^3.0.0",
+ "nanoid": "^4.0.0",
+ "uint8arrays": "^4.0.2"
+ }
+ },
+ "interface-store": {
+ "version": "3.0.4",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "4.0.2",
+ "dev": true
+ }
+ }
+ },
+ "ipfs-core-utils": {
+ "version": "0.17.0",
+ "dev": true,
+ "requires": {
+ "@libp2p/logger": "^2.0.0",
+ "@multiformats/multiaddr": "^11.0.0",
+ "@multiformats/multiaddr-to-uri": "^9.0.1",
+ "any-signal": "^3.0.0",
+ "blob-to-it": "^2.0.0",
+ "browser-readablestream-to-it": "^2.0.0",
+ "err-code": "^3.0.1",
+ "ipfs-core-types": "^0.13.0",
+ "ipfs-unixfs": "^8.0.0",
+ "ipfs-utils": "^9.0.6",
+ "it-all": "^2.0.0",
+ "it-map": "^2.0.0",
+ "it-peekable": "^2.0.0",
+ "it-to-stream": "^1.0.0",
+ "merge-options": "^3.0.4",
+ "multiformats": "^10.0.0",
+ "nanoid": "^4.0.0",
+ "parse-duration": "^1.0.0",
+ "timeout-abort-controller": "^3.0.0",
+ "uint8arrays": "^4.0.2"
+ },
+ "dependencies": {
+ "nanoid": {
+ "version": "4.0.2",
+ "dev": true
+ }
+ }
+ },
+ "ipfs-grpc-client": {
+ "version": "0.12.0",
+ "dev": true,
+ "requires": {
+ "@improbable-eng/grpc-web": "^0.15.0",
+ "@libp2p/logger": "^2.0.0",
+ "@libp2p/peer-id": "^1.1.10",
+ "@multiformats/multiaddr": "^11.0.0",
+ "change-case": "^4.1.1",
+ "err-code": "^3.0.1",
+ "ipfs-core-types": "^0.13.0",
+ "ipfs-core-utils": "^0.17.0",
+ "ipfs-grpc-protocol": "^0.7.0",
+ "ipfs-unixfs": "^8.0.0",
+ "it-first": "^2.0.0",
+ "it-pushable": "^3.0.0",
+ "multiformats": "^10.0.0",
+ "p-defer": "^4.0.0",
+ "protobufjs": "^7.0.0",
+ "uint8arrays": "^4.0.2",
+ "wherearewe": "^2.0.1",
+ "ws": "^8.5.0"
+ }
+ },
+ "ipfs-grpc-protocol": {
+ "version": "0.7.0",
+ "dev": true
+ },
+ "ipfs-http-client": {
+ "version": "59.0.0",
+ "dev": true,
+ "requires": {
+ "@ipld/dag-cbor": "^8.0.0",
+ "@ipld/dag-json": "^9.0.0",
+ "@ipld/dag-pb": "^3.0.0",
+ "@libp2p/logger": "^2.0.0",
+ "@libp2p/peer-id": "^1.1.10",
+ "@multiformats/multiaddr": "^11.0.0",
+ "any-signal": "^3.0.0",
+ "dag-jose": "^3.0.1",
+ "err-code": "^3.0.1",
+ "ipfs-core-types": "^0.13.0",
+ "ipfs-core-utils": "^0.17.0",
+ "ipfs-utils": "^9.0.6",
+ "it-first": "^2.0.0",
+ "it-last": "^2.0.0",
+ "merge-options": "^3.0.4",
+ "multiformats": "^10.0.0",
+ "parse-duration": "^1.0.0",
+ "stream-to-it": "^0.2.2",
+ "uint8arrays": "^4.0.2"
+ }
+ },
+ "ipfs-unixfs": {
+ "version": "8.0.0",
+ "dev": true,
+ "requires": {
+ "err-code": "^3.0.1",
+ "protobufjs": "^7.0.0"
+ }
+ },
+ "ipfs-utils": {
+ "version": "9.0.14",
+ "dev": true,
+ "requires": {
+ "any-signal": "^3.0.0",
+ "browser-readablestream-to-it": "^1.0.0",
+ "buffer": "^6.0.1",
+ "electron-fetch": "^1.7.2",
+ "err-code": "^3.0.1",
+ "is-electron": "^2.2.0",
+ "iso-url": "^1.1.5",
+ "it-all": "^1.0.4",
+ "it-glob": "^1.0.1",
+ "it-to-stream": "^1.0.0",
+ "merge-options": "^3.0.4",
+ "nanoid": "^3.1.20",
+ "native-fetch": "^3.0.0",
+ "node-fetch": "^2.6.8",
+ "react-native-fetch-api": "^3.0.0",
+ "stream-to-it": "^0.2.2"
+ },
+ "dependencies": {
+ "browser-readablestream-to-it": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "buffer": {
+ "version": "6.0.3",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "it-all": {
+ "version": "1.0.6",
+ "dev": true
+ },
+ "native-fetch": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {}
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-alphabetical": {
+ "version": "1.0.4",
+ "dev": true
+ },
+ "is-alphanumerical": {
+ "version": "1.0.4",
+ "dev": true,
+ "requires": {
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ }
+ },
+ "is-array-buffer": {
+ "version": "3.0.4",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1"
+ },
+ "is-bigint": {
+ "version": "1.0.4",
+ "dev": true,
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-boolean-object": {
+ "version": "1.1.2",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "3.2.1",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^3.3.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "dev": true
+ },
+ "is-core-module": {
+ "version": "2.12.1",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-view": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-typed-array": "^1.1.13"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.5",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-decimal": {
+ "version": "1.0.4",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-docker": {
+ "version": "2.2.1",
+ "dev": true
+ },
+ "is-electron": {
+ "version": "2.2.2",
+ "dev": true
+ },
+ "is-expression": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.1.1",
+ "object-assign": "^4.1.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1"
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0"
+ },
+ "is-generator-function": {
+ "version": "1.0.10",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-interactive": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "is-json": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "is-lambda": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "is-module": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "is-negative-zero": {
+ "version": "2.0.3",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0"
+ },
+ "is-number-like": {
+ "version": "1.0.8",
+ "dev": true,
+ "requires": {
+ "lodash.isfinite": "^3.3.2"
+ }
+ },
+ "is-number-object": {
+ "version": "1.0.7",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-obj": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "is-path-inside": {
+ "version": "3.0.3",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "5.0.0"
+ },
+ "is-promise": {
+ "version": "2.2.2",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.3",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7"
+ }
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-subdir": {
+ "version": "1.2.0",
+ "dev": true,
+ "requires": {
+ "better-path-resolve": "1.0.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.4",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "is-text-path": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "text-extensions": "^1.0.0"
+ }
+ },
+ "is-typed-array": {
+ "version": "1.1.13",
+ "dev": true,
+ "requires": {
+ "which-typed-array": "^1.1.14"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "is-unicode-supported": {
+ "version": "1.3.0",
+ "dev": true
+ },
+ "is-weakref": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "2.2.0",
+ "dev": true,
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "isbinaryfile": {
+ "version": "5.0.2",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0"
+ },
+ "iso-639-1": {
+ "version": "2.1.15",
+ "dev": true
+ },
+ "iso-url": {
+ "version": "1.2.1",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "dev": true
+ },
+ "istanbul-lib-coverage": {
+ "version": "3.2.2",
+ "dev": true
+ },
+ "istanbul-lib-report": {
+ "version": "3.0.1",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^4.0.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "istanbul-reports": {
+ "version": "3.1.7",
+ "dev": true,
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "it-all": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "it-first": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "it-glob": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "^3.0.4",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "it-last": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "it-map": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "it-peekable": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "it-pushable": {
+ "version": "3.1.3",
+ "dev": true
+ },
+ "it-stream-types": {
+ "version": "1.0.5",
+ "dev": true
+ },
+ "it-to-stream": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "buffer": "^6.0.3",
+ "fast-fifo": "^1.0.0",
+ "get-iterator": "^1.0.2",
+ "p-defer": "^3.0.0",
+ "p-fifo": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "dependencies": {
+ "buffer": {
+ "version": "6.0.3",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "p-defer": {
+ "version": "3.0.0",
+ "dev": true
+ }
+ }
+ },
+ "jackspeak": {
+ "version": "2.3.6",
+ "dev": true,
+ "requires": {
+ "@isaacs/cliui": "^8.0.2",
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "jake": {
+ "version": "10.8.7",
+ "dev": true,
+ "requires": {
+ "async": "^3.2.3",
+ "chalk": "^4.0.2",
+ "filelist": "^1.0.4",
+ "minimatch": "^3.1.2"
+ }
+ },
+ "jiti": {
+ "version": "1.21.0",
+ "dev": true
+ },
+ "jpeg-js": {
+ "version": "0.4.4",
+ "dev": true,
+ "peer": true
+ },
+ "js-library-detector": {
+ "version": "6.7.0",
+ "dev": true,
+ "peer": true
+ },
+ "js-stringify": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0"
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "1.0.10",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "dev": true
+ }
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "dev": true
+ },
+ "jsdoc-type-pratt-parser": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "dev": true
+ },
+ "json-buffer": {
+ "version": "3.0.1",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1"
+ },
+ "json-schema": {
+ "version": "0.4.0",
+ "dev": true
+ },
+ "json-schema-migrate": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "ajv": "^8.0.0"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0"
+ },
+ "json-stable-stringify": {
+ "version": "1.1.1",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.5",
+ "isarray": "^2.0.5",
+ "jsonify": "^0.0.1",
+ "object-keys": "^1.1.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.5",
+ "dev": true
+ }
+ }
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "dev": true
+ },
+ "json2xml": {
+ "version": "0.1.3",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.2.3",
+ "dev": true
+ },
+ "jsonc-eslint-parser": {
+ "version": "2.4.0",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.5.0",
+ "eslint-visitor-keys": "^3.0.0",
+ "espree": "^9.0.0",
+ "semver": "^7.3.5"
+ }
+ },
+ "jsonc-parser": {
+ "version": "3.2.0",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.1",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.5",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.2",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ }
+ }
+ },
+ "jstransformer": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.0.0",
+ "promise": "^7.0.1"
+ }
+ },
+ "junk": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "just-extend": {
+ "version": "6.2.0",
+ "dev": true
+ },
+ "keygrip": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "tsscmp": "1.0.6"
+ }
+ },
+ "keyv": {
+ "version": "4.5.4",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3"
+ },
+ "klaw-sync": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11"
+ }
+ },
+ "kleur": {
+ "version": "4.1.5",
+ "dev": true
+ },
+ "known-css-properties": {
+ "version": "0.27.0"
+ },
+ "koa": {
+ "version": "2.15.2",
+ "dev": true,
+ "requires": {
+ "accepts": "^1.3.5",
+ "cache-content-type": "^1.0.0",
+ "content-disposition": "~0.5.2",
+ "content-type": "^1.0.4",
+ "cookies": "~0.9.0",
+ "debug": "^4.3.2",
+ "delegates": "^1.0.0",
+ "depd": "^2.0.0",
+ "destroy": "^1.0.4",
+ "encodeurl": "^1.0.2",
+ "escape-html": "^1.0.3",
+ "fresh": "~0.5.2",
+ "http-assert": "^1.3.0",
+ "http-errors": "^1.6.3",
+ "is-generator-function": "^1.0.7",
+ "koa-compose": "^4.1.0",
+ "koa-convert": "^2.0.0",
+ "on-finished": "^2.3.0",
+ "only": "~0.0.2",
+ "parseurl": "^1.3.2",
+ "statuses": "^1.5.0",
+ "type-is": "^1.6.16",
+ "vary": "^1.1.2"
+ },
+ "dependencies": {
+ "http-errors": {
+ "version": "1.8.1",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.1"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "dev": true
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "dev": true
+ }
+ }
+ },
+ "koa-compose": {
+ "version": "4.1.0",
+ "dev": true
+ },
+ "koa-convert": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0",
+ "koa-compose": "^4.1.0"
+ }
+ },
+ "koa-etag": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "etag": "^1.8.1"
+ }
+ },
+ "koa-send": {
+ "version": "5.0.1",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "http-errors": "^1.7.3",
+ "resolve-path": "^1.4.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.8.1",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.1"
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "dev": true
+ }
+ }
+ },
+ "koa-static": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0",
+ "koa-send": "^5.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "language-subtag-registry": {
+ "version": "0.3.22",
+ "dev": true
+ },
+ "language-tags": {
+ "version": "1.0.9",
+ "dev": true,
+ "requires": {
+ "language-subtag-registry": "^0.3.20"
+ }
+ },
+ "leasot": {
+ "version": "13.3.0",
+ "dev": true,
+ "requires": {
+ "async": "^3.2.4",
+ "chalk": "^5.0.1",
+ "commander": "^9.4.0",
+ "eol": "^0.9.1",
+ "get-stdin": "^9.0.0",
+ "globby": "^13.1.2",
+ "json2xml": "^0.1.3",
+ "lodash": "^4.17.21",
+ "log-symbols": "^5.1.0",
+ "strip-ansi": "^7.0.1",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "6.0.1",
+ "dev": true
+ },
+ "chalk": {
+ "version": "5.2.0",
+ "dev": true
+ },
+ "commander": {
+ "version": "9.5.0",
+ "dev": true
+ },
+ "globby": {
+ "version": "13.1.4",
+ "dev": true,
+ "requires": {
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.11",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ }
+ },
+ "slash": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ }
+ }
+ },
+ "leven": {
+ "version": "3.1.0",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.4.1",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lighthouse": {
+ "version": "11.7.0",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@paulirish/trace_engine": "^0.0.12",
+ "@sentry/node": "^6.17.4",
+ "axe-core": "^4.8.4",
+ "chrome-launcher": "^1.1.1",
+ "configstore": "^5.0.1",
+ "csp_evaluator": "1.1.1",
+ "devtools-protocol": "0.0.1232444",
+ "enquirer": "^2.3.6",
+ "http-link-header": "^1.1.1",
+ "intl-messageformat": "^10.5.3",
+ "jpeg-js": "^0.4.4",
+ "js-library-detector": "^6.7.0",
+ "lighthouse-logger": "^2.0.1",
+ "lighthouse-stack-packs": "1.12.1",
+ "lodash": "^4.17.21",
+ "lookup-closest-locale": "6.2.0",
+ "metaviewport-parser": "0.3.0",
+ "open": "^8.4.0",
+ "parse-cache-control": "1.0.1",
+ "ps-list": "^8.0.0",
+ "puppeteer-core": "^22.5.0",
+ "robots-parser": "^3.0.1",
+ "semver": "^5.3.0",
+ "speedline-core": "^1.4.3",
+ "third-party-web": "^0.24.1",
+ "tldts-icann": "^6.1.0",
+ "ws": "^7.0.0",
+ "yargs": "^17.3.1",
+ "yargs-parser": "^21.0.0"
+ },
+ "dependencies": {
+ "chrome-launcher": {
+ "version": "1.1.1",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@types/node": "*",
+ "escape-string-regexp": "^4.0.0",
+ "is-wsl": "^2.2.0",
+ "lighthouse-logger": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "lighthouse-logger": {
+ "version": "2.0.1",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "debug": "^2.6.9",
+ "marky": "^1.2.2"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true,
+ "peer": true
+ },
+ "semver": {
+ "version": "5.7.2",
+ "dev": true,
+ "peer": true
+ },
+ "ws": {
+ "version": "7.5.9",
+ "dev": true,
+ "peer": true,
+ "requires": {}
+ }
+ }
+ },
+ "lighthouse-logger": {
+ "version": "1.4.2",
+ "dev": true,
+ "requires": {
+ "debug": "^2.6.9",
+ "marky": "^1.2.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ }
+ }
+ },
+ "lighthouse-stack-packs": {
+ "version": "1.12.1",
+ "dev": true,
+ "peer": true
+ },
+ "lilconfig": {
+ "version": "2.1.0",
+ "dev": true
+ },
+ "limiter": {
+ "version": "1.1.5",
+ "dev": true
+ },
+ "lines-and-columns": {
+ "version": "1.2.4"
+ },
+ "linkedom": {
+ "version": "0.14.26",
+ "requires": {
+ "css-select": "^5.1.0",
+ "cssom": "^0.5.0",
+ "html-escaper": "^3.0.3",
+ "htmlparser2": "^8.0.1",
+ "uhyphen": "^0.2.0"
+ },
+ "dependencies": {
+ "dom-serializer": {
+ "version": "2.0.0",
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ }
+ },
+ "domhandler": {
+ "version": "5.0.3",
+ "requires": {
+ "domelementtype": "^2.3.0"
+ }
+ },
+ "domutils": {
+ "version": "3.1.0",
+ "requires": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ }
+ },
+ "html-escaper": {
+ "version": "3.0.3"
+ },
+ "htmlparser2": {
+ "version": "8.0.2",
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "entities": "^4.4.0"
+ }
+ }
+ }
+ },
+ "linkify-it": {
+ "version": "4.0.1",
+ "dev": true,
+ "requires": {
+ "uc.micro": "^1.0.1"
+ }
+ },
+ "liquidjs": {
+ "version": "10.7.1",
+ "dev": true,
+ "requires": {
+ "commander": "^10.0.0"
+ }
+ },
+ "list-to-array": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "lit": {
+ "version": "3.1.3",
+ "requires": {
+ "@lit/reactive-element": "^2.0.4",
+ "lit-element": "^4.0.4",
+ "lit-html": "^3.1.2"
+ },
+ "dependencies": {
+ "lit-html": {
+ "version": "3.1.2",
+ "requires": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ }
+ }
+ },
+ "lit-analyzer": {
+ "version": "2.0.3",
+ "dev": true,
+ "requires": {
+ "@vscode/web-custom-data": "^0.4.2",
+ "chalk": "^2.4.2",
+ "didyoumean2": "4.1.0",
+ "fast-glob": "^3.2.11",
+ "parse5": "5.1.0",
+ "ts-simple-type": "~2.0.0-next.0",
+ "vscode-css-languageservice": "4.3.0",
+ "vscode-html-languageservice": "3.1.0",
+ "web-component-analyzer": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true
+ },
+ "parse5": {
+ "version": "5.1.0",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "lit-element": {
+ "version": "4.0.4",
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.2.0",
+ "@lit/reactive-element": "^2.0.4",
+ "lit-html": "^3.1.2"
+ },
+ "dependencies": {
+ "lit-html": {
+ "version": "3.1.2",
+ "requires": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ }
+ }
+ },
+ "lit-html": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "parse-json": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "dev": true
+ }
+ }
+ },
+ "load-module": {
+ "version": "4.2.1",
+ "dev": true,
+ "requires": {
+ "array-back": "^6.2.0"
+ }
+ },
+ "load-yaml-file": {
+ "version": "0.2.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.5",
+ "js-yaml": "^3.13.0",
+ "pify": "^4.0.1",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "4.0.1",
+ "dev": true
+ }
+ }
+ },
+ "localtunnel": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "axios": "0.21.4",
+ "debug": "4.3.2",
+ "openurl": "1.1.1",
+ "yargs": "17.1.1"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "7.0.4",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.2",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "dev": true
+ },
+ "yargs": {
+ "version": "17.1.1",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "dev": true
+ }
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "dev": true
+ },
+ "lodash.assignwith": {
+ "version": "4.2.0",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "dev": true
+ },
+ "lodash.deburr": {
+ "version": "4.1.0",
+ "dev": true
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "dev": true
+ },
+ "lodash.isfinite": {
+ "version": "3.3.2",
+ "dev": true
+ },
+ "lodash.ismatch": {
+ "version": "4.4.0",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "dev": true
+ },
+ "lodash.kebabcase": {
+ "version": "4.1.1",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "dev": true
+ },
+ "lodash.mergewith": {
+ "version": "4.6.2",
+ "dev": true
+ },
+ "lodash.snakecase": {
+ "version": "4.1.1",
+ "dev": true
+ },
+ "lodash.startcase": {
+ "version": "4.4.0",
+ "dev": true
+ },
+ "lodash.truncate": {
+ "version": "4.4.2"
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "dev": true
+ },
+ "lodash.upperfirst": {
+ "version": "4.3.1",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {
+ "chalk": "^5.0.0",
+ "is-unicode-supported": "^1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "5.2.0",
+ "dev": true
+ }
+ }
+ },
+ "log-update": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "long": {
+ "version": "5.2.3",
+ "dev": true
+ },
+ "lookup-closest-locale": {
+ "version": "6.2.0",
+ "dev": true,
+ "peer": true
+ },
+ "lower-case": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "lowercase-keys": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "lru_map": {
+ "version": "0.3.3",
+ "dev": true,
+ "peer": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "luxon": {
+ "version": "3.3.0",
+ "dev": true
+ },
+ "magic-string": {
+ "version": "0.27.0",
+ "dev": true,
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.4.13"
+ }
+ },
+ "make-dir": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "semver": "^7.5.3"
+ }
+ },
+ "make-fetch-happen": {
+ "version": "8.0.14",
+ "dev": true,
+ "requires": {
+ "agentkeepalive": "^4.1.3",
+ "cacache": "^15.0.5",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.3",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^1.3.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^5.0.0",
+ "ssri": "^8.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "4.3.0"
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "markdown-it": {
+ "version": "13.0.1",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1",
+ "entities": "~3.0.1",
+ "linkify-it": "^4.0.1",
+ "mdurl": "^1.0.1",
+ "uc.micro": "^1.0.5"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "3.0.1",
+ "dev": true
+ }
+ }
+ },
+ "markdown-it-anchor": {
+ "version": "8.6.7",
+ "dev": true,
+ "requires": {}
+ },
+ "markdown-it-attrs": {
+ "version": "4.1.6",
+ "dev": true,
+ "requires": {}
+ },
+ "markdownlint": {
+ "version": "0.29.0",
+ "dev": true,
+ "requires": {
+ "markdown-it": "13.0.1",
+ "markdownlint-micromark": "0.1.5"
+ }
+ },
+ "markdownlint-cli2": {
+ "version": "0.8.1",
+ "dev": true,
+ "requires": {
+ "globby": "13.1.4",
+ "markdownlint": "0.29.0",
+ "markdownlint-cli2-formatter-default": "0.0.4",
+ "micromatch": "4.0.5",
+ "strip-json-comments": "5.0.0",
+ "yaml": "2.3.1"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "13.1.4",
+ "dev": true,
+ "requires": {
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.11",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ }
+ },
+ "slash": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "5.0.0",
+ "dev": true
+ }
+ }
+ },
+ "markdownlint-cli2-formatter-default": {
+ "version": "0.0.4",
+ "dev": true,
+ "requires": {}
+ },
+ "markdownlint-micromark": {
+ "version": "0.1.5",
+ "dev": true
+ },
+ "marky": {
+ "version": "1.2.5",
+ "dev": true
+ },
+ "mathml-tag-names": {
+ "version": "2.1.3"
+ },
+ "maximatch": {
+ "version": "0.1.0",
+ "dev": true,
+ "requires": {
+ "array-differ": "^1.0.0",
+ "array-union": "^1.0.1",
+ "arrify": "^1.0.0",
+ "minimatch": "^3.0.0"
+ },
+ "dependencies": {
+ "array-differ": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "dev": true
+ }
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.30"
+ },
+ "mdurl": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "dev": true
+ },
+ "meow": {
+ "version": "6.1.1",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "^4.0.2",
+ "normalize-package-data": "^2.5.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.13.1",
+ "yargs-parser": "^18.1.3"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "semver": {
+ "version": "5.7.2",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.13.1",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "merge-options": {
+ "version": "3.0.4",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^2.1.0"
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "merge2": {
+ "version": "1.4.1"
+ },
+ "metaviewport-parser": {
+ "version": "0.3.0",
+ "dev": true,
+ "peer": true
+ },
+ "methods": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mime": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "dev": true
+ },
+ "mimic-response": {
+ "version": "3.1.0",
+ "dev": true
+ },
+ "min-indent": {
+ "version": "1.0.1"
+ },
+ "minify-html-literals": {
+ "version": "1.3.5",
+ "dev": true,
+ "requires": {
+ "@types/html-minifier": "^3.5.3",
+ "clean-css": "^4.2.1",
+ "html-minifier": "^4.0.0",
+ "magic-string": "^0.25.0",
+ "parse-literals": "^1.2.1"
+ },
+ "dependencies": {
+ "clean-css": {
+ "version": "4.2.4",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.6.0"
+ }
+ },
+ "magic-string": {
+ "version": "0.25.9",
+ "dev": true,
+ "requires": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "dev": true
+ }
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.8",
+ "dev": true
+ },
+ "minimist-options": {
+ "version": "4.1.0",
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ },
+ "dependencies": {
+ "arrify": {
+ "version": "1.0.1"
+ },
+ "is-plain-obj": {
+ "version": "1.1.0"
+ }
+ }
+ },
+ "minipass": {
+ "version": "3.3.6",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "minipass-collect": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-fetch": {
+ "version": "1.4.1",
+ "dev": true,
+ "requires": {
+ "encoding": "^0.1.12",
+ "minipass": "^3.1.0",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.0.0"
+ }
+ },
+ "minipass-flush": {
+ "version": "1.0.5",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-pipeline": {
+ "version": "1.2.4",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-sized": {
+ "version": "1.0.3",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "2.1.2",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "mitt": {
+ "version": "3.0.1",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ }
+ }
+ },
+ "mixme": {
+ "version": "0.5.9",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "dev": true
+ },
+ "mkdirp-classic": {
+ "version": "0.5.3",
+ "dev": true
+ },
+ "modify-values": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "moo": {
+ "version": "0.5.2",
+ "dev": true
+ },
+ "morphdom": {
+ "version": "2.7.0",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.3",
+ "dev": true
+ },
+ "multiformats": {
+ "version": "10.0.3",
+ "dev": true
+ },
+ "multimatch": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "^3.0.3",
+ "array-differ": "^3.0.0",
+ "array-union": "^2.1.0",
+ "arrify": "^2.0.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "mustache": {
+ "version": "4.2.0",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.8",
+ "dev": true
+ },
+ "nanocolors": {
+ "version": "0.2.13",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "3.3.7"
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ }
+ }
+ },
+ "napi-build-utils": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "native-fetch": {
+ "version": "4.0.2",
+ "dev": true,
+ "requires": {}
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "dev": true
+ },
+ "ncp": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.3",
+ "dev": true
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "dev": true
+ },
+ "netmask": {
+ "version": "2.0.2",
+ "dev": true
+ },
+ "nise": {
+ "version": "5.1.9",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^3.0.0",
+ "@sinonjs/fake-timers": "^11.2.2",
+ "@sinonjs/text-encoding": "^0.7.2",
+ "just-extend": "^6.2.0",
+ "path-to-regexp": "^6.2.1"
+ },
+ "dependencies": {
+ "@sinonjs/fake-timers": {
+ "version": "11.2.2",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^3.0.0"
+ }
+ }
+ }
+ },
+ "no-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "requires": {
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node-abi": {
+ "version": "3.40.0",
+ "dev": true,
+ "requires": {
+ "semver": "^7.3.5"
+ }
+ },
+ "node-addon-api": {
+ "version": "6.1.0",
+ "dev": true
+ },
+ "node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+ "dev": true
+ },
+ "node-fetch": {
+ "version": "2.6.11",
+ "dev": true,
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ },
+ "dependencies": {
+ "tr46": {
+ "version": "0.0.3",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ }
+ }
+ },
+ "node-releases": {
+ "version": "2.0.14",
+ "dev": true
+ },
+ "nodesi": {
+ "version": "1.17.0",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3",
+ "good-guy-http": "1.14.0",
+ "he": "1.2.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.3",
+ "dev": true
+ }
+ }
+ },
+ "normalize-package-data": {
+ "version": "3.0.3",
+ "requires": {
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0"
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "6.1.0",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "5.3.0",
+ "dev": true,
+ "requires": {
+ "path-key": "^4.0.0"
+ },
+ "dependencies": {
+ "path-key": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "nth-check": {
+ "version": "2.1.1",
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
+ "nunjucks": {
+ "version": "3.2.4",
+ "dev": true,
+ "requires": {
+ "a-sync-waterfall": "^1.0.0",
+ "asap": "^2.0.3",
+ "commander": "^5.1.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "5.1.0",
+ "dev": true
+ }
+ }
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-inspect": {
+ "version": "1.13.1",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.5",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "on-finished": {
+ "version": "2.4.1",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "only": {
+ "version": "0.0.2",
+ "dev": true
+ },
+ "open": {
+ "version": "8.4.2",
+ "dev": true,
+ "requires": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ }
+ },
+ "openurl": {
+ "version": "1.1.1",
+ "dev": true
+ },
+ "opn": {
+ "version": "5.5.0",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ },
+ "dependencies": {
+ "is-wsl": {
+ "version": "1.1.0",
+ "dev": true
+ }
+ }
+ },
+ "optionator": {
+ "version": "0.9.3",
+ "dev": true,
+ "requires": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ }
+ },
+ "ora": {
+ "version": "5.4.1",
+ "dev": true,
+ "requires": {
+ "bl": "^4.1.0",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-spinners": "^2.5.0",
+ "is-interactive": "^1.0.0",
+ "is-unicode-supported": "^0.1.0",
+ "log-symbols": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "wcwidth": "^1.0.1"
+ },
+ "dependencies": {
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ }
+ }
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "outdent": {
+ "version": "0.5.0",
+ "dev": true
+ },
+ "p-cancelable": {
+ "version": "2.1.1",
+ "dev": true
+ },
+ "p-defer": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "p-fifo": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "fast-fifo": "^1.0.0",
+ "p-defer": "^3.0.0"
+ },
+ "dependencies": {
+ "p-defer": {
+ "version": "3.0.0",
+ "dev": true
+ }
+ }
+ },
+ "p-filter": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "p-map": "^2.0.0"
+ },
+ "dependencies": {
+ "p-map": {
+ "version": "2.1.0",
+ "dev": true
+ }
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "requires": {
+ "p-limit": "^3.0.2"
+ },
+ "dependencies": {
+ "p-limit": {
+ "version": "3.1.0",
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ }
+ }
+ },
+ "p-map": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-queue": {
+ "version": "6.6.2",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^4.0.4",
+ "p-timeout": "^3.2.0"
+ }
+ },
+ "p-timeout": {
+ "version": "3.2.0",
+ "dev": true,
+ "requires": {
+ "p-finally": "^1.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "dev": true
+ },
+ "pac-proxy-agent": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4",
+ "get-uri": "3",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "5",
+ "pac-resolver": "^5.0.0",
+ "raw-body": "^2.2.0",
+ "socks-proxy-agent": "5"
+ }
+ },
+ "pac-resolver": {
+ "version": "5.0.1",
+ "dev": true,
+ "requires": {
+ "degenerator": "^3.0.2",
+ "ip": "^1.1.5",
+ "netmask": "^2.0.2"
+ }
+ },
+ "param-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "requires": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "dev": true,
+ "peer": true
+ },
+ "parse-duration": {
+ "version": "1.0.3",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "parse-literals": {
+ "version": "1.2.1",
+ "dev": true,
+ "requires": {
+ "typescript": "^2.9.2 || ^3.0.0 || ^4.0.0"
+ },
+ "dependencies": {
+ "typescript": {
+ "version": "4.9.5",
+ "dev": true
+ }
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "parse-srcset": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "parse5": {
+ "version": "7.1.2",
+ "dev": true,
+ "requires": {
+ "entities": "^4.4.0"
+ }
+ },
+ "parse5-htmlparser2-tree-adapter": {
+ "version": "7.0.0",
+ "dev": true,
+ "requires": {
+ "domhandler": "^5.0.2",
+ "parse5": "^7.0.0"
+ },
+ "dependencies": {
+ "domhandler": {
+ "version": "5.0.3",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.3.0"
+ }
+ }
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "dev": true
+ },
+ "pascal-case": {
+ "version": "3.1.2",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "dev": true
+ },
+ "patch-package": {
+ "version": "8.0.0",
+ "dev": true,
+ "requires": {
+ "@yarnpkg/lockfile": "^1.1.0",
+ "chalk": "^4.1.2",
+ "ci-info": "^3.7.0",
+ "cross-spawn": "^7.0.3",
+ "find-yarn-workspace-root": "^2.0.0",
+ "fs-extra": "^9.0.0",
+ "json-stable-stringify": "^1.0.2",
+ "klaw-sync": "^6.0.0",
+ "minimist": "^1.2.6",
+ "open": "^7.4.2",
+ "rimraf": "^2.6.3",
+ "semver": "^7.5.3",
+ "slash": "^2.0.0",
+ "tmp": "^0.0.33",
+ "yaml": "^2.2.2"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "9.1.0",
+ "dev": true,
+ "requires": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "open": {
+ "version": "7.4.2",
+ "dev": true,
+ "requires": {
+ "is-docker": "^2.0.0",
+ "is-wsl": "^2.1.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "slash": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "universalify": {
+ "version": "2.0.1",
+ "dev": true
+ }
+ }
+ },
+ "path-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "requires": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0"
+ },
+ "path-is-absolute": {
+ "version": "1.0.1"
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "dev": true
+ },
+ "path-scurry": {
+ "version": "1.10.2",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "10.2.0",
+ "dev": true
+ },
+ "minipass": {
+ "version": "6.0.2",
+ "dev": true
+ }
+ }
+ },
+ "path-to-regexp": {
+ "version": "6.2.1",
+ "dev": true
+ },
+ "path-type": {
+ "version": "4.0.0"
+ },
+ "pend": {
+ "version": "1.2.0",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "1.0.0"
+ },
+ "picomatch": {
+ "version": "2.3.1"
+ },
+ "pify": {
+ "version": "2.3.0",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ }
+ }
+ },
+ "playground-elements": {
+ "version": "0.18.1",
+ "dev": true,
+ "requires": {
+ "@material/mwc-button": "^0.27.0",
+ "@material/mwc-icon-button": "^0.27.0",
+ "@material/mwc-linear-progress": "^0.27.0",
+ "@material/mwc-list": "^0.27.0",
+ "@material/mwc-menu": "^0.27.0",
+ "@material/mwc-textfield": "^0.27.0",
+ "@types/codemirror": "^5.60.0",
+ "comlink": "=4.3.1",
+ "fuse.js": "^6.4.6",
+ "lit": "^2.0.0",
+ "tslib": "^2.0.3",
+ "vscode-languageserver-protocol": "^3.17.2"
+ },
+ "dependencies": {
+ "@lit/reactive-element": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.0.0"
+ }
+ },
+ "lit": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@lit/reactive-element": "^1.6.0",
+ "lit-element": "^3.3.0",
+ "lit-html": "^2.8.0"
+ }
+ },
+ "lit-element": {
+ "version": "3.3.3",
+ "dev": true,
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.0",
+ "@lit/reactive-element": "^1.3.0",
+ "lit-html": "^2.8.0"
+ }
+ }
+ }
+ },
+ "playwright": {
+ "version": "1.43.1",
+ "dev": true,
+ "requires": {
+ "fsevents": "2.3.2",
+ "playwright-core": "1.43.1"
+ }
+ },
+ "playwright-core": {
+ "version": "1.43.1",
+ "dev": true
+ },
+ "playwright-lighthouse": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.2",
+ "ua-parser-js": "^1.0.2"
+ }
+ },
+ "please-upgrade-node": {
+ "version": "3.2.0",
+ "dev": true,
+ "requires": {
+ "semver-compare": "^1.0.0"
+ }
+ },
+ "pluralize": {
+ "version": "8.0.0",
+ "dev": true
+ },
+ "portfinder": {
+ "version": "1.0.32",
+ "dev": true,
+ "requires": {
+ "async": "^2.6.4",
+ "debug": "^3.2.7",
+ "mkdirp": "^0.5.6"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.4",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "debug": {
+ "version": "3.2.7",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.6",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.6"
+ }
+ }
+ }
+ },
+ "portscanner": {
+ "version": "2.1.1",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "is-number-like": "^1.0.3"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "dev": true
+ }
+ }
+ },
+ "porty": {
+ "version": "3.1.1",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "dev": true
+ },
+ "possible-typed-array-names": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.4.38",
+ "requires": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "postcss-calc": {
+ "version": "8.2.4",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.9",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-colormin": {
+ "version": "5.3.1",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.21.4",
+ "caniuse-api": "^3.0.0",
+ "colord": "^2.9.1",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "5.1.3",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.21.4",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "5.1.2",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-discard-duplicates": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-discard-empty": {
+ "version": "5.1.1",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-discard-overridden": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-media-query-parser": {
+ "version": "0.2.3",
+ "dev": true
+ },
+ "postcss-merge-longhand": {
+ "version": "5.1.7",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0",
+ "stylehacks": "^5.1.1"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "5.1.4",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.21.4",
+ "caniuse-api": "^3.0.0",
+ "cssnano-utils": "^3.1.0",
+ "postcss-selector-parser": "^6.0.5"
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "5.1.1",
+ "dev": true,
+ "requires": {
+ "colord": "^2.9.1",
+ "cssnano-utils": "^3.1.0",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "5.1.4",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.21.4",
+ "cssnano-utils": "^3.1.0",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "5.2.1",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.5"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-normalize-display-values": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "5.1.1",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "5.1.1",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "5.1.1",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.21.4",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {
+ "normalize-url": "^6.0.1",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "5.1.1",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "5.1.3",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^3.1.0",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-pxtorem": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-reduce-initial": {
+ "version": "5.1.2",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.21.4",
+ "caniuse-api": "^3.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "postcss-resolve-nested-selector": {
+ "version": "0.1.1"
+ },
+ "postcss-safe-parser": {
+ "version": "6.0.0",
+ "requires": {}
+ },
+ "postcss-scss": {
+ "version": "4.0.6",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.16",
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-svgo": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.2.0",
+ "svgo": "^2.7.0"
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "5.1.1",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.5"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.2.0"
+ },
+ "posthtml": {
+ "version": "0.16.6",
+ "dev": true,
+ "requires": {
+ "posthtml-parser": "^0.11.0",
+ "posthtml-render": "^3.0.0"
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.11.0",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^7.1.1"
+ }
+ },
+ "posthtml-render": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "is-json": "^2.0.1"
+ }
+ },
+ "posthtml-urls": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "http-equiv-refresh": "^1.0.0",
+ "list-to-array": "^1.1.0",
+ "parse-srcset": "^1.0.2",
+ "promise-each": "^2.2.0"
+ }
+ },
+ "prebuild-install": {
+ "version": "7.1.1",
+ "dev": true,
+ "requires": {
+ "detect-libc": "^2.0.0",
+ "expand-template": "^2.0.3",
+ "github-from-package": "0.0.0",
+ "minimist": "^1.2.3",
+ "mkdirp-classic": "^0.5.3",
+ "napi-build-utils": "^1.0.1",
+ "node-abi": "^3.3.0",
+ "pump": "^3.0.0",
+ "rc": "^1.2.7",
+ "simple-get": "^4.0.0",
+ "tar-fs": "^2.0.0",
+ "tunnel-agent": "^0.6.0"
+ }
+ },
+ "preferred-pm": {
+ "version": "3.1.3",
+ "dev": true,
+ "requires": {
+ "find-up": "^5.0.0",
+ "find-yarn-workspace-root2": "1.2.16",
+ "path-exists": "^4.0.0",
+ "which-pm": "2.0.0"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "dev": true
+ },
+ "prettier": {
+ "version": "2.8.8",
+ "dev": true
+ },
+ "print-colors": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "printj": {
+ "version": "1.3.1",
+ "dev": true
+ },
+ "prismjs": {
+ "version": "1.29.0"
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.3",
+ "dev": true
+ },
+ "promise": {
+ "version": "7.3.1",
+ "dev": true,
+ "requires": {
+ "asap": "~2.0.3"
+ }
+ },
+ "promise-each": {
+ "version": "2.2.0",
+ "dev": true,
+ "requires": {
+ "any-promise": "^0.1.0"
+ }
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "promise-retry": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ },
+ "dependencies": {
+ "err-code": {
+ "version": "2.0.3",
+ "dev": true
+ }
+ }
+ },
+ "prompts": {
+ "version": "2.4.2",
+ "dev": true,
+ "requires": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "dependencies": {
+ "kleur": {
+ "version": "3.0.3",
+ "dev": true
+ }
+ }
+ },
+ "proper-lockfile": {
+ "version": "4.1.2",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.4",
+ "retry": "^0.12.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "protobufjs": {
+ "version": "7.2.3",
+ "dev": true,
+ "requires": {
+ "@protobufjs/aspromise": "^1.1.2",
+ "@protobufjs/base64": "^1.1.2",
+ "@protobufjs/codegen": "^2.0.4",
+ "@protobufjs/eventemitter": "^1.1.0",
+ "@protobufjs/fetch": "^1.1.0",
+ "@protobufjs/float": "^1.0.2",
+ "@protobufjs/inquire": "^1.1.0",
+ "@protobufjs/path": "^1.1.2",
+ "@protobufjs/pool": "^1.1.0",
+ "@protobufjs/utf8": "^1.1.0",
+ "@types/node": ">=13.7.0",
+ "long": "^5.0.0"
+ }
+ },
+ "proxy-agent": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "agent-base": "^6.0.0",
+ "debug": "4",
+ "http-proxy-agent": "^4.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "lru-cache": "^5.1.1",
+ "pac-proxy-agent": "^5.0.0",
+ "proxy-from-env": "^1.0.0",
+ "socks-proxy-agent": "^5.0.0"
+ }
+ },
+ "proxy-from-env": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "prr": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "ps-list": {
+ "version": "8.1.1",
+ "dev": true,
+ "peer": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "pug": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "pug-code-gen": "^3.0.2",
+ "pug-filters": "^4.0.0",
+ "pug-lexer": "^5.0.1",
+ "pug-linker": "^4.0.0",
+ "pug-load": "^3.0.0",
+ "pug-parser": "^6.0.0",
+ "pug-runtime": "^3.0.1",
+ "pug-strip-comments": "^2.0.0"
+ }
+ },
+ "pug-attrs": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "constantinople": "^4.0.1",
+ "js-stringify": "^1.0.2",
+ "pug-runtime": "^3.0.0"
+ }
+ },
+ "pug-code-gen": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "constantinople": "^4.0.1",
+ "doctypes": "^1.1.0",
+ "js-stringify": "^1.0.2",
+ "pug-attrs": "^3.0.0",
+ "pug-error": "^2.0.0",
+ "pug-runtime": "^3.0.0",
+ "void-elements": "^3.1.0",
+ "with": "^7.0.0"
+ }
+ },
+ "pug-error": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "pug-filters": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "constantinople": "^4.0.1",
+ "jstransformer": "1.0.0",
+ "pug-error": "^2.0.0",
+ "pug-walk": "^2.0.0",
+ "resolve": "^1.15.1"
+ }
+ },
+ "pug-lexer": {
+ "version": "5.0.1",
+ "dev": true,
+ "requires": {
+ "character-parser": "^2.2.0",
+ "is-expression": "^4.0.0",
+ "pug-error": "^2.0.0"
+ }
+ },
+ "pug-linker": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "pug-error": "^2.0.0",
+ "pug-walk": "^2.0.0"
+ }
+ },
+ "pug-load": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1",
+ "pug-walk": "^2.0.0"
+ }
+ },
+ "pug-parser": {
+ "version": "6.0.0",
+ "dev": true,
+ "requires": {
+ "pug-error": "^2.0.0",
+ "token-stream": "1.0.0"
+ }
+ },
+ "pug-runtime": {
+ "version": "3.0.1",
+ "dev": true
+ },
+ "pug-strip-comments": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "pug-error": "^2.0.0"
+ }
+ },
+ "pug-walk": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "punycode": {
+ "version": "2.3.0"
+ },
+ "puppeteer-core": {
+ "version": "22.6.2",
+ "dev": true,
+ "requires": {
+ "@puppeteer/browsers": "2.2.0",
+ "chromium-bidi": "0.5.16",
+ "debug": "4.3.4",
+ "devtools-protocol": "0.0.1262051",
+ "ws": "8.16.0"
+ },
+ "dependencies": {
+ "devtools-protocol": {
+ "version": "0.0.1262051",
+ "dev": true
+ }
+ }
+ },
+ "pwa-helpers": {
+ "version": "0.9.1",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.12.0",
+ "dev": true,
+ "requires": {
+ "side-channel": "^1.0.6"
+ }
+ },
+ "queue": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.3"
+ }
+ },
+ "queue-microtask": {
+ "version": "1.2.3"
+ },
+ "queue-tick": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "quick-lru": {
+ "version": "4.0.1",
+ "dev": true
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.5.2",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.1.2",
+ "dev": true
+ }
+ }
+ },
+ "rc": {
+ "version": "1.2.8",
+ "dev": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "ini": {
+ "version": "1.3.8",
+ "dev": true
+ }
+ }
+ },
+ "react-native-fetch-api": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "p-defer": "^3.0.0"
+ },
+ "dependencies": {
+ "p-defer": {
+ "version": "3.0.0",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.6.0",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "dev": true
+ }
+ }
+ },
+ "read-yaml-file": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.5",
+ "js-yaml": "^3.6.1",
+ "pify": "^4.0.1",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "4.0.1",
+ "dev": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.2",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "receptacle": {
+ "version": "1.3.2",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "recursive-copy": {
+ "version": "2.0.14",
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.2",
+ "graceful-fs": "^4.1.4",
+ "junk": "^1.0.1",
+ "maximatch": "^0.1.0",
+ "mkdirp": "^0.5.1",
+ "pify": "^2.3.0",
+ "promise": "^7.0.1",
+ "rimraf": "^2.7.1",
+ "slash": "^1.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.6",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.6"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "slash": {
+ "version": "1.0.0",
+ "dev": true
+ }
+ }
+ },
+ "redent": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ }
+ },
+ "reduce-flatten": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.14.1",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ }
+ }
+ },
+ "regexp-tree": {
+ "version": "0.1.27",
+ "dev": true
+ },
+ "regexp.prototype.flags": {
+ "version": "1.5.2",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.6",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.1"
+ }
+ },
+ "regjsparser": {
+ "version": "0.10.0",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "dev": true
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "dev": true
+ },
+ "renamer": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "array-back": "^6.2.0",
+ "chalk": "^4.1.2",
+ "command-line-args": "^5.2.0",
+ "command-line-usage": "^6.1.1",
+ "current-module-paths": "^1.1.0",
+ "fast-diff": "^1.2.0",
+ "file-set": "^5.1.2",
+ "global-dirs": "^3.0.0",
+ "load-module": "^4.2.1",
+ "printj": "^1.3.0",
+ "stream-read-all": "^3.0.1",
+ "typical": "^7.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.2.1",
+ "dev": true,
+ "requires": {
+ "array-back": "^3.1.0",
+ "find-replace": "^3.0.0",
+ "lodash.camelcase": "^4.3.0",
+ "typical": "^4.0.0"
+ },
+ "dependencies": {
+ "array-back": {
+ "version": "3.1.0",
+ "dev": true
+ },
+ "typical": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "command-line-usage": {
+ "version": "6.1.3",
+ "dev": true,
+ "requires": {
+ "array-back": "^4.0.2",
+ "chalk": "^2.4.2",
+ "table-layout": "^1.0.2",
+ "typical": "^5.2.0"
+ },
+ "dependencies": {
+ "array-back": {
+ "version": "4.0.2",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "typical": {
+ "version": "5.2.0",
+ "dev": true
+ }
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "array-back": "^4.0.1",
+ "deep-extend": "~0.6.0",
+ "typical": "^5.2.0",
+ "wordwrapjs": "^4.0.0"
+ },
+ "dependencies": {
+ "array-back": {
+ "version": "4.0.2",
+ "dev": true
+ },
+ "typical": {
+ "version": "5.2.0",
+ "dev": true
+ }
+ }
+ },
+ "typical": {
+ "version": "7.1.1",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "4.0.1",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "^2.0.0",
+ "typical": "^5.2.0"
+ },
+ "dependencies": {
+ "typical": {
+ "version": "5.2.0",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.4",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "dev": true
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "dev": true
+ },
+ "require-from-string": {
+ "version": "2.0.2"
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "requireindex": {
+ "version": "1.2.0",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.22.2",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.11.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-alpn": {
+ "version": "1.2.1",
+ "dev": true
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0"
+ },
+ "resolve-path": {
+ "version": "1.4.0",
+ "dev": true,
+ "requires": {
+ "http-errors": "~1.6.2",
+ "path-is-absolute": "1.0.1"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "dev": true
+ }
+ }
+ },
+ "resolve-pkg-maps": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "dev": true
+ },
+ "resp-modifier": {
+ "version": "6.0.2",
+ "dev": true,
+ "requires": {
+ "debug": "^2.2.0",
+ "minimatch": "^3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ }
+ }
+ },
+ "responselike": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "lowercase-keys": "^2.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "dev": true
+ },
+ "retimer": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "retry": {
+ "version": "0.12.0",
+ "dev": true
+ },
+ "reusify": {
+ "version": "1.0.4"
+ },
+ "rimraf": {
+ "version": "4.4.1",
+ "dev": true,
+ "requires": {
+ "glob": "^9.2.0"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "9.3.5",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "minimatch": "^8.0.2",
+ "minipass": "^4.2.4",
+ "path-scurry": "^1.6.1"
+ }
+ },
+ "minimatch": {
+ "version": "8.0.4",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "minipass": {
+ "version": "4.2.8",
+ "dev": true
+ }
+ }
+ },
+ "robots-parser": {
+ "version": "3.0.1",
+ "dev": true,
+ "peer": true
+ },
+ "rollup": {
+ "version": "2.79.1",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "rollup-plugin-lit-css": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "@pwrs/lit-css": "^3.0.0",
+ "@rollup/pluginutils": "^5.1.0"
+ }
+ },
+ "run-async": {
+ "version": "2.4.1",
+ "dev": true
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "rx": {
+ "version": "4.1.0",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "7.8.1",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "safe-array-concat": {
+ "version": "1.1.2",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.5",
+ "dev": true
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "dev": true
+ },
+ "safe-regex-test": {
+ "version": "1.0.3",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.1.4"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "dev": true
+ },
+ "sass": {
+ "version": "1.45.2",
+ "dev": true,
+ "requires": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ }
+ },
+ "section-matter": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "kind-of": "^6.0.0"
+ }
+ },
+ "semver": {
+ "version": "7.6.0",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "6.0.0",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0"
+ }
+ }
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "send": {
+ "version": "0.16.2",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.0",
+ "statuses": "~1.4.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "depd": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.4.1",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "dev": true
+ }
+ }
+ },
+ "sentence-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3",
+ "upper-case-first": "^2.0.2"
+ }
+ },
+ "serve-index": {
+ "version": "1.9.1",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.6.2",
+ "mime-types": "~2.1.17",
+ "parseurl": "~1.3.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "depd": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "dev": true
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.14.1",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ }
+ }
+ },
+ "depd": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.7.3",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.1",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "send": {
+ "version": "0.17.1",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "dev": true
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "dev": true
+ }
+ }
+ },
+ "server-destroy": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "set-function-length": {
+ "version": "1.2.2",
+ "dev": true,
+ "requires": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ }
+ },
+ "set-function-name": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ }
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.2.0",
+ "dev": true
+ },
+ "sharp": {
+ "version": "0.32.1",
+ "dev": true,
+ "requires": {
+ "color": "^4.2.3",
+ "detect-libc": "^2.0.1",
+ "node-addon-api": "^6.1.0",
+ "prebuild-install": "^7.1.1",
+ "semver": "^7.5.0",
+ "simple-get": "^4.0.1",
+ "tar-fs": "^2.1.1",
+ "tunnel-agent": "^0.6.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "side-channel": {
+ "version": "1.0.6",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "dev": true
+ },
+ "simple-concat": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "simple-get": {
+ "version": "4.0.1",
+ "dev": true,
+ "requires": {
+ "decompress-response": "^6.0.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.3.2",
+ "dev": true
+ }
+ }
+ },
+ "sinon": {
+ "version": "15.1.0",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^3.0.0",
+ "@sinonjs/fake-timers": "^10.2.0",
+ "@sinonjs/samsam": "^8.0.0",
+ "diff": "^5.1.0",
+ "nise": "^5.1.4",
+ "supports-color": "^7.2.0"
+ }
+ },
+ "sisteransi": {
+ "version": "1.0.5",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0"
+ },
+ "slice-ansi": {
+ "version": "4.0.0",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ }
+ },
+ "slugify": {
+ "version": "1.6.6",
+ "dev": true
+ },
+ "smart-buffer": {
+ "version": "4.2.0",
+ "dev": true
+ },
+ "smartwrap": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "array.prototype.flat": "^1.2.3",
+ "breakword": "^1.0.5",
+ "grapheme-splitter": "^1.0.4",
+ "strip-ansi": "^6.0.0",
+ "wcwidth": "^1.0.1",
+ "yargs": "^15.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "dev": true
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "yargs": {
+ "version": "15.4.1",
+ "dev": true,
+ "requires": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "snake-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "requires": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "socket.io": {
+ "version": "4.6.2",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "base64id": "~2.0.0",
+ "debug": "~4.3.2",
+ "engine.io": "~6.4.2",
+ "socket.io-adapter": "~2.5.2",
+ "socket.io-parser": "~4.2.4"
+ }
+ },
+ "socket.io-adapter": {
+ "version": "2.5.2",
+ "dev": true,
+ "requires": {
+ "ws": "~8.11.0"
+ },
+ "dependencies": {
+ "ws": {
+ "version": "8.11.0",
+ "dev": true,
+ "requires": {}
+ }
+ }
+ },
+ "socket.io-client": {
+ "version": "4.6.2",
+ "dev": true,
+ "requires": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.3.2",
+ "engine.io-client": "~6.4.0",
+ "socket.io-parser": "~4.2.4"
+ }
+ },
+ "socket.io-parser": {
+ "version": "4.2.4",
+ "dev": true,
+ "requires": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.3.1"
+ }
+ },
+ "socks": {
+ "version": "2.7.1",
+ "dev": true,
+ "requires": {
+ "ip": "^2.0.0",
+ "smart-buffer": "^4.2.0"
+ },
+ "dependencies": {
+ "ip": {
+ "version": "2.0.0",
+ "dev": true
+ }
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "5.0.1",
+ "dev": true,
+ "requires": {
+ "agent-base": "^6.0.2",
+ "debug": "4",
+ "socks": "^2.3.3"
+ }
+ },
+ "source-map": {
+ "version": "0.7.4",
+ "dev": true
+ },
+ "source-map-js": {
+ "version": "1.2.0"
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.1",
+ "dev": true
+ },
+ "sourcemap-codec": {
+ "version": "1.4.8",
+ "dev": true
+ },
+ "spandx": {
+ "version": "2.2.5",
+ "dev": true,
+ "requires": {
+ "browser-sync": "2.27.9",
+ "connect": "3.7.0",
+ "conventional-changelog-cli": "2.1.1",
+ "finalhandler": "1.1.2",
+ "got": "11.8.2",
+ "hostile": "1.3.3",
+ "http-proxy": "1.17.0",
+ "https-proxy-agent": "5.0.0",
+ "inquirer": "8.1.5",
+ "lodash": "4.17.21",
+ "nodesi": "1.17.0",
+ "opn": "5.5.0",
+ "porty": "3.1.1",
+ "print-colors": "1.0.1",
+ "proxy-agent": "5.0.0",
+ "serve-static": "1.14.1",
+ "transformer-proxy": "0.3.5",
+ "yargs": "17.1.1"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "7.0.4",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "https-proxy-agent": {
+ "version": "5.0.0",
+ "dev": true,
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "dev": true
+ },
+ "yargs": {
+ "version": "17.1.1",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "dev": true
+ }
+ }
+ },
+ "spawndamnit": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "dev": true
+ }
+ }
+ },
+ "spdx-correct": {
+ "version": "3.2.0",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0"
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.13"
+ },
+ "speedline-core": {
+ "version": "1.4.3",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@types/node": "*",
+ "image-ssim": "^0.2.0",
+ "jpeg-js": "^0.4.1"
+ }
+ },
+ "split": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "through": "2"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ }
+ }
+ },
+ "split2": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^3.0.0"
+ }
+ },
+ "sshpk": {
+ "version": "1.17.0",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "ssri": {
+ "version": "8.0.1",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.1.1"
+ }
+ },
+ "stable": {
+ "version": "0.1.8",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "dev": true
+ }
+ }
+ },
+ "statuses": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "stream": {
+ "version": "0.0.2",
+ "dev": true,
+ "requires": {
+ "emitter-component": "^1.1.1"
+ }
+ },
+ "stream-read-all": {
+ "version": "3.0.1",
+ "dev": true
+ },
+ "stream-throttle": {
+ "version": "0.1.3",
+ "dev": true,
+ "requires": {
+ "commander": "^2.2.0",
+ "limiter": "^1.0.5"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.20.3",
+ "dev": true
+ }
+ }
+ },
+ "stream-to-it": {
+ "version": "0.2.4",
+ "dev": true,
+ "requires": {
+ "get-iterator": "^1.0.2"
+ }
+ },
+ "stream-transform": {
+ "version": "2.1.3",
+ "dev": true,
+ "requires": {
+ "mixme": "^0.5.1"
+ }
+ },
+ "streamsearch": {
+ "version": "1.1.0",
+ "dev": true
+ },
+ "streamx": {
+ "version": "2.16.1",
+ "dev": true,
+ "requires": {
+ "bare-events": "^2.2.0",
+ "fast-fifo": "^1.1.0",
+ "queue-tick": "^1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "string-width-cjs": {
+ "version": "npm:string-width@4.2.3",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "string.prototype.trim": {
+ "version": "1.2.9",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-object-atoms": "^1.0.0"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.8",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.8",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-ansi-cjs": {
+ "version": "npm:strip-ansi@6.0.1",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "strip-bom-string": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "strip-color": {
+ "version": "0.1.0",
+ "dev": true
+ },
+ "strip-final-newline": {
+ "version": "3.0.0",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "min-indent": "^1.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "style-search": {
+ "version": "0.1.0"
+ },
+ "stylehacks": {
+ "version": "5.1.1",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.21.4",
+ "postcss-selector-parser": "^6.0.4"
+ }
+ },
+ "stylelint": {
+ "version": "15.10.2",
+ "requires": {
+ "@csstools/css-parser-algorithms": "^2.3.0",
+ "@csstools/css-tokenizer": "^2.1.1",
+ "@csstools/media-query-list-parser": "^2.1.2",
+ "@csstools/selector-specificity": "^3.0.0",
+ "balanced-match": "^2.0.0",
+ "colord": "^2.9.3",
+ "cosmiconfig": "^8.2.0",
+ "css-functions-list": "^3.2.0",
+ "css-tree": "^2.3.1",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.0",
+ "fastest-levenshtein": "^1.0.16",
+ "file-entry-cache": "^6.0.1",
+ "global-modules": "^2.0.0",
+ "globby": "^11.1.0",
+ "globjoin": "^0.1.4",
+ "html-tags": "^3.3.1",
+ "ignore": "^5.2.4",
+ "import-lazy": "^4.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-plain-object": "^5.0.0",
+ "known-css-properties": "^0.27.0",
+ "mathml-tag-names": "^2.1.3",
+ "meow": "^10.1.5",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.25",
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-safe-parser": "^6.0.0",
+ "postcss-selector-parser": "^6.0.13",
+ "postcss-value-parser": "^4.2.0",
+ "resolve-from": "^5.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "style-search": "^0.1.0",
+ "supports-hyperlinks": "^3.0.0",
+ "svg-tags": "^1.0.0",
+ "table": "^6.8.1",
+ "write-file-atomic": "^5.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "2.0.0"
+ },
+ "camelcase-keys": {
+ "version": "7.0.2",
+ "requires": {
+ "camelcase": "^6.3.0",
+ "map-obj": "^4.1.0",
+ "quick-lru": "^5.1.1",
+ "type-fest": "^1.2.1"
+ }
+ },
+ "decamelize": {
+ "version": "5.0.1"
+ },
+ "global-modules": {
+ "version": "2.0.0",
+ "requires": {
+ "global-prefix": "^3.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "3.0.0",
+ "requires": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ }
+ },
+ "globby": {
+ "version": "11.1.0",
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "5.0.0"
+ },
+ "ini": {
+ "version": "1.3.8"
+ },
+ "meow": {
+ "version": "10.1.5",
+ "requires": {
+ "@types/minimist": "^1.2.2",
+ "camelcase-keys": "^7.0.0",
+ "decamelize": "^5.0.0",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.2",
+ "read-pkg-up": "^8.0.0",
+ "redent": "^4.0.0",
+ "trim-newlines": "^4.0.2",
+ "type-fest": "^1.2.2",
+ "yargs-parser": "^20.2.9"
+ }
+ },
+ "quick-lru": {
+ "version": "5.1.1"
+ },
+ "read-pkg": {
+ "version": "6.0.0",
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^3.0.2",
+ "parse-json": "^5.2.0",
+ "type-fest": "^1.0.1"
+ }
+ },
+ "read-pkg-up": {
+ "version": "8.0.0",
+ "requires": {
+ "find-up": "^5.0.0",
+ "read-pkg": "^6.0.0",
+ "type-fest": "^1.0.1"
+ }
+ },
+ "redent": {
+ "version": "4.0.0",
+ "requires": {
+ "indent-string": "^5.0.0",
+ "strip-indent": "^4.0.0"
+ }
+ },
+ "strip-indent": {
+ "version": "4.0.0",
+ "requires": {
+ "min-indent": "^1.0.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "4.1.1"
+ },
+ "type-fest": {
+ "version": "1.4.0"
+ },
+ "which": {
+ "version": "1.3.1",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9"
+ }
+ }
+ },
+ "stylelint-config-recommended": {
+ "version": "11.0.0",
+ "dev": true,
+ "requires": {}
+ },
+ "stylelint-config-recommended-scss": {
+ "version": "9.0.1",
+ "dev": true,
+ "requires": {
+ "postcss-scss": "^4.0.2",
+ "stylelint-config-recommended": "^10.0.1",
+ "stylelint-scss": "^4.4.0"
+ },
+ "dependencies": {
+ "stylelint-config-recommended": {
+ "version": "10.0.1",
+ "dev": true,
+ "requires": {}
+ }
+ }
+ },
+ "stylelint-config-standard": {
+ "version": "31.0.0",
+ "dev": true,
+ "requires": {
+ "stylelint-config-recommended": "^11.0.0"
+ }
+ },
+ "stylelint-config-standard-scss": {
+ "version": "7.0.1",
+ "dev": true,
+ "requires": {
+ "stylelint-config-recommended-scss": "^9.0.0",
+ "stylelint-config-standard": "^30.0.1"
+ },
+ "dependencies": {
+ "stylelint-config-recommended": {
+ "version": "10.0.1",
+ "dev": true,
+ "requires": {}
+ },
+ "stylelint-config-standard": {
+ "version": "30.0.1",
+ "dev": true,
+ "requires": {
+ "stylelint-config-recommended": "^10.0.1"
+ }
+ }
+ }
+ },
+ "stylelint-scss": {
+ "version": "4.7.0",
+ "dev": true,
+ "requires": {
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-selector-parser": "^6.0.11",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "stylelint-stylistic": {
+ "version": "0.4.5",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^5.0.0",
+ "postcss": "^8.4.21",
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-value-parser": "^4.2.0",
+ "style-search": "^0.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "requires": {
+ "has-flag": "^4.0.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "4.0.0"
+ }
+ }
+ },
+ "supports-hyperlinks": {
+ "version": "3.0.0",
+ "requires": {
+ "has-flag": "^4.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "4.0.0"
+ }
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "sver": {
+ "version": "1.8.4",
+ "dev": true,
+ "requires": {
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "svg-tags": {
+ "version": "1.0.0"
+ },
+ "svgo": {
+ "version": "2.8.0",
+ "dev": true,
+ "requires": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^4.1.3",
+ "css-tree": "^1.1.3",
+ "csso": "^4.2.0",
+ "picocolors": "^1.0.0",
+ "stable": "^0.1.8"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "7.2.0",
+ "dev": true
+ },
+ "css-select": {
+ "version": "4.3.0",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.0.1",
+ "domhandler": "^4.3.1",
+ "domutils": "^2.8.0",
+ "nth-check": "^2.0.1"
+ }
+ },
+ "css-tree": {
+ "version": "1.1.3",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.14",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "dev": true
+ }
+ }
+ },
+ "synckit": {
+ "version": "0.9.0",
+ "dev": true,
+ "requires": {
+ "@pkgr/core": "^0.1.0",
+ "tslib": "^2.6.2"
+ }
+ },
+ "table": {
+ "version": "6.8.1",
+ "requires": {
+ "ajv": "^8.0.1",
+ "lodash.truncate": "^4.4.2",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "table-layout": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "@75lb/deep-merge": "^1.1.1",
+ "array-back": "^6.2.2",
+ "command-line-args": "^5.2.1",
+ "command-line-usage": "^7.0.0",
+ "stream-read-all": "^3.0.1",
+ "typical": "^7.1.1",
+ "wordwrapjs": "^5.1.0"
+ },
+ "dependencies": {
+ "command-line-args": {
+ "version": "5.2.1",
+ "dev": true,
+ "requires": {
+ "array-back": "^3.1.0",
+ "find-replace": "^3.0.0",
+ "lodash.camelcase": "^4.3.0",
+ "typical": "^4.0.0"
+ },
+ "dependencies": {
+ "array-back": {
+ "version": "3.1.0",
+ "dev": true
+ },
+ "typical": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "typical": {
+ "version": "7.1.1",
+ "dev": true
+ }
+ }
+ },
+ "tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true
+ },
+ "tar": {
+ "version": "6.1.15",
+ "dev": true,
+ "requires": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^5.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "minipass": {
+ "version": "5.0.0",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "dev": true
+ }
+ }
+ },
+ "tar-fs": {
+ "version": "2.1.1",
+ "dev": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ },
+ "dependencies": {
+ "chownr": {
+ "version": "1.1.4",
+ "dev": true
+ }
+ }
+ },
+ "tar-stream": {
+ "version": "2.2.0",
+ "dev": true,
+ "requires": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "temp-dir": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "tempfile": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "temp-dir": "^2.0.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "term-size": {
+ "version": "2.2.1",
+ "dev": true
+ },
+ "text-extensions": {
+ "version": "1.9.0",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "dev": true
+ },
+ "tfunk": {
+ "version": "4.0.0",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "dlv": "^1.1.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "dev": true
+ }
+ }
+ },
+ "third-party-web": {
+ "version": "0.24.2",
+ "dev": true,
+ "peer": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "dev": true
+ },
+ "through2": {
+ "version": "4.0.2",
+ "dev": true,
+ "requires": {
+ "readable-stream": "3"
+ }
+ },
+ "timeout-abort-controller": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "retimer": "^3.0.0"
+ }
+ },
+ "tldts-core": {
+ "version": "6.1.16",
+ "dev": true,
+ "peer": true
+ },
+ "tldts-icann": {
+ "version": "6.1.16",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "tldts-core": "^6.1.16"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ }
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "token-stream": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "toml-eslint-parser": {
+ "version": "0.9.3",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.0.0"
+ }
+ },
+ "tr46": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.1"
+ }
+ },
+ "transformer-proxy": {
+ "version": "0.3.5",
+ "dev": true,
+ "requires": {
+ "promise": "^7.0.4",
+ "stream": "0.0.2",
+ "util": "^0.10.3"
+ }
+ },
+ "trim-newlines": {
+ "version": "3.0.1",
+ "dev": true
+ },
+ "ts-api-utils": {
+ "version": "1.3.0",
+ "dev": true,
+ "requires": {}
+ },
+ "ts-lit-plugin": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "lit-analyzer": "^2.0.1",
+ "web-component-analyzer": "^2.0.0"
+ }
+ },
+ "ts-patch": {
+ "version": "3.1.2",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.2",
+ "global-prefix": "^3.0.0",
+ "minimist": "^1.2.8",
+ "resolve": "^1.22.2",
+ "semver": "^7.5.4",
+ "strip-ansi": "^6.0.1"
+ },
+ "dependencies": {
+ "global-prefix": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ }
+ },
+ "ini": {
+ "version": "1.3.8",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "ts-simple-type": {
+ "version": "2.0.0-next.0",
+ "dev": true
+ },
+ "tslib": {
+ "version": "2.6.2"
+ },
+ "tsscmp": {
+ "version": "1.0.6",
+ "dev": true
+ },
+ "tty-table": {
+ "version": "4.2.3",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.2",
+ "csv": "^5.5.3",
+ "kleur": "^4.1.5",
+ "smartwrap": "^2.0.2",
+ "strip-ansi": "^6.0.1",
+ "wcwidth": "^1.0.1",
+ "yargs": "^17.7.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typed-array-buffer": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
+ }
+ },
+ "typed-array-byte-length": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ }
+ },
+ "typed-array-byte-offset": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ }
+ },
+ "typed-array-length": {
+ "version": "1.0.6",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ }
+ },
+ "typedarray-to-buffer": {
+ "version": "3.1.5",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "is-typedarray": "^1.0.0"
+ }
+ },
+ "typescript": {
+ "version": "5.4.5",
+ "dev": true
+ },
+ "typescript-eslint": {
+ "version": "7.7.0",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/eslint-plugin": "7.7.0",
+ "@typescript-eslint/parser": "7.7.0",
+ "@typescript-eslint/utils": "7.7.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": {
+ "version": "7.7.0",
+ "dev": true,
+ "requires": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "7.7.0",
+ "@typescript-eslint/type-utils": "7.7.0",
+ "@typescript-eslint/utils": "7.7.0",
+ "@typescript-eslint/visitor-keys": "7.7.0",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
+ "natural-compare": "^1.4.0",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^1.3.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/type-utils": {
+ "version": "7.7.0",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/typescript-estree": "7.7.0",
+ "@typescript-eslint/utils": "7.7.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.3.0"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "7.7.0",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "7.7.0",
+ "@typescript-eslint/types": "7.7.0",
+ "@typescript-eslint/typescript-estree": "7.7.0",
+ "@typescript-eslint/visitor-keys": "7.7.0",
+ "debug": "^4.3.4"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "7.7.0",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "7.7.0",
+ "@typescript-eslint/visitor-keys": "7.7.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "7.7.0",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "7.7.0",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "7.7.0",
+ "@typescript-eslint/visitor-keys": "7.7.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^1.3.0"
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "7.7.0",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.15",
+ "@types/semver": "^7.5.8",
+ "@typescript-eslint/scope-manager": "7.7.0",
+ "@typescript-eslint/types": "7.7.0",
+ "@typescript-eslint/typescript-estree": "7.7.0",
+ "semver": "^7.6.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "7.7.0",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "7.7.0",
+ "eslint-visitor-keys": "^3.4.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "globby": {
+ "version": "11.1.0",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.4",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
+ }
+ },
+ "typical": {
+ "version": "4.0.0",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "1.0.37",
+ "dev": true
+ },
+ "uc.micro": {
+ "version": "1.0.6",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.17.4",
+ "dev": true
+ },
+ "uhyphen": {
+ "version": "0.2.0"
+ },
+ "uint8arraylist": {
+ "version": "2.4.3",
+ "dev": true,
+ "requires": {
+ "uint8arrays": "^4.0.2"
+ }
+ },
+ "uint8arrays": {
+ "version": "4.0.3",
+ "dev": true,
+ "requires": {
+ "multiformats": "^11.0.0"
+ },
+ "dependencies": {
+ "multiformats": {
+ "version": "11.0.2",
+ "dev": true
+ }
+ }
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ },
+ "unbzip2-stream": {
+ "version": "1.4.3",
+ "dev": true,
+ "requires": {
+ "buffer": "^5.2.1",
+ "through": "^2.3.8"
+ }
+ },
+ "underscore": {
+ "version": "1.12.1",
+ "dev": true
+ },
+ "undici": {
+ "version": "5.22.1",
+ "dev": true,
+ "requires": {
+ "busboy": "^1.6.0"
+ }
+ },
+ "undici-types": {
+ "version": "5.26.5",
+ "dev": true
+ },
+ "unicorn-magic": {
+ "version": "0.1.0",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "dev": true,
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unique-string": {
+ "version": "2.0.0",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "crypto-random-string": "^2.0.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "dev": true
+ }
+ }
+ },
+ "update-browserslist-db": {
+ "version": "1.0.13",
+ "dev": true,
+ "requires": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "upper-case": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "upper-case-first": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "dev": true
+ },
+ "urlpattern-polyfill": {
+ "version": "10.0.0",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.1",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.4",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2"
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "dev": true
+ },
+ "v8-to-istanbul": {
+ "version": "9.2.0",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^2.0.0"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "2.0.0",
+ "dev": true
+ }
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "varint": {
+ "version": "6.0.0",
+ "dev": true
+ },
+ "vary": {
+ "version": "1.1.2",
+ "dev": true
+ },
+ "vm2": {
+ "version": "3.9.19",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.7.0",
+ "acorn-walk": "^8.2.0"
+ }
+ },
+ "void-elements": {
+ "version": "3.1.0",
+ "dev": true
+ },
+ "vscode-css-languageservice": {
+ "version": "4.3.0",
+ "dev": true,
+ "requires": {
+ "vscode-languageserver-textdocument": "^1.0.1",
+ "vscode-languageserver-types": "3.16.0-next.2",
+ "vscode-nls": "^4.1.2",
+ "vscode-uri": "^2.1.2"
+ }
+ },
+ "vscode-html-languageservice": {
+ "version": "3.1.0",
+ "dev": true,
+ "requires": {
+ "vscode-languageserver-textdocument": "^1.0.1",
+ "vscode-languageserver-types": "3.16.0-next.2",
+ "vscode-nls": "^4.1.2",
+ "vscode-uri": "^2.1.2"
+ }
+ },
+ "vscode-jsonrpc": {
+ "version": "8.2.0",
+ "dev": true
+ },
+ "vscode-languageserver-protocol": {
+ "version": "3.17.5",
+ "dev": true,
+ "requires": {
+ "vscode-jsonrpc": "8.2.0",
+ "vscode-languageserver-types": "3.17.5"
+ },
+ "dependencies": {
+ "vscode-languageserver-types": {
+ "version": "3.17.5",
+ "dev": true
+ }
+ }
+ },
+ "vscode-languageserver-textdocument": {
+ "version": "1.0.11",
+ "dev": true
+ },
+ "vscode-languageserver-types": {
+ "version": "3.16.0-next.2",
+ "dev": true
+ },
+ "vscode-nls": {
+ "version": "4.1.2",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "2.1.2",
+ "dev": true
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "web-component-analyzer": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "fast-glob": "^3.2.2",
+ "ts-simple-type": "2.0.0-next.0",
+ "typescript": "~5.2.0",
+ "yargs": "^17.7.2"
+ },
+ "dependencies": {
+ "typescript": {
+ "version": "5.2.2",
+ "dev": true
+ }
+ }
+ },
+ "web-dev-server-plugin-lit-css": {
+ "version": "3.0.0",
+ "dev": true,
+ "requires": {
+ "@pwrs/lit-css": "^3.0.0",
+ "@rollup/pluginutils": "^5.1.0"
+ }
+ },
+ "web-streams-polyfill": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "7.0.0",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "11.0.0",
+ "dev": true,
+ "requires": {
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
+ }
+ },
+ "wherearewe": {
+ "version": "2.0.1",
+ "dev": true,
+ "requires": {
+ "is-electron": "^2.2.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-boxed-primitive": {
+ "version": "1.0.2",
+ "dev": true,
+ "requires": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ }
+ },
+ "which-module": {
+ "version": "2.0.1",
+ "dev": true
+ },
+ "which-pm": {
+ "version": "2.0.0",
+ "dev": true,
+ "requires": {
+ "load-yaml-file": "^0.2.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "which-typed-array": {
+ "version": "1.1.15",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ }
+ },
+ "wireit": {
+ "version": "0.9.5",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "chokidar": "^3.5.3",
+ "fast-glob": "^3.2.11",
+ "jsonc-parser": "^3.0.0",
+ "proper-lockfile": "^4.1.2"
+ }
+ },
+ "with": {
+ "version": "7.0.2",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.9.6",
+ "@babel/types": "^7.9.6",
+ "assert-never": "^1.2.1",
+ "babel-walk": "3.0.0-canary-5"
+ },
+ "dependencies": {
+ "babel-walk": {
+ "version": "3.0.0-canary-5",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.9.6"
+ }
+ }
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "5.1.0",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "wrap-ansi-cjs": {
+ "version": "npm:wrap-ansi@7.0.0",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2"
+ },
+ "write-file-atomic": {
+ "version": "5.0.1",
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^4.0.1"
+ },
+ "dependencies": {
+ "signal-exit": {
+ "version": "4.0.2"
+ }
+ }
+ },
+ "ws": {
+ "version": "8.16.0",
+ "dev": true,
+ "requires": {}
+ },
+ "xdg-basedir": {
+ "version": "4.0.0",
+ "dev": true,
+ "peer": true
+ },
+ "xml": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "xmlhttprequest-ssl": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "xregexp": {
+ "version": "2.0.0",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "dev": true
+ },
+ "y18n": {
+ "version": "4.0.3",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "dev": true
+ },
+ "yaml": {
+ "version": "2.3.1",
+ "dev": true
+ },
+ "yaml-eslint-parser": {
+ "version": "1.2.2",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.0.0",
+ "lodash": "^4.17.21",
+ "yaml": "^2.0.0"
+ }
+ },
+ "yargs": {
+ "version": "17.7.2",
+ "dev": true,
+ "requires": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "8.0.1",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "21.1.1",
+ "dev": true
+ },
+ "yauzl": {
+ "version": "2.10.0",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "ylru": {
+ "version": "1.4.0",
+ "dev": true
+ },
+ "yocto-queue": {
+ "version": "0.1.0"
+ },
+ "zod": {
+ "version": "3.22.4",
+ "dev": true
+ }
}
}
diff --git a/package.json b/package.json
index 77b90738b3..c227a25c55 100644
--- a/package.json
+++ b/package.json
@@ -266,6 +266,7 @@
"@commitlint/cli": "^19.2.2",
"@commitlint/config-conventional": "^19.2.2",
"@jspm/generator": "^1.1.7",
+ "@lit-labs/eleventy-plugin-lit": "^1.0.3",
"@lit/reactive-element": "^2.0.4",
"@parse5/tools": "^0.3.0",
"@patternfly/create-element": "^1.0.2",
diff --git a/web-dev-server.config.js b/web-dev-server.config.js
index f3d9542dbe..d6761a4256 100644
--- a/web-dev-server.config.js
+++ b/web-dev-server.config.js
@@ -41,7 +41,7 @@ export default pfeDevServerConfig({
middleware: [
/** redirect requests for /assets/ css to /docs/assets/ */
function(ctx, next) {
- if (ctx.path.startsWith('/assets/')) {
+ if (ctx.path.startsWith('/styles/')) {
ctx.redirect(`/docs${ctx.path}`);
} else {
return next();