`: The panel must have a unique *id* value. The toggle button *aria-controls* and panel *id* attribute values must match. The panel uses the *aria-hidden* attribute to hide from assistive technologies when no longer available.
diff --git a/apps/site/content/design-system/components/accordion/accessibility/Accessibility features/content.mdoc b/apps/site/content/design-system/components/accordion/accessibility/Accessibility features/content.mdoc
new file mode 100644
index 000000000..74af82989
--- /dev/null
+++ b/apps/site/content/design-system/components/accordion/accessibility/Accessibility features/content.mdoc
@@ -0,0 +1,3 @@
+- The tabset is implemented as a set of buttons, rather than tabs. This approach has shown to provide a better user experience.
+- An indicator outline appears around the toggle buttons when focused
+- The tabcordion shape, text and accordion toggle icons are visible in Windows High Contrast Mode
diff --git a/apps/site/content/design-system/components/accordion/accessibility/Keyboard support/content.mdoc b/apps/site/content/design-system/components/accordion/accessibility/Keyboard support/content.mdoc
new file mode 100644
index 000000000..38fde9e41
--- /dev/null
+++ b/apps/site/content/design-system/components/accordion/accessibility/Keyboard support/content.mdoc
@@ -0,0 +1 @@
+Keyboard users navigate the tabset as a set of buttons, rather than ‘tabs’. Keyboard interaction requires use of ‘tab’ and ‘enter’ (or ‘space’) keys to select, rather than arrow keys. The accordion toggles are also buttons; interaction is as expected, consistent with tabset toggles.
diff --git a/apps/site/content/design-system/components/accordion/accessibility/Notes on accessibility/content.mdoc b/apps/site/content/design-system/components/accordion/accessibility/Notes on accessibility/content.mdoc
new file mode 100644
index 000000000..650bd9b6a
--- /dev/null
+++ b/apps/site/content/design-system/components/accordion/accessibility/Notes on accessibility/content.mdoc
@@ -0,0 +1,17 @@
+All components comply with WCAG 2.1 AA guidelines and Success Criteria. These fall under the [four principles of accessibility](https://gel.westpacgroup.com.au/design-system/accessibility/design-system-accessibility) – Perceivable, Operable, Understandable and Robust. Below are some specific ways in which this component follows these principles:
+
+### **Perceivable**
+
+The Design System components have been designed to adhere to colour contrast ratios for both text and non-text elements. They have been coded to include text alternatives when required, and allow component text and labels to be resized. They do not use colour alone to convey information.
+
+### **Operable**
+
+The Design System components have been coded to be navigable using a keyboard and other assistive technologies. WCAG compliance recommends being aware of the time it takes for people to complete tasks and to not automatically move focus. Animation should be controlled and simple so as not to cause seizures, and it’s important to provide the ability to perform the same task in multiple ways where possible. These rules have been followed where navigation and interaction is included in Design System components or patterns.
+
+### **Understandable**
+
+WCAG compliance requires consistent and predicable interactions, clear and simple language, concise labels, no jargon or abbreviations and clear error messaging. These rules have been followed where content and interactions are included in Design System components or patterns.
+
+### **Robust**
+
+All Design System components have been coded so they can be clearly announced, understood and navigated using all modern assistive technologies.
diff --git a/apps/site/content/design-system/components/accordion/accessibilityDemo.mdoc b/apps/site/content/design-system/components/accordion/accessibilityDemo.mdoc
new file mode 100644
index 000000000..e69de29bb
diff --git a/apps/site/content/design-system/components/accordion/code.mdoc b/apps/site/content/design-system/components/accordion/code.mdoc
index c3e020c98..ddf3bba0f 100644
--- a/apps/site/content/design-system/components/accordion/code.mdoc
+++ b/apps/site/content/design-system/components/accordion/code.mdoc
@@ -1,4 +1,5 @@
### Default accordion
+
See Visual design for the usage recommendations for the default style.
```jsx
@@ -20,6 +21,7 @@ See Visual design for the usage recommendations for the default style.
```
### Lego accordion
+
See Visual design for the usage recommendations for the lego style.
```jsx
diff --git "a/apps/site/content/design-system/components/accordion/design/Dos and don\342\200\231ts/content.mdoc" "b/apps/site/content/design-system/components/accordion/design/Dos and don\342\200\231ts/content.mdoc"
new file mode 100644
index 000000000..9e7b8e6e4
--- /dev/null
+++ "b/apps/site/content/design-system/components/accordion/design/Dos and don\342\200\231ts/content.mdoc"
@@ -0,0 +1,4 @@
+- Avoid using too much content and consider smaller viewports when designing responsive web apps.
+- Avoid changing the styles of Tabs and Accordions (border, colour, size etc )
+- Do use Tabs and Accordions on any background (light or dark).
+- Avoid making Tab and Accordion labels too long. Although they will wrap the interface will become cluttered very quickly.
diff --git a/apps/site/content/design-system/components/accordion/design/Tabset/content.mdoc b/apps/site/content/design-system/components/accordion/design/Tabset/content.mdoc
new file mode 100644
index 000000000..e60504abf
--- /dev/null
+++ b/apps/site/content/design-system/components/accordion/design/Tabset/content.mdoc
@@ -0,0 +1,7 @@
+\**Default tabset: **See Visual design for the usage recommendations for the default style. Tabsets can appear both ranged to the right, or justified.
+
+```tsx
+
+```
+
+\**Lego tabset: **See Visual design for the usage recommendations for the lego style. Tabsets can appear both ranged to the right, or justified.
diff --git a/apps/site/content/design-system/components/accordion/design/User experience/content.mdoc b/apps/site/content/design-system/components/accordion/design/User experience/content.mdoc
new file mode 100644
index 000000000..5faee7195
--- /dev/null
+++ b/apps/site/content/design-system/components/accordion/design/User experience/content.mdoc
@@ -0,0 +1,9 @@
+The Tabcordion component has three modes:
+
+1. **Tabset** – traditional horizontal tabs, allowing only one content panel to be visible at a time, by selecting the relevant tab.
+1. **Accordion** – collapsible content containers, allowing multiple content panels to be visible simultaneously, by selecting the relevant bar.
+1. **Tabcordion** – a responsive combination of the first two.
+
+The first two modes function in the traditional way. The third ‘Tabcordion’ is the term we use to describe a responsive tab set. When using a Tabset in our web applications we typically experience layout issues when the application needs to display on small viewports (phones). Often the tabs won’t fit horizontally in the limited screen size. To remedy this problem, we developed the Tabcordion where the Tabset will turn into an Accordion when viewed on smaller devices (phones).
+
+This component is useful when trying to simplify and group content for users to view when they need it, as opposed to displaying everything at once.
diff --git a/apps/site/content/design-system/components/accordion/design/Visual design/content.mdoc b/apps/site/content/design-system/components/accordion/design/Visual design/content.mdoc
new file mode 100644
index 000000000..7d83aaaba
--- /dev/null
+++ b/apps/site/content/design-system/components/accordion/design/Visual design/content.mdoc
@@ -0,0 +1,7 @@
+Tabset, Accordions and Tabcordions, can have one of two styles applied to them *Default* and *Lego*:
+
+The **Default style** is designed to be subtle and understated while still providing a clear indication of which tab or accordion bar is selected, and its related content. To further reinforce this relationship a transition is used to display related content when a tab or accordion bar is selected. Generous padding provides a larger hit area and important breathing space to provide emphasis without adding noise.
+
+The **Lego tabset** is designed to be more prominent. This design came out of a project request for a more emphasised component which would also add some brand colour to an otherwise dry, text heavy interface.
+
+Tab sets and accordions are intended to visually group related content. When used correctly with moderate content they do this extremely well. However, if too much content is used it becomes difficult to visualise this relationship as content extends below the viewport.
diff --git a/apps/site/content/design-system/components/accordion/index.yaml b/apps/site/content/design-system/components/accordion/index.yaml
index c04b4ab41..cade56b70 100644
--- a/apps/site/content/design-system/components/accordion/index.yaml
+++ b/apps/site/content/design-system/components/accordion/index.yaml
@@ -1 +1,17 @@
name: Accordion
+description: >-
+ Tabcordions are grouped sets of tabbed or accordion style panels. Use them to
+ group and simplify large amounts of content such as product information.
+pageOfContent: []
+design:
+ - title: Tabset
+ - title: User experience
+ - title: Visual design
+ - title: Dos and don’ts
+accessibility:
+ - title: Notes on accessibility
+ - title: Accessibility features
+ - title: Keyboard support
+ - title: Accessibility API
+relatedInformation:
+ - components/panel
diff --git a/apps/site/content/westpac-ui-info/index.yaml b/apps/site/content/westpac-ui-info/index.yaml
index 4bca3fff0..75eeb14a7 100644
--- a/apps/site/content/westpac-ui-info/index.yaml
+++ b/apps/site/content/westpac-ui-info/index.yaml
@@ -1,2 +1,2 @@
-changelog: https://github.com/WestpacGEL/GEL-next/bloc/main/CHANGELOG.ms
+changelog: https://github.com/WestpacGEL/GEL-next/bloc/main/CHANGELOG.md
currentVersion: 1.0.0
diff --git a/apps/site/src/app/design-system/[...component]/components/content-tabs/components/document-renderer.tsx b/apps/site/src/app/design-system/[...component]/components/content-tabs/components/document-renderer.tsx
index 3abe9312b..da5619c12 100644
--- a/apps/site/src/app/design-system/[...component]/components/content-tabs/components/document-renderer.tsx
+++ b/apps/site/src/app/design-system/[...component]/components/content-tabs/components/document-renderer.tsx
@@ -6,7 +6,7 @@ import { Code, Divider, Heading, List, Paragraph } from '@/components/document-r
export const DOCUMENT_RENDERERS: Required
['renderers'] = {
block: {
divider: Divider,
- paragraph: props => ,
+ paragraph: props => ,
code: props =>
,
heading: Heading,
list: props =>
,
diff --git a/apps/site/src/app/design-system/components/sidebar/sidebar.component.tsx b/apps/site/src/app/design-system/components/sidebar/sidebar.component.tsx
index ccfd1accd..ad7087faa 100644
--- a/apps/site/src/app/design-system/components/sidebar/sidebar.component.tsx
+++ b/apps/site/src/app/design-system/components/sidebar/sidebar.component.tsx
@@ -4,7 +4,7 @@ import { BOMShieldLogo, BSAStackedLogo, RAMSLogo, STGDragonLogo, WBCLogo, WBGLog
import { clsx } from 'clsx';
import Link from 'next/link';
import { usePathname, useRouter, useSearchParams } from 'next/navigation';
-import React, { Key, useCallback, useRef } from 'react';
+import React, { Key, useCallback, useEffect, useRef, useState } from 'react';
import { useOnClickOutside } from 'usehooks-ts';
import { BrandKey } from '@/app/types/brand.types';
@@ -50,12 +50,29 @@ const BANK_OPTIONS = [
export function Sidebar({ items }: SidebarProps) {
const { open, setOpen } = useSidebar();
+ const [scrolled, setScrolled] = useState(false);
- const ref = useRef(null);
- useOnClickOutside(ref, () => {
+ const outsideRef = useRef(null);
+ const listRef = useRef(null);
+
+ useOnClickOutside(outsideRef, () => {
setOpen(false);
});
+ useEffect(() => {
+ if (!listRef.current) {
+ return;
+ }
+ const listener = () => {
+ const y = listRef.current?.scrollTop || 0;
+ setScrolled(y > 0);
+ };
+ listRef.current.addEventListener('scroll', listener);
+ return () => {
+ listRef.current?.removeEventListener('scroll', listener);
+ };
+ }, [listRef]);
+
const router = useRouter();
const pathname = usePathname();
const searchParams = useSearchParams();
@@ -67,6 +84,7 @@ export function Sidebar({ items }: SidebarProps) {
},
[router, pathname],
);
+
return (
@@ -92,7 +110,12 @@ export function Sidebar({ items }: SidebarProps) {
))}
-