From 4af58ddd7b44b359fb9345f5d5738659033c40b3 Mon Sep 17 00:00:00 2001 From: Erin Donehoo Date: Thu, 21 Sep 2023 14:11:37 -0400 Subject: [PATCH 01/96] docs(design-tokens): creates documentation for design tokens. --- .../design-tokens/all-design-tokens.md | 6 +++ .../content/design-tokens/design-tokens.md | 41 ++++++++++++++++++ .../img/design-layers-example.png | Bin 0 -> 52222 bytes 3 files changed, 47 insertions(+) create mode 100644 packages/documentation-site/patternfly-docs/content/design-tokens/all-design-tokens.md create mode 100644 packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md create mode 100644 packages/documentation-site/patternfly-docs/content/design-tokens/img/design-layers-example.png diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/all-design-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/all-design-tokens.md new file mode 100644 index 0000000000..e04ad11902 --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/all-design-tokens.md @@ -0,0 +1,6 @@ +--- +id: All design tokens +title: All PatternFly design tokens +section: design-tokens +--- + diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md new file mode 100644 index 0000000000..6ec04fbd18 --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md @@ -0,0 +1,41 @@ +--- +id: About +title: PatternFly design tokens +section: design-tokens +--- + +# Design tokens + +## What are design tokens + +Design tokens are variables that store visual design attributes, like color, typography, and spacing. A design token has a name and value that represents the visual design information it contains. + +Visit the all tokens page for a complete list of PatternFly design tokens. + + +## Why use design tokens + +## How to understand PatternFly design tokens + +### Token layers + +![Design layers example](./img/design-layers-example.png) + +#### Palette layer + +Just the color palettes + +same idea as current color paletter variables + +#### Base layer + +“Palette” of tokens that the semantic layer can choose from +Grouped conceptually, named numerically +No duplicates within token concept groups + +### Semantic layer + +Top level tokens that we know and love +Grouped conceptually, named semantically +Reference base tokens, but can also reference other semantic tokens + diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/img/design-layers-example.png b/packages/documentation-site/patternfly-docs/content/design-tokens/img/design-layers-example.png new file mode 100644 index 0000000000000000000000000000000000000000..d1b7c75e6c45943206d4fb6c3b6f35e452ccd9a6 GIT binary patch literal 52222 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 Date: Thu, 28 Sep 2023 14:58:05 -0400 Subject: [PATCH 02/96] Working on design tokens doc structure. --- .../design-tokens/all-design-tokens.md | 6 ---- .../content/design-tokens/design-tokens.md | 30 ++++++------------ .../design-tokens/designing-with-tokens.md | 5 +++ .../design-tokens/developing-with-tokens.md | 5 +++ .../content/design-tokens/migrate-to-tokens | 5 +++ .../design-tokens/patternfly-tokens.md | 31 +++++++++++++++++++ 6 files changed, 56 insertions(+), 26 deletions(-) delete mode 100644 packages/documentation-site/patternfly-docs/content/design-tokens/all-design-tokens.md create mode 100644 packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md create mode 100644 packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md create mode 100644 packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens create mode 100644 packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/all-design-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/all-design-tokens.md deleted file mode 100644 index e04ad11902..0000000000 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/all-design-tokens.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -id: All design tokens -title: All PatternFly design tokens -section: design-tokens ---- - diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md index 6ec04fbd18..595d99f273 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md @@ -1,6 +1,6 @@ --- id: About -title: PatternFly design tokens +title: Design tokens section: design-tokens --- @@ -10,32 +10,22 @@ section: design-tokens Design tokens are variables that store visual design attributes, like color, typography, and spacing. A design token has a name and value that represents the visual design information it contains. -Visit the all tokens page for a complete list of PatternFly design tokens. -## Why use design tokens +## Why use tokens -## How to understand PatternFly design tokens +Using design tokens helps maintain consistency across product design processes by ensuring that designers use the same colors for the same use cases. -### Token layers +Tokens also allow for easier maintenance design updates. If a color changes as part of a redesign or update, developers won't have to make any changes to code. Any time a token is changed, it will update automatically and apply to all instances of use. -![Design layers example](./img/design-layers-example.png) +## How to read tokens -#### Palette layer -Just the color palettes +For a more detailed breakdown, visit the PatternFly tokens documentation. -same idea as current color paletter variables +## Examples of token use -#### Base layer - -“Palette” of tokens that the semantic layer can choose from -Grouped conceptually, named numerically -No duplicates within token concept groups - -### Semantic layer - -Top level tokens that we know and love -Grouped conceptually, named semantically -Reference base tokens, but can also reference other semantic tokens +[images] +Start designing +Start developing diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md new file mode 100644 index 0000000000..f5d293d3af --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md @@ -0,0 +1,5 @@ +--- +id: Design with tokens +title: Design with PatternFly tokens +section: design-tokens +--- diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md new file mode 100644 index 0000000000..5906350f99 --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md @@ -0,0 +1,5 @@ +--- +id: Develop with tokens +title: Develop with PatternFly tokens +section: design-tokens +--- diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens new file mode 100644 index 0000000000..5e8ef9a065 --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens @@ -0,0 +1,5 @@ +--- +id: Migrate to tokens +title: Migrate to PatternFly tokens +section: design-tokens +--- diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md new file mode 100644 index 0000000000..ca3b357ff7 --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md @@ -0,0 +1,31 @@ +--- +id: PatternFly tokens +title: PatternFly tokens +section: design-tokens +--- + +## How to read PatternFly tokens + +PatternFly tokens have 3 layers: a palette layer, a base layer, and a semantic layer. + +![Design layers example](./img/design-layers-example.png) + +### Palette layer + +Just the color palettes + +same idea as current color paletter variables + +### Base layer + +“Palette” of tokens that the semantic layer can choose from +Grouped conceptually, named numerically +No duplicates within token concept groups + +### Semantic layer + +Top level tokens that we know and love +Grouped conceptually, named semantically +Reference base tokens, but can also reference other semantic tokens + +## All tokens From daf5827bb49f773674de0a303ee807773fe5d3fa Mon Sep 17 00:00:00 2001 From: Erin Donehoo Date: Mon, 16 Oct 2023 12:07:33 -0400 Subject: [PATCH 03/96] Continues adding content and outlining the docs structure. --- .../content/design-tokens/design-tokens.md | 28 +++++++++++++++---- .../design-tokens/designing-with-tokens.md | 9 ++++++ .../design-tokens/developing-with-tokens.md | 13 +++++++++ .../content/design-tokens/migrate-to-tokens | 18 ++++++++++++ .../design-tokens/patternfly-tokens.md | 4 ++- 5 files changed, 65 insertions(+), 7 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md index 595d99f273..821fdeca75 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md @@ -6,26 +6,42 @@ section: design-tokens # Design tokens -## What are design tokens +To learn about PatternFly's use of design tokens, refer to this guide. Once you're up to speed, you can: -Design tokens are variables that store visual design attributes, like color, typography, and spacing. A design token has a name and value that represents the visual design information it contains. +Start designing or start developing +## What are design tokens +Design tokens are variables that store visual design attributes, like color, typography, and spacing. A design token has a name and value that represents the visual design information it contains. ## Why use tokens Using design tokens helps maintain consistency across product design processes by ensuring that designers use the same colors for the same use cases. -Tokens also allow for easier maintenance design updates. If a color changes as part of a redesign or update, developers won't have to make any changes to code. Any time a token is changed, it will update automatically and apply to all instances of use. +Tokens also enable easier maintenance. Whenever a color is changed as part of a redesign or update,related tokens are automatically updated to reflect this change. This means that developers won't have to make any changes to code to ensure that their product is up to date with the latest recommendations. Likewise, designers will see that their designs automatically update to reflect any changes. ## How to read tokens +Tokens can be read from left to right, with each part separated by a forward slash (/). Each piece of the token represents a different level of information. + +scope / component / category / property / concept / variant / state + +The naming structure for design tokens follows: +- Scope: this may be `global` or `local` +- Component: +- Category: this represents the style that the token is relevant to, for example `text`, `icon`, or `background`, to name a few. +- Property: this refers to the ... `color` or `radius` +- Concept: +- Variant: this refers to the variant type of the token, which often differs per components. For example `plain` or `primary`. +- State: refers to the state that the token is in -- typically `hover` or `selected`. + +Review this table to see how the naming structure levels will be skipped when not used. For a more detailed breakdown, visit the PatternFly tokens documentation. ## Examples of token use -[images] +### Color tokens + +### Spacing tokens -Start designing -Start developing diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md index f5d293d3af..544e1a7b2d 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md @@ -3,3 +3,12 @@ id: Design with tokens title: Design with PatternFly tokens section: design-tokens --- + +As a designer, you can access and use our token libraries in Figma. + +To learn more about onboarding into Figma, refer to our "design with PatternFly" guide. + +## Figma instructions + +## Figma overview + diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md index 5906350f99..99bb64b1c5 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md @@ -3,3 +3,16 @@ id: Develop with tokens title: Develop with PatternFly tokens section: design-tokens --- + +## Downloading tokens + +As a developer, you can access and use design tokens by downloading the following packages: + +## Using tokens + +First, you must install the tokens package. + +### Using tokens with React + +### Using tokens with HTML + diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens index 5e8ef9a065..ee32758a54 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens @@ -3,3 +3,21 @@ id: Migrate to tokens title: Migrate to PatternFly tokens section: design-tokens --- + +This guide provides instructions for migrating to tokens from the previous implementation. + +Make sure you first understand the basics of design tokens, as well as how you will design and/or develop with tokens. + +## How to migrate a product to tokens + +### For designers + +Migrate your designs into Figma. + +### For developers + +Follow our instructions for developing with tokens to update your colors and styles to use tokens, instead of CSS variables. + +This change may resemble the following: + +```code example``` \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md index ca3b357ff7..05aecc9b17 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md @@ -4,7 +4,7 @@ title: PatternFly tokens section: design-tokens --- -## How to read PatternFly tokens +## PatternFly design tokens PatternFly tokens have 3 layers: a palette layer, a base layer, and a semantic layer. @@ -16,6 +16,8 @@ Just the color palettes same idea as current color paletter variables + + ### Base layer “Palette” of tokens that the semantic layer can choose from From 1ce4cdeb3bd7cb5400705dfcc9e491d1d501843c Mon Sep 17 00:00:00 2001 From: Erin Donehoo Date: Mon, 16 Oct 2023 14:35:30 -0400 Subject: [PATCH 04/96] Ready design tokens docs for draft preview. --- .../content/design-tokens/design-tokens.md | 69 ++++++++++++++----- .../design-tokens/designing-with-tokens.md | 2 +- .../design-tokens/developing-with-tokens.md | 13 ++-- .../content/design-tokens/migrate-to-tokens | 16 +++-- .../design-tokens/patternfly-tokens.md | 26 ------- 5 files changed, 65 insertions(+), 61 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md index 821fdeca75..7ca05d894b 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md @@ -6,9 +6,9 @@ section: design-tokens # Design tokens -To learn about PatternFly's use of design tokens, refer to this guide. Once you're up to speed, you can: +This guide outlines PatternFly's use of design tokens. You should familiarize yourself with the details across this guide to learn about the purpose and implementation of PatternFly's tokens. -Start designing or start developing +PatternFly's tokens are only available within Figma, so it's important that you follow our [Figma migration](/design-tokens/migrate) guide if necessary. ## What are design tokens @@ -20,28 +20,61 @@ Using design tokens helps maintain consistency across product design processes b Tokens also enable easier maintenance. Whenever a color is changed as part of a redesign or update,related tokens are automatically updated to reflect this change. This means that developers won't have to make any changes to code to ensure that their product is up to date with the latest recommendations. Likewise, designers will see that their designs automatically update to reflect any changes. -## How to read tokens +## PatternFly design tokens -Tokens can be read from left to right, with each part separated by a forward slash (/). Each piece of the token represents a different level of information. +### How to read tokens -scope / component / category / property / concept / variant / state +Tokens can be read from left to right, with each part separated by a forward slash (/): -The naming structure for design tokens follows: -- Scope: this may be `global` or `local` -- Component: -- Category: this represents the style that the token is relevant to, for example `text`, `icon`, or `background`, to name a few. -- Property: this refers to the ... `color` or `radius` -- Concept: -- Variant: this refers to the variant type of the token, which often differs per components. For example `plain` or `primary`. -- State: refers to the state that the token is in -- typically `hover` or `selected`. +`scope / component / category / property / concept / variant / state` -Review this table to see how the naming structure levels will be skipped when not used. +Each piece represents different information: +- **Scope:** The range of the token. For example, `global` signifies that a token applies across the system. +- **Component:** The component that the token relates to. +- **Category:** NEED INFO +- **Property:** NEED INFO +- **Concept:** NEED INFO +- **Variant:** The variant type of the token's component.For example, a variant may be `plain` or `primary`. +- **State:** The state that the component is in. This is typically `disabled`, `hover`, or `active`. -For a more detailed breakdown, visit the PatternFly tokens documentation. +Note that all PatternFly tokens also begin with `pf`. -## Examples of token use +### Token layers -### Color tokens +PatternFly tokens have 3 layers: a **palette layer**, a **base layer**, and a **semantic layer**. -### Spacing tokens +![Design layers example](./img/design-layers-example.png) +#### **Palette layer** + +Palette layer tokens contain the colors in [PatternFly color palettes](/design-foundations/colors#patternfly-palettes). + +If you've used PatternFly previously, these values resemble some of the CSS variables that you may be familiar with. They + +**Add:** example image and/or `example / token / style / 000` + +#### **Base layer** + +Base layer tokens contain a wide range of tokens that the semantic layer can choose from. + +These values are grouped conceptually and named numerically. There are no duplicate values within a concept group. + +**Add:** example image and/or `example / token / style / 000` + +#### **Semantic layer** + +Semantic layer tokens will be the value that you see the most frequently. These values are the top-level tokens that are grouped conceptually and named semantically. + +Most of the time, these reference base tokens, but can also reference other semantic tokens + +**Add:** example image and/or `example / token / style / 000` + +### Examples of token use + +#### **Color tokens** + +**Add:** example image and/or `example / token / style / 000` + +#### **Spacing tokens** + +**Add:** example image and/or `example / token / style / 000` \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md index 544e1a7b2d..62ec87e392 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md @@ -6,7 +6,7 @@ section: design-tokens As a designer, you can access and use our token libraries in Figma. -To learn more about onboarding into Figma, refer to our "design with PatternFly" guide. +NEED INFO ## Figma instructions diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md index 99bb64b1c5..44bbe80ad6 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md @@ -1,18 +1,13 @@ --- id: Develop with tokens -title: Develop with PatternFly tokens +title: Developing with PatternFly tokens section: design-tokens --- -## Downloading tokens +## Installing tokens -As a developer, you can access and use design tokens by downloading the following packages: +To develop with PatternFly tokens, you must first install the tokens package from `@patternfly/react-tokens`. -## Using tokens - -First, you must install the tokens package. +NEED INFO ### Using tokens with React - -### Using tokens with HTML - diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens index ee32758a54..0e4c5036de 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens @@ -1,23 +1,25 @@ --- -id: Migrate to tokens +id: Migrate title: Migrate to PatternFly tokens section: design-tokens --- -This guide provides instructions for migrating to tokens from the previous implementation. - -Make sure you first understand the basics of design tokens, as well as how you will design and/or develop with tokens. +This guide provides instructions for migrating to tokens from PatternFly's previous design and wireframe kits. ## How to migrate a product to tokens ### For designers -Migrate your designs into Figma. +Designers should migrate all designs into Figma, so that they can be updates to use tokens. + +Once you've completed your migration you can begin to [design with tokens.](/design-tokens/design-with-tokens) ### For developers -Follow our instructions for developing with tokens to update your colors and styles to use tokens, instead of CSS variables. +Developers will need to download token packages and update all colors and styles to use tokens, instead of CSS variables. This change may resemble the following: -```code example``` \ No newline at end of file +```code example``` + +For more detailed instructions, refer to our [develop with tokens](/design/tokens/develop-with-tokens) guide. \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md index 05aecc9b17..a14801713e 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md @@ -4,30 +4,4 @@ title: PatternFly tokens section: design-tokens --- -## PatternFly design tokens - -PatternFly tokens have 3 layers: a palette layer, a base layer, and a semantic layer. - -![Design layers example](./img/design-layers-example.png) - -### Palette layer - -Just the color palettes - -same idea as current color paletter variables - - - -### Base layer - -“Palette” of tokens that the semantic layer can choose from -Grouped conceptually, named numerically -No duplicates within token concept groups - -### Semantic layer - -Top level tokens that we know and love -Grouped conceptually, named semantically -Reference base tokens, but can also reference other semantic tokens - ## All tokens From c127c80ba8311b4a85eba75054c8d2a405c710d9 Mon Sep 17 00:00:00 2001 From: Erin Donehoo Date: Mon, 16 Oct 2023 14:59:11 -0400 Subject: [PATCH 05/96] Update page info. --- .../patternfly-docs/content/design-tokens/design-tokens.md | 3 +-- .../content/design-tokens/designing-with-tokens.md | 5 ++--- .../content/design-tokens/developing-with-tokens.md | 5 ++--- .../patternfly-docs/content/design-tokens/migrate-to-tokens | 5 ++--- .../content/design-tokens/patternfly-tokens.md | 3 +-- 5 files changed, 8 insertions(+), 13 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md index 7ca05d894b..3c810ce322 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md @@ -1,7 +1,6 @@ --- id: About -title: Design tokens -section: design-tokens +section: Design tokens --- # Design tokens diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md index 62ec87e392..473b39d5f6 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md @@ -1,7 +1,6 @@ --- -id: Design with tokens -title: Design with PatternFly tokens -section: design-tokens +id: Designing with tokens +section: Design tokens --- As a designer, you can access and use our token libraries in Figma. diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md index 44bbe80ad6..ff1e76c66e 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md @@ -1,7 +1,6 @@ --- -id: Develop with tokens -title: Developing with PatternFly tokens -section: design-tokens +id: Developing with tokens +section: Design tokens --- ## Installing tokens diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens index 0e4c5036de..3b38c81860 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens @@ -1,7 +1,6 @@ --- -id: Migrate -title: Migrate to PatternFly tokens -section: design-tokens +id: Migrate to tokens +section: Design tokens --- This guide provides instructions for migrating to tokens from PatternFly's previous design and wireframe kits. diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md index a14801713e..9a018db1b5 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md @@ -1,7 +1,6 @@ --- id: PatternFly tokens -title: PatternFly tokens -section: design-tokens +section: Design tokens --- ## All tokens From 33c76dc9486d1164f3b5956c26a46abaf6e78a32 Mon Sep 17 00:00:00 2001 From: Erin Donehoo Date: Mon, 16 Oct 2023 15:00:28 -0400 Subject: [PATCH 06/96] Add to side nav. --- .../documentation-site/patternfly-docs/patternfly-docs.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/documentation-site/patternfly-docs/patternfly-docs.config.js b/packages/documentation-site/patternfly-docs/patternfly-docs.config.js index 62df9193b0..028774920a 100644 --- a/packages/documentation-site/patternfly-docs/patternfly-docs.config.js +++ b/packages/documentation-site/patternfly-docs/patternfly-docs.config.js @@ -32,6 +32,7 @@ if (process.env.EXTENSIONS_ONLY === 'true') { sideNavItems: [ { section: 'get-started' }, { section: 'design-foundations' }, + { section: `design-tokens` }, { section: 'accessibility' }, { section: 'UX writing' }, { section: 'components' }, From 5bac9c18e1b6afb5712c8d615a542fb31af8ea79 Mon Sep 17 00:00:00 2001 From: Erin Donehoo Date: Mon, 16 Oct 2023 15:44:42 -0400 Subject: [PATCH 07/96] Adjust section label. --- .../patternfly-docs/content/design-tokens/design-tokens.md | 2 +- .../content/design-tokens/designing-with-tokens.md | 2 +- .../content/design-tokens/developing-with-tokens.md | 2 +- .../patternfly-docs/content/design-tokens/migrate-to-tokens | 2 +- .../patternfly-docs/content/design-tokens/patternfly-tokens.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md index 3c810ce322..0de656e908 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/design-tokens.md @@ -1,6 +1,6 @@ --- id: About -section: Design tokens +section: design-tokens --- # Design tokens diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md index 473b39d5f6..7acbc3ef81 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/designing-with-tokens.md @@ -1,6 +1,6 @@ --- id: Designing with tokens -section: Design tokens +section: design-tokens --- As a designer, you can access and use our token libraries in Figma. diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md index ff1e76c66e..7a4ff61999 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/developing-with-tokens.md @@ -1,6 +1,6 @@ --- id: Developing with tokens -section: Design tokens +section: design-tokens --- ## Installing tokens diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens index 3b38c81860..d097f5743c 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens @@ -1,6 +1,6 @@ --- id: Migrate to tokens -section: Design tokens +section: design-tokens --- This guide provides instructions for migrating to tokens from PatternFly's previous design and wireframe kits. diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md b/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md index 9a018db1b5..04a4643ded 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/patternfly-tokens.md @@ -1,6 +1,6 @@ --- id: PatternFly tokens -section: Design tokens +section: design-tokens --- ## All tokens From 755447fcc9311943fca20a9b2b6526d5b882dd63 Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Tue, 17 Oct 2023 16:07:05 -0400 Subject: [PATCH 08/96] Update packages/documentation-site/patternfly-docs/patternfly-docs.config.js --- .../patternfly-docs/patternfly-docs.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/documentation-site/patternfly-docs/patternfly-docs.config.js b/packages/documentation-site/patternfly-docs/patternfly-docs.config.js index 028774920a..83d35f6fc7 100644 --- a/packages/documentation-site/patternfly-docs/patternfly-docs.config.js +++ b/packages/documentation-site/patternfly-docs/patternfly-docs.config.js @@ -32,7 +32,7 @@ if (process.env.EXTENSIONS_ONLY === 'true') { sideNavItems: [ { section: 'get-started' }, { section: 'design-foundations' }, - { section: `design-tokens` }, + { section: 'design-tokens' }, { section: 'accessibility' }, { section: 'UX writing' }, { section: 'components' }, From 84aeaa8859a19fbf96f5cbf5cc93a1e9e7e12114 Mon Sep 17 00:00:00 2001 From: Erin Donehoo Date: Tue, 17 Oct 2023 16:42:15 -0400 Subject: [PATCH 09/96] Small typos. --- .../patternfly-docs/content/design-tokens/migrate-to-tokens | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens index d097f5743c..08ff012b12 100644 --- a/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens +++ b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens @@ -19,6 +19,6 @@ Developers will need to download token packages and update all colors and styles This change may resemble the following: -```code example``` +`code example` -For more detailed instructions, refer to our [develop with tokens](/design/tokens/develop-with-tokens) guide. \ No newline at end of file +For more detailed instructions, refer to our [develop with tokens](/design-tokens/develop-with-tokens) guide. \ No newline at end of file From 1afaf678f7a05d7361b539042e63304d1486ad25 Mon Sep 17 00:00:00 2001 From: Erin Donehoo Date: Thu, 19 Oct 2023 09:44:57 -0400 Subject: [PATCH 10/96] Update sidebar.' q --- .../design-tokens/{migrate-to-tokens => migrate-to-tokens.md} | 0 .../documentation-site/patternfly-docs/patternfly-docs.source.js | 1 + 2 files changed, 1 insertion(+) rename packages/documentation-site/patternfly-docs/content/design-tokens/{migrate-to-tokens => migrate-to-tokens.md} (100%) diff --git a/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens b/packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens.md similarity index 100% rename from packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens rename to packages/documentation-site/patternfly-docs/content/design-tokens/migrate-to-tokens.md diff --git a/packages/documentation-site/patternfly-docs/patternfly-docs.source.js b/packages/documentation-site/patternfly-docs/patternfly-docs.source.js index ef5da0a183..5c998df048 100644 --- a/packages/documentation-site/patternfly-docs/patternfly-docs.source.js +++ b/packages/documentation-site/patternfly-docs/patternfly-docs.source.js @@ -16,6 +16,7 @@ module.exports = (sourceMD, sourceProps, sourceFunctionDocs) => { sourceMD(path.join(contentBase, 'accessibility/**/*.md'), 'accessibility'); sourceMD(path.join(contentBase, 'design-guidelines/**/*.md'), 'design-guidelines'); sourceMD(path.join(contentBase, 'training/**/*.md'), 'training'); + sourceMD(path.join(contentBase, 'design-tokens/**/*.md'), 'design-tokens'); // Gallery pages const galleryBase = path.join(__dirname, '../patternfly-docs/pages'); From b3ae3611208a02d7fe70de1571aeb2ce502fb352 Mon Sep 17 00:00:00 2001 From: aratti96 <105744045+aratti96@users.noreply.github.com> Date: Mon, 23 Oct 2023 09:10:33 -0600 Subject: [PATCH 11/96] Updates to the charts about page and charts colors page (#3759) * Updates to the charts about page and charts colors page * Update to Color-and-pattern-usage image file * Update colors-for-charts.md * Update colors-for-charts.md --------- Co-authored-by: Margot <51165119+mmenestr@users.noreply.github.com> --- .../design-guidelines/charts/about/about.md | 14 ++++---- .../Color and pattern usage.png | Bin 0 -> 41218 bytes .../colors-for-charts/colors-for-charts.md | 34 ++++++++++++++---- .../img/Color-and-pattern-usage.png | Bin 0 -> 116457 bytes 4 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 packages/documentation-site/patternfly-docs/content/design-guidelines/styles/colors-for-charts/Color and pattern usage.png create mode 100644 packages/documentation-site/patternfly-docs/content/design-guidelines/styles/colors-for-charts/img/Color-and-pattern-usage.png diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/charts/about/about.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/charts/about/about.md index f8ee5e1c8f..bf78ab98b5 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/charts/about/about.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/charts/about/about.md @@ -18,16 +18,18 @@ A **chart** visualizes data in an application. The type of chart you use will de ## Chart types Image displaying what chart types to use when  -- [Area chart](/charts/area-chart/design-guidelines): Use to show trends over a continuous scale (usually time). -- [Bar chart](/charts/bar-chart/design-guidelines): Use to show and compare categorical data. Can be plotted vertically or horizontally. +- [Area chart](/charts/area-chart/design-guidelines): Use to show (potentially multiple) trends over a continuous scale (usually time). +- [Bar chart](/charts/bar-chart/design-guidelines): Use to show and compare categories and their respective data point/value. Bar charts can be plotted vertically or horizontally. The axis that labels the bar is the category, the axis that marks the end point of the bar displays the data points/values. - [Stacked bar chart](/charts/stack-chart/design-guidelines): Use to show and compare categorical data of more than one variable. Can be plotted vertically or horizontally. + - Vertical bar charts (category on the horizontal x axis): Use to show a progression of the categories (or sequential variables). The most common bar chart. + - Horizontal bar charts (category on the vertical y axis): Use to show nominal variables. Allows for more space for category labeling. - [Bullet chart](/charts/bullet-chart/design-guidelines): Use as an extension to the bar chart to measure data with thresholds and static ranges. -- [Donut chart](/charts/donut-chart/design-guidelines): Use to show the relationship of a set of values to a whole, or progress completion as a percentage; best used to display data with a small number of categories (example: 2-5 categories). +- [Donut chart](/charts/donut-chart/design-guidelines): Use to show the relationship of a set of values to a whole or to show progress completion as a percentage. Donut charts are best used to display data with a small number of categories (example: 2-5 categories). Use the middle of the chart to highlight a data point. - [Donut utilization](/charts/donut-utilization-chart/design-guidelines): Use to show utilization for an object as a percentage. - [Donut utilization with threshold](/charts/donut-utilization-chart/design-guidelines#donut-chart---utilization-with-threshold): Use to show utilization for an object as a percentage in relation to threshold values. -- [Line chart](/charts/line-chart/design-guidelines): Use to compare several data sets, or to show data over a period of time. -- [Pie chart](/charts/pie-chart/design-guidelines): Use to show percentages or proportional data. -- [Sparkline](/charts/sparkline-chart/design-guidelines): Use to show how values change over time for multiple sets of data. Useful alternative to the line chart when multiple lines need to be plotted. +- [Line chart](/charts/line-chart/design-guidelines): Use to compare several data sets or to show data changes over a period of time. Line charts work best when small changes exist within the data. +- [Pie chart](/charts/pie-chart/design-guidelines): Use to show percentages or proportional data. Can be used to show up to five or more data points. +- [Sparkline](/charts/sparkline-chart/design-guidelines): Use to show how values change over time for multiple sets of data. Sparkline charts offer an alternative to the line chart when multiple lines need to be plotted. Axis values are not labeled, but a tooltip can be used to display the value at a given point. ## Charts in cards If a chart lives in a card, the title of that chart will be placed on the header of that card instead of the chart. The rest of the chart guidelines should be followed for the chart itself. diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/colors-for-charts/Color and pattern usage.png b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/colors-for-charts/Color and pattern usage.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9cda1036c75ef6aa18df404abeda3f3bdc24d4 GIT binary patch literal 41218 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 JT>a^*{{e*duuA{{ literal 0 HcmV?d00001 diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/colors-for-charts/colors-for-charts.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/colors-for-charts/colors-for-charts.md index b03814e803..ce9d9b0fc8 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/colors-for-charts/colors-for-charts.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/colors-for-charts/colors-for-charts.md @@ -15,7 +15,7 @@ import './colors-for-charts.css'; ## Chart colors -Colors for charts includes a recommended set of colors proposed for bar charts, donut charts and pie charts. There are six base colors (blue to orange) that the system is built on. Each base color has its own color family, which includes lighter and darker hues of the base. These families use a monochromatic color order. They are organized in a way that increases contrast while still looking extremely visually appealing. The variation of colors will depend on the type and amount of data at hand. +PatternFly recommends colors to use with bar charts, donut charts and pie charts. There are six base colors (blue to orange) that the chart color system is built on. Each base color has its own monochromatic color family, which includes lighter and darker hues of the base color. Each family is ordered based on increasing color contrast. The variation of colors you use will depend on the type and amount of data you’re working with. @@ -26,9 +26,9 @@ Colors for charts includes a recommended set of colors proposed for bar charts, ### How it works - Although the system may seem complex, it is completely customizable. The idea is that you can put together your desired colors and amount of colors and the system will still sort them correctly. Here’s how the system works: + Although the system may seem complex, it is completely customizable. Once you choose the base colors you want to use and the total number of colors you will need, the system will still sort them correctly.
- In this instance, there are only four base colors, therefore four color families. The order begins by going through each base color. Next, it alternates between the lightest and darkest values of each family. Finally, if you still need more colors, it alternates between the second lightest and second darkest colors of each family. In variable-terms: #1a-d base colors, #2a-d [color]-100/[color]-500 alternating, #3a-d [color]-500/[color]-100 alternating, #4a-d [color]-200/[color]-400 alternating, and #5a-d [color]-400/[color]-200 alternating. No matter the colors inputted, the process will remain the same. + For example, if you select four base colors (and therefore their four respective color families) the system will first use each base color in your chart. Once all base colors have been used, the system will select additional colors from the families you selected. The system alternates between choosing the lightest and darkest values of each family (shown in the animation). The color picking system will continue to alternate between the remaining lightest and darkest colors of each family. In variable-terms: #1a-d base colors, #2a-d [color]-100/[color]-500 alternating, #3a-d [color]-500/[color]-100 alternating, #4a-d [color]-200/[color]-400 alternating, and #5a-d [color]-400/[color]-200 alternating. No matter which base colors you select, this process will remain the same.
Chart color system example @@ -37,12 +37,28 @@ Colors for charts includes a recommended set of colors proposed for bar charts, +## Color and pattern usage + +When selecting colors for your chart, there are a few important usage considerations to keep in mind. Within a color family, use the base color before the other, lighter or darker hues. Additionally, consider other basic guidelines: +
+* **Green family:** Use to show success +* **Red family:** Use to show failure +* **Other color families:** Use for neutral purposes or categories +* **Patterns:** Use to deemphasize a section of a chart. Do not use patterns for every section of a chart. Instead, patterns should be used for a single chart portion or for one type of portion (such as for all successes) to deemphasize that section and highlight the other section, which utilizes a solid color. + + +**Note:** When showing success and failure together in a chart, the base color red and green do not pass accessibility requirements. When using both red and green base colors in a single chart, add a pattern to the section that you want to deemphasize to improve the chart’s accessibility. + +Color and pattern usage example + + + ## Use cases ### Chart with few variables (1-7) - If you are dealing with data that includes six or less variables, we recommend using the base colors to represent each. For example, if you collected data on how many sales were made per product at your organization during one period of time, it could look like this if plotted using a bar chart. + When working with data that includes fewer than 7 variables, we recommend corresponding each with one of the available base colors. For example, if you collected data on how many sales were made per product at your organization during a period of time, a bar chart of your data may look similar to the following image. Few variables examples @@ -54,7 +70,9 @@ Colors for charts includes a recommended set of colors proposed for bar charts, ### Chart with nested (grouped) variables - If you have a set of data that includes grouped variables, we recommend using the color families to represent each. Grouped variables would include a set of parents and children variables. Each group would use a color family that would be represented in the same order as the base colors are listed. So, depending on the amount of nested variables you have, the first color family would be blue, then green, cyan, etc. The colors would start over if there are more than 6 groups, returning back to the blue family. An example of this type of data would be quarterly sales broken down by geographical locations. + If your dataset includes grouped variables, we recommend aligning each group to a color family. When you select more than one color family, your chart will arrange the order of colors as follows: blue, green, cyan, purple, gold, orange, red, and then gray. The colors would start over if there are more than 6 groups, returning back to the blue family. +
+ Shown in the following image is an example of this type of chart, which includes quarterly sales data broken down by geographical locations.
Nested variables example @@ -66,7 +84,9 @@ Colors for charts includes a recommended set of colors proposed for bar charts, ### Chart with many variables (>7) - If the set of data includes more than six variables, we recommend applying the multichromatic order system, which uses all of the colors in the color system, to the data. This includes a mix of base colors and colors from their family. An example of this type of data would be the cost of living expenses during a period of time. + If the set of data includes more than 7 variables, we recommend applying a multichromatic order system, which includes all of the colors in the color system. +
+ Shown in the following image is an example of this type of chart, which displays the cost of living expenses during a period of time.
Many variables example @@ -79,7 +99,7 @@ Colors for charts includes a recommended set of colors proposed for bar charts, - You can also use the color order system with one color family. This creates a monochromatic effect. It works using the same logic and order. We recommend using this system for charts with nested variables. The order begins by going through each base color, then lightest, darkest, second lightest, and ending with second darkest. In variable-terms: #1 [color]-300 (base color), #2 [color]-100, #3 [color]-500, #4 [color]-200, #5 [color]-400. The hues will always follow this order. + You can also use the color order system with one color family to create a monochromatic effect. We recommend using this approach for charts with nested variables. The order begins by going through each base color, then the lightest, darkest, second lightest, and second darkest colors in a family. In variable-terms, this order looks like: #1 [color]-300 (base color), #2 [color]-100, #3 [color]-500, #4 [color]-200, #5 [color]-400. Regardless of color family, hues will always follow this order. Monochromatic chart color system example diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/colors-for-charts/img/Color-and-pattern-usage.png b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/colors-for-charts/img/Color-and-pattern-usage.png new file mode 100644 index 0000000000000000000000000000000000000000..3630ea202680dd980db85a74d697924522f96e75 GIT binary patch literal 116457 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
D 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�)`na~ znlLl8d$kM__d06~{zQ>@oc3|NjWYj3?RwAKd$=#)ol2i!d(FmnCqSpmQFbF8y`QM5`ms~qTX^yy{qLJ9J`&Ev&)RE5 zrY?zm7bN{6_?_Wra$g4XY~{o=JTW>vLYvNzD(F#`p;S`Y46w$cP75?C;1;R|2j5dW2Ab0ZlhFKO3|J%e9@X zmNsXok9G}J`^wQXS*o=tSR%Ig+rUDv;9f35990(&xJH`6j(W-2;mb~-FKE>UHJYP% zHY*(K?(VuzJ)<1pk*Zh1GCcRxK|5+|t{GIvTq9#nF zV~M{9j2p1DOE352Y;wke`m34pF9ir}*Dsfd6x4#CPzkq|TXKgU*J9Q8dEQtb5&e>6?vc@JvgMx?U^-fx1Q=_6ZYqQQYztB&J?W>IR>;l**lAiFpqZbjF`czpGT3z2xpsRayn^L ziwxV{g8qUOAcnTHfp#0MQ3Hew5^w=1SOL9a@8mF)s~iQ3ip2r$_LoqRP?hThcg%BM z12}d7=9M*2?VT}F9dbPS$dxTgmn|**bvu#Gq@u%Ey#gZ?C=LHhR5Hn0VP&Sho54=KZGhNgIY)jtrOEI^a!{j&>S-ea$gY@IO{) zFi<6savNruAzl^ha@XmM)+5qX5Mt_TYhA`*)cE`(Iv|B5@XnXOI1n;H$CUobZTFv-#M$98S zfeXoe^!KR8TRxW*Jay6{21qz^+GOtGtNJ)WZ%puA?8>%G_IOEnBK~vyd$Kh*U%g_s zKudhfJT;OI3)J%>THEi+`vh(GtHWvdUIB!xlxMuev;n3dY&f=5gF5|ZLahio+ZSf8 zHm6{)HOBuX6XU`x;gK*hQ%8I!psGoe?Q$8mxh+CGut`-K&9VEdsk@9eQh{$MaAZcn z1%WU?S(9~Savgn_Upo$M51$6W`+S_bF{<3Z2<#`2f- z;z6(4OAM|8HLbYurb&f|P-fR#-sk?F4L8!sw!or2O*8&3ls_17|8FAg_iK3R;?jIH zi-ti%P2Wc3l(PA!v06UE#Av~ig;N}9OCI5$|5jZi^uO}86p%2%u%fohGcJNjcAnm^ zDgfEoq7l0$&&>yua0bmfO0ikGc)C%Rd1DN?VA@ctS)_aLC|Vz_&$znr3e@?M+OW79 z1w6wU?Jkt-JJ1isO%dPGSt^GS6k zI-fpNwcaMJn9Ym5aMO$f9Zgt@Y)3JvRtp(*^Rzb>$28OI=hk z9uXDK-X1EPwmsq8cB`55$``mGn@xC=0!r9FRL3jfP5)~hzu?!Aa1m~3i=q$CwxluM ziT|M|6S-BXWK9gP&PF^x0QTKq=q4HUissE6Q{006)$5sLVqR}QNu)5p)B6y+{do8! zhPHPifZxj4+Uj1K()@Vr)1Vdf)yZMU`V0A^d(c84|Njc1P#y1E%S?1FK+tKo+*5Pk z$VW(Dr!RA7T+0Bbm)S2CdO;cIq&62wZ%LuIN@sNBd}J5-r2aiji&0MU7)DaKVC3DQ zzO+}xYKK(X_{9@#n80@cJg07d!{w-qMgOH6B4ZJ$H z!9VHcx!DGpHta%n<(F0y{>Ds>)nMEhR)ZK@=gjm&PZTPm%L0$W-}JfB7|=Im1I>2z-{nZqF=bdZGbw-=!SacdNJsrwUJ8N zB1Q({P39vH$JOJAr(7?xI%zofAw}Hx`#%qS=ofsA>`+~bpqCvD4^{0k<*;c@r6wIZj9nc`(Q=<}P_n@n_*pB#(Ep0BrqT zRbJU1tRlC}_xqDO*IzvrdQ$uOhCp*QdV^BUdCvo`HFo>(Kb&i;r8Os8lj|@HcQSZ# zm9-z96eU`(!(?J?Aa^xqXxk^S_kZlg(WhbM_;MHF3mB=<|8Yin;qsEBs-RuJ?ZP78H zgoI8F`~r^p5dc&TjcYp&iSPJi0(T)*_9k?ob~Z#FoV2S*~Yw4c+n_Qb@|iDYx+ zm}qkrolU%oAlJ?6sE!{l=w_nGO?GQ1P) zb3E!aB1MSr4=3J-7)TCYr*wh;fyr#tD-Ge;3Yi|Bi=s+HV1XfTTkTWWZePqU-1)_P zeb|{mR)J*Dsr6P@e7i5>+>NkU3fqE>oAzhm$eAO5>oB6;?T{z~_y`buyx?ri2ipamn6JthP58?Q2F}_unMe^U0lJ%RneVbO1HdxtPV-ZVh+pMI zYFT=hQVp)OT_#mCwT@I6KAy0Q zdkK0=78|?S=I>qZxQ5@l|BjK2+C$Z!w$5;bmOpC>wrh|6kJ|iGb?&~7)YDz@v2?eJ zAL39RS?w(eTQ8o|mujAU34Df&!nWQ0f$N0mPZECQN48@+mL4nqXtlal3VR3P+d6on zuhMC3(55O>?JmGVpAzq!IP;bmUp)T2uh)cnRFI2kuT6njb8)=oMOLL~MsGib<_9}^ z?#5RC14vhnQ(!O^Z}|`lT+Z+lQwp>zJTZ(!$Q5h@B|5S#FP0}fC5y)^g{J|uIYz}8 z$}M5W{t%5R2Bs6)iQxYT(Zd4Hmu_u*j0p-9b3QgpCYM)5b3o8|$K$UUy)009LMfsa ztfW`Q;Y<$6AR3ws4d9Or~z zOZT~qjJ-2%cEJudPm;N-VAdm$!RHO@&sE{%s>W}kkO#FX8uO=td#{6DY1f01+;Ec7 zs~G&|#v^;2z7ZF+_mLG!R>t)pDzuTZ2F!h(V4s@*A$0h%vMvGbHNYUap(53T^ZV3vFAp8si)=$1Brg|_JH zd75hd#h3fn?bhM+E zY5qpEAmwkR4>1k0Xb$daX9c_jU3z;7Vz*3LjDr2&ric6IHd@qZg8i*X(#TAGCD=+% zDM89!04(S;vgCT0o^xd`<|p@WM*b5pN}iQAQD$5HkxCh4;${z)@VqaWMEUvIA zM_2e(^uVZ)dGjF~S7-NaFAdN~Hg`c6gxlkx;rnj9U$sP(zZMd{KFoJuH8hMocog-Vdlg%-rCfSJsrEjS|DJ%HPz|r zM<5D0TMRgoYMOc;VoPJ18+}Evka>u2f8qhJ*md)bdhg96`6v!#^1BD4-pl=o{8O$? zD~IvK4=y&!3z0`3MWEhgy;elwb2(>=ZNGzmC=u6|(+D{zK&&Ny4q0P~kk9oTsbTCq zUOYYXbXB|`2B04wA&$pN>}ZA6WmNBT*7?oWU)zK>K({t6*T;@?ccZ*`Ifg=lp{ZhK z9XFf$WsCRkj;&cFjFLO@=JXvN%ppH)wsi~Wn!iBt7$Ry(&-?jZc&eNFk;&(YogG+c zZ%tsh1D0NhOq11{@4wUlpsEW%``ea9U6XqLbjt)9xhpfyd%%EU= zdppH}suN?IG@R;k?@Wfr1rQm`kZqzE)G5#(-i$uc7pT&9+U=}*y|y{}diDN=c0%JB z6gNIo_yY70-ru=ijLcZx5&=SmpKz=$4Z+fzKu>t}{prz#N9(^zqi!JfTI$>=%*yu{ zzu0a8{^IicIn+)o?&Gqmh^PDdQIfal>E_Fp^N%%*J7c5*T5$t(=gJN3{T77Ie|>MJ z>%ieoG;P+(Vb5oVHoVY%AG~gw0vr$%7vkxw5Gius-wVt*`i`%YElqjF76En-FIp^{ zQx!i`T?$QjE$-rZ{v0xubwf5!fVy}%B_+eA*S+}1%;alPI#2HoC0i^^#YHHZwt!HEhK(^6H3lBE1LcK%YU-~$a6yj$(gGjiHey~2V6U$7V%NFVD`E}2jjIh zD_wdK8}cA2ompr;Ecrbq2D-zYJYO%|lHu}Sw8D_@(JE0`)_sqi|ra|j-il=2sFXHc8 z1e;}74!*Y#Z1N5rpD}sxLHf*9Y}tjUF;iA~Vx@X#H#y^eO`*{YMZ-kM!?;~<&YVNx zF_EFtkdrg7UApj}JVr~7ZL?R2HD=hvVlNi3a`)PIJ)Y3Zr0&B&4ks%v0bBA=^yKbD zfO-J&jzwnFbZZkB()aE3ZO2S*qVOV##3I>8Pvk}tuGskVO}9IpmXA>9>a5Th`@ObK z_{hu*@g4DAFD^M%Emyepub{1BxjzCL{$KL-*mhz!>ZV#C+fFfp(3$lFU$&D8dWc&aTyWKJXOLsHL3E~_omV#4fX@qdVa6V%?cPy$6{(=*vUk4Ao%f2{!(M>i!-G}p9#L5- zE{fIBj~KRV$)5Y)-Rhh@v#hquBRXA}i+s63x>KS0IB|eZ$3s$rF2wUwE-}94#^4+C zAdPQrqz=?S*nd^%mhGPWpt@3-b#DR0k2t;{d)|G-9DaITM8-I)+|Q+u(&eRy6~www zZS>Pft9ZqJ6t1Sjlb%^guz=~Plpdh*8N~U9R0xV~d$@@???oXSy03qk;*4scve5sW zrjK4WtkBrtLl4C%=B#tx#wzu$MY7j{y?W4^gMF3mJ{2;HdfbFYhrE;3MlOwWNRO-E z0QsFPs!)6+oHtRxYU&&9!tyNxbFS?I3!y$ntjfnfpCoX?9PY{Nncrwzyg5S4>bh$l zpc%Y4c(U&=U#JWAL)Qi@hz**)Z32sG=>&|S!?IqSG(blZu2&U&TdJKXZVH$VH> z#ZH-ko6BhB+aYtOMPpai$IsH};Wy2o6owHN!iQ$;Yql(a^`KqWgQxF4n^&3#?59f5L&1-ww?FwLxe4d^K{=^!a;ZeUySH}= zNqw!Xf_Ec)frlzN7zxos4iJUV3LKlo znHVZ??lXF&%ujHIa}x&!A3gEC2vX94UI;lZTSudpq*00D?q`cEg-4aqdsfuKAegnUu!3BCWUWmHFve}tlm@!481GiLT$xUWMQH#-GJEXu+i@!#VnDTPjh1*!8Czw0! zsvr$_j=D5^{7W`tk&rDixu3lFPxc`Rt3TU2eW5r!pf2G<{1)l9{Erz?`^Ve9PiHyU zg!nO_P)EmW4g$lKJsR7#0lA4C%a7X~*}lr|z?=87@=-M|jM8B5YGs#s74|U6AdoPq%l} z&t=sM%9!dFK<{Mouw0ZhbFCk*dA>Ro4=tr21piNKav#%|gsivi=Fms#aE*ED3OyN* zSau=9YKeAYO|CPXg#`B&sbb3P2f0C!&#x_xF3h+J(9ek)+24NMbort`-0GUPWfkxM zOD5v8$C{j-%NVx=D_QcYM5c9KZ+AmfvWN)ide1R z3!5#%l9aX7?UAny(Qf&ZqD-dry~@5jFuIt=Q8K0seBxrRze-&&zS78d1i!oB{*AVI zMg^*+Sk*3MV6lJo%EXwDnY;K>=gU>5+n)RJ;TkXh!P&c%?|Yt3=?-WLwj(Cr$;|(< z_+6Lm-AN*%xb%r&_KHMIOT|Y>*Em&wYRZyZXlI?Gk9g7(iiM1I>$WlvMxm6FD@gm= zP2|=(Cld`myn%z@3kP!>Xss%OFixz`Sl+cCYP`I)f1~xou8PkQ=ovw|#Mq4x?8sIP zWGhZ;wj&HMwoDnN)ouqd9+oG^^LLj8y{6;y|xc zT`Ua+rr}U{eUnxXS{XKv}Vfg~)yP;F+ld9$?&O zdYTox0V(Jo`=ot&$sD<^N5t8t)m?_f6a+t>N7jdNrHL;Q1Z|&LuH1jOZRG7k*Pr%W zT%2vwqyNoc8W0i$tkoxSdYlzOW(JgsnKE-an=VaD-k-Ws*kzQM zU^BjVVfI7o6+`b?b}A8QtRCm**EL_Q zQ4gPntB1urXq|G`EU@3&TqBv%SKYiAv~VN6>i9v)lm3lehR^b^bMahU?0&fK`c+gv zF*nw6{`bK9rlBlHf)SF+l$5R6t0-5Vs z>dVEcDyKnMtV&-jd4OrJ-XWh%@mJQfE}u>+(c9m=>;RUb`j(GdZfHqhPcQw^0H zz=tcQn{p9c8y}set?huNvI=s0^3`D_W7@EsQ7eVa6Z?A-oPd3G+Sfj253^)( zsE!7pY^r$cEiAof50G22C$9wz$d2aDST4@|lA{(4Ug6n9-^8bPG&F8WLqr0zm8&S) zS7OQ)pJ;bHt5)kFm@JAdqoV%p)P86&RPr=N?L}Dd$cU^UXr|`EJP&H*u@22rD(v!k zQ`+pEgPdm4eI{XJIAS&-D=AMyFY6w+j=@!-Os4m}#7+$~CGiwH^QwIA?(6qeR%#0g z<3j6SPO2Qxi!2kdSu~jY_ugpl)!r#fF^m6Dy%UCPZ@NPp_pJ?GY{uAczAPeS6l4db zWHwxudp7>PpG{u)p@!4SD)d1%`zXq)X7%*G?B+plFSGY9ymg~ax_R#TNf#0C8@0I` zJ+yBl4f<7UKGCNc9c#HfhW!mo;UT!)>EN)7u)Q1vI^EmrC5~d5AfN2ko1u#jF_+4$ z_{bjr2seSdQiDjIB%|q_h6@z}Yl-mUA9_g(XWJ-|hZy+ae{wgmzndBWgbxZa z#hnm46D9?>l)*AJi@Ll?+A|xwh&Bx8v)?4OY>@4LomJX4;H)wMX5S39-z31_D3?TP zJ6KMYUHz;vxF?JSUX8rr;dRW6IjVm+^wq$MES7Nj5@5wS<%$N4u%yA~M zd#GkcGd{#&1N|C`E_^ggxf)*3C3McFV?=+LZJ!+3vDbBbm45Fd&kYf~C@t|Xx_9!$ zbrQ-{*LVE=-P6}kCI_erF|l^x*y<)uTXIHRgYHn`9<^BD?4h|*&bL|d+T1aj$gEhs zZ1M1i;%k|8g8Vf5P=e$vfp_;~f)<^^2$z~qTr5Vc%Fl$1*^F;=>bHS3K9IriH*Ih6 z_^H61EAnqy(v=*-(b>lZhr=_#44*gfPBXLGV3v4k$YKvD&$$=iNF+OXBl)t1?a|B^W!FP}Ac(_d<@p&k7KpL)eTy@b>o=85dX1sKkbmuWg1#9ju`dwLOu&;!4a z-?=DH6&9SBN4s4CbhZyP-kuTLZLAWf`%+Q|x;Gz+!nMK=x(GLcVG$uhoer*7nSJ?7G~%vXCn-1~2z@uf3eR z@!`0jCGDXZe3lj;Pk0AT_|f)T)+p66!73PkE8dvbh7G)HuWaicWpQ;ZS61@{{-R?OUjaa~2Ef@;kN;|Z32bTF{m}Yb zm5^Uw{F0(Abk+h+%Xq!7iBOIQfIHFn9f6>C&p=v+L2mn%G$wqcq5UVI71&;3=VI5H z8b`ZmBb_wLE>jinZd+d;)*95F~LsDRv0?pHu@7)dUH${(iHXf zL6Nb+7pQMJPtStGhQQrlpJt7-JDk5mqd>t<^evOwgh5hAR7n7xgvyF!|RtInEd;x6AkSiIVyj=FJ)3L#M4!bocWo03z zBLt$8E$R3SW&v7lfKWR(rZVs!|D3<_0+u~<=sL&9{oAbX?TOQ5zyWf`dva@%d`ot? z#~A$!z^&fr2i|g})%8GR^d_`F|Cl0Mp-DD>(4)CydvgsEu{EDE z1b=HGcUl@qCYeyHH?*Fn__SuXc$JQ7aP4cv8yI|9xCqQMsR45|0?=F)-UlMY8YlN&G!Rv_Y)7D$fvPm0CivU-&x7 zxpytxCSXvv=$a$JVJ40HvK?rQQw^9f-d{&%Zmo*L8dpT#U*wIr>a~VBDPrrR``FcB zariMkL?@n@#C!AjAw7!AQG!&AQv=`_t+aMtR`tHsD)!3odSozp`Y7EWotR7gX+0~X z#y&+nR9e|zIPf^an+gD?RsVD}m=!PjCXK1rpZV^b2uXOw(a+ErGsK=*o=6;OvhYzY z8$IN9ncYPUS3coTW_%Ak_7^{mr#frrOq z@}az3|Uh7H=t?HztM3ziHJmoAiU2{0J ziZ0ZU4MiUP9Gig6`UMVgIGjn-5?y>q;Wq0~**4pI>8dxnklCS}xZ#F&qjB`^AV5C9 zU@hSY*hM)Gau@uOcv3KiY;7X zo@yAao)L{=a$d3#$U}3Qm2G=96jKw1wJjf3_C&pc(UrCRjG63W9F}-S6pLgZiSl%J z^~1wycNLm-yC0}EdI76B4@ozq4J#o0y4wwcB5Ku@HzcBdv5|d}?g1l*XN-4lqmuo+ z)>0#jHdYx*|+{LTpXxploPTRg>O!Of$78OD78-Q;TZt+>M)Uj zfgc?Ww5M~lv<0-)0Y$>{BL+wkyz;Ns(_77;cuV(h}*=khga&8~{a zc7wd$3N>kO_H&vj|J#Nn9-nEZ2A_E@m;QZw50WSmn)}k~k>ZN7!}}0 z48K|#U&N@&pU^M)!}qW4v|`tAXFkXh8P}aYd&^>D&b<6cTi<($C-<(1 z226KR!7O0y3C3*fEqC4#Sq=r;ZcBaAHRYxAiyqI#Z@WF2i|_+wPtw~6-iM6k4y*7O&Uou7@1c?%qK<9^vJ}78*ExV#q3a( z=Gf4bGpYa+ap<2S5L+WL_2w04i8JVI^;#pd4!jzC60h%<>X`EuK|#CR0uf!kR{cw8}yZGZnspe?bOs14D6-}y&@Sj zBmEW9w!W$RSDnTN(GSY10p6z)@s1h+|2JjFnORvkV*Z_@f=emXMrBEFL+8LlIVBs)LY7vsdkr{{H49z(1 z2KX+;$zik1q-Xs|73qFt>{X?t+3Rdm;TGpN!91oP$tMI1xSc0+8TRLz$7h?TM?rSg zsB;1d>3`V=z8`yq=?i)AJ|)BRBZuknuaVDl)eOpmIJzDzwR3|&rQ-68FNn50{d18r zMv+3hWjeLi`^vllNbVrddH1F^$>%8`*=Me{A_x0N?4rlU@s~-a*u}|e53btzZu{;) zG46|HSbUsNQKZJy&}PHL(0KrT_SeMZl(ltNJ)Vm{)}83G+QaTC-64JbA9Dx8C4rsC zjz7+g1J`JtdG75d#G1h87SO%B{p~D9f1Za#fUQnVR#_rg7iCr;-rM;xx^qgh1Gx|v z>`NrnfqDOEEa5D<^Uc0FaCyvSNtxjbUfvOD@XcR#Ju16H<9BD;UaXP0tYR0qNB-#~ zp;GBy5u7g)s_VUHTjQgzx}2(No^y13mN?5hPjY4Sr5Ke;(eJR|ozSu?ln@o7_%H40;-EL&uO6Ix1W2B zPR3A^?&j;_C|{Ig1+}cs*Og+1p83gVPmeh@M!55>DV_#nekW_WgGsg}FwVxjYe_?a&fJb|9G0NFORfa1r)WDiqwO_KoI;X5;NrkCxRZgicuwpGIabWSQ$xLsr_ zyzjU|eZN%o2R^U5d0_MeWZ6;qUP`0mBXZMf)%eRBun@M%`cA^vel96)H| z50&06@cYo2W31)!9ZgZROYXvO;ZJwYBbG6P=z&@~V8P^m1QhLvP;hmIWX7!jadacyTmKHR^R$vR%8Nx?&iOQMvt`q>B>~ zrx^R<*fe=-j*`4}?Zs+dy{jG0>~7ifYR3KHMZ!X-xV^1q zp4BXHQ`scn?p*bc)hdc#D$J|ib2%n?%Wy8Ty;zc!Z@yKSaDmic3hz)#ec7dD>dX~f zcJBF9vO^P1tFQ9na$_^}2bP*kTw$rx-;eF+84S9*b<34t^cRI1NbLq;=^m{cV+9Rk zCBhK9ZNjg{D;_Gd=rcW%^tP{*oizt6LY@qbH7a)lJT|0UWO&t7JDO+-L8S+gZt;#p?7;U{BjpA`b&;t{j%HpJ(y%@B1 zt2l)Np*m@eA6+F@2;)^T8_k7mtI@(7@3_Xa6k#pSo8WKebH9mCeM=DMZU2gmD&~iq zdjv_T19dUOm!xj0cWA-VBNftQ(nmh{)XZF|@8+%AvzmrY+WBM${tSipR$OMv4D`O^ zIVuTe$i_QjKOAivUeoemR*++XmiA<-+=aV>(4X7wWkLT+S{v1i|CO{ji61-n07Wa~ zfXTB(9oCru1?}2@czh7ru;HYPAA&TeEh+wrE-Ju0nqKizSQ=lZCN0!RS8@_oEgFlK zIczjeU^n1Ra-rKz;_0x90-h}xF5)WE|1LRuRCNEHnc#kot48UVvA54G6!c(cY2utz zKe@fmUf{F(eWTwT<}^k!V?_Co zr}UY0N7pXH()=Z0l=$2tP+`rxp82#oY_`43K6{lRhs{w?=mFPX6GfA;)P859zzyeK zx_1JHhDm6bo11=n<@bT{(CW&fU7 z5Ae0L{4uUT9J!SLB>QIMjx5>5SG_hJj@Bm$1Mmsjd|!z+vaYVKf3|rH*PlkrWz0Tx z`F{WY_2K82wP9(D%I=)aK`rXGwPV+HN{@#W8<7Qbt&)!TqEpg`OS}Ff?xbk@gl~8U zs4nt8HSxeLts7;DlsL-3w6c<22M{phZ^W~&e?jWXXT7d@?oNE;P@7#^?2>f8Z{o9kN997R^Gd=*oN;}9Q2kY*syXu?&hu9BP_R2ka z+-Gzg0*35;v3{os;Qax8S4B7BZ^w=xww)#9ScC5}Y^U|uF+)szwAw=ejw`TACFR4v zzyRLaybj=%Yf>s_SaRn5df{*K*l4G^;$VFa`rWJHvB!Rr{5Qdr!_QXCSLWyVzP;Ui z*{)L|a3QPy3c0Sz#)b4*Gq=Q@TyBD`wj_tk+QSK3_E#&ct8H}&;XvB~k170?e|Hkp zsUZZis%qde2J39KE zn|XMN1fcxiz)-J|HK>D52SEG?-D)s8%{>u*_-wb=4$Un&(zh7D8lb?y7>sy2#~NPX zoMQ!Web@5?8d{Lh>+O@41e&&YE8&69SyM@G{C%=Q`0}$3=WqJHO{L_f>nvA4v6s)9 zjrhOMDp6-&cRd$b5y&s61(6>&uGbh8^B_yxn78IHu+%?<=3T$)Ji402-6qHI{J{7% zNO;dK5p0uAe^!06@rCWV@`)JP#5*Oh+4yAN*=#-JSn*?!XaK1mjKyS$b(`F1!mkS_ zwdB77QKzq!;jYMQMXRY!)hHNeC#HX8d|6n!Q4#h+#iITtMWjL}f7oj#l}AUp>ibfMl zH28{a=}Xi+dL@ooaZW&JBE0XhJ(4V5#I^W+W()61EY1&VVlLmz#a5k^R^2qhgR|}M9ZPZ>#nO?5-6E*I^t@GlTd%_3}4Pg@a zGqyGazgsi*$5|I(^g2R}^X8Flak~}^axcrBgWmon{YgMfL!nBI!T}5AmkcuFZwIN` zh0ns4WM$~M=$7PDzg20lH9B_DGKh`w%;?O_fP(q<5X*QI6MAkWd%n9^Ly}e1hvO(c7J85z9R`i?-<2m?~Z} z+(3Ek6fFNU@7=xi7jOPa(fuH7ile+4e&#a`s zt<}0KIAVXd4A>|31kzubAjdHS##Ze$ zH)I>(4%zOB$^SL1;%zP_Z6IjC6gblqjNs9SzOB}8| zq!LrpI)45$l<=#y$y2Y2NQsZ>Nf5g-r?+u5%Ja&_8g+h7^~IPlSd>Gr5I9Tn7H(!^ zVhtp%fVJhDUWiF8MCr#1#;KPik3vp=Q_|-e_T6?mM+s@eHefK-ZBwmoyO#~I^Xj0{ zzLF%W_Z`#UgB%pbuArLa;Nz2L&Hjjcp7yocn@28D`)IJpL01&vrdk(czaiKKmy5uU z?KEdoG~VDGa=WNmcdTqYz`y@;iNN*_SPsq?cH5r2J&6R#WS+1&)*=q`;1?R4D=Tq~XlfQKdsHefjY3YDFEncXl!T zT_31FhVuMCR}2g0vZQpq?0{@bKa7ylhGPp9&>ZALL|hMbV2ZCv`B$^gxkg#$18tYt zVKTuZ#pTA0hS^>YIwKdm;jNDj)4mdkt9JY!vfeT($}Vgh7DN#X1wjP?gOHXGq)|$` zyA(khl!hSMJkBG| zZCdMRG$j##%{KkTR)N14v(#oL!C_AS ztcr_}F*tQ@3Qe+>@2o2!e=!ex+K#BqSNUw{bij?eW0SJ0gdAN96Om?k7Mt1gyD^hM z&;AHrm6Wkhjm-saDZ!^YL(WNxCWzU zm76Ft#`g($irc$t2DKd*-ROcZ!X=h<)B$_RY2UEYQ?&pH-A8n_Zrl^4F zJDw7jvAZxqq3|A9G9oiHy#$w4-QS}vwPChiu&|nK7aZ>LGskrXl@2yjm(=QH?F(5~ zi)Gmv-1Y+a?ukgTq{s%Tehz#bp-rEab3kp|u2XQWt?BppC_0GiID={?>#?KPXJ6I& zcv##^Fixvo)te3eTjurg%2N8`WEPX~)-@6Cy~g4$0=btBcx(YnJU0VoHTIwNI!xp>6d z!1Il&75+`AewE<}nguaSD###9XXBa~rhk3$?XI6qd#G_v(UlJjR~f$)syOK$9IKKj zrENjSWlEylV8$4^p3XFl8n=2F&`sDS%V3wRogMo1T(vE<^s_mbSPPR`IXCdPrO{!2 z-(^?BDOTq;WI+e(GUZ0nZz3}6h+W%3l)^mN;nM+(HHKC0IKL`#|5KpFoJ^9OdRKdk z($mNO?K9fuTq9v={E#-Rva`fPOmWX{-E5z4t_)Kac#NATbHye#rNk77$+J=J4SSfO zW?1~)Qhq2*Mmh3~q}nrQMUTy<^q; zdqa;wrJ5)spEhkKHJl&47kZZUoHj;-uWk`HeDZHVRUL9J;SCdyh(e3C+7&pApd5HR6_5eOj#3C$m zYkFOR)PeR{tr}RKp?lAG+0$PiVBz`k&V6+T_Kn}MOtU0kV?R{K2xJ!xh87#v(TmZE ztGD;6dPfcIc8aIo9r!Bn<<~9uc#7+lrB+sN$m$GaQTVHeq_|L(bSiDX=+4C?-P$={JuJ%e&yZF2c zbzp6bHy*6-{!aB*s5bk>0ItpSO0=EcvFa7o7TMq%)?O3g{o9Q$dr~7RfXVR++ z3;QZAqluY@KR2x}HQDh->=<^BPcM@FZPwId!qdQ!?85_jO}do5vM+Md@{#FQKE{~T zG#`1Elr)>oaN&-S-np%=v@-_f_a?%OC$ycMhT9#O-Qx~qxBV6we({eclT{n_M0f;C&A;G%29*Iec+o5vR zDpyw|ASYHH11h=vAAJ&Kp7QNJC=QkOsKs*vzOMBckZhK@UJ z5kOpdx;%D7O%WHBs#_`rg<4R@0u09e+ep?D*t4Sq7*sGeZdx|${~_Fg#f^H6E=S?U zNMDIfxK5)-D7oG7jd}fzr#jco=PhnVIvU?gX&V4510oIMB^6e9%i3Rup~2juzNaL_ zh->|-*3;8-q6V|VQG`oI0J>zD$NlYwYi`+CRgIT+wY(wW&D1Mr`oN>lq3$3M^#DS+ zrveO9Bvl;HbHWMt-AIwN+chZHg5PdJ6B9(fhOUtT_0a$9nd;B}?+pTAl+=zJQuBc? zVrG36(MKVr6+0Q}r#O@T<4;jxD<+eM9=#zyn#*W<&F?j6i7>j$Cs-GA@RTJMjL>*P z&6;^lqE~`{IW~x9I}5ff{+ZdW9kjS!5!C81RSSgsXVu$BE;gj{8*-^bRW{Bvqh3Yl z6MNDVt5FRY51U&fu`1^DS*kl+;7;EAI4L@)OTQa_*<{M`k%{O}nRzao_0b@m4>g47=9k@WAvs&pEEqhGCZ~OW=NKu_@D_9o1v&V}2iBc}KFx!C z!ThM(5XPC}B027x(^bsC!UNd-8s|;*Fw=or#LslZR<6MiJN3V{V?R|ZvZU0HEy>YZ+j3ZdLR?$ZpY5| z60k1aj$a3PfQQ^1>0dsDQ#(Mypk$3?%O&DZH{4GfJPv-ZP^Ebl z(OaeBckkv;N0H-*EE3*0q*KW@=OcO(sA5C^QGUx(c)J_btbRjNZ`ukW5}XymYO8(2 z_S*9-vulL)c*NLp{!f-fO8C*2Un(rL+Qb6YkIVJV7MaUn!iSzvUjE(^>(*WqlZwIX z#=1hsha!j_x#b&?w!&x>NWQM?%F|ARy>cE(42XgF_$Q3&APxh#H!79hRP$e^ambHpxt&7aCiKBMNF;vx^WM( zkVC7Ny7JebhWF?mccq|{wSC*z0{ybFU#BLXCXAgIFwv+<9VVseqOtBGKc%s1&W`eTdmI-XT zT^Mf;^wUP`Yj>eN@`&kK#fRs6rJO{m!BS%tHP!hguHAI5YnegG(jW61+p`RGF=9ey zXGi~D$jz?uFi5ynJj_2zR-`!aV+6f=ViSuUMccofgzguLQC0=a^u#iTQ^H|Q=}4I+ z<*to;#ZjW;JB{xhg8nH3dnjNSHMj7h$V+i0{KT3;f*s#gF zS$GT>hoSOtiA$XdGL}c_gKux6vAaZv;a6LZ=Fmr3!+AFj7}W?5s)*k64|z?#YfoPm zC+8S1Ef@5`{Bi5oBAY}ZCdLmuA6XSR6Wv{|K#%i+E2b86PPA${!-fOFUzL<^GJlqz z`B1-ovGv^(H)GOqa&*N`_1mBeV2sv%SK^5Y-@%k`;~yBhhEwb`qa8xIcNPwSnXY2F z{SW5o=E0jVGo!pMYf=BT^GMabj|1rK_;{9j55q|~@8si5U!?G zVVShKOK)l5A-{4CMAcxGm%1{-{1*9@#b~x(BHUHMaFD*3WgzGryI%|`^_W-CUK}5m z7^;!m_KixVz=j%Ns#aFl89^>Jbj$BWYr5tgnSBYVpvR(stE$7!Ff1u%tMY6y$uJSV z@-cLw+_4Jl(&|+K_lVN^p=#-f<*uB3^aJ z;!^u2W2s6={&d_~e!A6a)WKflaDJ{Irw(jA_hFLFItl=k52ZMhPg~-tO->36Bi2vD zIt!$VRa^j_=W|6ulU-+|dY05td2PRXjQnQxvFa)t-IgEMz-cUcIqeJpyMp@%_k2RO zShGkw zH239bE|dGU3LT8_J*(%yJt9@jqh8*;aVK)}@;y*|SS_oCl3%VJHt-9si)-l$;~7`0V~whg?0#3JQTNxjI-BU)Y-i5; z^%Ht7vips>$(yvA8V#6xxmV^1J!gT1WACQTo=%pK^^6xy`|cN0u~Bi6G^_$&UiNWW z?v(t8Lb#6GD85ekYFh$8x6RRHKaa7i$DY-5*=9aZyV}YL^-v^$){r<=S#Uz*IHG91zlA$0@{ zT5%V~!LbMI?`71 zLmzm2!7cS4(5*b^P^VO>c?chSBa5gw4rD{4Z%!Mjl zH2`KFmBkY9u94`^_6sIDWYP=*@p9Y3=Rsn$ z%7o3hg|b79%fMa4Rql{79JGV@M;?8(JQfnsF!j)@MN2X+?(%zSnZv8R?SB(m^g$|DsN3c0j z6U1x-tmdnP<|p~-DayGVl62BS_8R&FSwqg@LRngxu?;dqV#I4H-AjOC*Zle%`s7n2 zZ0Cr4aR*5p@y$S3eZN}ovDc7g*1tKH{Ok39SciqAS132iLpSYc*VS#1q(#LHBN#Pj zo@~~7*T&J<(XpKKnxi9Y56&k$^0}X#ZmGp+-?S^hxMA~C2*4R&=vsiZ3AnqQMmTPD zM-WaeJ6q1lwzuQ)-dffz@W>&dR1WZWvX7M)J^rZcz_{J?XPTbGDLmdX%WGy+bxHgr z?t%4({;WaJBbYvaCah%Mgz4AI>QBZUKiHD^U8+!BI)h!N_m0wI)DSnZ zZf@x+9ppb3QoyYfwVvL%+%%fAE=dUHILSi`v{n9>`*Y9)EtVyKMU6E5H%jK>y_`EUYB)U<$HQ9CB(YH%4fsoI^x3m zWsq#*6J_PLcsz8A0-A|UBM^!@Ta)KJKJ-*4Wcivpu*)qp?1Q* z>sjgpYig?a%3HypobgxeQ&ZbBf%r8>(u!Da^uNTNkdDu``oCf zp)gKu)|&p)c(IY`9?fxB<%DASZ~Zj(cFnID|Mt>ZqC5e%*$feZDb&Mn(&0+q9&u44 zT``g5Z;A<(@NR%5O36UY<AU+=J$vlttG;MNF^SDl9=X9mH1Au_*snzIjeC|lF53z2WVOW{bS zB`4m=kBhPNm-fFOZNt8gPO%r^d^Hs@_GS@#T44A{^KNOLU$$eEZ_Y4(2ueqEdOpZs zIcVIvy&;@B=)YM2H0$_V4AfZJPOy7|PpzeEH26_Jnhmoje1i$7=8gOkWHB=FWeYSy zzf)5ri@D(zBhgP_5XNbkL8bLY+&WE|Z2*p!cmNSCgH6ZgWidMA5YD>P^cn_xAsj-p zflCFIsL498&L`K|B0#AA%EZWIS>K+yadY<(Gxa$DU}XPeO$_JpNXoFBakn=x z4LM6;rkNk5%=LqL43X3nroLwhBn!;(slF5z0A3YD!;pXOTfq6IeTv66t0ew-PBXey z+HSKxT_vlDF$QBrC{fLylMG|Gh#*9qXH7FS`+8XoPHEg*FS*`{2Z*>t|L|u!uWZqa zwkI7{JSe=72>mQFjsXeBp57H=_CLrQSxYx(J}iFG{e#dO&cB6jVXSj-NT~9?n05;r z&ppzB!&b@A`?8TQZ>g7V;$Lj=CZ;21{Kug+1bqS*k){cH*xOaK#<(%uYWv!I?S;}zS+%0%ng%yXUU~5oE;XVB5)b*t_noB|!op2cNq?_jJ-Bu?(EN}2 z_Y`ACYvpKAw@W`ZtNLqrtv|}h!(E1>LmBn+`z8(hALoV7X^UJcqI#16&GYR{4c2 zArj2HG?4VMjH*v33#ew8eydQV8)2WM&j*5b>7QmTl#uUqeun^)Q0MQCnP`Ooj(ZI7;_I|i?x z6=boUndD&Zi55hAv>KHW5kyEJKl~M-P2%){_&cJhKTIK{|v_K&#aL@7```s&oFNt5jUi@N5 zeBk%|QOGn5yp#^k5ABm@FGg_bbs44#HboW@V~mt@-4vlz!wJq@30lY>O?g5SFOS$R zEk5-+@6$Apv6ihDZZGv85-x@mYsJft=48@ZcSew=sg)-v*wstB0O==MXB=@9QKK|c zWN?9I)F%A=Rmb&kFv#gu4$k4)$h$~O`W(Rb4uuvQ6`WU|cNWCre+Nyxy-t23@;U;; zZ$ft)PLc_>4SG`^^p}}0@w%%&g2#b6YkCz>;tJcxdlvR1)JyjW0}(z?0b_&5O>b$4 z)MJXVjycM(Aj?0TlcdP!WV;iPvGAA+fMU zy^eGl_%$E=Xh(iAOQ=H|jIf+nNj#1>=`1n9H>5eVq;K7|SpmGAr8b>Ib5_4GBlSBl zjl~f}rfWnMZFkSW-NtjIMeJH9I)G}ul;{>S;-FsFvum7p(Vi#zE6|P@n3p|a>$UKA*zzl)uea<#|K41BOdo^Q}RM!e27N9Hgp0~kVpusaqDF-Q`@HZ4^VxKqM&5LrA|!)8k?5nP)+C+=L6)2)b}@`dmy=Dt@-~f${H$ z?8ge6t)Y}zHaB%BE;BS%!(w=aWo}VJ;8*e|^VQ&R&)eY#A^Dko&1xS~_S~cA*GtYv zJJjEOcLWZYh5T)1UN^A|VLL)LQqlII5ufiP+S7qZ8|~#uuKXMLP%nK7H1h~2BiU&mrJ_5lWkk4YfWu9@aY1#KPOi2>%kp;OdBP3Ln@Gw zeU!ES$aL_~$b>%~SsQ$1+^@kNLAvcE6^pSer=0OmM=HsD5w3xM2QQ0}}z1XUQ z=(V+x|CLY_&&m^EfOW=(oI}zUVrPv`UbtctAgUbazdL4tiaS<5``YPG!w6$2>Qm1$hP;CNKY!OoPPdVO^D*k=HGn z>=A&2xK5*w(OUeme`K2RYW`m7xZhoL+Ns@@$mZ3ht82}7=XCFGHXN>`z#rQ^4?bBQ z!H<#|ez7xco3-;v@zPd@-0x*7E>;4`nk@j;>@v#hJF35p-FT#vG~P6S>em~>rV(Ij zLC+#~hteyWy|LfvXpd7+{1UIL6{=r0&kWj9dUA%)Q>QLiF;qiS`dT9HzS_|0aB^6w zEk@di`ld#g;*S4G*!Bq-%|4z_j2nHq7tEu}8OTZ*K)P%8HK)lqAaZgroi#=?)<3oX zY1kv=F`2mj-a$=Rl>LES0Lrk$IFDrSET9LqG04M~yzWS8mL|Ek;x4AhHJ67wp$c9F zSvY}2CC0SHICkw^Qx&}A4BZg`eDm{MX=`Q&6?=cZiuK(0B@WJBDU|?KX$7iE`$x{A z&8oGRZVt?kN4ACU;(%C*Qoz_BExh^7E1Z>qi+A?U-kTd~(jhVa zCalWPHZUS&PxIa7fh*ZkF2y^AOto=%Y6%0n@3{2mso))*ouWTLCfEQiHtW%W+&=LV z<#`8QLZt~fFA1u&#qJ&C*j{m^_wH!s4I$vIgfr>;dRZ=tDHLp=``yzR>I-31#iu`? zI6)-q?tS+$boUGE;_W(aldZUJujgv(^r!u74BsZj=z!owRA$1Z{wDQCXdweM7(Y<` ztofuAzxlqSG>{{sB>mm!d0aFW877?h2b1>%qL{gS|1rYKFW^7M9(snsTo&fkyX8Y3@Ji72<6q z)dHN^UmO77^l~}Gj?riDL0Jgok;|{Kl?8xCb6l|bQ zIy&WvFcahF%Mp%_+AwaVB*g;Jt^!SZd+`+1=xRQ5&H@v7uZG=IJM*Toi7wk7XbIJg zmP-SZsV$HXuH(#*8^Z;35Z9Y=9Od^7w9iyk0UiyY8~Sz3BjC$1yiSf!5meoO^G5bB z@jq4tS_;xpo~o77qRZhAQQ`LT35=L2w?o7I9#rYcUh0%spjnQ=C*iQiNf%p&^lRB*V!+Hpp0=9Lj%K%IMa9M6=#79!O zw~IVwEgyN>hj_GYW9-F@6=IqoPaF6;GI>cH8(UarI{W9LBJ(;PD=$g^;n|OkdAS^W z)dr!-ZZTQmu_KzQHczy!g15A7n+Em{9pax0=-mrDs`5Kg^Pve{TLBSQj|qk;nY;cW zSlYkV`n|a|5dxbYJ4G$yz?E2m$a z+<{afpe#GK z&tWX?{iZTbmN#h6qL%fU*+q2oKIgo*tZ9OY2Pm3(6yvy8MsU8nwNL z=SlobE%=oTqFx*>2k48v3^Ds&wzU^2>^=w@&Dd@jHU4RSG47A0^`+)#3JPI)u3du$ z*Ns`qxWry)!YcFXipEA*rGPI?pcbhC8&DllJor3<7OmqDpQhCu8-k3MNx8u&r2QAK=JuN6^2Athj3ZfKWO->vKCmACWb2eXPLx*FTlG^w&a4A6mcsQ?K93 zrfYh4KkkJHbU^$i_wGJ;b%cB@O})}=zB`gD-S}kG8$Mi8*&M?t!e_!E$M;6bi%+71 zJTi%Jf3lG@-j{nBGEgu4NtDzcjZQD;u7z-GddKNSfLmi3_Uu%|?|0i~$&B>lY}S9w z&D^}Cy`2Q6D{L{Is`!Mn@*CYKm=D6zbE9K8`Sh%-xg>G{$b{2h~Xpn9Y`?H&mw<9lm-<*_IG z!2e_)R6zv1s8RY-ew~QadPY;kz0v4>{nsUD6LYW3*iLBD(UDFM|^lfGJN zEA|)p#XM&8t>q2bpjXXZRQi3zvo8X3)po=gG}0|MA^Qq7iNM8uo>uenS|c5a#JJYX zQz}Z6GPKdUw&foWFaG~^=D|8!>#gT+a#6`*gBEdl`AEU+q70AYkD7Tdg#@A5Zd=+N z1bVzXt+j@mso_ZXVHzNlVEnHneK)CR%={0Rio2@+QC)syJc@ru>AGCx7JYkQU!v`8 zI?EgjxDs6PdP-a5o_}b4KYS)Ui5x2hd@9WW3<@u`4Z8cNy1O;|qDFb?il2P_rw%uW z-qT4NSZpYCEb9q95u-L}bOuV~^)Ixx>D%lfJGxRgGgqVdm$TTQ zeKW;RT-Ow^S%-bmuOdluXIk%ulMqV`)i@A)tXDCZbxKJ9I@R&+W06@H&cd4PU!3V$ z5=!0Vv57)n&cZJyO>|*BKOo3yvV${e!c)e1>$5ajwi56r+r)fPD*n3$Ecr*6txcY8 zfm2TR)@H%_QbU&M62G#hFtP|ZFb^_oP$88ny4H*G_#i0AFn7FL&e1H<*(*+Tp^BdI z#F{=2>FbU^gT5*>+cIB3TF(5A4Nj0}?xY-YV;c=Q61ObX_cZD26olUnNv`zz_rBmO zXEKuA`L1jaSH~DZ_KT)05;`;vLO6zf>~FU|N*(A zCMv&t?ZV>|^>{L8MIod0;sw|n0}!!$ok=~;+JplWs|z~QBZkTH`tP`_0i+3B7=F5N zG1tp~y@Qsnt(wN*QWUcvc9|}|(|9VGx?-~qLPOz!pqKUfUtn{S;^Jfr+&SD%_+9bgJ(xirOAS)Kf$7=Mh_UX!?S*Dx|Ke= zy4qn1BHUepz-nHjQP?|CkQa}|ZFn6^q5}2>cee&_5$*>6$Hb?{cM4l|Sh*FpKd#Eq z>L96dOoWufV#FVKkQhExEbM}Ji%yCh5}rT~mAw4`9&i3q^qF6YfTN?lFgHO$M$BL~ zT=llc_#5N2!Mi`s>M1L+uZ!yK)N(!=WYhtFq;STy--gy2)Zbme2XkQ9n7f!$tVMRh%rmE5>sjKohF1lcyDnxc2uQ)ULH{V zRM3C|A(w$+fFsf(BwEN1QzA`w79{2_NhtoaiLwK5IrCHXPXla11}g=A%MMm4 z|D@#DF5SL(W{LmbLZ2mJY`%OD*XZD9Mc=Fer?HP?+5MVbhifouqHfQ>Zz)4m&n0Bw z8PjmF0)9Kx5<3z1?ql>Y%Vdf@5H1w4<6tJggAS}z`M74~R09p*%J`d(%n=sPXN|V+ z6-+xMa5LERya7=2GjooGlR=)=Mxpd@gPz!6J24a2wr=aM*(|PJ8Eft_c3##}O;HT~ z3h)pU9kvX_U@b#-qTU}Xip{ywpF6SI&&NXN<16W0x_x5b+uq8|_=yu(DNtN#rJwb% zOM*i$U<+i&@z8@>gX`2ff$UyFda)P~vh)!NLW8mQ^TH6QC3aq5$>Y)rOs__Yd zJyH?-gJP}>YJf0(?&!FeF>G}evBQtUQ6p-8SlI)Q9hC0TM^N(@j^5bzayS&}?w4LT zl?BS|NpeFrnqM<7*g!{gqP^Mz>wtW(m?r{6jrs8p>@xtpjCuhO| zIup#^{DZA#e0vO}j%mmwg)sh6Ufx7sW6sKM7S?TdvARCxS`&VPxuAxYC~Ts4;APDC zJGU5C{<0Ee6x7B(;z(iuQzzs)ntsd$)w3< zin|;0sns-^v1x=Af{ytwql|W>2lyOFrps*K@kHV8pesR75di9g z>cS3r)T_P3{z#1uKe`c5s||1;qeWQvM}xXweZ$((s+@14$7*pYZtalm z3~=29#gyCRmFcGNFAyRAC+iy2yO-N@_xE$(rVRI$EMo4mI@06$Gb9oA!fCna`m%kRHNQ?Mh-;@}8taCg9^n3R~1AdnPd z0S!g+77@0hyJ*@P>$u3z9U=_)rvfcrzPV!)@E~Zq{esKP*tF?_-oJPXi1P%N)Qk8l z#kSxEfZ{vCxpT`}g^%4}_ zl~n+6&a*a&dm_fVLd`aAQpY{j|G*z)j>!E_u+^>e|HINh2DMuQ&-@&6a4LJzZmFZm zilM-qb~pJ_c_A{{eCkt ztm;6bZ8CzPg?uOK&u)2mv&3~JllXC9WK^Rhw3uh13$bm0^|pxlO~K}wZ>(SgaKj7J z%MJbvgtwk~&Ya1tJ+u_}=8^{y^hp3HoHN31&QHA3%mR3n8Cw+>az)-P*KoHkEk!*d zez_w<9I7C(a>N|x#(W*VV^f2yoLCRN^94|;zGf{7q$VK6cfJz#l&<&>4u zM*b-A~Q$OJ>=dBT?ybhdRWw1 zpT*;SvDl+7JDrrI_U|3f>VihMfeopMdA7Y;b|)yDHC1#4e}&vPEj%57=B1;}8Q?9m zKFh$APtZQ70-tR`2{RO+;Os(fB<+~64J53_VywE z$RoD0`3`4F%1@^>8SiczOQTFizi9f0N?n;GXTmR9%~~@f^cpf=ECxLF?a8 z0I=}oMw;F4!y=pY@ozIMlB`Jgl<%6bAZ2MvuF~~A zdeVdQHJ`LwEY-#w>B3PkJPX@iMMle^f*36><6zl!Ko_=In;v6I!^u(mJnqm|t4@O; zvsTUj@Cy$t^a2gzw;HzgoMQ%i@d^|6YTvlP-~S6A7Bx$3tj1f`j!6;45g7hA5W_FD z`?;6eYjnbTq}V9^MEm4)9@E#J5I6t1PYO%WB04x}6co}W&6T1|(9G-V!=4jO4D6RI zcxUr8MW$?mSsv#$VmoL%#*q!9=TE5J4$2>*Rx6h;BpT6}klXH&AWH7otZU)U`l+r+ z&)?)2FvH@gRW|@%X@E6;vX%`faxhm^FJ!S0nZEuYRoWA|V00JC%)l`p{Dpz_6d013 z`*QebzzQV)E)(#{|YaVV>_q;MpccJpz8ozZF4l`)2KHt6az%$Wg zcC&GH)u^?whD!|=R$99owh~(o9)a1;-c975YZMih85zn6@<64lYbXC0oy$2@w`77bq-pgErNYJmS{oF$`UfTtUk?devWs}NX z4?|1ysdKXDpnFb>gqSv~I<4%}x95>`$tc5XpI4%@v>oVDZ7KZBl2NdiQ!}icMpjms z4Yk=)PT-yZuYM&TIwovm*x!)^4(;M}@;&>ZAfwOy6e>DzwY@+5|45-24+*sfwuVA#BI1p`H|6x;uX>?<)4)M^)B2z-4q)B~Mn&h!-YL;%E9nj$cP|o($Hf2yI{Mze2bbPLW)sTx=?Ch-$Yx_IT3Jh0X|YWd*T51J7p# zzjp6ZshS@gG#Q)Iq9Ky8g;QQ~pKar!7 zTyzG+3<3eDcXZh$0X6YGWwcx}X6vjmB$M;oN-UBQBx zYm8y}7KI0+YH8ssF#n7x7 z-B?K2eaLKc&^#3)bCGc9&54gE5cn?V`q#ip1V?bmU(1^V;`D{+KlxLlz|_ED#~9+Y zKZW4mfAG9oC4XZ+UOR1em@a06sXhJ3m|gszDhXy<@Nb>4Kk-Q;CP05 zdvhP_7?s*h!V%8;y)&e^>S&i5{0{1k z2)Qb6g#zRZusywuOhdu!CM`h*OVn-LM&z4daPA*CGJ#=NYvT3NtYUQr1J01rxxTM+x-WDEI9ADY zU_qO;I~<%pv85{5ZJef%k2D5($MYc^IR~Qh|FQreDAT25F!9H(csGPDR~@7Q;>z@O zF?7HIC5`2@P#+>?d!0Mjk<%wnR}4@6;ik^C%1^_-4PquB2Mv|!DT%cxhMxU{*0~`; zL2~q+0rP9nW~{Y`9D*snBNG!%`1U-v{%=eA$g9ORH`TjWAF1nczNpYcuhvvsI^XMj zLfE~hfVb_e_nu_(S#6p=in!0QAU&y7@o?cP)0&Vnx{fWQTm3qdmdg2%0{s^&oFr6y7?YCJW0v0eD&q+KUWp?ZP1H49o})Eslrf> zMR^+zu?A{8Dz_SiyQ>b`J9*~Z~qK!p_-|5jI??v{6y4xz(`0Y z%zeO_YSu+UVshN^)-8C#^Zup5GBBZ!;2%|%s%|g8|J(JRE=ZrAmJws!^N7bBe0%!z zF z_&tB@#puD#+>ExH$r%yj#w)Iei`8@5ocb6j?h+RKwV@8LnYQ}>V$o93w-@|Yu$Q5K zmIFCdpBB<9+dEfoinlAtnAjJ`x|s@82m=9P1Dg`_{Y?zPzHxD4Z`jF{w@J8 zdO=I3^<6zHd(k$}K(Yl8)R80tm#1*5x|ttJTAS8)TiGTl;_di{3cP(tbW70`mH)1Id+6$JP$?W!tJa zimGmd(3F+oUjvl}xhE{x4kv5H_@H6TbSKJ|rw=^e&s!v60#Puph4K6TV8~xec#eIiqS1){YE=>#h4HbdKHj_! za4v?57*0~!X*c4B=WQ~hEqv?U)ywA+s-A1Xc}7wuCHmm0;zLFl#_^sbhPufU>=C=L z9>t_B=DasyIK)Rn=$L-$FoVxO|97cF+TO6mXY}%cCKC9)wqC{D&xuY%Y%0?sl#Xt# zPpPg(z5nMa>nGdYH$Jd>a?rIcb$UgEmqpKTuhX)hy#c*>)Dckb#Ya;T6+%Ne$vszo zh~CEWFC^URyRK!I`O@i~HYPQeS`}b#L`mIciPm(G9u{I5n1EkiK&R3>--jb72`~#p zJ5tA-tE5KId>&5vv6GM>2Lvy|%ou457npr=Za&FbNPi(YHZ@_s%3+YssXuDNhNZH- zSK@4A0TLAgh681v9Oc)3hk6||3}K?S^NEIAbpbnsf0_scxMg;$Jawj|b6dw0W z28>&+$Gf8`wB9CBJmMZ{1w*DQos~?jZ^}KwhGisHr>&1_fUlj7+OpX#OA7vAalp&- z>t)x*-C;fw?a1WaD}bwb)o>;FX6+Gs+V%7oen=l0^3M%V);0HBUaos7vX)|Y61EIR z`UMa>J1o`etJrmgLKD06{NnaGy%Dr?EJ`FxFEv^q{BpV^5Z{JDlGS>tshvrivzi-J zX$Wqu2`g32wrB{uV57`jQ|!wM5vEKgK7~3W7?I{qeeIx08RPZ;wcl5pCE|s~EQ?!9 zB?Jgy*j@@;;8ee}&=2n8uFSJACf&kPXz#!?PLi1QZwT~<-IuTP>G*J1H9S69+A{e+9176c?j{3MHy@y!ot&VF6iLSjE5H#} zfoV?(3$~`u!Hl-2vA|Y-+|JOm>R#u~DZcu@>+-)dqws1H@-b z8tA=C0lQ~f{~iq{h&fNG^(eh?l=e$M1>C}6cpT-7?^P;FD!qU!KeY&DH}J}0O`Yke zsOB1qHPxhmBduCQ(=Q8HMCzuiLl$>5^Z3xO4^EvUm`W$ZCAZ2J?LhR)65*aZy{p|( zX258m6X1?>p8fqVusJ}Tk4(TEJ%!tY0R6^My4v~4*GsW!mkz!|hV+9N{iL)- z;L-r+-3Oo#x8+i|+2bhD{{^+MJ1m-M#mhJ0o03lmdPl7cWUnUnDRXSZ26}pTcD>k( zt(3+@yKNVZO_2YOtX2KX?@m?uC%&yQXB$ND$?O&)GQDrVQ+>88zvV_%tx`DUDSQwR zL}v+MdOSVRS+mS-^IDQLj|lJ_$Y%nwm`C5{#^r%GiN;d%DW(t3K{*tAYWnY0;h?F< zr;{%0P#f@hItc-B1en6bXPyh6IT+6tTcEH8xnW==CUON=1uNT2^`QfoKuSv*&Y@i8 z;s)~pV&RXTy^wqTy!-z~97jjLeqW0DJyG~yhfw<-`p`E%wZ6>FK9iC5p7sFM8d%cn zARk_Gj4O?Qp0hWfqGWiO|7}|=cLM#BoAC3mk(_PY@<2RR%lh&HrJ{EK4^yvJ*Vxp& zS;hCTWQGZ|scU1?fmaBY$(q{%EU56KUZp?pD>Q~24s8|{I^Rpkfd~N<(H#Z>O4`tJ z?eqTzojKwWeq?au#HdL|81zYb)y1dlU?}Pg0UpkSxmnGia>x zmz1-I{;^+pTD@tLU?v2FnB>?UH@=p~yWe}^wZ+zWX&vHoe&X%{o4{KndtxKr-D{!w z_;8%c zis=2;Iq9gKPD(kyVE9g~8bFr=vpZ7L?H(3n^jzpzD4?VlNuHkmewdD2eGM4p&Pfh* z%Ex&+aQ{D^WnyRTpf*4ckDg|A^V=DEo-lbKvwo4zo}<78wxB080865|gz@4xAZ&1gZ=3_o-m^5_S>O;uZY z!;hydR5Q*hwy?%kV3P`B2OZ5=Ps^|*XcA6?xOcMleOR-Zr_CmdK~EL!zY!<|VuUHz zn$m>~RHAmXIcvH}O+pcFfOa+R!|jjED)^w=dT!OW_O4O1IeO949^*Oug*5B$`}2N9 z!2U!=X+>oxy!+?hs4;f9IVmLXHi$kXM)c5T!ZFGr8#?w;Hs?J~{(nc^j(b}F(3i_Z`n~gc%Vrnc=5a*;(-#j3M!h0 z6|N7Mxo6a}5KOBz1qx`*N)SZcdNhs#= z6*43ACvEIb5?ey@U+C*IL3L6;UHm>=B4{NNA{jp<=4nqty>rY>JNHhDdI=7{6wH|j z42*d2(jmPjUT%-l3O`6M==ekLU-X^tlaY#e%?UGw|F?jF8Ck%_`4U9{?wtX2Ooq>5?00$Xsl^wl&X$`->4Vy}MWPpyL zf&LON9l2f~{^D!wf8-#p7(fmxe$YYnqq%bdgRFP1Iio9#IUJ}a`dA$#Amf>$! zuFz==8kPwdRRiGJR9$BNG&L$37`$0JC2?sEzm34OPS*FQDobI8KfdS$7aS%5U4K|f zf_+SgJ-}4Ne~SM@$ zrhkRh0NTQ&0T+3i?xsY>>YIZfYbr0jQVx9S(|`^>d93 z9>xqFQcnIm=J^lpJ^vT0HjnBpRsz>6R9JhB&Yma0SbUlOs3A|GMu;@js3*MwsyECB zV=oVXY~cn-Je>g-5)ZpgQbrZAqhn+!IQOOOoS*ag_tRO3z6*)>#n$ecRXQ}>q~Os6 z#s`EdV}SOsw{_9)tz0F;0etIhB~}c49S1nmjQ#6&cgq&Tn^R8rj*q?qFbM2rwRA^c zVYQ^+X}0&}rza6B?^-DID~?$3e7XW|=R442jiXfR*YN6e`Zu(q=&MBU^a-_?7p=)6 z80a+D@}{0B0?adj@e-3)<-KVQScrOo2H$IdKnO|$uC7X~)%6Bmzs`>c$~gKY%R8)+$~~4GU{PMQh52> zxoJDroN!mARJT^hd3WwhTeftra$8y|GgsPl6lCO6X$9J4&80<)jMVQugI*#~B}{o> z?yj?YNdISk#10ry$%L?BkUjMSG$Ny;L!_1$-U*ghcXZ(wdItXUSAnRe>fPLIVwe+d0n}+vNLB$YxXcdvnyb+`$i8m3cI04UvRC~-viM?jL*Hv@ zA5}{z&&i~In5c%hX;znVqT(_vO%pbC+-uFV%kV_`Y${mxTr=_WyGB$Wj`pOFGHKmD z9yX&#&`G4`3d*{&FYaNK0kymh58tL6zK_>`_4;gy8qfsn`o}{(u$TX4VBuR|XDgb+ z47Gr%90=&iYe4_W0fYbvdcaf;paU%DEVek2)7Tsce)ZkkjYL#<1bzvxc;-)C7H^ZR z#`YnCShF_=I_`~}cdM!3yVdF?5$5*?FB^;K#1|uOz`9}&3PCxyd7+a`>V`)6QinD1kAbg zENE8XGw4b!*kF1xnJMt^fN)c$X8HK&{`rKdBXrZ4elcLs5nuu3^a4_ywbhzq;C!5Z&71N;%hSbuGJNOV ze_c%%H(VRPdb*E3+2wP@3Rnv8)F0s;_;gs;&uroipIt9S9VFf)!?7=!uixS){6L+v zJ950w$3?NVNfMveAFBg_bU(2zMCi4p>dT{$4)r15{%Z+?^?O^3taDbjUlVlVaykcH z=M3@d|LexK-9qn}c)7Gh?rD%oYVkH7mlB<&b2>AJ|o zGf{8CkhL?w)KcaGd~Id;o&(dcCuhhwS|GoU#(9J^ZXXv&^t`lstBR}wnxRB=BQ(*`&PCacFo_6UGEXlwYfegB>I`!OuN&%nrb{@&RHM*548atok) zD(|aM!3R!%i$x~2dp*vlhgl6SbOP?Ro!prJ%mU~VU>rR=BkGH!G_VG|E_5{3yEeuw zc6tsDTR-TY=bpE}3&%G29guaDIuZ+aKor33hc=@+sxoZ>0V*n$FN>lREdJ_9S5T|B z{B8M7em=DXKU~=CyV)S8WVW&Q!ly&|gvr}1`jS~g)2QNcF@AZ#Ka;)bT7F~&^z$>% zFei_%!Y1!0y*u$&XFqxMO|ul#Z3epxG>8JzkpcTaJ}EZr&}3AzKuwXpNqH*fBHFZK zcFbvgAfz4qYU!?ze2$9GwHT=eL7@DovDBKiwPP%Ey%zPmP|tH0W~n<$SrAX0Q=h91{^x5Z-hCtT#fKNn#o0se@28^TmNtJoc_xq(^ds%y`r%WLtqdpcOF z4vCH`NX2!wb(BtLAv;pdQH821;Vsd~jhb`+)gE9KA%40|e2n zJKcqF^TCWw-1_q7QM3n(XG*QLM83uC0XG|?cfh>PJfL{jE>}r?)p@+5TBgnVy^J*A zg6X-67fPLA&1TaLL5FY#$)Bq%50w!68_ELi2_3(!C$je3XIq|6;PNOhjIlto5wxND zezANtvOb?J%0xZ%Gg4(87^>RD>RR@*&K;_p$rFPsq~cIQ?WE4U0I&?e2sBr=X%2n= zE|5_2w%1!UI!~Bp>A%h_Yz7n`gGOzo@2Y5$T|u9J@ftrp1z>fwo@%Fl5|?~4=?n-@ zlW40JQ|(UgOxHQUb=n`R2Fp$C)#Gx0R@Y!QGGo>rM*C~)_gOjVKNc&LXyKYDzh3>4 zv~~qUg{g))-4t@|p&*YbHDI}M1eSJ`?^iG$<3jjvnrsG|++#i+E;~0B)(XpWo7a(M z8wI|plKNwg0MG_Y_n0!z+b28d4aNTeE!}AqjAtzxDX$cVR(VSB-DWu7C7si?VDyr0 zt;c_PH?JM_(#9m@jRZa~_UwEe4&u9T>^T_V&70klr>5DaCD;#l^DTUPd1*RYSHA}2 zTG$+48QgLvE~`k?Z@JU<2?u*%?y2ydP+qE8BA%vH3A?| zzUyej;TF-;&^6z`$BsfYIvJ1r{5lFBe7I^$_2r?*i`&N=|f?yX4C{NEQK<^5r!(6j2~OxCf?dU4{LDI4wN7TGCW6prOZS&RG>7B4;M zlcU^B8x*!^$T6^Mj=l^0q*R8|&CFZJbJwKr)saLOW>L8WA0AfpJgRYaYvURJF=)q8O$|)}Q{&u{o#d9^$ZU<=!+4a1K-tza-vvhY8u$=8b*6(><^@ zC9LFiqF0BpEQ09xPL@`$Y+Ra7xh61UyP8IMiAs@N>XJY69feJ3@i@cnapkc3-v&E{ z)9H|B{S#**#e)+Q9jJ=1z_8)@?#YQw2LL1oj4D}kJw9zB?9j7CBo+%U(&b7dPNPjc{IBO zWpy5iKYYQsfvp5CCh$@6c0T&Lx9Km*H7?`2q>ATv=ck{aprLjp#}J+NVv{bLHs&DJlS@X-y=_P^#x9PJPy7|*%Hc0; zGxCdjX?9!h*~qnfCau-uc@sPNX_f^kta@IXu6MYWPt=2XbT9;n-C@Kw$9AXFqBm~$ ztCj2Voxt6j$DJ_&_z)p-<=tH#wl}WC>YFH)!RdsN^-~Z1Xz@CW?>9X=(fi*xXUd0= zKjnl^(wg9Ey8=q9-J+Tw2&eD`_r_d(`OTloFikoIEK-E48~x4R*55?k4J zjFFs|q`DsFr=8^fdI*@HwtYmo7Y4^_+?CS*dJ$?U{q;UkZwM{uG8v_HeLv7ykIHxR z^fI`2A zqaidzNA19i?5TkX_eF?#{2DmES6~}tS6OD4p6BHn(3*ZtpwT`X(9>5{vh(*U_)Na0 z&SI@IxQGnAoo%6toaVy~9FF2=sB|9P`78q&nk8HbVJ0J*C>Ix#VR@t#fxG%z4_?4 zWwfHW?*_;M2B8-79Y`DNu?;GRv`s%6CxB>vA;-tGhJ;Hb^Yw3SR`&M^ddRpP&}U+& z<#c~50-5jDELe*yNm?q;W4XyZJtYeUrump~0+_c2riKh3Hdel8>J=BNsVy+z53pLw zObLYyZ{J_I!v9n~pt>V)6NVZ~6ubByO>~iD6Fl=R5Erl?$ z{C502dRdQj$D#=Iw-u}NvUR3LN#tpft6`*7&Kwi4tV{lbPox@;trtlnKTC|wSLNvs z%xXfs8zg;5uw2@W8#|qrYAqD>cJs)mf z)p>fOlf(K;JrQ>7aM#KSelL8A5_XS*Wlm>Dsi=OapS8a_2>cuYkxjfGX`X9==8q!b znr2L|)QF+ExcMgo^8lX7uk279-Epv?w&Q%XC~K9V(24s5BD!jf-Jcs7Q0js%%VRO_vYQ^29 z&^|+9>&+9R&ZB-6KI#`aYAmP6ucYQm-wN-G+ZI#!K5Ss=vi}1B2%X*+0O0_>RqnFU zOm^FTSL736__>9Z%&4G&F;F8TY?Gw~b;;ctpeCn-t zgclv?n!~`rmw>y(jgADe}xJkr|d$Ruw2*n2$>j1*9v`X zqw~`a7q_@7ydg{-ZdkD-jvb3U&|jU$z)FfRR!6GKGoFiJlAaXpm39tbQ~er}C^Jma zU1QgpziP(twXAwPZY=wiHGSn>8(6sgGl^KoR;m%7(@B_rQA$Nkr{?9sA|KoGDpB!1 z=7IZuQU_GQ-NA)%Uv3LG3*5py;8l{4cYQaicoly3sZteQTe)xD-VUO>u2PR>Kv@Q= z69mN-lo{ZfHSo!^`RlN=(B`t%FC9$nUI2D9!(&S6A~OkcQ-&w)sYcmhN24}LB3$KpgEHBRnbyC zF7KZWj}QN>L+cNOJmGTrE= zL?pfa)fcjK_?Jqc%xvMe2eAxZe^nRSuBWwdNZKf2{t)N+{zq;3(!uvqbUmU9^VE7U zBh5~tR+hCeeMQ)(pU6TSm)7?2m~WVAn}hrfj=dH8W9I&W^qSEriV=oJ0X|Fm^EklI z4a5Q38KU1W{f4l#Otg_-WbE&OUX?XzJJQ;Eo8&Jm<1s){F)v<$AeUvg_3C5jBw+E=>yR@r$WP>5ObeVx_uO%B6GG0{nuapse}PJr zWnETpm5y=|hfaaql?1&t1@+`CuoOLiQF(nMVLKFmIq}HsjxL{fd-49m4i0`uT*nzw>so3NT%8R4z!^=_wk z(~zKf(si-ScfPgq_zldZ!-tHBO>%)O1@%+!=x5=&_V32~>)Ic&d3ADvJMd@t8HM80 zr$dH*9j?)7lLz@|ydyVDTpA>1FJ@OPHG^nAi`D`DN4|vf^|U&m`yz+tnBUvsh@GaJ zBh#lnm59zy=~0^6h$ksz82x9RXZfaE{r%cSWi25G>3(?^Ya`;`_MM5PIWQcuI@pRc z2pclF-0?TPXMCdUP|vemGv50b_m})MHA~wx+}67IIRE{Oy_t56Ua`3ybDT(BYt-TH zxJ|Mpw2Xk3V8$=M$+T1c{O|^u@fk|0$RSKYxl7krxNLS2vU&u+q`xFeuxX67C_N5yc*@Cg?>RjP1sl8nkrnlCCTC^wSCjO^dN;4YKL19s}p+2 z-dA4ixvZy?Boip#aWp~GnQDjl@!gJ(K`uO!9cz@)$&Am~z?or*_I;^LBK1yS?+Ou? zr^*J;5a%eOwP#rEbM$GB`Pnie=J#o&#{`g^La+bA#aiRqT|O%bFz|`x4VoOhORA7u=~D9@i&`F_zNHhTKEPS@~!jU?ZY#CISC<7 zI?p10en$TAIZFpI02K|@Gnk{B<%Vq@9=S0tDjo(-+d1!jQ^mdr?S_M~9MrZx%+uOH z)Voc%0XjTnS{M6$>X1l@n$-UIHR^l|UTXjl?@8s$k68-i21_Hw9JuL5mz0}?T%|25 z-J(o!1oW&gEMr&rK#AFD?2e38Fh{OcXv`+RC%d ziCvbfh@B9&s-OzGu_f{(fW5pgZ&DrAv-2DcuxfQM-bqT}$tDdp|6?i+= zTju!+L3w1^vwv+P*a5pt72mq5>Nay*{{ga&QnbIjGXN;>c&V zs;S0vscATcVkrrLFFvEo95<;>t(yTnK)c^v0aNR_{?{m%MT;@qR|TkLzwgYkVavy> zA}Fm$T^VmM+g`wKW(@~?g3z0L%7f(ntP|hGS=`OM`cp@2vv-1~ZCI`Ok9|5Wv{|1i z82%d401LQurvCRVYI$@7b*b0=IkCLt1ANHPvL~Qx$v-?K4js^gP>iI6P8Ld7V6)ZX zuorOq_vz@_j}uKpIOEgVnGa7<8L-S86-SCOC5P4bBUPg2zY+Cd7nKw%v?KR2Xn!-TD`KGH%g1wU~sp-Cnb_CJYLW7;2@Q%&(?1l1O-ztX#lJQ z6L6#aw?Lj<>&2)O(rwfBx93m#CkFu3hNpy{>y(rcB=NjUIdVPy^jD$%Pf(D|3i*>L zuxC*w7G2CaapKedP!eQNM^&Jk4_`q?Shvh=hRFrp6Wg^%jMa&q+%mgLcsIlGt#!n7|_PWC3-R&Tod_x*p*ZAM|j^q(Xler`E-jTjXw+_6ojdi45K*sA@ zsZus(YZMYRB&C6xeW&Y14-RznYVD&7uUr8J6DG0k5C9iz54c#Aeb~}YQDmX{wCJIa z1|RJ?bPB!M_tdyqSmPH}Z?$)qi*{rzfa-=9|bUiR6M{`8`D(vK9h+MEHK zV!fD23#X3~P~a25l;k(LL~}O}(x<fCw`0eYqmM#++SLht#^|-oovpZ20`I6hI2tJHrRfd}t?QdLC8;b7PAvtQm7-rymA z$O2ggLBQlDRR?5fWtv>%8I-XRSzMsQPHp_hQ1q(vc_s1j1#lP{qbk4k+LENxf~FBd z;5Uu>FUbnW>;4?MrjVnsy)rC&oRyI(^dQz2cvO4>(Fr`dAH=_b8!`bbNe1QY{hT%kRSC zE?$9^0<&O$Qn~B;@6KC;-f}Rveee%Y&@u>-#a91no$2_DBDekwI{jEa%4q#=MWhAj zR@Vi)$OnX`Pj;WKm^&Tt4J?~rXU8~H2PYZdop=dG#Z@{NJ&|_QWEr3R(yR=J2x}+k z2=^^UlM)bZ+`N_Kq-W2ti~|pDVzqzN=!xj+1mR&<$gQYY6r3j>sQN1S4k-~vQR|Yc zm^55*9DB(5R*^qzBvcOM5s6QZJxR0}P`K0ly%kzp zyCE_`dlo57Bl3__RDyj^c_QgHK7a$4f{Fr<%U-5UvQCx#-o%wDRDEvV^}%weygcRD ziF=KEJXQCe8#~+s8WEK%G#?hVyb0%ro!{M2O!Bz7&=(?HEi%98%M?C`J3EosC zzu?d7ekq(doQ?4Dhz;w!f(`bbm*01{l7xN7663x0+;Z45n|%9tBr5VoF0nrF^W*Xl z7?QMNd)TTrC^qMtZ5{&WqBER3j`6AT3d6(t*y9ibI76r^?e;1)BIyf0a{?5>6Yi(Z zD_ynw1WC9LH7`WhKWq2A>VXgx67Mvx;i&X*4WLW@HgMeHrmKEywrjY4tIZ{%3t)fU z%)gJBTTGVh1%Xv6ze$+H6G@RJTYDmC0g5H8NDe3TDa&?#>q?y}lm{OoHRN-}?_v@I z#QrSCM68y0O#GSW%{D}}CHNAz^Y$|Sbga#^XxmAlB?dU=L_a~hj_Ba+Yt5UUy4O_l zH0`o|x54N*m6iF@sN)}IbVr$wEL09CTFx^L5bw0#^kiIFFWYtkZ5ly>kR~R5r?!oh z2P2n8I$BTo8&;IWAf@O_S4Mp$eGzH22#FaxgZ&YJ>|rP1PJerG6jFYS^TTgguFgMM zG5KpH+H{;2@8fEEVjxrT)j)J|@#LBB*v%4UpRuD2B&f{#efoJVwo1*a-pR0S2O@NY8?Fo#w#hoH&MhcXX7tTCKn#CX8l*hAKZQ zO+;^>he@I;sfn3%VT-eGn>1?rn2s|yo#xJyL2c@$gwwO%ut&bbEhx+gGO|X)aZBw- zun0^lhN_@wD&F&`*gaptZGKUeb@4rxdSyR1Ml%-IRcsCj;!faO{Na%QTDk z6Z9@F*YL$PEl^yq4gVpx&JsqY6xFrTuy(CEhm6Rm0B|Zw%FG7(jzMTqxvuN%vOT%u zY}li|d7cIjel}cNSh+L3$=B4fzp*JXCmo+w&v))RQK{5mTeg^FIMn%vK_(2T1G(|m zNc5^M?jVk4#~Hmgi1?t_b=gG|YOzu7B|VfVlbBEV*LQzY^?h&Tc)EJLK+#@%nWn9B5^buR<2b+pKU8|LV( zTGPBv;}P^S%MT{75(HF#&oY2F^0*y#b^1OK3Ix?MhOS1@<@~+@<@I0hsj;r-t{og@ zO26La4;2qEWWo7U-s2DgPa^(Gfv+AQxsWQ&*^HnlQiI7ieSoNuPK zdF-W@ZWcXt7aROCBFLiC-W8e(+C)Mm^Z;6FhU_>`iW~*vUQetBonqarhOG}j3WX0o zHs0<0+>2j73Bc&o2HJ1`tgY7P9g{fR)wyQdikc`-y>^-17PeG;+r4M_>v~6Au`-l8 z0o;KKd{xRG4EwQzI~oYh5dyd=ACI>1QO~Tayp;YntQnBIKizvjrZ9@pMMLdFPXdaJ zr63P~X3V30VR<*U_8?xf8F=2h$g-?}6u zeFA!*B=!=E+I^T*drCFt-8TL1vGLrGvTMIfPfnM1w4bMzsJy`PsC zu=k+%#6)=oi`DXyfX!y6#ItD!jggM>0x_1L^_{(1Mo@L{HSD%C`nX$R-dWz&Yk^q8 z*J~y2!8-ctztB%W^w392?sQXUW=63W3hCcFD!NgGJEbZDh$su>3_F6!pRN+)mK1oB zAbpS(nuFyjR-WROh~+|i-F5%L`OA2BWIXo8{l>BX#} z0)+hLXU7^;SC$_76z|S4nR(e~moV<}mqfaW$4+jOxM4A7L|L%iK`0~0${JUFvz!%8gPfGTB z<}FX~BhYOSH+cgVuC6I*&2Sl6{Dy(@ zvs>+X@yq;I-S3+gnwS@%M4b7^w_ZfGhpB9FJ3bRoQPukXfIaK4>bC)_j zRG5L8>Deh&P5F&WO@Z2H0@Xdqd`;-*9QUnYjajjM|rWJDYvaLD9Nc!06HhNw!Gyy;X1NJQ` z<6PdM0Sh=miP`*DJew7-uiwV&-S{w`M|g!K01~CXe!$d7b(#?Q(r9b=)G_8p0WQ88 z{gvMy$)pr`bB79hws>cLfK^Ks;v9r@GU1groX@q2uQ)ij2QZTd1EiM!P7d@W(6nv89Mv{nXY2jwKy(UHOHt@Qm@F9K&CM&~ zpcFij`W>WFQfJvBgD+krH#>v^J6&^}8fv@m{78a3DWOq_ESfg8TA^khx1^R}5k=ZC z<=(i9x(~nwdcZmYad#c-Pg0GiJoc{XY0BGR;GfbK$3$>moe9SsSj?;{W}$3t30m%c zKo?|P>+;K=x0`mkOQb5hR{A_xWNZM`P{LGX+mi=x1RGZGF3><`1n0HwkA3y&ucpLt zj!UG;E5wXjwV(Rv?f$OLdt`Nnv17s7Z9d1!)Jrpt6sOUwJiYB$`Ny^w*=gX6;SM0W zPV^Ya&R@2F%!*yJ*{x}cn~^s;2(_Leqd$X=B zwPcp(wmy#)8`pumCLdPzTDzfIB!_yd`#!&!6=TGgpnc3cA7sUi$$W4@Q<`)6LiGm; z>D)?}Z40p|z7_*>UBkRMIEOhM&iCk^b5B`qZEZUR1qH_@XG+=iJ5-fNgCOJM&S;Y@ z@h4)A{i_k7J$ncB;b*9j4Z>i!@B66sd@3wTz360NJ4EW-M1#L!!xVifCOJw=hFpD< z*mfNkWsctI^V!eY_N9fmU^4lZ2{+K0fV74`B$}jJY1jN0Q*R7X! z_xEq)zO4OtXcAQipO=S4CeD(&mcb)M=$dUexI046Uky=`REOUcj{TNVc#U*Ky#9X9 zzORHqXweIc5vEY?&IzycP#|75z2-RG6{aRuid~8iq=>+};y#mA3~~57j;P5Bgwjks z`^VV7C-4l{dB#qweZ_yMsn@sv!(`>#iLXx4v(Y?0a7>EwvPI7LljO+O$7C*E3IfIg z#!pzMD`jpvDHaBsQ@Z5FsW%B&E-ie12oc&Z#Z=sopR?h5gPF}#lkpt@aeJA*^T~t6 zZ9z<_N^w_umaK5N=k)9HnQRumv>uU}=aeW=*!_I?lx@07wR10kwEys}T49>cRQ6<^ z@J=KoW1{ifVm?mNu;-M2N3aWI5=5lpes@={FqPFghct0D`3aMDmh|V6^C+)njwdL0 zS}cZTs)aYP5kh|t?jAKd3$KiZ_SzW0hxu7E zZOCJl<|M$z`B`rFd#K>D4{jkn+JSf-cD8b0##qDpt=n}r4vsrBD? z9(rA6A7{hRRx&p(;w^dZ03kqGmbK8Tl%`YasN0Q~I~^I6W5ra~5zAv-$2+IeM<0;T z5S|%SRK|`0z=e$6iiY3BDww;wvq)TE%tdMd)fm3A&nLcKAAquTOpJ<@*|?i6 zVahbzyBw>%MIBwZfFyPI`WkL>_z_6{2Ku|2OJiZ6X@w$^$X5DxO|xZq!Gz6HfTUyg zyRlV8-%y8xq&Ek*qJrB{`6NBku3ymg)t2S^WX}d3lpI)3;?xerU2#+9M*cfPzfW6I zdMd-w0`1QPgW1oqAYgLXCpRjC~fwD=VBpq(_10YP-%LVi?(;&X3` z2!X_0`vWY@m#b8ggxT7w3_I-vclWMq6EGatLzGZO+$@ZzyUH$=WU8}e?;sHwlrx`JY4D(xLVLlJ zN~}}z`V5sZpRpcwuc-&eVI`wpUt$RP_aU z<#>3*`+1MjRTV;}SlhEns~+r?B{b*ch4dH^(1Zq9sr*f*9TB*7v$swOZeYSMThyOE zt6KhY(hB_KJ&wH>TO)mhgFt?nZsc1l_S}Phwg4FFi)Z5H|1q#jvHE+=X-`#cF$>5g zV^%20CMZHTZOQr}?7>08PYnoBqh#Br zwsMC`y15#5^uq2FFixb3nF-}`QgaPnGkYaX;v2ZmneH$w6xsy{&S6FHg9d9ui~$9 zeCqgu_h7!I51-Snm3sbZS2-jv1Qr$UyP+;xbkqhY$P!+g(}ES$+QJ1z;o-hoV$Ss6 zcV1QP1WJ3E8k&WIL+T}?DJh&bPDL>B5m9L+xlWs<)IEm6uKj&C9j5GTuP7L@`U5FR z&|T5E*VEM1D>BTdG{JJfVrkr6dStU7BY*AXt$ioYBk0#GK1d!t-O27sy1L2$=IBj( zmG?RAiLWvM&?DeopZ=t01S*Ide0w?$zg9R=W9gS2)}J%O+g^x{9Dy+YXSt6PX8NP2 zn0kg5+0@Uh$6L+4)F(~tbr>%$22mLBB7c`;J+{ianaP^XD5Bg$cUE_Tsid`?sWPT{ zrUacLG}_))W64z9EPXpQ&6!lcl_u4wmdT-BdniXrKfUTdWBub8I2V@b;lPuCg+vn- zC(a?$b{bmJ*6*JVCOOIyys;ryc3Ud^rW*v&??-z`0~>2q9OuS0r@X2cbvb-^)?gEe zcG@v4GBnm6$D6P=vA z=@)XWO1#djmWSNM5>+Svh?E9e8o(M7 z?nrn;W0;6rh+8t-BH2=6KE`~mtbfpkIcg-Q7mKJ%ZdIBT(E$e<)7I=;J0&3{ED0f6 zYPJ0@=$j4Rv18vQw_XldAqao#fbyqUBg7b#u5;n<>a27bxTt_tbAtC#us2~BRWUl7f} zigAQj8mW3lVv){o5&M!{BnjZ|9r~ygop%yH>*K<@Ps6BQZ9GS>o?=WH`|K;Eg3?m0 z0`KlEH$m!)-%Dp291Sh_UjS}$pbTJaqL2EnQ!n+r(Nqq%PSsU((FLNFR&V9Pc#3#g4}p9X zYdPIv6|A!@y*hKo79&!!hJ@A`jOIeX-5H^+290Z6$mJLCXOf^-Gj+MuIM(gz=)_?B z;x$-^-ra>!q$I_0!T<;rUY^_vz3S`TJm31l5HfIdv|5@sY&9L zgRq|ub`br$CPj+~Z*0pQBNlriiNG*j~Wwn>(=u(8f}gprqS?jLkD*b>B&M@i2^GQqXg{-+4b(JnB|_RfOkJCt=eSNZEED-(ETL1! z*&jBod=q|(`sP}eu5DCUCVN#H!;#nl5*8CQ=%!hF|18Xq+xg{`d4x{SJ<-AGMOaqh z(|@{l?jO7sJsTn2|1-Uz;Q38A+r0FFt0T+FLWR)8p~Gsi8lf%UZoo7anUEmiSkr)+ zxJ4a76Or)bF4Kd+vY|MeJkTq%g1Et1VHp=r3fqibOH~$&fezv`)P~250~fC7jL%`l zhuM9`LG`=(;D_ZAvNoJTdUscTdZTT z!Zu5};t~C=+1uu(6cmB9jOpe}pTim{W}oggs!E$Qe}feTlS|vIF3%h~N<33aU~>IC zS}%8GImzhCY-Pe?E0wziJKI6ICaY>2;aO(ylO2P&KS6gtwSys z%`&vMI^+5`2}qf}w#n4#?{ByjoLsQ+@0U>l=Uv^3xPk!h8A3 zu9-yE83zLwrQ`ut@+gyN%%ZexMa`^SB#3Ad7S_@DceaLivexeWB8r=(o za3gN>EZUc6tyP$%C2BpN=?fmn&yNPEGU_s(68rNJzsr&^N`+c)Scy`DVqK=xXm*@^%Gr#Rr|(`5s{Ei&pFM5RB4DuU8c>KG#rA0HLu|4RP}KUk z3c4O;MC~u#$Ol##*g_0rSDhIh;$2RP9T%h`9^};-%{2ytrGDAGkzeilALHF9uIfhwnd`Y#v+ zP!Qxgb&Vv_M)zL^P6QA5_x!+rRmc8`v%%`T&%XX$j_7xuJMWsE6uob3=pqaA` zFp1xKI4Irqg|=PsCUSJ#^#AU{zhHtt(Z8<&=GIs*F<5Hxx{A62&Z#=}fUFzCblK9R z|G8J_tzpJT(q(YPAgTCgwS(8ye;ilW>GAnYiTMZIQI_`ZJ1!iVmgQH0d!43c@@P{} z1bhDv0J`91&;Ri;95~HI)`ypgI#@OO&W;o#d4`LL^mF+o(4?FR^v$|E?#8*adXv&w)#K%%G9ew>rRN|KHE$O1+tAj!SAJSfzChr+9tmlZV zTHIze=wz)|I<@ahdEPy|Q?Rr+9C?h6v6U3Dv;Fb)yjADFegsfeyYO6CQlu2o6Ztnw z8q4>)MY8?^T_Sb8^kbX-w(Fl|jrXPwVe?D&D*5JC?V>7S00Ni6vl9Z-YL#-7CeM9E zX6(;Iowsc+;0-qwnBJuLNIzBN?)>)1k= zK`z!Lh7^OpZEao47>u#R&Zr$=a_SyS)Y z)HKD~$~Q-^P@(ws+M72L2KY+KCkJM^d;ial7oLv)VA3akj{C{fis-u6zQJNvE@Hdx zzH5ESy#K_dbKlZtSv=L-sV|Us2`Tl#ZJwhBEVcZFO}ZTy1hH&+Xd1ikN8sme^CquN z<@xiYYejP3A2~(EL|eD=`Zduzl=p1rn}6xe?cDA)HyQ1nWEU>_xai}&hv6Oi&$dS@ zhG!i9UL?z2S6J7P{qRm*{5u|r=`D~R1gg#Hp#3z)r_LV|Tu}kq_YvV-u_WqzO6K#( zhN}_ldUwn{11yCTt*kP`i)+2yYp;D)`S9tyJa7#C+Sl7vd0#T`ez^Q@@vI~A_o^x` z121w>TXP{XJIw0H#zSu{wkZJzllPX{dO+3~!h;s<-+)q3OV8?d(w zUv2(f*cdJpT)kb0^QBJS=EY`zwq2C`bu;6x;i}V?z=BTxnNjSgN0-u7fHR;OIiPk< zLWj9a-^`?ctCF|o8}Obio3ZI3a9Mpe+t%HQtyO>S?76pd*}hN6DGA0UJT<%F=d%x#y#9)(%0-)Oh@o7sBlu<&EY{U#pU zI{O5$sG0Qr`o6WE%=IBoe;nT`u0K3SV*jhElq{F?A;P*lXZ8V{NiQnXNxWEy;Qm-&?<( Date: Mon, 23 Oct 2023 15:29:15 +0000 Subject: [PATCH 12/96] chore(release): releasing packages [ci skip] - @patternfly/ast-helpers@1.2.21 - @patternfly/documentation-framework@5.2.21 --- packages/ast-helpers/CHANGELOG.md | 8 ++++++++ packages/ast-helpers/package.json | 2 +- packages/documentation-framework/CHANGELOG.md | 8 ++++++++ packages/documentation-framework/package.json | 4 ++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/ast-helpers/CHANGELOG.md b/packages/ast-helpers/CHANGELOG.md index dc9a9c1d3e..0708062a6b 100644 --- a/packages/ast-helpers/CHANGELOG.md +++ b/packages/ast-helpers/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 1.2.21 (2023-10-23) + +**Note:** Version bump only for package @patternfly/ast-helpers + + + + + ## 1.2.20 (2023-10-12) **Note:** Version bump only for package @patternfly/ast-helpers diff --git a/packages/ast-helpers/package.json b/packages/ast-helpers/package.json index ec1bb3528d..2390573ad4 100644 --- a/packages/ast-helpers/package.json +++ b/packages/ast-helpers/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/ast-helpers", "description": "Acorn AST helpers for working with live code", - "version": "1.2.20", + "version": "1.2.21", "author": "Red Hat", "license": "MIT", "publishConfig": { diff --git a/packages/documentation-framework/CHANGELOG.md b/packages/documentation-framework/CHANGELOG.md index 1a3e950061..d888b4d220 100644 --- a/packages/documentation-framework/CHANGELOG.md +++ b/packages/documentation-framework/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 5.2.21 (2023-10-23) + +**Note:** Version bump only for package @patternfly/documentation-framework + + + + + ## 5.2.20 (2023-10-12) **Note:** Version bump only for package @patternfly/documentation-framework diff --git a/packages/documentation-framework/package.json b/packages/documentation-framework/package.json index a075107801..3cf2e12aa9 100644 --- a/packages/documentation-framework/package.json +++ b/packages/documentation-framework/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/documentation-framework", "description": "A framework to build documentation for PatternFly.", - "version": "5.2.20", + "version": "5.2.21", "author": "Red Hat", "license": "MIT", "private": false, @@ -17,7 +17,7 @@ "@babel/plugin-transform-react-jsx": "7.17.12", "@babel/preset-env": "7.18.2", "@mdx-js/util": "1.6.16", - "@patternfly/ast-helpers": "^1.2.20", + "@patternfly/ast-helpers": "^1.2.21", "@reach/router": "npm:@gatsbyjs/reach-router@1.3.9", "autoprefixer": "9.8.6", "babel-loader": "9.1.2", From 07ddbe557079920032e7cd80d45e9ea7b8c9c530 Mon Sep 17 00:00:00 2001 From: Nicole Thoen Date: Mon, 23 Oct 2023 13:41:32 -0400 Subject: [PATCH 13/96] Update broken links on menu accessibility docs --- .../patternfly-docs/content/accessibility/menu/menu.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/documentation-site/patternfly-docs/content/accessibility/menu/menu.md b/packages/documentation-site/patternfly-docs/content/accessibility/menu/menu.md index 55172cdde6..f58282683f 100644 --- a/packages/documentation-site/patternfly-docs/content/accessibility/menu/menu.md +++ b/packages/documentation-site/patternfly-docs/content/accessibility/menu/menu.md @@ -10,7 +10,7 @@ import { Checkbox, List, ListItem } from '@patternfly/react-core'; ## Accessibility To implement an accessible PatternFly **menu** component: -- Due to the composable nature of the menu component, keyboard interaction will need to be added manually between the menu toggle and the menu. See the [composable menu demos](https://www.patternfly.org/v4/demos/composable-menu) to see how this is done. +- Due to the composable nature of the menu component, keyboard interaction will need to be added manually between the menu toggle and the menu. See the [custom menu demos](https://www.patternfly.org/components/menus/custom-menus) to see how this is done. - Any actions placed within a menu item will need an `aria-label` on the `MenuItemAction` to communicate to users what the action is. From d5ff4c2e615032245572f50e62128b89e1bcfeb1 Mon Sep 17 00:00:00 2001 From: Nicole Thoen Date: Mon, 23 Oct 2023 13:43:30 -0400 Subject: [PATCH 14/96] Update broken links on menu design guidelines --- .../content/design-guidelines/components/menu/menu.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/menu/menu.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/menu/menu.md index 68f5e94dd0..1a60b55fb9 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/menu/menu.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/menu/menu.md @@ -33,7 +33,7 @@ An action menu presents a list of actions or links. 4. **Descriptions (optional):** Descriptive text may be added below each menu item, but only when the menu item label itself may not be clear to all users. Keep descriptive text to two lines or less. ### Option select menus -Use an option select menu when you want to persist selected items. This is typically the case for select menus or settings menus that allow users to select between multiple options. See the [select](/components/select) and [options menu](/components/options-menu) components for more details. You may present single or multiple [groups of options](#grouped-menus) within the same menu. +Use an option select menu when you want to persist selected items. This is typically the case for select menus or settings menus that allow users to select between multiple options. See the [select](/components/menus/select) and [options menu](/components/menus/options-menu) components for more details. You may present single or multiple [groups of options](#grouped-menus) within the same menu. option select menus From 9e7525474ebb75efffe16bd0d82f3c9b29fc1a96 Mon Sep 17 00:00:00 2001 From: patternfly-build Date: Mon, 23 Oct 2023 17:56:01 +0000 Subject: [PATCH 15/96] chore(release): releasing packages [ci skip] - @patternfly/ast-helpers@1.2.22 - @patternfly/documentation-framework@5.2.22 --- packages/ast-helpers/CHANGELOG.md | 8 ++++++++ packages/ast-helpers/package.json | 2 +- packages/documentation-framework/CHANGELOG.md | 8 ++++++++ packages/documentation-framework/package.json | 4 ++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/ast-helpers/CHANGELOG.md b/packages/ast-helpers/CHANGELOG.md index 0708062a6b..053c532f35 100644 --- a/packages/ast-helpers/CHANGELOG.md +++ b/packages/ast-helpers/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 1.2.22 (2023-10-23) + +**Note:** Version bump only for package @patternfly/ast-helpers + + + + + ## 1.2.21 (2023-10-23) **Note:** Version bump only for package @patternfly/ast-helpers diff --git a/packages/ast-helpers/package.json b/packages/ast-helpers/package.json index 2390573ad4..e423ae4517 100644 --- a/packages/ast-helpers/package.json +++ b/packages/ast-helpers/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/ast-helpers", "description": "Acorn AST helpers for working with live code", - "version": "1.2.21", + "version": "1.2.22", "author": "Red Hat", "license": "MIT", "publishConfig": { diff --git a/packages/documentation-framework/CHANGELOG.md b/packages/documentation-framework/CHANGELOG.md index d888b4d220..cb46a0cff8 100644 --- a/packages/documentation-framework/CHANGELOG.md +++ b/packages/documentation-framework/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 5.2.22 (2023-10-23) + +**Note:** Version bump only for package @patternfly/documentation-framework + + + + + ## 5.2.21 (2023-10-23) **Note:** Version bump only for package @patternfly/documentation-framework diff --git a/packages/documentation-framework/package.json b/packages/documentation-framework/package.json index 3cf2e12aa9..dba761cad7 100644 --- a/packages/documentation-framework/package.json +++ b/packages/documentation-framework/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/documentation-framework", "description": "A framework to build documentation for PatternFly.", - "version": "5.2.21", + "version": "5.2.22", "author": "Red Hat", "license": "MIT", "private": false, @@ -17,7 +17,7 @@ "@babel/plugin-transform-react-jsx": "7.17.12", "@babel/preset-env": "7.18.2", "@mdx-js/util": "1.6.16", - "@patternfly/ast-helpers": "^1.2.21", + "@patternfly/ast-helpers": "^1.2.22", "@reach/router": "npm:@gatsbyjs/reach-router@1.3.9", "autoprefixer": "9.8.6", "babel-loader": "9.1.2", From 77bf3e3c368f29e292df670daced483a2db81ea4 Mon Sep 17 00:00:00 2001 From: kuklas <78739379+kuklas@users.noreply.github.com> Date: Fri, 27 Oct 2023 14:57:43 +0200 Subject: [PATCH 16/96] Removing the redudancy in the file. Use is described above the text. (#3790) --- .../design-guidelines/components/select/select.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/select/select.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/select/select.md index d8aef119f1..d74951e689 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/select/select.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/select/select.md @@ -53,15 +53,6 @@ Multiple select lists allow users to select one or more options from a list, wit Example of multiple select list -### When to use checkbox select versus multiple select -Both the checkbox select and multiple select lists allow users to select multiple options from a list. However, there are some points to take into consideration when deciding which one to use. - - -Example for using a checkbox select - - -Example for using a multiple select inside a form - ## Variations ### Select list with typeahead From 8a8e808be5b9c8626b5dccdf994dcf74ae80fbb9 Mon Sep 17 00:00:00 2001 From: patternfly-build Date: Fri, 27 Oct 2023 13:11:01 +0000 Subject: [PATCH 17/96] chore(release): releasing packages [ci skip] - @patternfly/ast-helpers@1.2.23 - @patternfly/documentation-framework@5.2.23 --- packages/ast-helpers/CHANGELOG.md | 8 ++++++++ packages/ast-helpers/package.json | 2 +- packages/documentation-framework/CHANGELOG.md | 8 ++++++++ packages/documentation-framework/package.json | 4 ++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/ast-helpers/CHANGELOG.md b/packages/ast-helpers/CHANGELOG.md index 053c532f35..c47e54da38 100644 --- a/packages/ast-helpers/CHANGELOG.md +++ b/packages/ast-helpers/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 1.2.23 (2023-10-27) + +**Note:** Version bump only for package @patternfly/ast-helpers + + + + + ## 1.2.22 (2023-10-23) **Note:** Version bump only for package @patternfly/ast-helpers diff --git a/packages/ast-helpers/package.json b/packages/ast-helpers/package.json index e423ae4517..faef70300d 100644 --- a/packages/ast-helpers/package.json +++ b/packages/ast-helpers/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/ast-helpers", "description": "Acorn AST helpers for working with live code", - "version": "1.2.22", + "version": "1.2.23", "author": "Red Hat", "license": "MIT", "publishConfig": { diff --git a/packages/documentation-framework/CHANGELOG.md b/packages/documentation-framework/CHANGELOG.md index cb46a0cff8..8dade3b364 100644 --- a/packages/documentation-framework/CHANGELOG.md +++ b/packages/documentation-framework/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 5.2.23 (2023-10-27) + +**Note:** Version bump only for package @patternfly/documentation-framework + + + + + ## 5.2.22 (2023-10-23) **Note:** Version bump only for package @patternfly/documentation-framework diff --git a/packages/documentation-framework/package.json b/packages/documentation-framework/package.json index dba761cad7..9631d46cd5 100644 --- a/packages/documentation-framework/package.json +++ b/packages/documentation-framework/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/documentation-framework", "description": "A framework to build documentation for PatternFly.", - "version": "5.2.22", + "version": "5.2.23", "author": "Red Hat", "license": "MIT", "private": false, @@ -17,7 +17,7 @@ "@babel/plugin-transform-react-jsx": "7.17.12", "@babel/preset-env": "7.18.2", "@mdx-js/util": "1.6.16", - "@patternfly/ast-helpers": "^1.2.22", + "@patternfly/ast-helpers": "^1.2.23", "@reach/router": "npm:@gatsbyjs/reach-router@1.3.9", "autoprefixer": "9.8.6", "babel-loader": "9.1.2", From f0af60b3dcc32e061d0659b6318d0d7dcbd99fab Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Fri, 27 Oct 2023 10:49:09 -0400 Subject: [PATCH 18/96] docs(design-guidelines) Updates content for consistency. (#3782) * docs(design-guidelines) Updates content for consistency. * Updates from review. --- .../components/data-list/data-list.md | 2 +- .../components/divider/divider.md | 12 ++-- .../file-upload-multiple.md | 4 +- .../components/form/forms.md | 72 +++++++++---------- .../components/overflow-menu/overflow-menu.md | 2 +- .../components/popover/popover.md | 16 ++--- .../components/truncate/truncate.md | 10 ++- 7 files changed, 62 insertions(+), 56 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/data-list/data-list.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/data-list/data-list.md index f850cab5fc..5fdfc26c84 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/data-list/data-list.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/data-list/data-list.md @@ -82,7 +82,7 @@ The clickable data list can be used when data lists need to provide additional i 1. **Row:** Enables the user to click on the row to trigger the action of opening a primary-detail drawer 2. **Primary-detail:** Additional drawer of information that allows the user to still see the data list -### When to use +#### When to use * **Use a clickable data list** when you need to allow the user to trigger an action of opening a primary-detail drawer to view more information * **Don't use a clickable data list** when users don't need to see more information in addition to the data list information diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/divider/divider.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/divider/divider.md index 976617f597..f642fde78b 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/divider/divider.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/divider/divider.md @@ -6,14 +6,16 @@ section: components ## Usage Use a divider as a visual cue to help to convey content separations and groupings. +A divider can be used to visually separate content sections, potentially spanning the entire width of the content area. + +Example of divider used to seperate a content area into different parts + +## Variations + A **vertical divider** can be used to separate items within a horizontal list, such as a menu or toolbar. Example of vertical divider in use to seperate actions A **horizontal divider** can be used to separate items within a vertical list, such as a dropdown menu. -Example of horizontal divider in use to options in dropdown menu - -A divider can also be used to visually separate content sections, potentially spanning the entire width of the content area. - -Example of divider used to seperate a content area into different parts +Example of horizontal divider in use to options in dropdown menu \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/file-upload-multiple/file-upload-multiple.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/file-upload-multiple/file-upload-multiple.md index 5b5ba2a250..a5aad56216 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/file-upload-multiple/file-upload-multiple.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/file-upload-multiple/file-upload-multiple.md @@ -27,9 +27,9 @@ Most multiple file upload components contain 5 basic elements: 5. **Progress upload:** The name of the uploaded file, along with file size, progress bar, and percentage. -## Usage/Best practices +## Usage -**When to use:** +### When to use * Uploading 1 or more files. * Uploading files by dragging and dropping. diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/form/forms.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/form/forms.md index 91d3c78349..b243393b74 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/form/forms.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/form/forms.md @@ -113,42 +113,6 @@ Form submit buttons should be disabled until a user starts filling out the form * For a processing form, use feedback messages and progress indicators like spinners or progress bars if the processing time might exceed user expectations. -## Variations - -### Form sections - -Form sections sort form fields into non-hierarchical groups based on common information type, step, or visual preference. Form sections are ideal for breaking long forms into simple, evenly spaced segments with all information exposed. - -Default to grouping data with form sections, especially if all form fields are required. If you need to visualize complex or nested information, use [field groups](#field-groups) instead. - -To distinguish between form sections, title them based on the reason you grouped their inputs together. You may forego form section titles and solely rely on the added spacing between sections, but don't leave section titles blank if that empty space will confuse your users. If you do decide to forego the form section titles, add an `aria-label` to indicate why you're sectioning each set of form fields together. - -Example of form sections used to separate out a form. - -To view an interactive example of form sections, see our [form sections demo](/components/forms/form). - -### Field groups - -Field groups sort form fields into hierarchical, collapsible groups based on theme. All field groups are nested and indented by default, so they create a clearer information architecture between groups. Since all elements won't be visible at all times, always title field groups based on their purpose. Field groups are ideal for building a more dimensional form structure or condensing lengthy forms into digestible, expandable segments. - -PatternFly field groups support a required title, description, and actions. - -Use field groups to: - -- Group form fields in a more complex way. -- Reduce information overload. -- Hide unrequired fields. -- Use multiple instances of the same element without causing visual confusion. -- Designate an area to configure advanced options. - -Because field groups call for more clicks, tabs, and interactions to reach form fields, they require additional accessibility considerations. Clearly label field group content so that it's clear to all users. For more field group accessibility guidance, see the [Accessibility guidelines](#accessibility). - -**Example:** For a form with multiple field groups, distinguish between each one by adding titles that convey each group's unique theme such as *Routing*, *Build configuration*, *Deployment*, or *Scaling*. - -Example of nested, expandable field groups in a form. - -To view an interactive example of field groups, see our [field groups demo](/components/form#field-groups). - ## Usage Due to their interactive nature, forms often include features that help communicate field importance and guidance as users complete them. @@ -278,6 +242,42 @@ For validation on submission, supplement field level errors with an [inline aler Learn more about writing error messages in the [content](#content-considerations) section. +## Variations + +### Form sections + +Form sections sort form fields into non-hierarchical groups based on common information type, step, or visual preference. Form sections are ideal for breaking long forms into simple, evenly spaced segments with all information exposed. + +Default to grouping data with form sections, especially if all form fields are required. If you need to visualize complex or nested information, use [field groups](#field-groups) instead. + +To distinguish between form sections, title them based on the reason you grouped their inputs together. You may forego form section titles and solely rely on the added spacing between sections, but don't leave section titles blank if that empty space will confuse your users. If you do decide to forego the form section titles, add an `aria-label` to indicate why you're sectioning each set of form fields together. + +Example of form sections used to separate out a form. + +To view an interactive example of form sections, see our [form sections demo](/components/forms/form). + +### Field groups + +Field groups sort form fields into hierarchical, collapsible groups based on theme. All field groups are nested and indented by default, so they create a clearer information architecture between groups. Since all elements won't be visible at all times, always title field groups based on their purpose. Field groups are ideal for building a more dimensional form structure or condensing lengthy forms into digestible, expandable segments. + +PatternFly field groups support a required title, description, and actions. + +Use field groups to: + +- Group form fields in a more complex way. +- Reduce information overload. +- Hide unrequired fields. +- Use multiple instances of the same element without causing visual confusion. +- Designate an area to configure advanced options. + +Because field groups call for more clicks, tabs, and interactions to reach form fields, they require additional accessibility considerations. Clearly label field group content so that it's clear to all users. For more field group accessibility guidance, see the [Accessibility guidelines](#accessibility). + +**Example:** For a form with multiple field groups, distinguish between each one by adding titles that convey each group's unique theme such as *Routing*, *Build configuration*, *Deployment*, or *Scaling*. + +Example of nested, expandable field groups in a form. + +To view an interactive example of field groups, see our [field groups demo](/components/form#field-groups). + ## Spacing Forms may be placed in several contexts including on a page, in a wizard, or in a modal. Your chosen form placement may impact specific spacing considerations, but general form spacing requirements apply across these contexts. diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/overflow-menu/overflow-menu.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/overflow-menu/overflow-menu.md index 9dc640bd1f..1da241d7a5 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/overflow-menu/overflow-menu.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/overflow-menu/overflow-menu.md @@ -27,7 +27,7 @@ Use an overflow menu when additional options are available to the user but there ## Behavior Overflow menus are represented by a kebab button, as the user clicks on the kebab, a horizontal list will appear with additional options to click. -## Content Guidelines +## Content considerations * Text should be short and direct so users can quickly scan and decide on an action. * Text should be written in sentence case. * Overflow menus should be placed on the right side of the container. diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/popover/popover.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/popover/popover.md index 1eace408bc..f1f4688846 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/popover/popover.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/popover/popover.md @@ -39,6 +39,14 @@ Both [tooltips](/components/tooltip/design-guidelines) and popovers provide more For information on other forms of on-screen help, see [Tooltip](/components/tooltip/design-guidelines) and [Hint](/components/hint/design-guidelines). +## Behavior +Popovers are triggered when a user clicks on the popover icon and are dismissed in one of the following ways: +- The user clicks the exit icon. +- The user clicks anywhere on the screen outside the popover. +- The user clicks an action button inside the popover. (Note: This won't always close the popover; it depends on the action button.) + +popover example with placeholder text for the title and informational text + ## Variations ### Default popovers @@ -49,14 +57,6 @@ These popover are similar to default popovers, the key difference being the incl alert popover examples with placeholder text for the title and informational text - ## Behavior -Popovers are triggered when a user clicks on the popover icon and are dismissed in one of the following ways: -- The user clicks the exit icon. -- The user clicks anywhere on the screen outside the popover. -- The user clicks an action button inside the popover. (Note: This won't always close the popover; it depends on the action button.) - -popover example with placeholder text for the title and informational text - ## Content considerations - Popover copy is longer than tooltip copy, but it should still be concise. Aim for 1–3 sentences. - Write in full sentences with punctuation. diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/truncate/truncate.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/truncate/truncate.md index 5e3b3b1233..b5b2d1329d 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/components/truncate/truncate.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/components/truncate/truncate.md @@ -31,15 +31,19 @@ Truncated items are indicated by an ellipsis (...) and are used when trying to a A truncate indicates that the text string has been shortened, when the user hovers a mouse over the ellipsis, the full text will be displayed as a tooltip. ## Variations -* **Front-line**: Used at the beginning of a text string to indicate the text is being continued from a previous location. + +### Front-line +A front-line truncate is used at the beginning of a text string to indicate the text is being continued from a previous location. image showing table truncate -* **Mid-line**: Used to shorten a text string when the end of it can’t be truncated by an ellipsis. Also used when several text strings have the exact same middle characters, but the beginning and endings vary. +### Mid-line +A mid-line truncate is used to shorten a text string when the end of it can’t be truncated by an ellipsis. Also used when several text strings have the exact same middle characters, but the beginning and endings vary. image showing table truncate -* **End-line**: Used at the end of a text string to shorten the sequence and indicate that there is more content located elsewhere. +### End-line +An end-line truncate is used at the end of a text string to shorten the sequence and indicate that there is more content located elsewhere. image showing table truncate From 30ce913f7f398e3c2bd71f95609dce33c7e52389 Mon Sep 17 00:00:00 2001 From: patternfly-build Date: Fri, 27 Oct 2023 15:04:30 +0000 Subject: [PATCH 19/96] chore(release): releasing packages [ci skip] - @patternfly/ast-helpers@1.2.24 - @patternfly/documentation-framework@5.2.24 --- packages/ast-helpers/CHANGELOG.md | 8 ++++++++ packages/ast-helpers/package.json | 2 +- packages/documentation-framework/CHANGELOG.md | 8 ++++++++ packages/documentation-framework/package.json | 4 ++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/ast-helpers/CHANGELOG.md b/packages/ast-helpers/CHANGELOG.md index c47e54da38..38a4933779 100644 --- a/packages/ast-helpers/CHANGELOG.md +++ b/packages/ast-helpers/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 1.2.24 (2023-10-27) + +**Note:** Version bump only for package @patternfly/ast-helpers + + + + + ## 1.2.23 (2023-10-27) **Note:** Version bump only for package @patternfly/ast-helpers diff --git a/packages/ast-helpers/package.json b/packages/ast-helpers/package.json index faef70300d..0049b38e39 100644 --- a/packages/ast-helpers/package.json +++ b/packages/ast-helpers/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/ast-helpers", "description": "Acorn AST helpers for working with live code", - "version": "1.2.23", + "version": "1.2.24", "author": "Red Hat", "license": "MIT", "publishConfig": { diff --git a/packages/documentation-framework/CHANGELOG.md b/packages/documentation-framework/CHANGELOG.md index 8dade3b364..dd5e9855ef 100644 --- a/packages/documentation-framework/CHANGELOG.md +++ b/packages/documentation-framework/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 5.2.24 (2023-10-27) + +**Note:** Version bump only for package @patternfly/documentation-framework + + + + + ## 5.2.23 (2023-10-27) **Note:** Version bump only for package @patternfly/documentation-framework diff --git a/packages/documentation-framework/package.json b/packages/documentation-framework/package.json index 9631d46cd5..35651c5c17 100644 --- a/packages/documentation-framework/package.json +++ b/packages/documentation-framework/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/documentation-framework", "description": "A framework to build documentation for PatternFly.", - "version": "5.2.23", + "version": "5.2.24", "author": "Red Hat", "license": "MIT", "private": false, @@ -17,7 +17,7 @@ "@babel/plugin-transform-react-jsx": "7.17.12", "@babel/preset-env": "7.18.2", "@mdx-js/util": "1.6.16", - "@patternfly/ast-helpers": "^1.2.23", + "@patternfly/ast-helpers": "^1.2.24", "@reach/router": "npm:@gatsbyjs/reach-router@1.3.9", "autoprefixer": "9.8.6", "babel-loader": "9.1.2", From 6e872006d61584920f11202bec30d2f2410228b7 Mon Sep 17 00:00:00 2001 From: Austin Sullivan Date: Fri, 27 Oct 2023 14:16:33 -0400 Subject: [PATCH 20/96] chore(docs-framework): add class on example load (#3789) * chore(docs-framework): add class on example load * chore(example): remove dev mode check from page loaded class addition * chore(example): refactor to add class on page load event --- .../documentation-framework/components/example/example.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/documentation-framework/components/example/example.js b/packages/documentation-framework/components/example/example.js index d8cd358f35..7ca98d7ada 100644 --- a/packages/documentation-framework/components/example/example.js +++ b/packages/documentation-framework/components/example/example.js @@ -98,6 +98,10 @@ export const Example = ({ }) => { if (isFullscreenPreview) { isFullscreen = false; + window.addEventListener('load', () => { + //append a class to the document body to indicate to screenshot/automated visual regression tools that the page has loaded + document.body.classList.add('page-loaded'); + }); } if (!lang) { // Inline code From a7164b2dfdc7408c24de5f6240e0f696cc34bebb Mon Sep 17 00:00:00 2001 From: patternfly-build Date: Fri, 27 Oct 2023 18:31:39 +0000 Subject: [PATCH 21/96] chore(release): releasing packages [ci skip] - @patternfly/ast-helpers@1.2.25 - @patternfly/documentation-framework@5.2.25 --- packages/ast-helpers/CHANGELOG.md | 8 ++++++++ packages/ast-helpers/package.json | 2 +- packages/documentation-framework/CHANGELOG.md | 8 ++++++++ packages/documentation-framework/package.json | 4 ++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/ast-helpers/CHANGELOG.md b/packages/ast-helpers/CHANGELOG.md index 38a4933779..48b1521ca6 100644 --- a/packages/ast-helpers/CHANGELOG.md +++ b/packages/ast-helpers/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 1.2.25 (2023-10-27) + +**Note:** Version bump only for package @patternfly/ast-helpers + + + + + ## 1.2.24 (2023-10-27) **Note:** Version bump only for package @patternfly/ast-helpers diff --git a/packages/ast-helpers/package.json b/packages/ast-helpers/package.json index 0049b38e39..e607118970 100644 --- a/packages/ast-helpers/package.json +++ b/packages/ast-helpers/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/ast-helpers", "description": "Acorn AST helpers for working with live code", - "version": "1.2.24", + "version": "1.2.25", "author": "Red Hat", "license": "MIT", "publishConfig": { diff --git a/packages/documentation-framework/CHANGELOG.md b/packages/documentation-framework/CHANGELOG.md index dd5e9855ef..329f0edac2 100644 --- a/packages/documentation-framework/CHANGELOG.md +++ b/packages/documentation-framework/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 5.2.25 (2023-10-27) + +**Note:** Version bump only for package @patternfly/documentation-framework + + + + + ## 5.2.24 (2023-10-27) **Note:** Version bump only for package @patternfly/documentation-framework diff --git a/packages/documentation-framework/package.json b/packages/documentation-framework/package.json index 35651c5c17..771f5a5e5d 100644 --- a/packages/documentation-framework/package.json +++ b/packages/documentation-framework/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/documentation-framework", "description": "A framework to build documentation for PatternFly.", - "version": "5.2.24", + "version": "5.2.25", "author": "Red Hat", "license": "MIT", "private": false, @@ -17,7 +17,7 @@ "@babel/plugin-transform-react-jsx": "7.17.12", "@babel/preset-env": "7.18.2", "@mdx-js/util": "1.6.16", - "@patternfly/ast-helpers": "^1.2.24", + "@patternfly/ast-helpers": "^1.2.25", "@reach/router": "npm:@gatsbyjs/reach-router@1.3.9", "autoprefixer": "9.8.6", "babel-loader": "9.1.2", From b4c8bf91b27f2b3f2d8b5a4c48a644213df04d44 Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Mon, 30 Oct 2023 12:10:05 -0400 Subject: [PATCH 22/96] docs(terminology): Updates n/a and -- descriptions for clarity. (#3783) * docs(terminology): Updates n/a and -- descriptions for clarity. * Update packages/documentation-site/patternfly-docs/content/design-guidelines/content/terminology.md * Update packages/documentation-site/patternfly-docs/content/design-guidelines/content/terminology.md --- .../content/design-guidelines/content/terminology.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/content/terminology.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/content/terminology.md index de1e8d13ba..b10413306b 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/content/terminology.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/content/terminology.md @@ -76,7 +76,7 @@ Use abbreviations that users are familiar with, and write out uncommon abbreviat | **U.S.** | As a noun, use *United States* unless there are space constraints. As an adjective, use *U.S.* (for example, *U.S. soldier*). As part of an organization, use *U.S.*

Taken from Red Hat Corporate Style Guide. | | **URL** | Stands for *Uniform Resource Locator*. Write *URL* in all caps. | | **VM** | Refers to a virtual machine. OK to abbreviate as long as you've spelled it out once in the first occurrence and as long as *VM* won't be confused with other terms that share that acronym.

Taken from Red Hat Corporate Style Guide. | -| **N/A** | Refers to *data not applicable*, meaning data does not currently apply to the object and will not populate.

This includes scenarios where there is no matching data in the object's data source. For example, when nothing matches a filter, when the data source is empty, or when the object is not connected to any data source.| -| **--** | Refers to *data not available*, meaning data could apply to the object, but is currently not populating.

This includes scenarios where the object is connected to a data source, but is not able to fetch data. For example, when there are permission restrictions or errors.| +| **N/A** | Refers to *data not applicable*, meaning there is no relevant, matching, or applicable data.

For example, when a filter returns no results, when a data source is empty, or when no data source is connected.| +| **--** | Refers to *data unavailable*, meaning the data exists and fits the criteria, but is not currently available to display.

For example, when a data source is connected, but data can't be fetched due to permission restrictions or errors.| \ No newline at end of file From 5505299bef4d03c11f2ddf9d95cd8d4106f86ff1 Mon Sep 17 00:00:00 2001 From: patternfly-build Date: Mon, 30 Oct 2023 16:23:59 +0000 Subject: [PATCH 23/96] chore(release): releasing packages [ci skip] - @patternfly/ast-helpers@1.2.26 - @patternfly/documentation-framework@5.2.26 --- packages/ast-helpers/CHANGELOG.md | 8 ++++++++ packages/ast-helpers/package.json | 2 +- packages/documentation-framework/CHANGELOG.md | 8 ++++++++ packages/documentation-framework/package.json | 4 ++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/ast-helpers/CHANGELOG.md b/packages/ast-helpers/CHANGELOG.md index 48b1521ca6..cf0f940323 100644 --- a/packages/ast-helpers/CHANGELOG.md +++ b/packages/ast-helpers/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 1.2.26 (2023-10-30) + +**Note:** Version bump only for package @patternfly/ast-helpers + + + + + ## 1.2.25 (2023-10-27) **Note:** Version bump only for package @patternfly/ast-helpers diff --git a/packages/ast-helpers/package.json b/packages/ast-helpers/package.json index e607118970..967d49abaa 100644 --- a/packages/ast-helpers/package.json +++ b/packages/ast-helpers/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/ast-helpers", "description": "Acorn AST helpers for working with live code", - "version": "1.2.25", + "version": "1.2.26", "author": "Red Hat", "license": "MIT", "publishConfig": { diff --git a/packages/documentation-framework/CHANGELOG.md b/packages/documentation-framework/CHANGELOG.md index 329f0edac2..172cf7e9ec 100644 --- a/packages/documentation-framework/CHANGELOG.md +++ b/packages/documentation-framework/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 5.2.26 (2023-10-30) + +**Note:** Version bump only for package @patternfly/documentation-framework + + + + + ## 5.2.25 (2023-10-27) **Note:** Version bump only for package @patternfly/documentation-framework diff --git a/packages/documentation-framework/package.json b/packages/documentation-framework/package.json index 771f5a5e5d..173112797d 100644 --- a/packages/documentation-framework/package.json +++ b/packages/documentation-framework/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/documentation-framework", "description": "A framework to build documentation for PatternFly.", - "version": "5.2.25", + "version": "5.2.26", "author": "Red Hat", "license": "MIT", "private": false, @@ -17,7 +17,7 @@ "@babel/plugin-transform-react-jsx": "7.17.12", "@babel/preset-env": "7.18.2", "@mdx-js/util": "1.6.16", - "@patternfly/ast-helpers": "^1.2.25", + "@patternfly/ast-helpers": "^1.2.26", "@reach/router": "npm:@gatsbyjs/reach-router@1.3.9", "autoprefixer": "9.8.6", "babel-loader": "9.1.2", From 47b5f74cc3f39d7bbfb1161214ae31bcefa994ee Mon Sep 17 00:00:00 2001 From: Austin Sullivan Date: Wed, 1 Nov 2023 10:42:38 -0400 Subject: [PATCH 24/96] feat(dark-theme): replace dark theme switcher with toggle group (#3788) --- .../layouts/sideNavLayout/sideNavLayout.css | 6 ++++++ .../layouts/sideNavLayout/sideNavLayout.js | 20 ++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.css b/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.css index cc05b08a7e..870b7e4e9a 100644 --- a/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.css +++ b/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.css @@ -42,3 +42,9 @@ --pf-v5-c-switch__input--not-checked__label--Color: var(--pf-v5-global--Color--100); --pf-v5-c-switch__input--checked__label--Color: var(--pf-v5-global--Color--100); } + +.ws-masthead .pf-v5-c-toggle-group { + --pf-v5-c-toggle-group__button--m-selected--BackgroundColor: var(--pf-v5-global--palette--blue-400); + --pf-v5-c-toggle-group__button--focus--BackgroundColor: transparent; + --pf-v5-c-toggle-group__button--hover--BackgroundColor: transparent; +} diff --git a/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.js b/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.js index 6e3ba5a26a..068c62ac52 100644 --- a/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.js +++ b/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.js @@ -10,6 +10,7 @@ import { DropdownGroup, DropdownList, Divider, + Icon, Masthead, MastheadToggle, MastheadMain, @@ -23,10 +24,14 @@ import { ToolbarItem, SkipToContent, Switch, - SearchInput + SearchInput, + ToggleGroup, + ToggleGroupItem } from '@patternfly/react-core'; import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon'; import GithubIcon from '@patternfly/react-icons/dist/esm/icons/github-icon'; +import MoonIcon from '@patternfly/react-icons/dist/esm/icons/moon-icon'; +import SunIcon from '@patternfly/react-icons/dist/esm/icons/sun-icon'; import { SideNav, TopNav, GdprBanner } from '../../components'; import staticVersions from '../../versions.json'; import v5Logo from '../PF-HorizontalLogo-Reverse.svg'; @@ -50,6 +55,7 @@ const HeaderTools = ({ const [isDropdownOpen, setDropdownOpen] = useState(false); const [searchValue, setSearchValue] = React.useState(''); const [isSearchExpanded, setIsSearchExpanded] = React.useState(false); + const [isDarkTheme, setIsDarkTheme] = React.useState(false); const getDropdownItem = (version, isLatest = false) => ( @@ -65,6 +71,12 @@ const HeaderTools = ({ setIsSearchExpanded(!isSearchExpanded); }; + const toggleDarkTheme = (_evt, selected) => { + const darkThemeToggleClicked = !selected === isDarkTheme + document.querySelector('html').classList.toggle('pf-v5-theme-dark', darkThemeToggleClicked); + setIsDarkTheme(darkThemeToggleClicked); + }; + useEffect(() => { // reattach algolia to input each time search is expanded if (hasSearch && isSearchExpanded) { @@ -86,8 +98,10 @@ const HeaderTools = ({ > {hasDarkThemeSwitcher && ( - - document.querySelector('html').classList.toggle('pf-v5-theme-dark')} /> + + } isSelected={!isDarkTheme} onChange={toggleDarkTheme} /> + } isSelected={isDarkTheme} onChange={toggleDarkTheme} /> + )} {hasRTLSwitcher && ( From 1fe97354781b29223af9bc89bd553418468ee355 Mon Sep 17 00:00:00 2001 From: patternfly-build Date: Wed, 1 Nov 2023 14:55:09 +0000 Subject: [PATCH 25/96] chore(release): releasing packages [ci skip] - @patternfly/ast-helpers@1.3.0 - @patternfly/documentation-framework@5.3.0 --- packages/ast-helpers/CHANGELOG.md | 11 +++++++++++ packages/ast-helpers/package.json | 2 +- packages/documentation-framework/CHANGELOG.md | 11 +++++++++++ packages/documentation-framework/package.json | 4 ++-- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/ast-helpers/CHANGELOG.md b/packages/ast-helpers/CHANGELOG.md index cf0f940323..cfe2ef1144 100644 --- a/packages/ast-helpers/CHANGELOG.md +++ b/packages/ast-helpers/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# 1.3.0 (2023-11-01) + + +### Features + +* **dark-theme:** replace dark theme switcher with toggle group ([#3788](https://github.com/patternfly/patternfly-org/issues/3788)) ([0bf3c62](https://github.com/patternfly/patternfly-org/commit/0bf3c62484bc288386a9620fcb89c38da5d260af)) + + + + + ## 1.2.26 (2023-10-30) **Note:** Version bump only for package @patternfly/ast-helpers diff --git a/packages/ast-helpers/package.json b/packages/ast-helpers/package.json index 967d49abaa..3f06725de4 100644 --- a/packages/ast-helpers/package.json +++ b/packages/ast-helpers/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/ast-helpers", "description": "Acorn AST helpers for working with live code", - "version": "1.2.26", + "version": "1.3.0", "author": "Red Hat", "license": "MIT", "publishConfig": { diff --git a/packages/documentation-framework/CHANGELOG.md b/packages/documentation-framework/CHANGELOG.md index 172cf7e9ec..2204f39fac 100644 --- a/packages/documentation-framework/CHANGELOG.md +++ b/packages/documentation-framework/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# 5.3.0 (2023-11-01) + + +### Features + +* **dark-theme:** replace dark theme switcher with toggle group ([#3788](https://github.com/patternfly/patternfly-org/issues/3788)) ([0bf3c62](https://github.com/patternfly/patternfly-org/commit/0bf3c62484bc288386a9620fcb89c38da5d260af)) + + + + + ## 5.2.26 (2023-10-30) **Note:** Version bump only for package @patternfly/documentation-framework diff --git a/packages/documentation-framework/package.json b/packages/documentation-framework/package.json index 173112797d..add81797e3 100644 --- a/packages/documentation-framework/package.json +++ b/packages/documentation-framework/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/documentation-framework", "description": "A framework to build documentation for PatternFly.", - "version": "5.2.26", + "version": "5.3.0", "author": "Red Hat", "license": "MIT", "private": false, @@ -17,7 +17,7 @@ "@babel/plugin-transform-react-jsx": "7.17.12", "@babel/preset-env": "7.18.2", "@mdx-js/util": "1.6.16", - "@patternfly/ast-helpers": "^1.2.26", + "@patternfly/ast-helpers": "^1.3.0", "@reach/router": "npm:@gatsbyjs/reach-router@1.3.9", "autoprefixer": "9.8.6", "babel-loader": "9.1.2", From 3c03fff34e4fd684dbff3a21944b4a8c436a532d Mon Sep 17 00:00:00 2001 From: Eric Olkowski <70952936+thatblindgeye@users.noreply.github.com> Date: Tue, 7 Nov 2023 15:46:54 -0500 Subject: [PATCH 26/96] chore(JumpLinks): updated a11y docs to match template (#3808) --- .../accessibility/jump-links/jump-links.md | 94 ++++++++++++++----- 1 file changed, 72 insertions(+), 22 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/accessibility/jump-links/jump-links.md b/packages/documentation-site/patternfly-docs/content/accessibility/jump-links/jump-links.md index cd8a09577a..31a0581ac0 100644 --- a/packages/documentation-site/patternfly-docs/content/accessibility/jump-links/jump-links.md +++ b/packages/documentation-site/patternfly-docs/content/accessibility/jump-links/jump-links.md @@ -3,32 +3,82 @@ id: Jump links section: components --- -**Jump links** provide a way to navigate through section headings on a page without scrolling. +import { Checkbox, List, ListItem } from '@patternfly/react-core'; -For **Keyboard users** there are a number of considerations which must be made concerning tab order and focus management. -- Keyboard users should be able to navigate to and through the jump links using **Tab** and **Shift + Tab**. -- Keyboard users should also be able to select a jump link using **Enter**. -- The jump links should be before the associated sections in the DOM order so that the user can use the jump links to jump to the desired section. -- When a user selects a jump link, the browser focus should move into the associated section so that the navigable elements in that associated section -can be navigated to next without having to move focus through all the rest of the jump links and page. +## Accessibility -Additionally, it should be noted that jump links are often used on pages with so much content that the page scrolls. It should be true that -**Up** and **Down** arrow keys should be able to scroll the content. +To implement accessible PatternFly **jump links**: -**Screen reader users** should be made aware that the jump links are interactable when focused, and which jump link is currently active using -`aria-current="location"` on the active jump link. +- Provide a unique and descriptive `aria-label` to the jump links component. +- Ensure a jump link item has the `aria-current="location"` attribute when it is selected. +- Ensure that the jump links toggle has an `aria-expanded` attribute that matches its expanded state. For example, a collapsed jump links toggle should have `aria-expanded="false"`. +- Provide a unique and descriptive `aria-label` to the jump links toggle if the jump links component is expandable. +- Ensure each jump link item has descriptive text content that conveys what the user will be jumping to upon selecting it, such as a section heading. -The following props/attributes have been added for you or are customizable in PatternFly: +## Testing -| React component | React prop | Which HTML element it appears on in markup | Explanation | -|-----------------|-----------------|----------------------------------------------|---------------------------------------------------------------| -| JumpLinks | aria-label | nav.pf-v5-c-jump-links aria-label | Labels the nav to reflect the current nav description. | -| JumpLinks | toggleAriaLabel | .pf-v5-c-jump-links__toggle > button aria-label | Accessible label for the expandable jump links toggle button. | +At a minimum, jump links should meet the following criteria: -**Note:** Whenever multiple navigation elements are present on a page, an aria-label is highly recommended. Screen reader users -navigating a page via an elements list or rotor menu will be unable to distinguish between the various navigation elements. Using an aria-label -in these cases allows the user to differentiate between the navigation elements without navigating to and interacting with each one individually -to determine its contents. The following image demonstrates the lack of information when aria-labels are not present: + + + The jump links component has a unique and descriptive aria-label.} description="This helps users differentiate the jump links from other navigation elements on the page." /> + + + Once a jump link item has been selected, it has the aria-current="location" attribute.} description="This will announce to users navigating via assistive technologies such as a screen reader that a jump link item has already been jumped to when navigating through the list of jump link items." /> + + + If the jump links component is expandable, the jump links toggle can be collapsed or expanded via keyboard by pressing Space or Enter.} /> + + + If the jump links component is expandable, it has an aria-expanded attribute that matches its current expanded state.} /> + + + If the jump links component is expandable, the jump links toggle has a unique and descriptive aria-label.} /> + + + + + + Tab navigates to the next jump link item or focusable element, and Shift + Tab navigates to the previous jump link item or focusable element.} /> + + + Only Enter should select a jump link item since it is an anchor element.} /> + + -An example of a rotor menu interface which demonstrates that each navigation element is 
-indistinguishable from the others without aria-labels. \ No newline at end of file +## React customization + +The following React props have been provided for more fine-tuned control over accessibility. + +| Prop | Applied to | Reason | +|---|---|---| +| `aria-label="[text that labels the jump links navigation]"` | `JumpLinks` | Adds an accessible name to the jump links' `nav` element for assistive technologies. This should generally be descriptive and unique, especially if there are multiple `nav` elements on the page. | +| `isExpanded` | `JumpLinks` | Sets the default `aria-expanded` attribute. **Required** if the jump links component should be expanded by default. | +| `toggleAriaLabel="[text that labels the expandable toggle]"` | `JumpLinks` | Adds an accessible name to the expandable toggle for assistive technologies. **Required** when the jump links component is expandable. | +| `children` | `JumpLinksItem` | The content of the jump links item. This content should be descriptive in order to convey what a user will be jumping to upon selecting it. | +| `isActive` | `JumpLinksItem` | Sets the `aria-current="location"` attribute on the jump links item. **Required** when the jump links item has been selected. | + +## HTML/CSS customization + +The following HTML attributes and PatternFly classes can be used for more fine-tuned control over accessibility. + +| Attribute or class | Applied to | Reason | +|---|---|---| +| `aria-label="[text that labels the jump links navigation]"` | `.pf-v5-c-jump-links` | Adds an accessible name to the jump links' `nav` element for assistive technologies. This should generally be descriptive and unique, especially if there are multiple `nav` elements on the page. | +| `aria-expanded="[true or false]"` | `.pf-v5-c-jump-links__toggle > button` | Indicates whether the jump links toggle is expanded (true) or collapsed (false) to assistive technologies. **Required** when the jump links component is expandable. | +| `aria-label="[text that labels the expandable toggle]"` | `.pf-v5-c-jump-links__toggle > button` | Adds an accessible name to the expandable toggle for assistive technologies. **Required** when the jump links component is expandable. | +| `aria-hidden="true"` | `.pf-v5-c-jump-links__toggle-icon > i` | Removes the expandable toggle icon from the accessibility tree, preventing assistive technologies from potentially announcing duplicate or unnecessary information without visually hiding it. **Required**. | +| `role="list"` | `.pf-v5-c-jump-links__list` | Indicates that the jump links list is a list element. **Required**.

This role is redundant since `.pf-v5-c-jump-links__list` is a `