Skip to content

Commit e5a6f56

Browse files
Merge remote-tracking branch 'origin/ouds/main' into ouds/main-lmp-add-list-item
2 parents 6db8ab5 + 71cad04 commit e5a6f56

93 files changed

Lines changed: 2278 additions & 1821 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.bundlewatch.config.json‎

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,72 +2,72 @@
22
"files": [
33
{
44
"path": "./packages/orange/dist/css/ouds-web-bootstrap.css",
5-
"maxSize": "85.0 kB"
5+
"maxSize": "85.25 kB"
66
},
77
{
88
"path": "./packages/orange/dist/css/ouds-web-bootstrap.min.css",
9-
"maxSize": "81.0 kB"
9+
"maxSize": "81.5 kB"
1010
},
1111
{
1212
"path": "./packages/orange/dist/css/ouds-web-grid.css",
1313
"maxSize": "7.75 kB"
1414
},
1515
{
1616
"path": "./packages/orange/dist/css/ouds-web-grid.min.css",
17-
"maxSize": "8.5 kB"
17+
"maxSize": "7.25 kB"
1818
},
1919
{
2020
"path": "./packages/orange/dist/css/ouds-web-reboot.css",
21-
"maxSize": "7.5 kB"
21+
"maxSize": "7.75 kB"
2222
},
2323
{
2424
"path": "./packages/orange/dist/css/ouds-web-reboot.min.css",
2525
"maxSize": "7.25 kB"
2626
},
2727
{
2828
"path": "./packages/orange/dist/css/ouds-web-utilities.css",
29-
"maxSize": "24.0 kB"
29+
"maxSize": "24.25 kB"
3030
},
3131
{
3232
"path": "./packages/orange/dist/css/ouds-web-utilities.min.css",
33-
"maxSize": "23.0 kB"
33+
"maxSize": "23.25 kB"
3434
},
3535
{
3636
"path": "./packages/orange/dist/css/ouds-web.css",
37-
"maxSize": "68.5 kB"
37+
"maxSize": "68.75 kB"
3838
},
3939
{
4040
"path": "./packages/orange/dist/css/ouds-web.min.css",
41-
"maxSize": "64.25 kB"
41+
"maxSize": "64.75 kB"
4242
},
4343
{
4444
"path": "./dist/js/ouds-web.bundle.js",
45-
"maxSize": "45.5 kB"
45+
"maxSize": "44.25 kB"
4646
},
4747
{
4848
"path": "./dist/js/ouds-web.bundle.min.js",
49-
"maxSize": "24.75 kB"
49+
"maxSize": "24 kB"
5050
},
5151
{
5252
"path": "./dist/js/ouds-web.esm.js",
53-
"maxSize": "30.5 kB"
53+
"maxSize": "29.5 kB"
5454
},
5555
{
5656
"path": "./dist/js/ouds-web.esm.min.js",
57-
"maxSize": "19.75 kB"
57+
"maxSize": "19 kB"
5858
},
5959
{
6060
"path": "./dist/js/ouds-web.js",
61-
"maxSize": "31.25 kB"
61+
"maxSize": "30 kB"
6262
},
6363
{
6464
"path": "./dist/js/ouds-web.min.js",
65-
"maxSize": "17.5 kB"
65+
"maxSize": "17 kB"
6666
}
6767
],
6868
"ci": {
6969
"trackBranches": [
7070
"ouds/main"
7171
]
7272
}
73-
}
73+
}

‎.github/PULL_REQUEST_TEMPLATE/ouds-release-template.md‎

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,14 @@
44
- then, if bumping a minor or major version:
55
- [ ] Manually search and replace `$current_version` in all files, meaning changes should happen in:
66
- [ ] The style sheet loaded in `.storybook/preview-head.html`
7-
- [ ] Some download links in the `README.md`
87
- [ ] `docs_version` in `config.yml` and other references to the previous version
9-
- [ ] `VERSION` in `js/src/base-component.js`
10-
- [ ] `version_short` in `package.json`
11-
- [ ] `scss/mixins/_banner.scss`
8+
- [ ] Update the pixel tracker URL in all `packages/**/scss/_composite.scss`
129
- [ ] `scss/docs.scss`
1310
- [ ] Several markdown files and markdown extended files
1411
- [ ] Add docs version to `site/data/docs-versions.yml`
15-
- [ ] Update the home news for the next release
16-
- [ ] Move `site/content/docs/x.y` to `site/content/docs/x.y+1`
17-
- [ ] Move `site/static/docs/x.y` to `site/static/docs/x.y+1`
18-
- [ ] Make sure the migration guide is updated only for the next version
19-
- [ ] (Major version) Manually update the version in `nuget/ouds-web.nuspec` and `nuget/ouds-web.sass.nuspec`
2012
- [ ] Check that the changes in the migration guide only apply to the latest version
13+
- [ ] (Major version) Manually update the version in `nuget/ouds-web.nuspec` and `nuget/ouds-web.sass.nuspec`
14+
- [ ] Update the home news for the next release
2115
- check wrong matches in `CHANGELOG.md`, and maybe `site/content/docs/<version>/migration.md`
2216
- :warning: check the `package-lock.json` and `package.json` content, only "@ouds/web" should have its version changed!
2317
- [ ] if the year changed recently, happy new year :tada: but please change © year in `.scss` main files (reboot, grid, utilities, and main file) as well as in `NOTICE.txt`.
@@ -28,28 +22,27 @@
2822
- [ ] Make sure to import all the bad named commits
2923
- [ ] Commit and push `dist` with a `chore(release): vx.y.z` commit message
3024
- [ ] Merge on `ouds/main`
31-
- [ ] Tag your version, and push your tag using `git tag vx.y.z-ouds-web` and `git push vx.y.z-ouds-web`
32-
- [ ] Pack and publish
33-
- `npm pack`
25+
- [ ] Tag your version, and push your tag using `git tag -s vx.y.z-ouds-web` and `git push origin vx.y.z-ouds-web`
26+
- [ ] Pack and publish for the common part and all the brands
27+
- `npm run pack`
3428
- if you are already logged in to NPM (with a personal account, for example), [you'd better use a repository scoped `.npmrc` file](https://stackoverflow.com/questions/30114166/how-to-have-multiple-npm-users-set-up-locally)
3529
- Publish:
3630
- if you're releasing a pre-release, use `--tag`, e.g. for v1-alpha1 `npm publish ouds-web-1.0.0-alpha1.tgz --tag next`
37-
- `npm publish`
38-
<!-- When there is several branches to maintain
39-
- (v4 only) `npm publish --tag v4.x.y` (if you forgot and v4 becomes the latest version on NPM, you can run `npm dist-tag add boosted@5.x.y latest` to fix it) -->
31+
- `npm run publish`
4032
- [ ] check release on [NPM](https://www.npmjs.com/package/@ouds/web), [Nuget](https://www.nuget.org/packages/@ouds/web/), [Packagist](https://packagist.org/packages/orange-opensource/orange-boosted-bootstrap)…
4133
- [ ] publish documentation on `main` of the [ouds-web-doc](https://github.com/Orange-OpenSource/ouds-web-doc) repo:
42-
- [ ] copy `../_site` to the `main` branch
43-
- [ ] don't forget to update Storybook as well and double-check that pages are referenced
44-
- [ ] check every `index.html` used as redirections to redirect to the new release
34+
- [ ] run `npm run storybook-build` from `Orange-Boosted-Bootstrap` (be careful that `release-sri` doesn't update `config.yml`s)
35+
- [ ] remove `storybook` folder from `ouds-web-doc`
36+
- [ ] copy `Orange-Boosted-Bootstrap/_site` to a new branch starting from `ouds-web-doc#main`
37+
- [ ] check every `index.html` used as redirection, redirect to the new release
4538
- [ ] when bumping minor or major version: ensure `dist` URLs in examples' HTML has changed
4639
- [ ] double-check everything before pushing, starting by searching for forgotten old version number occurrences
47-
- [ ] Make the new release banner appears in the previous version of the doc (e.g. in v5.3 when releasing the v5.4.0 doc)
48-
<!-- When there is a v1 released
49-
- [ ] make an announcement in [GitHub Discussions](https://github.com/Orange-OpenSource/Orange-Boosted-Bootstrap/discussions/categories/announcements) (+ pin the new GH Discussion) -->
40+
- [ ] Make the new release banner appears in the previous version of the doc (e.g. in v5.3 when releasing the v5.4.0 doc, search for `navbar navbar-expand supra d-none` and replace by `navbar navbar-expand supra`)
41+
- [ ] Make the new release remove the Netlify badge in the newly released version of the documentation (search for `Netlify` and remove the badge in the new release)
42+
- [ ] Run Algolia crawler manually for the new documentation to be indexed in the search engine (https://dashboard.algolia.com/apps/AKIHKMSEKB/dashboard)
5043
- [ ] [create a GitHub release](https://github.com/Orange-OpenSource/Orange-Boosted-Bootstrap/releases/new):
51-
- attach the 2 zip files
44+
- attach the 2 zip files per brand
5245
- paste the CHANGELOG / Ship list in the release's description
53-
<!-- When there is a v1 released
54-
- [ ] make an announcement on internal communication channels :tada: -->
46+
- [ ] make an announcement in [GitHub Discussions](https://github.com/Orange-OpenSource/Orange-Boosted-Bootstrap/discussions/categories/announcements) (+ pin the new GH Discussion)
47+
- [ ] make an announcement on internal communication channels and publish posts :tada:
5548
- [ ] [publish on Nuget](https://github.com/Orange-OpenSource/Orange-Boosted-Bootstrap/wiki/Generate-NuGet-packages)

‎.github/copilot-instructions.md‎

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
applyTo: "**"
3+
---
4+
5+
# OUDS Web
6+
7+
**OUDS Web** (Orange Unified Design System — Web) is a multi-brand design system built as a fork of Bootstrap 5.3.6. It serves 3 brands (Orange, Sosh, Orange Compact) from a single codebase — only CSS tokens differ per brand, JavaScript is fully shared.
8+
9+
## Quick Reference
10+
11+
| Key | Value |
12+
|---|---|
13+
| Version | 1.1.0 |
14+
| Main branch | `ouds/main` |
15+
| CSS prefix | `--bs-` (via `$prefix`) |
16+
| Build | `npm run dist` |
17+
| Lint | `npm run lint` |
18+
| Tests | `npm run test` |
19+
| Dev servers | `:9001` (orange) · `:9002` (sosh) · `:9003` (orange-compact) |
20+
21+
## Skills
22+
23+
This project provides specialized skills in `.github/skills/`. Invoke them when relevant — they contain detailed conventions, workflows, and reference material:
24+
25+
- **scss-conventions** — SCSS rules (variables, mixins, tokens, forbidden patterns)
26+
- **javascript-conventions** — JS rules (no-semi, BaseComponent, imports)
27+
- **accessibility** — WCAG 2.2 AAA/AA, ARIA, focus, contrast, touch targets
28+
- **token-system** — 3-tier token hierarchy, dark mode, auto-gen protections
29+
- **component-patterns** — CSS custom props, state overrides, markers
30+
- **multi-brand** — 3-brand architecture, cross-brand sync
31+
- **create-component** — Step-by-step workflow for new components
32+
- **diagnose-errors** — Error diagnostic decision tree
33+
- **validate-tokens** — Read-only token audit
34+
- **code-review** — Compliance checker (safety net before commit/PR)
35+
- **project-knowledge** — Glossary, npm scripts, CI/CD, file map

‎.github/dependabot.yml‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ updates:
6767
- dependency-name: "image-size"
6868
- dependency-name: "ip"
6969
- dependency-name: "jasmine"
70-
- dependency-name: "jquery"
7170
- dependency-name: "js-yaml"
7271
- dependency-name: "karma"
7372
- dependency-name: "karma-browserstack-launcher"
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
applyTo: "**"
3+
---
4+
5+
# Critical Rules (Non-Negotiable)
6+
7+
These 7 rules apply to every file in OUDS Web. They are the minimum safety net — always enforced regardless of which skills are loaded.
8+
9+
1. **Tokens over hardcoding** — Never use hardcoded colors (`#ff7900`), spacing (`16px`), or dimensions. Use `$ouds-*` tokens or `var(--#{$prefix}color-*)`.
10+
11+
2. **Mixins for border-radius and transition** — Direct properties are Stylelint violations. Use `@include border-radius()` and `@include transition()`.
12+
13+
3. **Auto-generated token files are read-only** — Never edit `_raw.scss`, `_semantic.scss`, `_component.scss`, or `_*-custom-props.scss`. Only `_composite.scss` is hand-editable.
14+
15+
4. **Never commit dist/** — Build artifacts are generated in CI.
16+
17+
5. **JS in js/src/ only** — Never put JavaScript in `packages/<brand>/`. JS is shared across all brands.
18+
19+
6. **Colors via CSS custom properties** — Use `var(--#{$prefix}color-*)` for all colors. This enables dark mode switching at runtime.
20+
21+
7. **Accessibility is mandatory** — Every interactive element needs: `@include focus-visible()`, correct ARIA attributes, `.visually-hidden` (never `display: none`) for SR content, 44×44px touch targets.
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
---
2+
name: 'accessibility'
3+
description: 'WCAG 2.2 accessibility rules for OUDS Web. Use this skill when creating or editing interactive components, writing HTML templates, adding ARIA attributes, handling focus states, or reviewing accessibility. Covers WCAG 2.2 Level AAA target (AA fallback), ARIA patterns for every component type, focus-visible mixin, color contrast (7:1 AAA / 4.5:1 AA), 44×44px touch targets, reduced motion, RTL, focus trapping, and cognitive accessibility. Always invoke this skill for any work touching user interaction or markup structure.'
4+
---
5+
6+
# Accessibility (WCAG 2.2)
7+
8+
## Compliance target
9+
10+
**WCAG 2.2 Level AAA** primary, with **Level AA as documented fallback** when brand constraints make AAA infeasible. Every component meets at least AA.
11+
12+
---
13+
14+
## ARIA patterns (quick reference)
15+
16+
| Pattern | Required ARIA |
17+
|---|---|
18+
| Decorative icons | `aria-hidden="true"` on `<svg>` |
19+
| Close buttons | `aria-label="Close"` or `aria-labelledby` |
20+
| Toggles | `aria-pressed="true/false"` |
21+
| Expandable | `aria-expanded` + `aria-controls="id"` |
22+
| Form validation | `aria-invalid="true"` + `aria-describedby` |
23+
| Disabled | `aria-disabled="true"` |
24+
| Loading | `aria-busy="true"` |
25+
| Icon-only buttons | `aria-label="Action"` + `aria-hidden` on icon |
26+
27+
---
28+
29+
## Focus management
30+
31+
- Use `@include focus-visible()` mixin — never `outline: none` without alternative
32+
- Focus indicators: 3:1 contrast minimum, 2px thick (AAA: 3-4px)
33+
- Modal/offcanvas: trap focus via `focustrap.js`, Escape closes, focus returns to trigger
34+
- Focused elements must not be obscured by sticky headers or overlays
35+
36+
---
37+
38+
## Color contrast
39+
40+
| Content | AAA target | AA fallback |
41+
|---|---|---|
42+
| Text | 7:1 | 4.5:1 |
43+
| UI components | 4.5:1 | 3:1 |
44+
45+
When AA fallback needed: use larger/bolder text, redundant visual cues (never color alone), document with `// OUDS mod: AA fallback — [reason]`.
46+
47+
---
48+
49+
## Touch targets (WCAG 2.5.8)
50+
51+
Minimum 44×44px on all interactive elements. Use `@include target-size()` mixin.
52+
53+
---
54+
55+
## Reduced motion (WCAG 2.3.3)
56+
57+
All animation respects `prefers-reduced-motion: reduce`. The `@include transition()` mixin handles this — which is why direct `transition:` is forbidden.
58+
59+
---
60+
61+
## Semantic HTML
62+
63+
- `<button>` for actions, `<a>` for navigation — never `<div>`/`<span>` as interactive
64+
- Heading hierarchy: `<h1>` → `<h2>` → `<h3>` (never skip)
65+
- `role="alert"` for auto-announced; `role="status"` for polite
66+
- `.visually-hidden` for SR content — never `display: none`
67+
68+
---
69+
70+
## Color modes
71+
72+
Use `data-bs-theme` attribute, never `prefers-color-scheme` media queries.
73+
74+
---
75+
76+
## WCAG 2.2 specifics
77+
78+
| Criterion | Requirement |
79+
|---|---|
80+
| Consistent Help (3.2.6) | Help mechanisms in same order across pages |
81+
| Accessible Auth (3.3.8/9) | Support `autocomplete`, offer passkey/magic-link |
82+
| Dragging (2.5.7) | Click/keyboard alternative to all drag |
83+
| Redundant Entry (3.3.7) | Auto-populate previously entered data |
84+
| Focus Not Obscured (2.4.11/12) | Never fully hidden by sticky elements |
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
---
2+
name: 'code-review'
3+
description: 'OUDS Web compliance code review. Use this skill when reviewing a diff, preparing a commit, or when asked to check code quality. Acts as a safety net that verifies all OUDS conventions are respected: token usage (no hardcoded values, no raw tokens), required mixins (border-radius, transition), accessibility (ARIA, focus-visible), multi-brand sync (tokens in all 3 brands), and file hygiene (no dist/, no auto-gen edits). Invoke proactively before any commit or PR submission.'
4+
---
5+
6+
# Code Review (OUDS Compliance)
7+
8+
## Purpose
9+
10+
This skill is a safety net. It catches OUDS convention violations that other skills might have missed. Invoke it before committing or when reviewing diffs.
11+
12+
---
13+
14+
## Checklist
15+
16+
For each changed file in the diff, verify:
17+
18+
### SCSS files (`**/*.scss`)
19+
20+
- [ ] **No hardcoded values** — colors (`#xxx`), spacing (`16px`), dimensions must use tokens
21+
- [ ] **No raw tokens** — `$core-ouds-*`, `$core-orange-*`, `$core-sosh-*` never in component SCSS
22+
- [ ] **Mixins used** — `@include border-radius()` and `@include transition()` (never direct properties)
23+
- [ ] **`border: 0`** — not `border: none`
24+
- [ ] **No `lighten()`/`darken()`** — use token variant
25+
- [ ] **`!default` on variables** — every module-scope SCSS variable
26+
- [ ] **Colors via CSS custom props** — `var(--#{$prefix}color-*)` for dark mode
27+
- [ ] **`color-mode()` mixin** — not raw `[data-bs-theme]` or `prefers-color-scheme`
28+
- [ ] **`#{$ouds-root-selector}`** — not `:root` directly
29+
- [ ] **`// OUDS mod:`** comment on Bootstrap deviations
30+
31+
### JavaScript files (`js/src/**/*.js`)
32+
33+
- [ ] **No semicolons**
34+
- [ ] **No trailing commas**
35+
- [ ] **Template literals** (not concatenation)
36+
- [ ] **`.js` extension** on imports
37+
- [ ] **No `console.*`** in `js/src/`
38+
- [ ] **`'use strict'`** at top
39+
- [ ] **Extends `BaseComponent`** (if it's a component)
40+
41+
### HTML/MDX files
42+
43+
- [ ] **Semantic elements** — `<button>` for actions, `<a>` for links
44+
- [ ] **ARIA attributes** — correct for the interaction pattern
45+
- [ ] **`.visually-hidden`** — not `display: none` for SR content
46+
- [ ] **`data-bs-theme`** — not `prefers-color-scheme` for color modes
47+
48+
### Token/brand files (`packages/**`)
49+
50+
- [ ] **Auto-generated files not modified** — `_raw.scss`, `_semantic.scss`, `_component.scss`, `_*-custom-props.scss`
51+
- [ ] **New tokens in all 3 brands** — if a new `$ouds-<comp>-*` was added
52+
- [ ] **Import order preserved** — in `_index.scss`
53+
54+
### General
55+
56+
- [ ] **No `dist/` files** in the diff
57+
- [ ] **No JS in `packages/<brand>/`** — JS is shared
58+
- [ ] **Focus visible** — `@include focus-visible()` on interactive elements
59+
- [ ] **Touch targets** — 44×44px minimum on new interactive elements
60+
61+
---
62+
63+
## How to use
64+
65+
1. Run `git diff --stat` to see changed files
66+
2. For each file category, apply the relevant checklist section
67+
3. Report violations with file, line, and suggested fix
68+
4. Classify: ERROR (must fix) vs WARNING (should fix)
69+
70+
---
71+
72+
## Report format
73+
74+
```
75+
## Code Review: OUDS Compliance
76+
77+
### ❌ Errors (must fix before merge)
78+
- `scss/_buttons.scss:42` — hardcoded `padding: 8px` → use `$ouds-space-*` token
79+
- `js/src/tooltip.js:15` — semicolon present → remove
80+
81+
### ⚠️ Warnings (should fix)
82+
- `scss/_card.scss:88` — missing `// OUDS mod:` on Bootstrap override
83+
84+
### ✅ Passed
85+
- Token cross-brand check: all present
86+
- No dist/ files in diff
87+
- ARIA attributes correct
88+
```

0 commit comments

Comments
 (0)