From 2897a3add19bae7501ed8128095d1571c73fe340 Mon Sep 17 00:00:00 2001 From: Mark Caron Date: Thu, 27 Jun 2024 13:56:06 -0400 Subject: [PATCH 01/20] docs(status-page): Fixing status table padding (#1674) --- docs/_plugins/shortcodes/repoStatus.cjs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/_plugins/shortcodes/repoStatus.cjs b/docs/_plugins/shortcodes/repoStatus.cjs index 9ded0972ff..b4233bfe65 100644 --- a/docs/_plugins/shortcodes/repoStatus.cjs +++ b/docs/_plugins/shortcodes/repoStatus.cjs @@ -164,11 +164,9 @@ function repoStatusTable() { ${elementsList.map(listItem => html` - - ${listItem.name} + ${listItem.name} ${listItem.overallStatus !== 'Available' ? - `${listItem.overallStatus}${STATUS_LEGEND[listItem.overallStatus].icon}` : ''} - + `${listItem.overallStatus}${STATUS_LEGEND[listItem.overallStatus].icon}` : ''} ${listItem.libraries.map(lib => html` From 3bc5964f8c12a69955fe4474c1020e4ad3f9a30a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benny=20Powers=20-=20=D7=A2=D7=9D=20=D7=99=D7=A9=D7=A8?= =?UTF-8?q?=D7=90=D7=9C=20=D7=97=D7=99!?= Date: Mon, 1 Jul 2024 18:58:25 +0300 Subject: [PATCH 02/20] docs: hide demos tab when there are none (#1684) --- docs/_includes/layouts/pages/elements.njk | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/_includes/layouts/pages/elements.njk b/docs/_includes/layouts/pages/elements.njk index a729c7defe..eaedf44f3e 100644 --- a/docs/_includes/layouts/pages/elements.njk +++ b/docs/_includes/layouts/pages/elements.njk @@ -54,8 +54,10 @@ eleventyComputed:
0 %}class="has-toc"{% endif %}>

{{ doc.alias or (slug | deslugify) }}

- {% for tab in doc.tabs %}{% if loop.last %} - {%- set demosUrl = ("/elements/" + slug + "/demos/") -%} + {%- set manifest = doc.docsPage.manifest -%} + {%- set demos = manifest and manifest.getDemos(doc.docsPage.tagName) -%} + {%- set demosUrl -%}/elements/{{ slug }}/demos/{%- endset -%} + {% for tab in doc.tabs %}{% if loop.last and demos.length %} Demos{% endif %} {{- tab.pageTitle | capitalize -}} From 603182e4ea865ec8d5af2e35d670e5306a54fe3b Mon Sep 17 00:00:00 2001 From: Marionne Patel <95588923+marionnegp@users.noreply.github.com> Date: Tue, 2 Jul 2024 10:47:51 -0400 Subject: [PATCH 03/20] docs(tile): fix light theme selected state image (#1683) --- elements/rh-tile/docs/10-style.md | 2 +- .../docs/tile-states-selected-light-theme.svg | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 elements/rh-tile/docs/tile-states-selected-light-theme.svg diff --git a/elements/rh-tile/docs/10-style.md b/elements/rh-tile/docs/10-style.md index 3711a72aab..f729338297 100644 --- a/elements/rh-tile/docs/10-style.md +++ b/elements/rh-tile/docs/10-style.md @@ -153,7 +153,7 @@ Only link tiles have an active state. Selectable tiles have a selected state ins Only a selectable tile has a selected state. A link tile has an active state instead. - When selected, the form input of light theme selectable tiles appears blue and filled or checked + When selected, the form input of light theme selectable tiles appears blue and filled or checked diff --git a/elements/rh-tile/docs/tile-states-selected-light-theme.svg b/elements/rh-tile/docs/tile-states-selected-light-theme.svg new file mode 100644 index 0000000000..77ae38d0fe --- /dev/null +++ b/elements/rh-tile/docs/tile-states-selected-light-theme.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + From e6a3668a51dedc584a936e8f7e437394fb6ce271 Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Wed, 3 Jul 2024 01:29:40 -0400 Subject: [PATCH 04/20] docs: fix base "View Fullscreen" link URL on element Demos pages (#1688) docs: fix "View Fullscreen" link URL on demo page --- docs/elements/demos.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/elements/demos.html b/docs/elements/demos.html index c9211b26c0..d4f92809f4 100644 --- a/docs/elements/demos.html +++ b/docs/elements/demos.html @@ -102,7 +102,7 @@ {% set extension = filename.split('.').pop() %} {% set demoSlug = filename.split('.').shift().replace('demo/', '').replaceAll('/', '-') %} {% set projectId %}playground-{{ element.tagName }}-{{ demoSlug }}{% endset %} - {% set demoPageUrl %}/elements/{{ slug }}/demo/{{ config.label | slugify }}/{% endset %} + {% set demoPageUrl %}/elements/{{ slug }}/demo/{%- if demoSlug !== 'index' -%}{{ config.label | slugify }}/{%- endif -%}{% endset %} {% set githubSourcePrefix %}https://github.com/RedHat-UX/red-hat-design-system/tree/main/elements{% endset %} {% set githubSourceUrl %}{{ githubSourcePrefix }}/{{ element.tagName }}/demo/{{ filename | replace('demo/', '') From c355d86f102c505179158aedab41a744d126bc62 Mon Sep 17 00:00:00 2001 From: Greg Gibson <642695+hellogreg@users.noreply.github.com> Date: Wed, 3 Jul 2024 10:16:46 -0500 Subject: [PATCH 05/20] docs: Added alt text to Typography page image (#1691) Added alt text to Style section image --- docs/foundations/typography.md | 93 +++++++++++++++++----------------- 1 file changed, 46 insertions(+), 47 deletions(-) diff --git a/docs/foundations/typography.md b/docs/foundations/typography.md index 269d4e15dc..4fa04eec54 100644 --- a/docs/foundations/typography.md +++ b/docs/foundations/typography.md @@ -9,6 +9,7 @@ importElements: - rh-blockquote - rh-table --- + {# see XD for reference: https://xd.adobe.com/view/c3387de7-c738-43be-aed2-d631e283dde4-966b #} @@ -68,31 +69,30 @@ importElements: -
## Overview - Typography organizes content and creates hierarchies. It brings consistency to experiences and extends the brand presence across web properties. +Typography organizes content and creates hierarchies. It brings consistency to experiences and extends the brand presence across web properties.
- ## Get started +## Get started - To get started using our fonts, visit our GitHub repo. +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. +## 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. - + artwork demonstrating Red Hat Display and Red Hat Text at different font weights
@@ -113,20 +113,20 @@ importElements:
- ## Text options +## Text options - ### Headline +### Headline - Headlines create various levels of content hierarchies. +Headlines create various levels of content hierarchies.

Red Hat Enterprise Linux

Conquer complexity with Red Hat Enterprise Linux 8

- ### Blockquote +### Blockquote - Blockquotes are emphasized blocks of text that include a quote icon and attribution. +Blockquotes are emphasized blocks of text that include a quote icon and attribution. @@ -134,11 +134,11 @@ importElements: John Smith Senior Director, Dev Ops, Acme Corporation - + - ### Title +### Title - Titles disclose extra information above headlines or other content. +Titles disclose extra information above headlines or other content.
@@ -147,9 +147,9 @@ importElements:
- ### Body copy +### Body copy - Body copy is a block of text that can include links or lists. +Body copy is a block of text that can include links or lists.
@@ -157,9 +157,9 @@ importElements:
- ### Code +### Code - Code is text that features a monospace font that can be used for coding purposes. +Code is text that features a monospace font that can be used for coding purposes.
@@ -171,19 +171,19 @@ for (i = (numElementsReturned - 1); i >= 0; i--) {
     
- ### 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. +### 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. +## 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 +### Desktop scale @@ -279,9 +279,9 @@ for (i = (numElementsReturned - 1); i >= 0; i--) {
- ### Mobile scale +### 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. +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. @@ -378,12 +378,11 @@ for (i = (numElementsReturned - 1); i >= 0; i--) { -
- ## Usage +## 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. +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.
@@ -456,15 +455,15 @@ for (i = (numElementsReturned - 1); i >= 0; i--) {
- ## Best practices - - Don't use Red Hat Text for headlines. +## Best practices + +Don't use Red Hat Text for headlines.

Red Hat and open source

- Don't use Red Hat Display for body copy. +Don't use Red Hat Display for body copy.
@@ -472,14 +471,14 @@ for (i = (numElementsReturned - 1); i >= 0; i--) {
- Don't space text styles too closely together. +Don't space text styles too closely together.

Linux platforms

Red Hat Enterprise Linux

- Don't stack lots of text styles too closely together. +Don't stack lots of text styles too closely together.

Headline, xl

@@ -492,19 +491,19 @@ for (i = (numElementsReturned - 1); i >= 0; i--) {
- ## Behavior - - ### Responsive design - - Text styles decrease in size when screens become smaller. This shift helps users consume content better without additional scrolling. +## Behavior - ### Desktop +### Responsive design + +Text styles decrease in size when screens become smaller. This shift helps users consume content better without additional scrolling. + +### Desktop Card typography scale on desktop - ### Mobile +### Mobile Card typography scale on mobile @@ -515,8 +514,8 @@ for (i = (numElementsReturned - 1); i >= 0; i--) { ## 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 - +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 +
From 77291af6f4c1142305cea243870774d8d33f4b6a Mon Sep 17 00:00:00 2001 From: Greg Gibson <642695+hellogreg@users.noreply.github.com> Date: Wed, 3 Jul 2024 15:16:24 -0500 Subject: [PATCH 06/20] docs: added coming soon section to popover docs (#1695) Added coming soon section to popover docs --- elements/rh-popover/docs/00-overview.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/elements/rh-popover/docs/00-overview.md b/elements/rh-popover/docs/00-overview.md index 2bfe98abf6..96cffb5a3c 100644 --- a/elements/rh-popover/docs/00-overview.md +++ b/elements/rh-popover/docs/00-overview.md @@ -1,7 +1,11 @@ +## Coming soon! + +This element is currently in progress and not yet available for use. + ## Overview -A Popover displays content in a non-modal dialog and adds contextual -information or provides resources via text and links. +A Popover displays content in a non-modal dialog and adds contextual +information or provides resources via text and links. ## Sample element From a5b51e6f8e772fbb8fe08216ad6bde0f89f30adb Mon Sep 17 00:00:00 2001 From: Greg Gibson <642695+hellogreg@users.noreply.github.com> Date: Wed, 3 Jul 2024 15:32:15 -0500 Subject: [PATCH 07/20] docs: add aria-labels to sample icons on status page (#1697) Added aria-labels to sample icons on status page Co-authored-by: Mark Caron --- docs/design-code-status/index.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/design-code-status/index.md b/docs/design-code-status/index.md index 0266fae180..16c0edc930 100644 --- a/docs/design-code-status/index.md +++ b/docs/design-code-status/index.md @@ -2,7 +2,7 @@ layout: layouts/pages/basic.njk title: Design/code status hasToc: true -importElements: +importElements: - rh-table - rh-tag --- @@ -11,9 +11,9 @@ importElements:
- ## Overview - - A detailed synopsis of our web components and their implementation status. +## Overview + +A detailed synopsis of our web components and their implementation status.
@@ -33,7 +33,7 @@ importElements: Planned - + @@ -56,7 +56,7 @@ importElements: In progress - + @@ -73,7 +73,7 @@ importElements: Ready - + @@ -87,7 +87,7 @@ importElements: Deprecated - + @@ -102,7 +102,7 @@ importElements: N/A - + @@ -121,11 +121,11 @@ importElements:
- ## Web component status +## Web component status - {% repoStatusTable %} +{% repoStatusTable %} -
+

Release notes

From 203f3d4115433e68f37f060f4ce7f3b11a04305b Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Tue, 9 Jul 2024 09:49:11 -0400 Subject: [PATCH 08/20] docs: elements > code > accordion + table layout tweaks (#1613) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: elements > code > accordion + table layout tweaks * docs: code table design revisions * docs: darken code table mobile/hover row color * docs: move Code page accordion + table CSS to its own file * docs: allow horizontal scrollbars on `rh-table` * docs: move `link` tag to new layout --------- Co-authored-by: Benny Powers - עם ישראל חי! --- docs/_includes/layouts/pages/elements.njk | 3 +++ docs/styles/pages/code.css | 26 +++++++++++++++++++++++ docs/styles/styles.css | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 docs/styles/pages/code.css diff --git a/docs/_includes/layouts/pages/elements.njk b/docs/_includes/layouts/pages/elements.njk index eaedf44f3e..2c9532cbb4 100644 --- a/docs/_includes/layouts/pages/elements.njk +++ b/docs/_includes/layouts/pages/elements.njk @@ -18,6 +18,9 @@ eleventyComputed: {%- if hasToc %} {%- endif %} +{% if doc.pageTitle == 'Code' %} + +{% endif %} {%- if slug == 'audio-player' %} diff --git a/docs/styles/pages/code.css b/docs/styles/pages/code.css new file mode 100644 index 0000000000..c697c3940f --- /dev/null +++ b/docs/styles/pages/code.css @@ -0,0 +1,26 @@ +/** + * Elements > Code > Accordion Panel & Table customizations + * Only loaded on the {Element} > Code pages + **/ +rh-accordion-panel[expanded]::part(container) { + background-color: var(--rh-color-surface-lighter, #f2f2f2); +} + +rh-accordion-panel[expanded] rh-table { + --rh-table-row-background-hover-color: #f8f8f8; + + background-color: var(--rh-color-surface-lightest, #ffffff); + margin: 0; +} + +rh-accordion-panel[expanded] rh-table tbody tr:last-child { + border-block-end: 0 !important; +} + +rh-accordion-panel[expanded] rh-table th { + font-size: var(--rh-font-size-body-text-sm, 0.875rem); +} + +rh-accordion-panel[expanded] rh-table :is(th, td) p { + margin-block: 0; +} diff --git a/docs/styles/styles.css b/docs/styles/styles.css index 429a571bf7..8520c7f97e 100644 --- a/docs/styles/styles.css +++ b/docs/styles/styles.css @@ -316,7 +316,7 @@ /* TODO: Document this bug table overflows vertically causing a scrollbar when it shouldn't */ rh-table { - overflow: unset; + overflow-y: unset; } /* Compact tile + Uxdot Example reduce overall spacing */ From 95c2d557641df6bb9bd6e769e9b0166a554cdad3 Mon Sep 17 00:00:00 2001 From: Greg Gibson <642695+hellogreg@users.noreply.github.com> Date: Tue, 9 Jul 2024 09:49:23 -0500 Subject: [PATCH 09/20] docs: added alt text to kitten image on card pattern page (#1699) Added alt text to kitten image Co-authored-by: Adam Johnson --- docs/patterns/card/index.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/patterns/card/index.md b/docs/patterns/card/index.md index 9a70a601fc..b72cd1fb33 100644 --- a/docs/patterns/card/index.md +++ b/docs/patterns/card/index.md @@ -71,10 +71,11 @@ importElements: --rh-color-text-primary-on-dark: #e8e4f5; } + ## Overview -A card formats content in a small, contained space. It can be used to display a -preview of information or provide secondary content in relation to the content +A card formats content in a small, contained space. It can be used to display a +preview of information or provide secondary content in relation to the content it's near. Several cards can be used together to group related information. ## Sample pattern @@ -148,7 +149,7 @@ it's near. Several cards can be used together to group related information. ## Image title bar - + adorable kitten

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae elit libero, a pharetra augue. Nullam id dolor id nibh ultricies vehicula ut id elit. Donec id elit non mi porta gravida at eget metus.

@@ -187,7 +188,7 @@ A card can be used in light and dark themes. ### Custom Theming -To customize a card the design tokens must be altered. These design tokens are different depending on the context for the card (light or dark theme). +To customize a card the design tokens must be altered. These design tokens are different depending on the context for the card (light or dark theme). Examples include: @@ -197,7 +198,6 @@ Examples include: For more information, please see the [card css custom properties](/elements/card/code/#css-custom-properties). - #### Custom Light Theme @@ -225,6 +225,7 @@ For more information, please see the [card css custom properties](/elements/card ## Usage ### Character count + The recommended maximum character count for the elements of a card are listed below and include spaces. @@ -256,5 +257,4 @@ The recommended maximum character count for the elements of a card are listed be
- {% include 'partials/component/feedback.html' %} From feb39dd50534845e5243642e723c09b7e1c7c232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benny=20Powers=20-=20=D7=A2=D7=9D=20=D7=99=D7=A9=D7=A8?= =?UTF-8?q?=D7=90=D7=9C=20=D7=97=D7=99!?= Date: Fri, 12 Jul 2024 08:45:25 +0300 Subject: [PATCH 10/20] docs: redirect from /components/get-started (#1707) --- netlify.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/netlify.toml b/netlify.toml index fc2c11f5fb..137d7761f6 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,6 +1,9 @@ [build] command = "npm run docs" +[[redirects]] + from = '/components/get-started/*' + to = '/get-started/' [[redirects]] from = '/components/accordion/*' to = '/elements/accordion/:splat' From 0874a856377fdadcc6eb49f551c1039e5e1abf24 Mon Sep 17 00:00:00 2001 From: Mark Caron Date: Fri, 12 Jul 2024 16:52:32 -0400 Subject: [PATCH 11/20] docs(progress steps): adding coming soon messaging (#1712) --- elements/rh-progress-steps/docs/00-overview.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/elements/rh-progress-steps/docs/00-overview.md b/elements/rh-progress-steps/docs/00-overview.md index 1464d8cbd0..730b7991d8 100644 --- a/elements/rh-progress-steps/docs/00-overview.md +++ b/elements/rh-progress-steps/docs/00-overview.md @@ -1,3 +1,7 @@ +## Coming soon! + +This element is currently in progress and not yet available for use. + ## Overview Progress steps guide a user through a task with multiple sequential steps From b97430b269edbbdb25b6ff4e6ae3dbd715a95546 Mon Sep 17 00:00:00 2001 From: Marionne Patel <95588923+marionnegp@users.noreply.github.com> Date: Mon, 15 Jul 2024 16:52:01 -0400 Subject: [PATCH 12/20] docs(skip link): add images to best practices (#1681) * docs(skip link): add images to best practices * docs(skip link): fix image and uxdot-example code --- elements/rh-skip-link/docs/20-guidelines.md | 81 ++++++++++--------- ...kip-link-best-practice-main-content-do.svg | 41 ++++++++++ ...p-link-best-practice-main-content-dont.svg | 41 ++++++++++ .../skip-link-best-practice-too-many-do.svg | 37 +++++++++ .../skip-link-best-practice-too-many-dont.svg | 61 ++++++++++++++ .../skip-link-best-practice-visibility-do.svg | 32 ++++++++ ...kip-link-best-practice-visibility-dont.svg | 38 +++++++++ 7 files changed, 292 insertions(+), 39 deletions(-) create mode 100644 elements/rh-skip-link/docs/skip-link-best-practice-main-content-do.svg create mode 100644 elements/rh-skip-link/docs/skip-link-best-practice-main-content-dont.svg create mode 100644 elements/rh-skip-link/docs/skip-link-best-practice-too-many-do.svg create mode 100644 elements/rh-skip-link/docs/skip-link-best-practice-too-many-dont.svg create mode 100644 elements/rh-skip-link/docs/skip-link-best-practice-visibility-do.svg create mode 100644 elements/rh-skip-link/docs/skip-link-best-practice-visibility-dont.svg diff --git a/elements/rh-skip-link/docs/20-guidelines.md b/elements/rh-skip-link/docs/20-guidelines.md index b7687175ab..165d84f4cb 100644 --- a/elements/rh-skip-link/docs/20-guidelines.md +++ b/elements/rh-skip-link/docs/20-guidelines.md @@ -40,55 +40,58 @@ The recommended maximum character count is listed below and includes spaces. The vast majority of pages will need only one skip link, unless it is a very complex page with many repeated elements. The purpose of a skip link is to help users navigate a page more quickly and easily. Adding too many skip links detracts from this goal. If you’d like users to be able to jump from one section to the other, consider using jump links instead. - ### Main content “Main content” in a skip link’s text label refers to the content that appears immediately after the navigation. Ensure that users skip only the navigation, or adjust the element's text to give a more accurate description of what will be skipped. - ### Visibility To prevent the skip link from being visually distracting, hide a skip link until users navigate to it. The most accessible way to hide it is to position the skip link outside of the viewport, rather than using `display: none` or the `hidden` attribute in CSS. - diff --git a/elements/rh-skip-link/docs/skip-link-best-practice-main-content-do.svg b/elements/rh-skip-link/docs/skip-link-best-practice-main-content-do.svg new file mode 100644 index 0000000000..ff9d0fd837 --- /dev/null +++ b/elements/rh-skip-link/docs/skip-link-best-practice-main-content-do.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/rh-skip-link/docs/skip-link-best-practice-main-content-dont.svg b/elements/rh-skip-link/docs/skip-link-best-practice-main-content-dont.svg new file mode 100644 index 0000000000..58f09afec3 --- /dev/null +++ b/elements/rh-skip-link/docs/skip-link-best-practice-main-content-dont.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/rh-skip-link/docs/skip-link-best-practice-too-many-do.svg b/elements/rh-skip-link/docs/skip-link-best-practice-too-many-do.svg new file mode 100644 index 0000000000..76a1db94da --- /dev/null +++ b/elements/rh-skip-link/docs/skip-link-best-practice-too-many-do.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/rh-skip-link/docs/skip-link-best-practice-too-many-dont.svg b/elements/rh-skip-link/docs/skip-link-best-practice-too-many-dont.svg new file mode 100644 index 0000000000..22793929cb --- /dev/null +++ b/elements/rh-skip-link/docs/skip-link-best-practice-too-many-dont.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/rh-skip-link/docs/skip-link-best-practice-visibility-do.svg b/elements/rh-skip-link/docs/skip-link-best-practice-visibility-do.svg new file mode 100644 index 0000000000..9fbd28a3c7 --- /dev/null +++ b/elements/rh-skip-link/docs/skip-link-best-practice-visibility-do.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/elements/rh-skip-link/docs/skip-link-best-practice-visibility-dont.svg b/elements/rh-skip-link/docs/skip-link-best-practice-visibility-dont.svg new file mode 100644 index 0000000000..640676b1ba --- /dev/null +++ b/elements/rh-skip-link/docs/skip-link-best-practice-visibility-dont.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 25399587d0be895191dc602aca67e15502e05b12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benny=20Powers=20-=20=D7=A2=D7=9D=20=D7=99=D7=A9=D7=A8?= =?UTF-8?q?=D7=90=D7=9C=20=D7=97=D7=99!?= Date: Fri, 19 Jul 2024 20:59:39 +0300 Subject: [PATCH 13/20] docs(tabs): link to tab pattern (#1592) * docs(tabs): link to tab pattern * docs: review * docs(tab): link-to-tab * docs(tab): link-to-tab --------- Co-authored-by: Steven Spriggs --- docs/assets/patterns/all-patterns-tabs.png | Bin 0 -> 32874 bytes docs/patterns/tabs/index.md | 53 +++++++++++++++++++ docs/patterns/tabs/patterns/link-to-tab.html | 36 +++++++++++++ docs/styles/pages/backpage.css | 4 ++ eleventy.config.cjs | 1 + 5 files changed, 94 insertions(+) create mode 100755 docs/assets/patterns/all-patterns-tabs.png create mode 100644 docs/patterns/tabs/index.md create mode 100644 docs/patterns/tabs/patterns/link-to-tab.html diff --git a/docs/assets/patterns/all-patterns-tabs.png b/docs/assets/patterns/all-patterns-tabs.png new file mode 100755 index 0000000000000000000000000000000000000000..44927b0ba374119183257db197597eab4f3ff01a GIT binary patch literal 32874 zcmeF2Wl&sAx2SQqf#B}JHNhQ%OMoE3A-MYxbb@iRwUCi#@t5+|5cBqPyG&%|q3KSF+x~z<(DijnpLe8FME$4zBNGXZ?bw7$*`Ca$b z$*FOmL0JEJK~O-uYT1>Auc;_t{(TwJsQgBf6ovcGi&07xrbhL5c1MUG(tlnuSwGPK z^8xrnJQPK1@YJreR7w)v%|wo6JmL&kof_ z1lLH}MkLR2h)J|iEuqI|%<$`+2;+AIMsP9se@O`oVh5vlH~w%o$Y!=XmTlJem2$hd ztc7U$awX=;z0J3=dP_`?>hcfGr}vP%S(E6wA!pkIPN+})AqT=Dc=#wpiof^Z6>MV@Xh^g1q%eu_*+ z^Y0g~3=5tQnMA%#?NA8U_!9N^5(zTeltmst>3bg5*f$E6Y`8q$xh1K&G{EEQo(Mhn zk-=Qv?qrge9pvsbVkGBVGy2LrKRur2hL!%cJAO#|4~_<@E&0chu1Tv47NKZ@TT5 z!5fjsza;my^q#N4NpTmW@~jP;>^{dDS<1qrdm*0s>d9cU@lY4Gxip6>+gj56nDNkkAPk|&-eWptC9Lk`$!<< zJ~z-Ycb+rPn1pX_X1T*zYG*a4{pS<>o|{-5f7#AhJ!VfT@}wv37Z3k^NVp^01df}y z;(tHtO+J~kG@Wz^T<>8QcE%|+_KO8;Y!QRI%@T<71C7r zFSz|gJ+=FM>#)|kf!zDQ4}=Rl1lZuIrt4+TeCyQbCSkqe>&!!Aj!~PcVY42h@DER% ze+ds7WWfpn6g?5{Y4L&qZXZ$4H|0AM-;cck|M|t(UAuo50Vv{_lpkrnK6njYt0`FY zvE_ix1dV`Q)Zsto<>ikoO{DV1sYzv#;aAV@Na|-wgve9+MW{>af0=+)U%02+QQ!Gi z*{mP3e@j*U3t)O^e~1PCZE73<`|um@?@9ijF=KvkKj#0|bvHfP5_4S26lqFo2*C{{H;Gf}()=UqN9({=d~I zFr4tsD(rbTzCkkJ4dx==&RZByiovzqZWEvH7nh}8ulTOml(!?0UTijB7q&iLrFonW z^C)Htdn*8LZy1R>V$3tpaxC5VZjb)_?w~Bq=kYFuAwT)MnESY?RMsPKoZs!cthPb6 z`{^_PoDNzQmzpJN8HZk3Lw}}{_ru&;dAj0pKCGFUf6fH_`;ZjA-X}a=2QiS9GYsHA zsrphT*E;@rjJ$g zp9{oz0cE5<&*NtNbcnV|m%UTGK0$I&$8yL)H&mD z7Bu6@xeU)E%d2J2;~~zclTJ*tAVM?t&LH#y$3F(ocbd+t5Ja<#GFZv1No1KUxh%Ik z0mID9!1wYjHSvJodYT+I0aS&n@vt`SrkW3s`f|}~FS+kxN#oJ4m$O32XDkgz+RaaO<9BvD!;Y7U;#-fF>xW3FXLX02k6eYJK*(M|AwvPnVXAOqZM` z7hPBxB5L~2iZyB-e;87Yp}mMCYcciuwM16!c3klk)!6+%vh-}l{Q*Zc7XET|kWaTg z3*_S|it6cnD&Vo;taNxBguWqt0^HCr)l@^Pe3qNt(m}sxCg7X{;Tb(HGCZ~kov)YN z(*O+|WL>>I?Ij|E!TxCAtQvSyl0GS@jVmxrgh6vew$`WVd+_xO|+XAD*%gsx_BLs(bA0;F`y99knuh8sa}FNeP`5x!a|71|qzR*LcN^JAeUNlp3}YcnYk9V?55V zHu&>dQhyMc{@Ykfu+3)qpUS~hK#(Hta~-fAGj z9JuT3X2F|P|0`1Z={q0RCSHWp#;A4U0NBvj5doM#X~=by}ef6!DE z%D{vpO|mbU7CIl|vPB`BC@C-fWZ_cnC7NClhr_hzZSsMc52>u>&MNIkAm;nj3gK6UVAE0uNizCI*h8#WZv0Lvc&}znhWU2BnfL(v+I4@LO{0k3plLk^=l51@A?vB* z)!Q{iP$7`bl;f%zEz3$eCvVehN}OPq|dLmK53fjKWaR-yGiavYd=IK zjGA*_@jm49I9v~BtKGSIM^u5%v*=JSPlK%9h5H91-C&qECrupy9>YdS z@KlnCNWvrs#}_K~%IAKk=MG0zFAg6%PAhY@nFZH4P>>};YCAl)z9DFvP90OJ1OVqg zK*Jto3RC1^?1=MhLY@t`NcsS}VKY`9jr3jWX$9>eGTG!u^a_7ox%pz@q75C3>_FAY zw_AYVNE}4#H2LgrW%s`LeFU@`TUqv?q%+Q#oV1BK#81p0VT&d4(g85X4b$?8Gg$h; zWSkLAXP1>b1l>IG^ng_gMpq z03jHh#xvAH1j~+jn@k_o_=Uq?WTRq_tX}(j(IO}E&y*`m5KlrB1B=i^)u^y_!T!M; z;V7EAXzh{>lYn81#Vx^z^d#x5>5q0@7oC_QHWGMeiE|#_of{@FHPcS*ftGFW-x1PY zVuN!}qI5s+<<%@()t~Q!3c(?_em${2s7J8gfc=uUmASeYj7Xjg3+mvln*Bh^=IO2) z>rhdIsQI6eACV%Xh5Qve^dB4|v{EW-;k)k#p$f@zm~-_z?~j=2R8o$H=b?WnKt7Ig zIUb22l74cVGfg5(Dhd;&Rc3s&CM)}ljfkL~WZ>grrKM1k`7@ZQ3fj7~MnfoRtbuCG zAGqUOv5O#4+9Nx_;)W{KZFp>AR)~bC2x=(UQrd`{>_^Mx`O9$z;GY_eBwKZN_FT}w zL=kWc3Un1YvgD^2tMw~X^>#UAL`B!L=XchxjEX$lh}ePQZwvFiksi&BQzQ16jW0u* zX|5tYSKJnC$D{8%P}yuGh>Vv@KMNK5G=zAYVnJyh1=jrm0z2;OMQ7z|Ip7#$0usN^ zbyEa4Bin}%W?-+6Vu2pg&DVUuYu?e8U^^k0gy?a~V3LWASn%=bcP#5aa6ICuWt^rR zX}uIfgp-edx|J5LO08fL%qf53w>0^8ed)yOkzL~mc>T@$YHs{)9*D_;tx-3jx|zbp zsPm(tp}b*igWdfh1+4`F9Uw}HA=jZ~4&Lo#lkcsL7>Dr6#EyMvA2R{n?!rQ!r?cfg z_6+UYzQxxvgucgU3pb~T?^vO#&R}>tX$NB<)IVhFZFuBH)w2okcSktD?RU)OLofzh`ai29-W>6L>=DRuEy@#U$A^>WYR2CJGFA@0KAEI?KI60523lJ=Y~@kFI+@|O-SnvY5`_03 zTavEi#wl4zfXteFhrrYH*Y2CV7SX7P$SJ$d$((QNf3uB(#}w;+&bK%&SE`xeK%u~6wAdy zfq+FhnoQZVdyn;I1k0g`t0k{FiCI@X`8>m1n-H)Fj7CTy zYgz_=WAb6B1xg-uSYEOk$Ba)@FbVA#-odSD=}h>`<{fFqTr44K9lW!FOx$;`mib7C zv-2(|!8fBoOuy@~7~PIpF=*=<&e;qOMYSq;W7KH!(#W? z_hdO7T`ky)EPg5c2+s)1D49q;6OxqfmOO)Xki9dNt^*GVqmRR6A5AfxVptw^fag8N z4_ACh_a`91_S{FaXIK_af~GpqM`G3ZK;NCJ##3G9;D|cfc_063eSIYfY_!eQT6Sh*aH+~pgZdKZWHWOf<2Osq*d%2wJgqE3@(JR z=M5W~kLBA*Y3;B5ugdL>I2io11ii_6%V#5bmrCHjA(<_MRtToXuPTkptL7Vg@S$Il zu6Z#oct)52r3r)5(LS=#Pl>aRQU$Q)T?fjh9EXZSrm;H(iQDAo2<+Xj!g6yl<=%sE z?y=Sx`iLW~H`sf(|hICqf zFXC5;DWwAT&a5H+D1%y=2Ljj8uUxM0-d%$B71!8C9lbQVDhbnM`=?nGE0jUu1pe@5 zk>X_rs)g7yc8Q{WO$|@p zruoL#{bE~|#FMyvM;A8cyys(|DB6vqFweYF zC~q7cPH;@KGfsYsCtsm~pebI|0f8~SGDi-JH|P!X12W7v6J)7-Vv&jm6r19hA2h1E zQ8%zP8%^pK>;%$atC>wckt#`Spwn#suH)nv{+Vcxaqs3O03GLu@%ctG=@=nnJ(up!%j^3qFp5_fLS+3EK!}wVD7ubG&Rf@r z#&nmyO2F%o6aDy3zO^ZYNJnUtBBuR2mzhE`A9Ca`>86fR^WLz- zS#?jaaJbRKhrNf48pFy&H}#&jnEUN!B_No($5xUcK99UZGJkW^44BgLGzYnF5UE}G zVI9rf+>OsZ5xkQRMn?yn^_5Cgiw{(z-&>nTzi;rT0oIWXRh?f-&@_@=(oD6(SMv3G z!k+PZT&$b0`0EYZPXj^lL<;zK8mla;;jv zC~ba%IRye=S&Uf-uOglo#aJAIQ7N;EM?uGjGb0klz3+YBViIA7%)>Mjz%H|EmhxeW z=7!<;3w2s8qfM6yF1q?gDXy7KGYk?kx2Eknr1?;SDb-33wY%b`2+DEY>L&t%z}iO0}5wo zRGulcXb=)M&XLpw^Kw6(mG&8zl-muyD%4Gb;7)peGJ9>M;BoG?8IM+)0MB@=lT00# ztmd|T8VR8ef3%tl3|AK(LJJ7rG^gv@>Z3h-$f#hS_-bYe z4Kg5|%&WCx6}ophN?)VPo2P73nTb<__7l5MyHvMzMgnL6;=?o6nK9B?_a=X4OnxQd zb0nzhhZP-P-A%<{oIF84W1QjLNUK6juOdqwh&aT92mY#GfXAeh^^5bXJI*nw$NO-b zrBFm%HphCo24JxbUu5exi5K&Y2P$*rxhbo@tBs-)Q-E$D$6 z)zl$DbXbR)|0mu{{fJp5Mflno54!;W=XOb+@e-fQFFVEr2B|K~`XA{!KN#p z(aKnLesUgq-5=I1kYrZqIlqX12?>+2QUA6gd@=ZtP+~l_&YN2<>(~9HS>Jd+3OJv| za^@kasC#yV_Ztu3YUlsJxA2rFz+2f+8f8dPpNQpBIgs+qo<7l{ztWbGZ85p_S#jt@ z4+=PHsrW2{HrT(Q9~))u3X!V~Wyg22S)&b;kE|K(vSFfDVw4224q%8e6#k5>vCVUMm^XMEDo zr;$qk8rr_%pU!Vm<7U(Cs6l#_D0(>^E-_BJfRt6pevA$YYcqtNU2XSo zBqtojtyq4tQ`NqVzYyRE?83X--pTCtS0v)}&G#RIvI+fGP43BJYH11y3nqf>d*;aw zcdNS&rBbRi9OLQO7@7a@V)|7PD!@~#6~*9Ndw8h`Q-@i2fDYIWG!S_FG+#bz zo3?1QL)+hmoj%1c^QowHOpt8*Z7Baj>cvZckGR4l5H z89^Ov&Kslo6nO3@(ZcEUTwSr*X`Hp>0yLksPI!_Er!MTIIQN92C+2&gat%~_*6aXV zc;m4X^8OQkWz#z|G!5fmwG&x=_H_&swE@fPjd`$)cH3?QNxWbZ7xu_TH~L`A#h;3M z%1teYn*ATe?}W-eU=?nLa3WVg+c>$7N{DH=nUmU zljYh^Tcn@1wR8EsEW5B;Qv^h)g#=SKX<`Ar<@AE6be5w-tE-RcKppKfi3Z@KAV`W- zH5xXT%?5@|p#kDp{^avN8;`6~XtZsDTY%E`OnK-#vOy-528|);wpK0`3R<0dp(e4YS8^R;bJ`U_c4=a`43p(KVAwAA2scvF3ufLZqR)2S}=CcTfHTF!Y@<&U5 z-QU{zUYL|EgE)XX9sOMdQE`w7z>oyi8{GvjS;aB$5zT`J&BdZz~COEbkHoC zq~BL6QtNX!(R3A4(VcvcQ4JDtUvfB; zPYKRBE5D>er?wJf;L}+Ot>Y>)jvmg~r80w1F=Bz1Q(T@Ov<;x^CF-pF>M z6l5)}&UoSCV+raH#QMb!!4w(c3PfNJ4oRL-iCP2^QeCi60AhxK?>=63f1@lN+)Dl1 z>yx_guC3HZpmIU{V?pt6)=s4J_{M3FpIlK!fsHHI>QaC+qPp12w0wTNzpgW)s7Ab# zyek2^5)INMbpp|1xTA@5v%%=ZX0yLT4{m#mdEr{gojN=Rp!&(#@j!*TnQp@xGubg@ zD3rrly}yb5bAUqBoB}Kwwh6=XL?y3G7MU4Q3A;vzt-IuGiA4 zSns`YRpNSyQ!TC&Me|;RKVk4~e*NW^^xb5A$`5HnrBE*G zt#p(?i97%*=Ypq3n_o zY3lPnl09z+i@gOr>;+Kx7tzEq%r7Q`3@BOqk}ydd1@P3{V2eKnx2lF z9L_v(jh0$6fLAKN(3{Pq6y~?LB*?2vxN&d4q_Tb`g|4?sl9(odb{L7C;wg$?QBVhF zL&!wuy&1CAu>SxzM@Ph1%It-=s)wF}<#Y#W(|3h_&V<2NPM{6a0Ad)LXpX~h#8+a8 z=H|TaiU*eQd_@h z1k3VVQ_!y26*C%Tcsd&-HR(sx0SgdEfzF!u#4f`-trR9Y%O{m$djq3|9A#-9=#zz+ z)>;~c$(fq?m@AF=navc8PC=^@qw2{Tr_W+VyVZITw#(dVvZSzwkU*lYWNiO!Cxi7! zNib*ghzo~fIP1F#kY#?~qbveSzWkoTgrGn3nW)y|o24^i3Zbzh) zP6(qJ#=b09ps1-Bb`XBJHu}1m35QRYnbV5m+c}zRagOVfl1+MZ+BHl;%~UN@xuj(2 zrWDJHAF?FK=wc@-%FF{1K+R4Nb)Al7xdjEN-SGP3nZfm84rWC%T(O&_?Boj1wfQ;3 z3aZ`7qU{9}R%3aRa5W{^8KvJhFSmTbLa#M5tsrWwrk#6%r6geAF4$BpuIs?ODV`ZW zZdL>wa-B6r@1r*95MpeyT9cVefY%>F7M!|7&3L+{ust7PL$La-Osr3shzHKi4j7Jf z!VrdejN%cigROQKHX1El$jdP}B(n6bw5Aa4vqb^9_eIQ73i2rC_h4S3r&qXn6;2MA z;;1)TRTP0mUV@#LOy8`%Gfo7TMFguH%ua%4#V+s_t8kex#WQ);mhERLFHXBU&>cV0 z;G0dKQ*Fwacb$*1YWa0mwQ({mQXQm5J_wb4?dXhhPv!qUy4lbtiDgDvSXbg;qB2Up zOg~Tdup2&!r~BK}V3}ze&cWA=W%dDLzS$ycS-Ia_FoF+RrlEk$r(L+(gDkM2;gI(n zy*f9dcogVhKG1#D%+k0eRDTP?f~*4t!*H%iLaH$*xY-nD-9O@j9H$YSph8Z-M={Ps z4bZ_vQUe#_t^HMrr2YkJvVQYDt;TPjb#851HXH~e5crll9TwV9jqw7C7->?>6fU|4 zr$r!+MiU+xf-_=LVrA|aY~MxnYw63Gu0(H$s6Eh!JY+fhRfcr&Qs`LTDr*cEwSy_4 zGQTEH>U3-KgI;QsiJ480z!=e@5wAQ3il*~Fe`2y&hxaZ9PC%%}41tNz5lRNbMWtRM zk7{FeW)KqcSImo>jc8@KPC0!IoGR=Gz%>hXD?N42y z)W624fH94dHwoJRVq5dcfRQBD{7I(x@7Tu}V2o)xb%6O_4AfQuxSL2O&1kxR$4X^@ zFPLQ{BfSU9q6ifdLWI{AvbTF(YpELYF*pw(Spfa`_1HW_r#ppztuz|7e zk7_CZ!hBhgz~pGMQP&*P;gm&F*xInc#QmcrBSQh4)Q-8HEmG*i;3 z!UBe@_}mXS0lOa~*sFacNdA|r%KYMmf)4;ptc46hoO!=-?- zAI(xshX9)QlUb@I-T7`#bfS}@Uak*t7~u*2VRZly;sCGkrT6Z!onroHaN@OfK(bBO z8{*4{56wqFf6o{|j7W5vc$UGP3heE0A6Tpuw>pa77`8$A%XEXMYoOo)zvLQZMMw<5Ku3A2jveywB?K8TBA0orZ>UTXNMre<44F8T>O|QjGWl zH<(Lh-@7<~1DBR-$Y)g*0jwnqnzzx862LAT5b>u^BXP`ySmU+L;sw_>ijo41#pSmr zfS9Olaa-|ruR3nIua#P=*^mINlS%1*ia1PhNoCmWOzV^Bvqw8TJ~sf?STlU3QIT)g zx|5<&L8W-9qm=Zz^bneJD_r9E_qpIsYD8AP3+aESTlId_;P(MAP2hdQPKLD-{~nFM z=Gw#gC{LUczvYMGoQ*+R$o#2d7B$rB(xUUI&|%dC4}duvkMBGI|24c?PPEkQJVta_o2`qGwW14qiLEEyec2Mw9N|XZpxK0X-4t)d72d9=@^RD-8>LgI z6fxsXF7C zMtlLv+Foe9?cbUPZ!m=}zEV!33Ot;24g+nf%yYSJjQ`rxaG?(eIL}Dbaw_5mx#jA_wzE8XXkO(@Ww^pn+AX5&%!#`fwKhSoi#N-HNVvJM+&jY`4v7 z1OtNp;9C383A}sZ?nBD~e&!?9kbYAYkaW}_Q`(LAbuklQ{OfN4W^w3+X;b1|3)nqx0eGeD zQ2LDW(M#YsrU4+>&=A+C;MM5&aMn}-7W^IH;=^uY^TFgk7WjKZ?44+CF+`_QIEviw z8SP_P4Lr6I+;U(iXd?kCYH3FeL!)TMiUWdzuaT^p)J3Z-c-rMQ22-qUmO^{3@e;-e zVG7*s=5R$9L=`g4Bm3tigUY()W&k5Gthm_ zZ*n3y<)S+Y;vMxO?$t1UDidcvX{*fE*&7UcbmMAPUmA41fbE_v;8?$m`*XXKVDL#r z4-wPM*1j!bZW473x+`p_QD=~A9X0l7qcDZ05hunS@Q{M7frP4OMv9vVKmaYw5j~A1 z8mEbO!7;ijrxc++d0ow!FU`yw`lH*3KMVHUD+~!8j{#-J;TPO+MQR@8+Fqji@tf0} zWq$JbcfB!@li;^IcZzt!V=KAZCBFUw$E-7fBBzl}RWFYdI9OIxCU@T%&LbbLTpnD6 zUmVT?>B3}s=i9ycOW~?UJL-AP!vXL6X%Ef5t3CS5}il|^J&ki_W8)q*ALAL!epoeR$@}3U|2G3Rtrm>V~{VaWq zGw-EIYkG}dz=np43Hig;M*u*5YZAfnE_y`*A=B$DR2z6oWf%Za_!bYrcp3Hpp+$bg zUr|Zv!+>u~X=d}a-H$=>B5@o8U?k{Xpv{ktNuK}+r120Ra6t`%Wj^a1Q z9zZOU#5$)@i+}s=zr|kOgzRd3M zm6xDv4S>y#CJSpLD5PIk5>Encd#n5BWR7~rs)%Y4jahm^e-5{Is66RezPaS>1l&~2 z=`nRF?doJX$3O^>{tFWwejg}W*tfD&923B9bYciFb8(4gIPE680B(?w1#T4d1;r#l zXqbEQg4e%m0_byOKJxH$)S1Z5o8I0~k$|%~gde;dZf@AEa-1c0R~f`eL;&M@RbL%d zGGu*6%1afEftVdN1BymAhCNO^<}mAe;iYtrVS|DLD>ok7Q3J4~ZA`$wcXQKEuC>Q0 zSC>3a+7S=E3HF=}Mj+_RDorFx%vEXlGgt1fjA#zA6R3ZJg1vNKQ>P1&QyEkPNZ&xL zMsN%7hQA~c9UQ0w`50=Mp~(k-C;wrJd*r<%c}Ch!?}^6QDGl2pKzla%a zLO<0k0M6ahsh1vFluldu7L3h?O>Tj}j25*hFx(dYN_3IF8eluW5cYs^_K3me4ES3{ zbYZ_74hfGJ0hZKgLFS{!?gG{+xCb;_t#@;#J4EpS9FHp(GrQfm4zX{(wg^+aIA<3J zA^O+)xt9l~Le4o0oZ@G-3wBlBy0Is@qvn455u6;vc&WvxPwCoJbwruZ$~c7pd+b$* zm~b5D?7)s>g0)3Fg6u0`XppsT(IzIYV}2su+VA(py?fZfk!3!qRw~ksH19D7&I&~i zPn^=>1ZmuZ?>NyHh1`gUy?1@M0l;rnnSw!Nkr^9%pKiy-_UBF*wwa5l zneJ1c5CbdMDf4lpU1$i`<1t7j*jHUq3b6KUFobUm@3YfC#mbf>qYI6&F5|xiA7d3} zw?{EhAi$kS5b)gt5uJ@t8w74BGv$z;7;SV`zm)oC z&$ZGi?@q|h*2LQY$d6YlHAd(P2zidKdMNw|UY)mJ^HIgF1-&*cHbtm!G8yrL$nklU z?Xq=XauKsrd?$=Iy0Cr_+Aa-dqIy-PWuww<_~p)V;Rk2hW`3zRk|~lp95odT1}`!e zV)k_se}RaD5xq2tqhxeTdqO`OW{CsZDhH~>yIsxxsdY)P4Z^S<&U-0?eyE%hpXMQR zI~SdNOxIi46vZ%f^=UnKy#>sU;HMOOXm1mXi~9>9v{wWQ_m{DBDvt+KME(Q!y?>x# z-_^QbMP7}-SY9g{ZKK3Qo=Z*>0G5M67o>~C7J=z8Q60m^d_omK4*!hTRmL0rI-M{5 zb1bFOY0zq5M=YGx+{}f5gCI9pPyBQ}DMcxG1W|&QVmTHKdK3|px;7-b!rsNn#SKi^ zV4u3SvsaC1+*>q3v8|i+NDM9KwplP5?B; z>fZAnW~|#6W0f{fto!D1m;~W~_UQYJ?q%c_HZODbX(KFDCTldnb-((lbYt3`v`*=? zo>2cC$n-crf5<1n;vyh-aqH--ERj-;tj}M8?93g{c0Y|luce^jPX>(k6{fHl-+l#+ ztg=}d4!|kDTE?#1al)g1cITJQmn-6`i}s2+KPS_1!4=UrfWy@%e76UN?(8NpMVVqK z_%@+*9#o;>kr}-KbY}9iC*Kyg-M4WIk;~5`>u-*osH_d=J+8u|c3O69Ji5cSho87= z*b8LoRr;ZAcpEY{fVS(X=WSK%#iyISAw)fg-6PF6>*0-cKTY=&2+lu7wl^M}7i#*h zg>CGJXCgU@jol^E8iE#BN4Yatx(rh}*thf~N~p*>y1zX=o(VRJ2)wf1QLt^4JTV2# zo3L}$eC0iciU=$7$nQ9lE(HuOfdKQ>2S0jPMsp0@M`CYEi}gw1=yntnOi` zEsq&1?=qK+J^kE;0_$AMI&+z{o`$6 zGwcOs$b5*knK%1G<@&87`Ef2o+R5CB6&8LNNBTwp)bp{b``T|wFZyn4x>I9*;xev8 z9=iHOH$C+%CrrT(yXr`u1l+Qg7iva(CmO@BtPBO4DBM>Jm z`gKH}9Hk}|I7FSqV?Mi0R@E#n;9CSN2ZVQ5-o=%yXfyX3Ch%&`Ycq$7Y1!qQr}%V- z5Bbg1mD~r;d?$A_LPN@R;Ftxhm7PS?z@M2xuWhp$Q{!Gjzb?UH@Iy+d0|p7c6BY*V ziAv)f%ALH~gqL--XkM#J#!0R_wEdmBnxbiQdpL8YOdU^6qPz4?F3wlPHxNv6fx2Y> z-yKRNbZeWi+Zsbb%Ovg?r|}9i8?scjOwp#uQ$Xe^gBaC2rMQEI4MP2lnTa!sK>BL( z``YUiOsr)!!6+n{{DWOM!=66=x44G}nbs5S4Zpvk)nf^E<;7a%mate_g9@L5soq}d z=ZkjBi;*z)h;s^lDi=MW4l)jx?)c0IAScnR*G4r}t*c%5T4<_g%x^dO!F5N z^U##9yE2TKle1VxM4lfsE>^RD&R|W0<4;%%N_|G0Grz<9CfC|VhFwd~8$s%%@cG8z zM*r$jm_m0-e6H$6vM+?QfN3l6;KjU3vEV!MAu7HBnb-a+%T-7C`k6QCb?X9nN9|N( z#$z>Qs_i-Asq4Y6R2zyxr9S49RqFh z_-^$4^MLPLmSy~ON-vK)1db4t8Gf`%sYd9&h`sMw208pU3sBy$k^F0wx;Hq$!LNzb zHdWNN>&>~B%7giJ!L^k~KbDe0)oqY;5Wz6J9_Uo8gxBm8jVfM*qYQ8I9rIVJXnhMW z-BUk`kDzNy%gl+40zAmTrS4t47Lr5?&Z$axX!`+_PA$| zf2~4T-;LL`WvhlJ*fAw>Sqp1yq@6%2@BXe)tYiX#!JXv`?l`=!rl$6NU_r%eMwL)| z_o5#YaE!(nm{i4^dT&t%+8g_BhmhEzoEC(W0ECz)1YDOYZ0~szjoOI;v=4oM3B4+e zkM>E2ey{!bnL49k+?H^;T8!k?1y9#z<0Ua`mtQ%PB>iKwPFo+j~=iuRd<^%dw8c*srKJh})n|Ysz+6YOL!;7f|>ar8Y zF;2!*HNDi=2#LsbCCOl#WC;Ao8%LNG>#cZ|pI4(8bh0>a@`Qd3k$|a?3n=u6uZ?4f zd_$aj2Di?n5&QKF;0(~Z4v6i6D!%b=D-2@g2anttU={Zl&^w!pbvCloY;CvP6V!#5eVX4232 zKK~i?6hG=Qh?RmgR&pbqpTvu(j3wULO}K`&uT(C&D21z}MDmePH4Tlsp+z$gE z<9sYFht+O+rAcJ>rlQT^i&8+>yh_n{+4IeK<}GqQrzu`Md|rSiSDvRlZN5NPu;xD| zn@qG*ixdpJZcYvmx#6Qa|8`8SRx2t+@l_K$MzmO*S+|RsXrSj%yNb zALg`vL-k19TY#+YV_q&xAeQp@d2Wf=YRgA8g2(Nub-NX#CO2JX%qeen7u!3Uh2?pGP)5)!(k=_Vh4 z#h&PE!_)E4io}TdG zLDi?Mj5pUY1su~7 z{}{l$QC6%S1qc!`JxuVC(C_K=jEiBBmg?&b<$`;Pya4kGoFFNFhkVnJ zcBcm1)55odx>=u9^@mHG>ZJsvgqe?0f!z;#2IY$wfCjziMo0X>{)@R4JQi!VO*u!tG<4_`jU$8? zchy=_4hd|{A?dy2LJA-&H%!zHt)5Z@7#ZtIp{O{~%l(+7@ZZZ`)uFxAxat}4bUtdU zuv=#wvBLd_rXw5*1rrUi)dZMKz4^4UJ0wY?F|EDWmps7D3plj;+nKE!?}xca)og!v zzSTP4Y(X_}2QnxInT0+-=Tov(+MLK3*f9^5$Ah~y>`iY$Af3kXBy7qAGin+7ecfoS zAyA7`cyGMcTQdhdW)dgg{NW%g2M^)08un-hljHP(uI#nR)CE^B4wxke7Rv66 zij7}Rz_;t>!UC2?&-xS!vuOhGdjr|DxO$d%pn?#mj?54}#gFXT;i8K3?}yCS?Ojt7 z%)-vAWf<+le;o57t4EWQq47wiCpw6r^N|w?-`Gjx<_kVVBZpHiPI0S|=l*sGhw3;u z>!@_iT{sZ1q%W#0)2@c4UroPZ$}g9Nl|nO`_<{*XiFX7Ptm zh%1BE!-gf-CjttM_>IEgSs3;%hHO&SId6q5PN|V@lIOl62@&K}UH^iU|C8-S8wwVLt9i3PSvdNrbeZRW$zY8^cADl(%L zt1keS(`ma9EC|QwRo#5$N{^r)wqhxmx!jlg|h*gk&13tG0k;zSR`KKNLw=Ny@8z(p$cXHMO#H7a6b}q@>Lydic;g z8I3l3NXNcy%qlbQBr?_j-BcVZKK>eJQn7@!(}PaiaCj-Rv&>t+*#QHa!Ns7qc$FG) zXO(Vuj!zKKe~^Mr9~iXI63>8z*SjjT=EMA*%I$ZlusHU(6y+w?q1VZ6;ToZ1kaQc} zIiqKccT3{f_ed}2IfZ&;0|4cjF7vGTkVz9x$ya&_I9R@A%u0$?h}!~s4<7yR1q`gi z5r4(E7+n~)zgLWLt^!Q!OT*8Vj)N|h7L3ZbIpNr|3_+yg!PQoRY#wht^yi^^Ji9&j z_p59m`^p?R;h3nt&@}!uUA%{LwkdKAM6@amZ&7y^xjBp|Y*>iLO7=bHj&U9yBGzXQpr=P@sLExVx;(Xh^Y5;he0y(Z;bD zwb92(Bh1o^lb+U|xGFfh2Ef6)tkzY}fXPju6<1-6Zh>k89T}s!kOF5FQ)X};l_2^^ zZoO`FgEUcoN`{56QG9!keGYLZCi!kJk zaDIp`+WSGogs9>|;D{Aj8b^b2WrISxtG*>n43wVq4(=11x)yieQs7|toqVFeK~b0F zT_wmdER~6;VTtz}6&hcTMPS(|qXn z_KSHiW?E)y_!zk)<4nP~kxB$I?ZfbUj^sQcGeYsmUzgX>Y&uyJK?LQE*GQB@h?(wD z?Xbi~?7QNUT;Bz2*I-FPxtVe5%(h6{3z|Ch!I|oo163_8ZksaN#%t=taF+oG-b=Qy`}4)OaWv3`g45mS zlyX8|jdZTljzB?mlCS@9#5vQ+>uZM}YdcT&(goh*f9K{=^ol}b1H!m<1fZ>%3qa7vQ#%?lB47{3Nmr};jbE;**7B&q5%>(~i<(1-}57Xia^-eV1f`A+>j z`(+%wpljQbxQDVH7HjOt)y@8ShQ|K3tqR=!YXLz>S{|Yxp}f*`uwWSQ)d>r$y{dNo zdJa1d4Z_$)P(j=9xOu^3AuY|qiH6^|U}JleuFmwrE3k|`yeINSH1E=2htG$M?kG$X zO2YhUhbPfj3pdZ+ zV_2C{r~acVqt}ON%tky@+$MJ4=O#e1rJdDC0@^;Xd&^rORY|b|q{U&1qWs2?K|V%D z(J2z_Ll5}2bbvpuT)F8AtaU>nq53}DF&;=~jfYEuV(DQ7rjf+b-sX{F89m5|35#^v z7P%7}5;NDn$22OiR_rYqRH<0x^at_e7!s4-fS9~k^I6+H%=~rSfGVA#k~JT8 z+-|ZabjOv<=GaDzPL=g|kxyc2924@cnAv>#l2cOARwnIh)JD?!sTOP-#cQLi9NhIC zZZ4GA@(ko|Eu0pp0Ws5@Sv#NSb)+!O=bSLiK8e(xEU37vN0cPpRGf*CaF0f`#h|PktW! z*1CbwjT0_fkE;U?>}+sjLOkcke62 z7=K(lg;4f_&1k5?U#z+tAeF3oA;TZz4}MCb8iF$wi)mi}^VV+&a2IZT#=`oG8TJZ- z=;`g}4E^=iPSBGZM~rkBe>_F1kkNAV6;aY(@H-(C`2C#%n3#X~R!AF&_N47o$ouE5 z{|~w@?Ij>Q7@+}t&IST@RnB^?rEzsoGVD>`7|?-1{`k^Z$9F$EO5Xikjc!US;{cdB zAtc1}5CO_!$oav_aHpd1MwR7a(nEg8N3e1@9{}JB4W2-3vTx=BK(+KU;JvO>8QZ$V zoXEifBLl8Ky>k4IEPcN%7*8jD+eT;#ARO8M=^1hRn13Q>H^J!w5Nm0`)7lH{^Na@< z1~~WuKrI!*4X{-WNG&a8I69iyo!|7|6sUC}o_txU@zu_SpP%Hco2g1zeR2+!3=M_ax$wTI- zdK^MZW8xx8DfiOqvF>_v4d3RopKHC!!W-sWd_aRug9LpqmdO_28_OZzC(OL>-*N&0 zWN3YYNMt#A(42wST+m#-AosR2dE@^1LRpNh6`<_f;SOH& zJK5<4*Z%le#p)#Hv3<}F8g+0KM?A(ig#@t`Icl0Nv8Vo#Vrs!axn~1z;5u#w_nAEoIO=xPbzjl3FH-AZ%}yu{B5Nj}k6m>wBuv%`qQjO=clR);>aWL#u$E!j6pv?j6G6{#Z6L&3u>-0?Ow9`DodgL1u)2Zrb$qZA_wF;5fv87Tbxn7r=5 z$}*9(R&w13IIcFNvVnHh@qJ@zyo|;o0?+>cHWm%F}&2*E~6t8U@*1 z=5+6C_RiL3 zguc-=2_~zLy(PZde7663^Sl{AIP9p|->RoP@>-!8H{ThDlEe{NAQ^1@i4Sn$pnL8# z+c9R?arY#OgRp!&H=+&krP!&)pMqzbEd%&;rr7Gf1X$*$Syn9G)&TN2jptXA3sz^| zAUZ8qiwbJkl65VwRd&H6udep{p8c@O7>fMq1=u_G@3gf!`oY6^&<~kXWWoE;w!UEC zNnQh2`uO!8!01fwS!MaSLkz2Zozv&;<-mS1DRR7Cc|hbQqbrz2U2%rLT4fujyfLQl zSiMC?5QoV6!UMP-Q|-vFWz_angX&q~KV1n@jisdA)d?X^P>p?l^4n0%@;%O4fd|q^dkWJ7(G>PP(PaEZpxuh#4xZ z6uitZfB*TGy2cNS`P|qe_qW=fV}NDa8s~e9HwK`7G)Ncfh%1%-d8e{KAZ zR~Nt!*$<GFPG@(EBdvZyMh_eUdD&CohbyZwgpgOFmvgBhWR{7S zz(?XlFa*5?*bzh0EGBo3({{-ArF)0^{nIqfaol0>xP6NI0k_N(3&7m^36Y}Ke06c? ze?IQVMcBBCu)~L?cQb$$vZTPVq`afzk>fpD zl!!_KD(4qzCyHudtJ|Pa~Q-RP8eMW$U!-h5906(xI2Dm!p8W zt>)2oWBH5cMBl)yYV5Zl6vp*r>8B^{j~gaJPG8n(7TJ!mD1QDUmJCtyehGnf z3l>n*qlhu<73D!V_$`XRy`g>89y<`N<3wl=bL3mrAZH@%q;eFQayL%tH1>jUM6?ke zF;=oSd8p>7Xfy?KznlvP8e#`fS_F~NcwzfHwe3YdoTn)WX(hAC@m zorpwhR!)D>kRz)LaqZ;#Y+fH_53&%wJIO<{g~E*ugo630rudb>QfjG9LZi7n`qlW} zU3*Nkj@w`BK3Qg@f&aZ{9LV(WhhV+Fg7sDMQXGFp;G%T>TnN=<>3*wWBC%K4!{wJ! zRqbLha75IGJN}_(iE22~^(ahA7hvYrucqBGoz_Mwt1<)-yU*>t#2a~|MPb+; zD|o94^TP!n;7Gbmk^Vl0>mPiS#WO|jaI#8ys*A+0ocBi`POZ^@1B5RT;igq8_yIJ> zPIU_vYh^zXLos7*$x_+#8l>Vjhq|>^(!DT~ZJHBpBbGxTNy2f0$Qf*%BB!0Q6 z50tpuWx>O%RTpBMQQy2KsSi!W5!gr(0sD)NMmpk+3yO|lb+P0ArAs2nDK?dHsqQ?n80x0Pf1Opwn zZ!PgM=6|q-M}6?hE!~TmyW#4*Aa5bb%adJVB|Hmo>%KqbHY;)T z+A{<(<5uFC)XH}de}0C(pcB!pw-7z*X87u zimD^_HVl+d{&4EN#i06Q5P zA2fqa-r;%F3H&>K9h+QQu?5|=w^9s-LN0t!3J}*g*418u7nMBa(n4deHA%LS%xC2-zVmxJG{&u~(>)pRzObBSgYvkfQ(Fq+Yxg z!%ctYnLNQI_;|OA9SL%^Gp4i66CsYpJ8LJULu{vbN--mp>M>azn}?~7F!HN`NeTlS z>b_tehzOb!V7_K0`f1P!jKHmVf%mePAB1rgl zH9M9${&pgRSuTSWO_N*B<;QSo;svCkSrIKxz$}RCV z$p_vRIhn3XsRbM+>L_5LY~?&rE#lZJh5Ais1xlwbC8Iws2+IuKT*1W_G&msdt-npWdvU3T7t_9Ars#>)(Y!r(>7?WBC=bx zx_~C6SU|!PNfP?e)i_~p-;MSJU^N&(Olt^K%M-FN2UJAK$a#0A!7Oiam`+|p$=9X^ z6V=i_NOPY7r#lvA!2&cg9l8>Hi`N*`PKhaDy&9$@=Imd<@C zZrhfC`YP2JJ;5ci!V!Ue*+Rv5WIQd!N0@9atNLsO>00D+lAs}lBWl?|N*0l2rcZL{ zex6ovvPt>(Z*IqWmGz{k_TsBM7?nW^$r!yqXI_UiM&{`dLe!D5ld&LLowlnl@EIzl zW=98sLn^;4-0GG{K%MI6Fd}mcae~Y+3fJOBX=FEx0rDG$sbY{13iDWbT%yP(D(- zN1q|aIivgv-g=Fg3_)*5Gx;X!9gd)_MErqBnD0G0*>{7Do@O6xg@|sL;CePr&8haz zf&v1x+fa>wA8agy4-;JoS^Lj-V*Mr%>Om5>weN;-UT(8vTcVmR*$$Xq~!+C+_n~w+@}sTWDkXhR@m3&0Y$Pw-PU{uO`*Rac)d{ zUVKISpjY-{UTwFTZ;2CSS;De+g)6Z_YuSB{Qa#k3!E={Xt7Mm_;2G2K^@z$piX0d! zhYvs*cbG0%7#jYRk!lt0G|ctSG{-uXVSLRJGMaHzBp;?0=Phh~qIIe_hv?>Xm8R53 zo8fAu-woN6@^

7m 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 literal 0 HcmV?d00001 diff --git a/docs/patterns/tabs/index.md b/docs/patterns/tabs/index.md new file mode 100644 index 0000000000..46694b988c --- /dev/null +++ b/docs/patterns/tabs/index.md @@ -0,0 +1,53 @@ +--- +title: Tabs +layout: layouts/pages/basic.njk +closeScriptTag: +tags: + - pattern +--- + + + +{% set linkToTabPattern %}{% include './patterns/link-to-tab.html' %}{% endset %} + +## Link to tab + +Use this pattern sparingly. If your tabs serve only as + page navigation, use the [Subnav](/elements/subnavigation) element + instead. + +Use to activate a particular tab when the page's URL hash refers to an element +within the tab panel, or to the tab itself. + + + Copy to Clipboard + + Toggle word wrap + + + + +

+ +{% include './patterns/link-to-tab.html' %} + +[element]: /elements/tabs +[css-props]: /elements/tabs/code/#css-custom-properties + diff --git a/docs/patterns/tabs/patterns/link-to-tab.html b/docs/patterns/tabs/patterns/link-to-tab.html new file mode 100644 index 0000000000..efd164bbd1 --- /dev/null +++ b/docs/patterns/tabs/patterns/link-to-tab.html @@ -0,0 +1,36 @@ + + North + The North + South + The South + East + The East + West + + The West end is the best end. + + + + + diff --git a/docs/styles/pages/backpage.css b/docs/styles/pages/backpage.css index 01c58e019f..f70abe6da1 100644 --- a/docs/styles/pages/backpage.css +++ b/docs/styles/pages/backpage.css @@ -51,6 +51,10 @@ font-size: 1rem; /* Not a RHDS token */ } + :where(article .container rh-code-block) { + max-width: 56rem; + } + aside { grid-area: aside; padding-inline: var(--rh-space-lg, 16px); diff --git a/eleventy.config.cjs b/eleventy.config.cjs index 4eda07b237..74ca0c3f07 100644 --- a/eleventy.config.cjs +++ b/eleventy.config.cjs @@ -41,6 +41,7 @@ module.exports = function(eleventyConfig) { }); } + eleventyConfig.addWatchTarget('docs/patterns/**/*.(html|md)'); eleventyConfig.addWatchTarget('docs/styles/'); eleventyConfig.addGlobalData('isLocal', isLocal); From c66e3838d72ea44a6c824709f1e2ee4aecfc6a83 Mon Sep 17 00:00:00 2001 From: Steven Spriggs Date: Mon, 22 Jul 2024 13:58:36 -0400 Subject: [PATCH 14/20] docs: fix spacing (#1610) * docs: fix uxdot-repo-status-list margin between heading and statuses * docs: ensure proper spacing between headers and uxdot-example * docs: fix tokens page header spacing * docs: correct spacing to 32px * docs: combined duplicative style tags --------- Co-authored-by: Mark Caron --- docs/assets/javascript/elements/uxdot-repo-status-list.js | 1 + docs/styles/styles.css | 4 ++++ docs/tokens/tokens.html | 8 ++++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/assets/javascript/elements/uxdot-repo-status-list.js b/docs/assets/javascript/elements/uxdot-repo-status-list.js index 602de66ac6..5672f188df 100644 --- a/docs/assets/javascript/elements/uxdot-repo-status-list.js +++ b/docs/assets/javascript/elements/uxdot-repo-status-list.js @@ -11,6 +11,7 @@ class UxdotRepoStatusList extends LitElement { #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); + margin-block-start: var(--rh-space-lg, 16px); } #header-container { diff --git a/docs/styles/styles.css b/docs/styles/styles.css index 8520c7f97e..5da66aa73d 100644 --- a/docs/styles/styles.css +++ b/docs/styles/styles.css @@ -181,6 +181,10 @@ margin-block-start: var(--rh-space-2xl, 32px); } + :where(uxdot-copy-permalink, h1, h2, h3 ,h4, h5 ,h6) + uxdot-example { + margin-block-start: var(--rh-space-lg, 16px); + } + figure uxdot-example { margin-block-end: 0; } diff --git a/docs/tokens/tokens.html b/docs/tokens/tokens.html index 7734430765..9ec7a92491 100644 --- a/docs/tokens/tokens.html +++ b/docs/tokens/tokens.html @@ -17,13 +17,17 @@ + + - + uxdot-copy-permalink ~ .token-category > uxdot-copy-permalink { + margin-block-start: var(--rh-space-2xl, 32px); + } + {% category path = cat.path or cat.slug, name = cat.path and cat.slug, From 2004aca1e2a511fcb6feeef7770aba3dd85d86aa Mon Sep 17 00:00:00 2001 From: Marionne Patel <95588923+marionnegp@users.noreply.github.com> Date: Tue, 23 Jul 2024 17:06:46 -0400 Subject: [PATCH 15/20] docs: update Typography page (#1711) * fix: add back frontmatter for Color page headings * docs: add subnav and content to Typography page, add text styles for Typography tables * docs(typography): update Style page with tables * docs(typography): add images, alt text, and links * docs(typography): updated capitalization of some words, replaced images for best practices * docs(typography): make table col width the same * docs: move rh-table from basic layout file to typography page's front matter * docs: move css for typography tables to typography page --------- Co-authored-by: Steven Spriggs --- docs/_plugins/rhds.cjs | 17 +- .../typography/type-overview-font-family.png | Bin 0 -> 79130 bytes .../type-usage-best-practice-1-do.svg | 3 + .../type-usage-best-practice-1-dont.svg | 3 + .../type-usage-best-practice-2-do.svg | 3 + .../type-usage-best-practice-2-dont.svg | 3 + .../type-usage-best-practice-3-do.svg | 24 + .../type-usage-best-practice-3-dont.svg | 24 + .../typography/type-usage-blockquote.svg | 5 + .../typography/type-usage-body-text.svg | 5 + .../typography/type-usage-code-text.svg | 3 + .../assets/typography/type-usage-headings.svg | 5 + .../typography/type-usage-line-length.svg | 46 ++ docs/assets/typography/type-usage-title.svg | 4 + docs/foundations/color/accessibility.md | 2 + docs/foundations/color/usage.md | 2 + docs/foundations/typography.md | 524 -------------- docs/foundations/typography/index.md | 77 ++ docs/foundations/typography/scale.md | 666 ++++++++++++++++++ docs/foundations/typography/usage.md | 126 ++++ 20 files changed, 1014 insertions(+), 528 deletions(-) create mode 100644 docs/assets/typography/type-overview-font-family.png create mode 100644 docs/assets/typography/type-usage-best-practice-1-do.svg create mode 100644 docs/assets/typography/type-usage-best-practice-1-dont.svg create mode 100644 docs/assets/typography/type-usage-best-practice-2-do.svg create mode 100644 docs/assets/typography/type-usage-best-practice-2-dont.svg create mode 100644 docs/assets/typography/type-usage-best-practice-3-do.svg create mode 100644 docs/assets/typography/type-usage-best-practice-3-dont.svg create mode 100644 docs/assets/typography/type-usage-blockquote.svg create mode 100644 docs/assets/typography/type-usage-body-text.svg create mode 100644 docs/assets/typography/type-usage-code-text.svg create mode 100644 docs/assets/typography/type-usage-headings.svg create mode 100644 docs/assets/typography/type-usage-line-length.svg create mode 100644 docs/assets/typography/type-usage-title.svg delete mode 100644 docs/foundations/typography.md create mode 100644 docs/foundations/typography/index.md create mode 100644 docs/foundations/typography/scale.md create mode 100644 docs/foundations/typography/usage.md diff --git a/docs/_plugins/rhds.cjs b/docs/_plugins/rhds.cjs index 95566b958b..979f421aa9 100644 --- a/docs/_plugins/rhds.cjs +++ b/docs/_plugins/rhds.cjs @@ -11,11 +11,9 @@ const RHDSAlphabetizeTagsPlugin = require('./alphabetize-tags.cjs'); const RHDSShortcodesPlugin = require('./shortcodes.cjs'); const { parse } = require('async-csv'); -/** @typedef {object} EleventyTransformContext */ /** * Replace paths in demo files from the dev SPA's format to 11ty's format - * @this {EleventyTransformContext} * @param {string} content */ function demoPaths(content) { @@ -189,7 +187,6 @@ module.exports = function(eleventyConfig, { tagsToAlphabetize }) { * NB: since the data for this shortcode is no a POJO, * but a DocsPage instance, 11ty assigns it to this.ctx._ * @see https://github.com/11ty/eleventy/blob/bf7c0c0cce1b2cb01561f57fdd33db001df4cb7e/src/Plugins/RenderPlugin.js#L89-L93 - * @type {import('@patternfly/pfe-tools/11ty/DocsPage').DocsPage} */ const docsPage = this.ctx._; return docsPage.description; @@ -236,6 +233,19 @@ module.exports = function(eleventyConfig, { tagsToAlphabetize }) { }); }); + eleventyConfig.addCollection('sortedTypography', async function(collectionApi) { + const typographyCollection = collectionApi.getFilteredByTags('typography'); + return typographyCollection.sort((a, b) => { + if (a.data.order > b.data.order) { + return 1; + } else if (a.data.order < b.data.order) { + return -1; + } else { + return 0; + } + }); + }); + eleventyConfig.addCollection('sortedDevelopers', async function(collectionApi) { const developersCollection = collectionApi.getFilteredByTags('developers'); return developersCollection.sort((a, b) => { @@ -290,7 +300,6 @@ module.exports = function(eleventyConfig, { tagsToAlphabetize }) { try { const { glob } = await import('glob'); - /** @type {(import('@patternfly/pfe-tools/11ty/DocsPage').DocsPage & { repoStatus?: any[] })[]} */ const elements = await eleventyConfig.globalData?.elements(); const filePaths = (await glob(`elements/*/docs/*.md`, { cwd: process.cwd() })) .filter(x => x.match(/\d{1,3}-[\w-]+\.md$/)); // only include new style docs diff --git a/docs/assets/typography/type-overview-font-family.png b/docs/assets/typography/type-overview-font-family.png new file mode 100644 index 0000000000000000000000000000000000000000..2b5bc26808f926397837816dcf65c835f0361fed GIT binary patch literal 79130 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 + + diff --git a/docs/assets/typography/type-usage-best-practice-1-dont.svg b/docs/assets/typography/type-usage-best-practice-1-dont.svg new file mode 100644 index 0000000000..5b66b2b685 --- /dev/null +++ b/docs/assets/typography/type-usage-best-practice-1-dont.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/typography/type-usage-best-practice-2-do.svg b/docs/assets/typography/type-usage-best-practice-2-do.svg new file mode 100644 index 0000000000..271288d9e7 --- /dev/null +++ b/docs/assets/typography/type-usage-best-practice-2-do.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/typography/type-usage-best-practice-2-dont.svg b/docs/assets/typography/type-usage-best-practice-2-dont.svg new file mode 100644 index 0000000000..ce1d7c87b4 --- /dev/null +++ b/docs/assets/typography/type-usage-best-practice-2-dont.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/typography/type-usage-best-practice-3-do.svg b/docs/assets/typography/type-usage-best-practice-3-do.svg new file mode 100644 index 0000000000..553496f08d --- /dev/null +++ b/docs/assets/typography/type-usage-best-practice-3-do.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/typography/type-usage-best-practice-3-dont.svg b/docs/assets/typography/type-usage-best-practice-3-dont.svg new file mode 100644 index 0000000000..b5981472ba --- /dev/null +++ b/docs/assets/typography/type-usage-best-practice-3-dont.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/typography/type-usage-blockquote.svg b/docs/assets/typography/type-usage-blockquote.svg new file mode 100644 index 0000000000..07e43d1248 --- /dev/null +++ b/docs/assets/typography/type-usage-blockquote.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/typography/type-usage-body-text.svg b/docs/assets/typography/type-usage-body-text.svg new file mode 100644 index 0000000000..403e7a39b6 --- /dev/null +++ b/docs/assets/typography/type-usage-body-text.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/typography/type-usage-code-text.svg b/docs/assets/typography/type-usage-code-text.svg new file mode 100644 index 0000000000..854e40ac99 --- /dev/null +++ b/docs/assets/typography/type-usage-code-text.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/assets/typography/type-usage-headings.svg b/docs/assets/typography/type-usage-headings.svg new file mode 100644 index 0000000000..9b63fbba5c --- /dev/null +++ b/docs/assets/typography/type-usage-headings.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/typography/type-usage-line-length.svg b/docs/assets/typography/type-usage-line-length.svg new file mode 100644 index 0000000000..c065ae54f6 --- /dev/null +++ b/docs/assets/typography/type-usage-line-length.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/typography/type-usage-title.svg b/docs/assets/typography/type-usage-title.svg new file mode 100644 index 0000000000..7dd66b2917 --- /dev/null +++ b/docs/assets/typography/type-usage-title.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/foundations/color/accessibility.md b/docs/foundations/color/accessibility.md index d13b6e61d0..1a820b82cc 100644 --- a/docs/foundations/color/accessibility.md +++ b/docs/foundations/color/accessibility.md @@ -1,6 +1,8 @@ --- layout: layouts/pages/basic.njk title: Accessibility +heading: Color +sidenavTitle: Color hasToc: true tags: - color diff --git a/docs/foundations/color/usage.md b/docs/foundations/color/usage.md index a7da6db159..3b9589a8cf 100644 --- a/docs/foundations/color/usage.md +++ b/docs/foundations/color/usage.md @@ -1,6 +1,8 @@ --- layout: layouts/pages/basic.njk title: Usage +heading: Color +sidenavTitle: Color hasToc: true tags: - color diff --git a/docs/foundations/typography.md b/docs/foundations/typography.md deleted file mode 100644 index 4fa04eec54..0000000000 --- a/docs/foundations/typography.md +++ /dev/null @@ -1,524 +0,0 @@ ---- -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. - - - artwork demonstrating Red Hat Display and Red Hat Text at different font weights - - -
-
-

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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StyleFont / weightSize / 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. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StyleFont / weightSize / 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 - - - Card typography scale on desktop - - -### Mobile - - - Card typography scale on 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/index.md b/docs/foundations/typography/index.md new file mode 100644 index 0000000000..0294d3770a --- /dev/null +++ b/docs/foundations/typography/index.md @@ -0,0 +1,77 @@ +--- +layout: layouts/pages/basic.njk +title: Overview +heading: Typography +sidenavTitle: Typography +order: 70 +hasToc: true +tags: + - foundations + - typography +subnav: + collection: sortedTypography + order: 1 +importElements: + - rh-table +permalink: /foundations/typography/index.html +--- + + + +## Get started + +To download the font files, go to [Google Fonts](https://fonts.google.com/?query=MCKL). To install the fonts using Terminal, go to our [GitHub repo](https://github.com/RedHatOfficial/RedHatFont). If you need further assistance, contact the [Brand team](https://brand.redhat.com/) or the [Design System team](https://ux.redhat.com/support/). + +## Font family + +The words we choose are an important part of our brand voice and so is the way those words look. The way our words look is established by the fonts we use and the way we use them, also known as typography. The Red Hat font family was designed by type designer Jeremy Mickel in collaboration with the Brand team. To learn more our fonts and typography, go to the [Brand standards](https://www.redhat.com/en/about/brand/standards) website. + + +  3 examples of the Red Hat font family: Display, Text, and Mono. Each example shows a capital letter R and lowercase letter H with overlays pointing out unique design characteristics. + + +### Red Hat Display + +Red Hat Display is used in headlines and to make big statements. Because Red Hat Display is intended for large sizes, it has more of our brand personality and voice. + +### Red Hat Text + +Red Hat Text takes all of the personality from Red Hat Display and optimizes it for more demanding applications. It is easy to read in paragraphs and very small sizes. + +### Red Hat Mono + +Red Hat Mono is our monospaced font that was created to distinguish code from other text. It should only be used when demonstrating code snippets in our communications and specifications. + +## International + +Designs that need to use non-Latin characters should fall back to [Noto Sans](https://fonts.google.com/noto/specimen/Noto+Sans). By loading language-specific fonts, the design system can accommodate mixed-language content. For more technical details, go to the [Tokens](https://ux.redhat.com/tokens/font/) section. + + + + + + + + + + + + + + + + + + + + + + + +
LanguageFont family
ChineseNoto Sans Simplified Chinese
JapaneseNoto Sans Japanese
KoreanNoto Sans Korean
+
+ + +

Foundations

+

To learn how to use our other foundations in your designs, visit the foundations section.

+
\ No newline at end of file diff --git a/docs/foundations/typography/scale.md b/docs/foundations/typography/scale.md new file mode 100644 index 0000000000..1136d9f13e --- /dev/null +++ b/docs/foundations/typography/scale.md @@ -0,0 +1,666 @@ +--- +layout: layouts/pages/basic.njk +title: Scale +heading: Typography +sidenavTitle: Typography +hasToc: true +tags: + - typography +subnav: + collection: sortedTypography + order: 2 +importElements: + - rh-table +permalink: /foundations/typography/scale.html +--- + + + + + +## Overview + +The type scale includes a range of text sizes and weights designed to support various content needs. There are type scales for both desktop and mobile environments. For more technical details, go to the [Tokens](https://ux.redhat.com/tokens/font/) section. + +## Desktop scale + +### Heading + +You might see headings with larger sizes or different weights. Those are used for limited bespoke use cases only. Contact the [Brand team](https://brand.redhat.com/) to learn more about using heading sizes and weights different from the table below. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StyleFont familyFont weightFont sizeLine height
Heading, 2xlRed Hat DisplayRegular (400)48 (3.0rem)62.4 (1.3)
Heading, xlRed Hat DisplayRegular (400)40 (2.5rem)52 (1.3)
Heading, lgRed Hat DisplayMedium (500)36 (2.25rem)46.8 (1.3)
Heading, mdRed Hat DisplayMedium (500)28 (1.75rem)36.4 (1.3)
Heading, smRed Hat DisplayMedium (500)24 (1.5rem)31.2 (1.3)
Heading, xsRed Hat DisplayMedium (500)20 (1.25rem)26 (1.3)
+
+ +### Body text + +Body text can use italic and medium styles for emphasis. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StyleFont familyFont weightFont sizeLine height
Body text, 2xlRed Hat TextRegular (400)24 (1.5rem)36 (1.5)
Body text, xlRed Hat TextRegular (400)20 (1.25rem)30 (1.5)
Body text, lgRed Hat TextRegular (400)18 (1.125rem)27 (1.5)
Body text, mdRed Hat TextRegular (400)16 (1.0rem)24 (1.5)
Body text, smRed Hat TextRegular (400)14 (0.875rem)21 (1.5)
Body text, xsRed Hat TextRegular (400)12 (0.75rem)18 (1.5)
+
+ +### Code text + +Code text may use italic and medium styles for emphasis if absolutely necessary. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StyleFont familyFont weightFont sizeLine height
Code text, 2xlRed Hat MonoRegular (400)24 (1.5rem)36 (1.5)
Code text, xlRed Hat MonoRegular (400)20 (1.25rem)30 (1.5)
Code text, lgRed Hat MonoRegular (400)18 (1.125rem)27 (1.5)
Code text, mdRed Hat MonoRegular (400)16 (1.0rem)24 (1.5)
Code text, smRed Hat MonoRegular (400)14 (0.875rem)21 (1.5)
Code text, xsRed Hat MonoRegular (400)12 (0.75rem)18 (1.5)
+
+ +### Title + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StyleFont familyFont weightFont sizeLine height
Title, lgRed Hat TextRegular (400)24 (1.5rem)36 (1.5)
Title, smRed Hat TextRegular (400)16 (1.0rem)24 (1.5)
+
+ +### Blockquote + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StyleFont familyFont weightFont sizeLine height
Blockquote, lgRed Hat DisplayRegular (400)28 (1.75rem)36.4 (1.3)
Blockquote, smRed Hat DisplayRegular (400)20 (1.25rem)26 (1.3)
+
+ +## Mobile scale + +The mobile scale takes effect when the viewport size is less than 768px. + +### Heading + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StyleFont familyFont weightFont sizeLine height
Heading, 2xlRed Hat DisplayRegular (400) +

48 (3.0rem)

+

Reduces to 35

+
+

62.4 (1.3)

+

45.5 (1.3)

+
Heading, xlRed Hat DisplayRegular (400) +

40 (2.5rem)

+

Reduces to 29

+
+

52 (1.3)

+

37.7 (1.3)

+
Heading, lgRed Hat DisplayMedium (500) +

36 (2.25rem)

+

Reduces to 26

+
+

46.8 (1.3)

+

33.8 (1.3)

+
Heading, mdRed Hat DisplayMedium (500) +

28 (1.75rem)

+

Reduces to 24

+
+

36.4 (1.3)

+

31.2 (1.3)

+
Heading, smRed Hat DisplayMedium (500) +

24 (1.5rem)

+

Reduces to 20

+
+

31.2 (1.3)

+

26 (1.3)

+
Heading, xsRed Hat DisplayMedium (500) +

20 (1.25rem)

+

Reduces to 18

+
+

26 (1.3)

+

23.4 (1.3)

+
+
+ +### Body text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StyleFont familyFont weightFont sizeLine height
Body text, 2xlRed Hat TextRegular (400) +

24 (1.5rem)

+

Reduces to 20

+
+

36 (1.5)

+

30 (1.5)

+
Body text, xlRed Hat TextRegular (400) +

20 (1.25rem)

+

Reduces to 18

+
+

30 (1.5)

+

27 (1.5)

+
Body text, lgRed Hat TextRegular (400) +

18 (1.125rem)

+

Reduces to 16

+
+

27 (1.5)

+

24 (1.5)

+
Body text, mdRed Hat TextRegular (400) +

16 (1.0rem)

+

Does not change

+
24 (1.5)
Body text, smRed Hat TextRegular (400) +

14 (0.875rem)

+

Does not change

+
21 (1.5)
Body text, xsRed Hat TextRegular (400) +

12 (0.75rem)

+

Does not change

+
18 (1.5)
+
+ +### Code text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StyleFont familyFont weightFont sizeLine height
Code text, 2xlRed Hat MonoRegular (400) +

24 (1.5rem)

+

Reduces to 20

+
+

36 (1.5)

+

30 (1.5)

+
Code text, xlRed Hat MonoRegular (400) +

20 (1.25rem)

+

Reduces to 18

+
+

30 (1.5)

+

27 (1.5)

+
Code text, lgRed Hat MonoRegular (400) +

18 (1.125rem)

+

Reduces to 16

+
+

27 (1.5)

+

24 (1.5)

+
Code text, mdRed Hat MonoRegular (400) +

16 (1.0rem)

+

Does not change

+
24 (1.5)
Code text, smRed Hat MonoRegular (400) +

14 (0.875rem)

+

Does not change

+
21 (1.5)
Code text, xsRed Hat MonoRegular (400) +

12 (0.75rem)

+

Does not change

+
18 (1.5)
+
+ +### Title + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StyleFont familyFont weightFont sizeLine height
Title, lgRed Hat TextRegular (400) +

24 (1.5rem)

+

Reduces to 20

+
+

36 (1.5)

+

30 (1.5)

+
Title, smRed Hat TextRegular (400) +

16 (1.0rem)

+

Does not change

+
24 (1.5)
+
+ +### Blockquote + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StyleFont familyFont weightFont sizeLine height
Blockquote, lgRed Hat DisplayRegular (400) +

28 (1.75rem)

+

Reduces to 24

+
+

36.4 (1.3)

+

31.2 (1.3)

+
Blockquote, smRed Hat DisplayRegular (400) +

20 (1.25rem)

+

Reduces to 18

+
+

26 (1.3)

+

23.4 (1.3)

+
+
+ + +

Foundations

+

To learn how to use our other foundations in your designs, visit the foundations section.

+
\ No newline at end of file diff --git a/docs/foundations/typography/usage.md b/docs/foundations/typography/usage.md new file mode 100644 index 0000000000..d44eb5621b --- /dev/null +++ b/docs/foundations/typography/usage.md @@ -0,0 +1,126 @@ +--- +layout: layouts/pages/basic.njk +title: Usage +heading: Typography +sidenavTitle: Typography +hasToc: true +tags: + - typography +subnav: + collection: sortedTypography + order: 3 +permalink: /foundations/typography/usage.html +--- + + + +## Using styles + +### Headings + +Headings are used to establish hierarchy and introduce content. + + + 3 examples of headings: Large, medium, and small. + + +### Body text + +Body text is used for blocks of text including inline links and lists. Do not center align too many lines of body text. + + + Example of body text with an inline link. + + +### Code text + +Code text is used for code snippets or to style text for technical audiences. Do not center align code text. + + + Example of code text with 3 lines. + + +### Title + +Titles are used above content to explain what can be expected underneath. Titles should always be sentence case and never uppercase. + + + 2 examples of titles: Small and large. + + +### Blockquote + +A blockquote is a combination of a quote icon and text styles used to add emphasis to quotes. A blockquote should always include attribution. The name is always medium weight and the company name is always italic. + + + + Example of blockquote with quote icon and attribution. + + +## Line length + +Shorter lines of text tend to be more comfortable to read. As line length increases, the eye has to travel further from the end of one line to the beginning of the next line, making it difficult to focus and keep track of progress. + +If you are placing text by itself on a grid, a comfortable line length is between 6 and 8 columns. When text is in a fluid layout, set the max-width to 50rem (800px). When text is in a component like a card, the line length is determined by the width of the component. + + + 2 examples of line length: The first example shows that comfortable text is between 4 and 8 columns wide. The second example shows that comfortable text is no more than 800 pixels wide. + + +## Best practices + +### Using headings + +
+ + + Example of a heading set correctly in Red Hat Display. + +

Use the correct font family for the correct use case.

+
+ + + Example of a heading set incorrectly in Red Hat Text. + +

Do not use Red Hat Text for headings.

+
+
+ +### Using body text + +
+ + + Example of body text set correctly in Red Hat Text. + +

Use the correct font family for the correct use case.

+
+ + + Example of body text set incorrectly in Red Hat Display. + +

Do not use Red Hat Display for blocks of body text on websites.

+
+
+ +### Spacing in between text styles + +
+ + + Example of comfortable spacing in between various text styles which is correct. + +

Use comfortable spacing in between text styles.

+
+ + + Example of uncomfortable spacing in between various text styles which is incorrect. + +

Do not space text too close together. Ensure users can read each style separately.

+
+
+ + +

Foundations

+

To learn how to use our other foundations in your designs, visit the foundations section.

+
\ No newline at end of file From cf0ec84f7dc8f08de163e4db0b34655321eba3fb Mon Sep 17 00:00:00 2001 From: Steven Spriggs Date: Wed, 24 Jul 2024 09:38:18 -0400 Subject: [PATCH 16/20] docs: add version number to masthead (#1723) * docs: add version number to masthead * docs: masthead style tweaks --- .../_includes/partials/component/masthead.njk | 5 ++- .../elements/uxdot-masthead-lightdom.css | 39 ++++++++----------- .../javascript/elements/uxdot-masthead.js | 35 +++++------------ 3 files changed, 30 insertions(+), 49 deletions(-) diff --git a/docs/_includes/partials/component/masthead.njk b/docs/_includes/partials/component/masthead.njk index 0e4ab9878e..aef3cfc82c 100755 --- a/docs/_includes/partials/component/masthead.njk +++ b/docs/_includes/partials/component/masthead.njk @@ -6,7 +6,8 @@ Red Hat Design System logo - - Contribute on Github + Contribute on Github + + v{{ pkg.version }} diff --git a/docs/assets/javascript/elements/uxdot-masthead-lightdom.css b/docs/assets/javascript/elements/uxdot-masthead-lightdom.css index 590bf30a1e..5d22be7a37 100644 --- a/docs/assets/javascript/elements/uxdot-masthead-lightdom.css +++ b/docs/assets/javascript/elements/uxdot-masthead-lightdom.css @@ -3,29 +3,24 @@ uxdot-masthead { 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; +uxdot-masthead a[slot="links"] { + color: var(--rh-color-text-primary-on-dark, #ffffff) !important; +} + +uxdot-masthead a[slot="links"]:is(:hover, :focus) { + color: var(--rh-color-icon-subtle-hover, #a3a3a3) !important; +} + +uxdot-masthead [slot="links"] span.display-xs { + display: none; +} + +uxdot-masthead a[slot="links"]:last-of-type { + margin-inline-end: var(--rh-space-md, 8px); } @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; + uxdot-masthead [slot="links"] span.display-xs { + display: inline; } -} \ No newline at end of file +} diff --git a/docs/assets/javascript/elements/uxdot-masthead.js b/docs/assets/javascript/elements/uxdot-masthead.js index 3a526c1491..7e27652168 100644 --- a/docs/assets/javascript/elements/uxdot-masthead.js +++ b/docs/assets/javascript/elements/uxdot-masthead.js @@ -16,7 +16,7 @@ class UxdotMasthead extends LitElement { #container { display: grid; - gap: var(--rh-space-lg, 16px); + column-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); @@ -56,22 +56,22 @@ class UxdotMasthead extends LitElement { display: flex; flex-direction: row; align-items: center; + justify-self: flex-start; gap: var(--rh-space-md, 8px); } - slot[name="links"]::slotted(a) { - --pf-icon--size: 28px; + slot[name="links"] { + --pf-icon--size: 24px; + display: flex; + flex-direction: row; + column-gap: var(--rh-space-lg, 16px); + } + slot[name="links"]::slotted(a) { 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) { @@ -79,21 +79,11 @@ class UxdotMasthead extends LitElement { 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; + grid-template-columns: 1fr max-content; } slot[name="hamburger"] { @@ -103,11 +93,6 @@ class UxdotMasthead extends LitElement { slot[name="logo"]::slotted(a) { margin-inline-start: var(--rh-space-lg, 16px); } - - slot[name="links"]::slotted(a) { - - gap: var(--rh-space-md, 8px); - } } `; From 509ce81a90594ab6884e52beabab29e33ec4f606 Mon Sep 17 00:00:00 2001 From: Mark Caron Date: Thu, 25 Jul 2024 13:40:02 -0400 Subject: [PATCH 17/20] docs(devs-start): about web components (#1687) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs(devs-start): Adding About WCs content * Update docs/get-started/developers/index.md Co-authored-by: Benny Powers - עם ישראל חי! * Update docs/get-started/developers/index.md Co-authored-by: Benny Powers - עם ישראל חי! * docs: revisions * docs: revisions * docs(get-started): capitalizing Web Components * docs(start-dev): adding why Web Components images * docs(devs-start): adding cards and improving mobile styles * docs(devs-start): content edits per Greg * docs(devs-start) content edits per Adam, grid CSS updates * docs(devs-start): content edits per Marionne, grid update * docs(devs-start): replace WC APIs SVG * docs(devs-start): minor mobile style tweaks --------- Co-authored-by: Benny Powers - עם ישראל חי! Co-authored-by: Benny Powers --- docs/get-started/developers/index.md | 226 ++++++++++++++++++++++++--- docs/styles/grid.css | 27 ++++ 2 files changed, 234 insertions(+), 19 deletions(-) diff --git a/docs/get-started/developers/index.md b/docs/get-started/developers/index.md index 43a9c177bf..0160ef2da8 100644 --- a/docs/get-started/developers/index.md +++ b/docs/get-started/developers/index.md @@ -11,8 +11,40 @@ subnav: collection: sortedDevelopers order: 00 order: 20 +importElements: + - rh-card + - rh-cta --- + + ## Introduction @@ -25,33 +57,189 @@ Read this section to get started and e-mail [design-system@redhat.com](mailto:de 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.

+
+ + +

Foundations

+

Foundations are how we express our brand through color, space, typography, etc.

+ + Our foundations + +
+ + +

Design tokens

+

Design tokens are how we translate our design language decisions into code.

+ + Our design tokens + +
+ + +

Documentation

+

This website offers guidance about how to use our + elements and patterns. + Learn how to apply them accessibily with + developer-specific guidelines.

+ + Our elements + +
+ + +

GitHub repositories

+

Explore our code, roadmaps, and discussions in the + Red Hat Design System repo and the + Red Hat Design Tokens repo.

+ + View our repos + +
+
+ + +## About Web Components + +### What are Web Components? + +Every Web Component is a custom HTML element. Web Components are made with standard web platform APIs, and not only with JavaScript frameworks. Those standards include: + +- [Custom Elements][ce] +- [Shadow DOM][sd] +- [HTML templates][te] +- [CSS Custom Properties][cssprop] and [Shadow Parts][csspart] +- [Element Internals][internals] +- [ECMAScript Modules][esm] +- _and others_ + +These standards combine to enable developers to write reusable and encapsulated UI elements which work with the browser's built-in component model. + +### Why Web Components? + +
+ +
+ +#### Encapsulation + +Web Components encapsulate their templates, styles, and behavior. They establish a strong boundary between the component's internals and the rest of the website, letting developers write more modular code while avoiding conflicts with page-level CSS and JS. This hides complex logic and templating from the rest of the page's UI, which helps to ship design systems and applications at scale. In addition to encapsulating styles, Web Components can ship complex accessibility patterns, making it easier for page authors to provide accessible, rich experiences. +
-
-

GitHub repositories

-

Explore our code, roadmaps, and discussions in the Red Hat Design System repo and the Red Hat Design Tokens repo.

+
+
+ +
+ +#### Web standards APIs + +Because Web Components are built with web standards, the technology is future-proofed, reliable, and supported by every modern browser. As the browser's native component model, Web Components continually benefit from new specifications and features as they are added to the web platform (e.g.,[Scoped Custom Element Registries][scoped]). +
-
+
+
+ +
+ +#### Framework agnostic +Web Components are framework agnostic, meaning they can be used in any JavaScript framework which outputs HTML. This allows Red Hat to build and maintain a single Design System library that can be used across the entire enterprise. Engineers can then switch frameworks, if necessary, without throwing away all their work. Web Components help to break down silos, increase collaboration, and reduce duplication of effort. -## About web components +
+
+ +### How do Web Components affect performance? -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 the code which delineates the component model for Web Components is already a part of your users' browser, they do not need to rely on client-side JavaScript in the same way that framework components do. We have observed that adding several of our design systems' components to an app increased the bundle size by an amount _less than the weight of the `react-dom` library_. Much of that JavaScript payload consists of HTML and CSS, which compresses well and executes efficiently. Advanced techniques like SSR of [Declarative Shadow DOM templates][dsd] can help to reduce loading times and cumulative layout shift. -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. +We anticipate that if HTML modules and CSS modules become widely implemented in browsers, that something like [Declarative Custom Elements][dce] will make shipping design system elements in plain `.html` files feasible.

Designers

To get started using our design system as a designer, go to the Designers page.

+ +[ce]: https://html.spec.whatwg.org/dev/custom-elements.html#custom-elements +[sd]: https://dom.spec.whatwg.org/#shadow-trees +[te]: https://html.spec.whatwg.org/dev/scripting.html#the-template-element +[cssprop]: https://www.w3.org/TR/css-variables/ +[csspart]: https://www.w3.org/TR/css-shadow-parts-1/ +[internals]: https://html.spec.whatwg.org/dev/custom-elements.html#element-internals +[esm]: https://tc39.es/ecma262/multipage/ecmascript-language-scripts-and-modules.html#sec-modules +[scoped]: https://github.com/WICG/webcomponents/blob/gh-pages/proposals/Scoped-Custom-Element-Registries.md +[dsd]: https://html.spec.whatwg.org/dev/scripting.html#attr-template-shadowrootmode +[dce]: https://github.com/WICG/webcomponents/issues/1009 diff --git a/docs/styles/grid.css b/docs/styles/grid.css index 41282d343a..044d973147 100644 --- a/docs/styles/grid.css +++ b/docs/styles/grid.css @@ -29,3 +29,30 @@ grid-template-columns: 1fr 1fr 1fr; } } + +/* content with image layout */ +/* TODO: possibly a separate layout pattern */ +.layout-content-image { + grid-template-rows: auto; + grid-template-areas: "image" "content"; +} + +.layout-content-image > .content-block { + grid-area: content; +} + +.layout-content-image > .image-block { + grid-area: image; +} + +@container container (min-width: 768px) { + .layout-content-image { + grid-template-columns: 2fr 1fr; + grid-template-areas: "content image"; + } + + .layout-content-image.reversed { + grid-template-columns: 1fr 2fr; + grid-template-areas: "image content"; + } +} \ No newline at end of file From be2565fe40f566765a9e20e386451d1d616cff00 Mon Sep 17 00:00:00 2001 From: Mark Caron Date: Fri, 26 Jul 2024 14:05:35 -0400 Subject: [PATCH 18/20] docs(devs-start): fixing usage and tokens code blocks (#1724) --- docs/get-started/developers/tokens.md | 112 ++++++++++---------------- docs/get-started/developers/usage.md | 73 +++++++---------- docs/styles/styles.css | 2 +- 3 files changed, 75 insertions(+), 112 deletions(-) diff --git a/docs/get-started/developers/tokens.md b/docs/get-started/developers/tokens.md index c384f8e4dd..69728cbd45 100644 --- a/docs/get-started/developers/tokens.md +++ b/docs/get-started/developers/tokens.md @@ -8,6 +8,8 @@ permalink: /get-started/developers/tokens/index.html subnav: collection: sortedDevelopers order: 30 +importElements: + - rh-code-block --- ## How to install tokens @@ -15,9 +17,7 @@ subnav: Run the following git command to install RHDS tokens: - + @@ -31,14 +31,12 @@ We use [style-dictionary](https://amzn.github.io/style-dictionary/) to transform Apply defaults to the document root by importing the global stylesheet: - + @@ -47,17 +45,13 @@ Apply defaults to the document root by importing the global stylesheet: Reset a component's styles (preventing inheritance) by adding resetStyles to its static Constructible Style Sheet list: - - - + + @@ -71,25 +65,17 @@ Reset a component's styles (preventing inheritance) by adding resetStyles to its Import tokens as JavaScript objects: - - - + + -or for tree-shakable imports: +Or tree-shakable imports: - - - + + @@ -100,9 +86,7 @@ or for tree-shakable imports: Editor snippets complete prefixes like `--rh-color-brand` to their CSS custom properties, complete with fallback. - + 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`. @@ -118,12 +102,10 @@ Download the VSIX bundle that’s linked at the bottom of our [“Release v1.0.0 Use LuaSnip to load snippets in Neovim: - + @@ -146,28 +128,22 @@ Vim users can load the [vim-hexokinase](https://github.com/RRethy/vim-hexokinase Use the following config (lua syntax, for Neovim users) to configure hexokinase to display color values next to color aliases like `{color.brand.red}`. - - - - - + + + diff --git a/docs/get-started/developers/usage.md b/docs/get-started/developers/usage.md index 4e5dfa25d2..5b9b15f78f 100644 --- a/docs/get-started/developers/usage.md +++ b/docs/get-started/developers/usage.md @@ -27,9 +27,7 @@ React wrappers make it possible to use web components within React JSX files. Fo 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. - + This command will ask you to provide the project name, framework, and variant. @@ -40,9 +38,7 @@ This command will ask you to provide the project name, framework, and variant. Use the following command: - + @@ -53,27 +49,22 @@ to your file. Below is an example of importing `` and ``, an managing app state between them using react. - + @@ -87,10 +78,8 @@ To get web components to work with Vue, it’s pretty easy and straightforward. Add these two lines at the top of the `main.js` file in the `/src/` directory. - + @@ -99,24 +88,22 @@ Add these two lines at the top of the `main.js` file in the `/src/` directory. Add the import statements to the top of the ` + ## Other resources - [Red Hat Design System Wiki](https://github.com/RedHat-UX/red-hat-design-system/wiki) -- [Red Hat Brand Standard](https://www.redhat.com/en/about/brand/standards) +- [Red Hat Brand Standards](https://www.redhat.com/en/about/brand/standards)

Designers

diff --git a/docs/styles/styles.css b/docs/styles/styles.css index 5da66aa73d..8ae748de91 100644 --- a/docs/styles/styles.css +++ b/docs/styles/styles.css @@ -331,6 +331,6 @@ 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; + font-size: var(--rh-font-size-body-text-md, 1rem) !important; } } From b661bebb1979d157f8a98edbe4943cba2439ed25 Mon Sep 17 00:00:00 2001 From: Mark Caron Date: Fri, 26 Jul 2024 14:23:10 -0400 Subject: [PATCH 19/20] docs(nav): fixing broken link on Nav element Overview (#1726) docs(nav): fixing broken link Co-authored-by: Adam Johnson --- elements/rh-navigation/docs/00-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elements/rh-navigation/docs/00-overview.md b/elements/rh-navigation/docs/00-overview.md index 1ed717f8f5..d523225bce 100644 --- a/elements/rh-navigation/docs/00-overview.md +++ b/elements/rh-navigation/docs/00-overview.md @@ -13,4 +13,4 @@ every page to ensure a consistent user experience across websites. ## Demos View a live version of this component to see how it can be customized. -View this component in action +View this component in action From 14ae69782d6cb7e6bbe45487e53167e22f095b9e Mon Sep 17 00:00:00 2001 From: Zack Hawkins Date: Fri, 2 Aug 2024 10:21:22 -0400 Subject: [PATCH 20/20] docs: quick and dirty icon update for in progress elements (#1734) * docs: quick and dirty icon update for in progress elements * docs: improve upon the icon placement in sidenav and header * docs: improve upon the icon placement in sidenav and header --------- Co-authored-by: Zack Hawkins Co-authored-by: Steven Spriggs --- CONTRIBUTING_DESIGN.md | 2 +- docs/_data/repoStatus.yaml | 26 ++++++++++++++++++- docs/_includes/layouts/base.njk | 9 +++++++ docs/_includes/layouts/pages/basic.njk | 1 + docs/_includes/layouts/pages/elements.njk | 7 +++-- docs/_includes/layouts/pages/home.njk | 1 + docs/_includes/layouts/pages/tokens.njk | 2 ++ docs/_includes/partials/component/sidenav.njk | 4 ++- 8 files changed, 47 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING_DESIGN.md b/CONTRIBUTING_DESIGN.md index f4a2af1ffc..120057cbe2 100644 --- a/CONTRIBUTING_DESIGN.md +++ b/CONTRIBUTING_DESIGN.md @@ -10,7 +10,7 @@ contributing guide](./CONTRIBUTING_DEV.md#prerequisites) Once set up, run the 11ty development server with the following command: ```bash -npm run watch:docs +npm run serve ``` This will start eleventy and a watch process that will reload the site if `*.njk`, `*.md`, `*.scss`, diff --git a/docs/_data/repoStatus.yaml b/docs/_data/repoStatus.yaml index 55c08846a7..b9619a9cdf 100644 --- a/docs/_data/repoStatus.yaml +++ b/docs/_data/repoStatus.yaml @@ -167,6 +167,18 @@ status: N/A - name: Documentation status: Ready +- name: "Navigation (primary)" + type: "Element" + overallStatus: "Planned" + libraries: + - name: Figma library + status: Planned + - name: RH Elements + status: Planned + - name: RH Shared Libs + status: Planned + - name: Documentation + status: Planned - name: "Navigation Secondary" type: "Element" overallStatus: "Available" @@ -198,11 +210,23 @@ - name: Figma library status: Ready - name: RH Elements - status: Ready + status: Planned - name: WebRH status: Ready - name: Documentation status: Ready +- name: "Progress steps" + type: "Element" + overallStatus: "Available" + libraries: + - name: Figma library + status: Ready + - name: RH Elements + status: Planned + - name: WebRH + status: Ready + - name: Documentation + status: Ready - name: "Skip Link" type: "Element" overallStatus: "New" diff --git a/docs/_includes/layouts/base.njk b/docs/_includes/layouts/base.njk index 8ba7fe5695..696f5ae58b 100644 --- a/docs/_includes/layouts/base.njk +++ b/docs/_includes/layouts/base.njk @@ -1,3 +1,12 @@ +---js +{ + isPlanned: function(repoStatus, name) { + const element = repoStatus.find(element => element.name === name); + return element && element.libraries.find(library => library.name === 'RH Elements').status === "Planned"; + } +} +--- + {%- set extraPageClasses = bodyClasses or "" -%} {%- if title -%} {% set extraPageClasses = extraPageClasses + ' page-' + title | slug -%} diff --git a/docs/_includes/layouts/pages/basic.njk b/docs/_includes/layouts/pages/basic.njk index 51582c7ce9..c125f3596d 100755 --- a/docs/_includes/layouts/pages/basic.njk +++ b/docs/_includes/layouts/pages/basic.njk @@ -5,6 +5,7 @@ importElements: - rh-footer - rh-alert - rh-subnav + - rh-tag --- diff --git a/docs/_includes/layouts/pages/elements.njk b/docs/_includes/layouts/pages/elements.njk index 2c9532cbb4..381df39f6f 100644 --- a/docs/_includes/layouts/pages/elements.njk +++ b/docs/_includes/layouts/pages/elements.njk @@ -5,7 +5,6 @@ eleventyComputed: title: "{{ doc.pageTitle }} | {{ slug | deslugify }}" importElements: - rh-alert - - rh-tag - rh-cta - rh-footer - rh-subnav @@ -13,6 +12,7 @@ eleventyComputed: - rh-table - rh-accordion - rh-badge + - rh-tag - "{{ doc.tagName or element.tagName }}" --- {%- if hasToc %} @@ -56,7 +56,10 @@ eleventyComputed:
0 %}class="has-toc"{% endif %}> -

{{ doc.alias or (slug | deslugify) }}

+ {%- set inProgress = doc.docsPage.manifest -%} + {%- set name = (doc.alias) or (slug | deslugify) %} + {%- set planned = isPlanned(repoStatus, name) %} +

{{ name }}{% if planned %} Planned{% endif %}

{%- set manifest = doc.docsPage.manifest -%} {%- set demos = manifest and manifest.getDemos(doc.docsPage.tagName) -%} {%- set demosUrl -%}/elements/{{ slug }}/demos/{%- endset -%} diff --git a/docs/_includes/layouts/pages/home.njk b/docs/_includes/layouts/pages/home.njk index 559759c2f7..a64774ae82 100755 --- a/docs/_includes/layouts/pages/home.njk +++ b/docs/_includes/layouts/pages/home.njk @@ -3,6 +3,7 @@ layout: layouts/base.njk importElements: - rh-cta - rh-footer + - rh-tag --- {% include 'partials/component/masthead.njk' %} diff --git a/docs/_includes/layouts/pages/tokens.njk b/docs/_includes/layouts/pages/tokens.njk index 306cca7057..5c42328190 100644 --- a/docs/_includes/layouts/pages/tokens.njk +++ b/docs/_includes/layouts/pages/tokens.njk @@ -1,5 +1,7 @@ --- layout: layouts/base.njk +importElements: + - rh-tag ---