diff --git a/.bundlewatch.config.json b/.bundlewatch.config.json
index 4edc25510a..30b1a834ee 100644
--- a/.bundlewatch.config.json
+++ b/.bundlewatch.config.json
@@ -34,11 +34,11 @@
},
{
"path": "./packages/orange/dist/css/ouds-web.css",
- "maxSize": "65.5 kB"
+ "maxSize": "66 kB"
},
{
"path": "./packages/orange/dist/css/ouds-web.min.css",
- "maxSize": "61.75 kB"
+ "maxSize": "62 kB"
},
{
"path": "./dist/js/ouds-web.bundle.js",
diff --git a/packages/orange-compact/scss/tokens/_component.scss b/packages/orange-compact/scss/tokens/_component.scss
index a853911be6..662b224c52 100644
--- a/packages/orange-compact/scss/tokens/_component.scss
+++ b/packages/orange-compact/scss/tokens/_component.scss
@@ -156,6 +156,11 @@ $ouds-button-space-padding-inline-end-icon-start: $ouds-space-padding-inline-3xl
$ouds-button-space-padding-inline-icon-none: $ouds-space-padding-inline-4xlarge !default;
$ouds-button-space-padding-inline-icon-start: $ouds-space-padding-inline-xlarge !default;
$ouds-button-space-padding-inline-start-icon-end: $ouds-space-padding-inline-3xlarge !default;
+// Manually added tokens for AI button
+$ouds-button-color-border-primary: var(--#{$prefix}color-border-brand-primary) !default;
+$ouds-button-color-border-secondary: $core-orange-color-decorative-shocking-pink-200 !default;
+$ouds-button-color-border-tertiary: $core-orange-color-decorative-amethyst-400 !default;
+$ouds-button-color-border-quaternary: $core-orange-color-decorative-sky-400 !default;
// scss-docs-end ouds-component-button
// Checkbox
diff --git a/packages/orange-compact/scss/tokens/_composite.scss b/packages/orange-compact/scss/tokens/_composite.scss
index baf2b56ede..6f66127303 100644
--- a/packages/orange-compact/scss/tokens/_composite.scss
+++ b/packages/orange-compact/scss/tokens/_composite.scss
@@ -77,6 +77,23 @@ $play-icon: url("data:image/svg+xml, ") !default;
$helper-icon: url("data:image/svg+xml, ") !default;
+// Alert
+// icon tick-confirmation-fill v1.4
+$alert-icon-success: url("data:image/svg+xml, ") !default;
+// icon info-fill v1.4
+$alert-icon-info: url("data:image/svg+xml, ") !default;
+// icon warning-external-shape v1.4
+$alert-icon-warning-external: url("data:image/svg+xml, ") !default;
+// icon warning-internal-shape v1.4
+$alert-icon-warning-internal: url("data:image/svg+xml, ") !default;
+// icon important-fill v1.4
+$alert-icon-important: url("data:image/svg+xml, ") !default;
+
+// Assistant button
+// icon button assistant v1.5
+$btn-assistant-icon: url("data:image/svg+xml, ") !default;
+// $btn-assistant-background: linear-gradient(var(--#{$prefix}btn-bg, var(--#{$prefix}color-bg-primary))) padding-box, conic-gradient($ouds-button-color-border-secondary 0deg 82deg, $ouds-button-color-border-tertiary 82deg 118deg, $ouds-button-color-border-quaternary 118deg 242deg, $ouds-button-color-border-primary 242deg 360deg) border-box !default;
+
// Breadcrumb
$breadcrumb-divider: url("data:image/svg+xml, ") !default; // OUDS mod
@@ -96,28 +113,16 @@ $form-check-radio-checked-bg-image: url("data:image/svg+xml, ") !default;
$form-switch-checked-bg-image: url("data:image/svg+xml, ") !default;
-// Alert
-// icon tick-confirmation-fill v1.4
-$alert-icon-success: url("data:image/svg+xml, ") !default;
-// icon info-fill v1.4
-$alert-icon-info: url("data:image/svg+xml, ") !default;
-// icon warning-external-shape v1.4
-$alert-icon-warning-external: url("data:image/svg+xml, ") !default;
-// icon warning-internal-shape v1.4
-$alert-icon-warning-internal: url("data:image/svg+xml, ") !default;
-// icon important-fill v1.4
-$alert-icon-important: url("data:image/svg+xml, ") !default;
-
-// Select input
-$select-input-chevron: url("data:image/svg+xml, ") !default;
-$select-input-expanded-chevron: url("data:image/svg+xml, ") !default;
-
// Navigation button
// icon button previous v1.4
$btn-previous-icon: url("data:image/svg+xml, ") !default;
// icon button next v1.4
$btn-next-icon: url("data:image/svg+xml, ") !default;
+// Select input
+$select-input-chevron: url("data:image/svg+xml, ") !default;
+$select-input-expanded-chevron: url("data:image/svg+xml, ") !default;
+
//// SVG used several times
$svg-as-custom-props: (
"chevron": $chevron-icon,
diff --git a/packages/orange/scss/tokens/_component.scss b/packages/orange/scss/tokens/_component.scss
index 85e2d72648..bf294fcfdb 100644
--- a/packages/orange/scss/tokens/_component.scss
+++ b/packages/orange/scss/tokens/_component.scss
@@ -156,6 +156,11 @@ $ouds-button-space-padding-inline-end-icon-start: $ouds-space-padding-inline-3xl
$ouds-button-space-padding-inline-icon-none: $ouds-space-padding-inline-4xlarge !default;
$ouds-button-space-padding-inline-icon-start: $ouds-space-padding-inline-xlarge !default;
$ouds-button-space-padding-inline-start-icon-end: $ouds-space-padding-inline-3xlarge !default;
+// Manually added tokens for AI button
+$ouds-button-color-border-primary: var(--#{$prefix}color-border-brand-primary) !default;
+$ouds-button-color-border-secondary: $core-orange-color-decorative-shocking-pink-200 !default;
+$ouds-button-color-border-tertiary: $core-orange-color-decorative-amethyst-400 !default;
+$ouds-button-color-border-quaternary: $core-orange-color-decorative-sky-400 !default;
// scss-docs-end ouds-component-button
// Checkbox
diff --git a/packages/orange/scss/tokens/_composite.scss b/packages/orange/scss/tokens/_composite.scss
index baf2b56ede..6f66127303 100644
--- a/packages/orange/scss/tokens/_composite.scss
+++ b/packages/orange/scss/tokens/_composite.scss
@@ -77,6 +77,23 @@ $play-icon: url("data:image/svg+xml, ") !default;
$helper-icon: url("data:image/svg+xml, ") !default;
+// Alert
+// icon tick-confirmation-fill v1.4
+$alert-icon-success: url("data:image/svg+xml, ") !default;
+// icon info-fill v1.4
+$alert-icon-info: url("data:image/svg+xml, ") !default;
+// icon warning-external-shape v1.4
+$alert-icon-warning-external: url("data:image/svg+xml, ") !default;
+// icon warning-internal-shape v1.4
+$alert-icon-warning-internal: url("data:image/svg+xml, ") !default;
+// icon important-fill v1.4
+$alert-icon-important: url("data:image/svg+xml, ") !default;
+
+// Assistant button
+// icon button assistant v1.5
+$btn-assistant-icon: url("data:image/svg+xml, ") !default;
+// $btn-assistant-background: linear-gradient(var(--#{$prefix}btn-bg, var(--#{$prefix}color-bg-primary))) padding-box, conic-gradient($ouds-button-color-border-secondary 0deg 82deg, $ouds-button-color-border-tertiary 82deg 118deg, $ouds-button-color-border-quaternary 118deg 242deg, $ouds-button-color-border-primary 242deg 360deg) border-box !default;
+
// Breadcrumb
$breadcrumb-divider: url("data:image/svg+xml, ") !default; // OUDS mod
@@ -96,28 +113,16 @@ $form-check-radio-checked-bg-image: url("data:image/svg+xml, ") !default;
$form-switch-checked-bg-image: url("data:image/svg+xml, ") !default;
-// Alert
-// icon tick-confirmation-fill v1.4
-$alert-icon-success: url("data:image/svg+xml, ") !default;
-// icon info-fill v1.4
-$alert-icon-info: url("data:image/svg+xml, ") !default;
-// icon warning-external-shape v1.4
-$alert-icon-warning-external: url("data:image/svg+xml, ") !default;
-// icon warning-internal-shape v1.4
-$alert-icon-warning-internal: url("data:image/svg+xml, ") !default;
-// icon important-fill v1.4
-$alert-icon-important: url("data:image/svg+xml, ") !default;
-
-// Select input
-$select-input-chevron: url("data:image/svg+xml, ") !default;
-$select-input-expanded-chevron: url("data:image/svg+xml, ") !default;
-
// Navigation button
// icon button previous v1.4
$btn-previous-icon: url("data:image/svg+xml, ") !default;
// icon button next v1.4
$btn-next-icon: url("data:image/svg+xml, ") !default;
+// Select input
+$select-input-chevron: url("data:image/svg+xml, ") !default;
+$select-input-expanded-chevron: url("data:image/svg+xml, ") !default;
+
//// SVG used several times
$svg-as-custom-props: (
"chevron": $chevron-icon,
diff --git a/packages/sosh/scss/tokens/_component-colors-custom-props.scss b/packages/sosh/scss/tokens/_component-colors-custom-props.scss
index aed916e409..0774bb18ef 100644
--- a/packages/sosh/scss/tokens/_component-colors-custom-props.scss
+++ b/packages/sosh/scss/tokens/_component-colors-custom-props.scss
@@ -8,6 +8,7 @@
@include color-mode(light, true) {
--#{$prefix}button-color-bg-brand-pressed: #{$core-sosh-color-magenta-500};
--#{$prefix}button-color-bg-brand-loading: #{$core-sosh-color-magenta-500};
+ --#{$prefix}button-color-border-quaternary: #{$core-ouds-color-opacity-black-680};
--#{$prefix}button-color-content-brand-pressed: #{$core-ouds-color-functional-white};
--#{$prefix}button-color-content-brand-loading: #{$core-ouds-color-functional-white};
--#{$prefix}button-mono-color-bg-default-hover: #{$core-ouds-color-opacity-black-680};
@@ -64,6 +65,7 @@
@include color-mode(dark, true) {
--#{$prefix}button-color-bg-brand-pressed: #{$core-sosh-color-blue-duck-light-800};
--#{$prefix}button-color-bg-brand-loading: #{$core-sosh-color-blue-duck-light-800};
+ --#{$prefix}button-color-border-quaternary: #{$core-ouds-color-opacity-white-200};
--#{$prefix}button-color-content-brand-pressed: #{$core-ouds-color-functional-black};
--#{$prefix}button-color-content-brand-loading: #{$core-ouds-color-functional-black};
--#{$prefix}button-mono-color-bg-default-hover: #{$core-ouds-color-opacity-white-800};
diff --git a/packages/sosh/scss/tokens/_component.scss b/packages/sosh/scss/tokens/_component.scss
index 0359b5e73d..61ab8b8e33 100644
--- a/packages/sosh/scss/tokens/_component.scss
+++ b/packages/sosh/scss/tokens/_component.scss
@@ -156,6 +156,11 @@ $ouds-button-space-padding-inline-end-icon-start: $ouds-space-padding-inline-3xl
$ouds-button-space-padding-inline-icon-none: $ouds-space-padding-inline-4xlarge !default;
$ouds-button-space-padding-inline-icon-start: $ouds-space-padding-inline-xlarge !default;
$ouds-button-space-padding-inline-start-icon-end: $ouds-space-padding-inline-3xlarge !default;
+// Manually added tokens for AI button
+$ouds-button-color-border-primary: var(--#{$prefix}color-border-brand-secondary) !default;
+$ouds-button-color-border-secondary: var(--#{$prefix}color-border-brand-primary) !default;
+$ouds-button-color-border-tertiary: var(--#{$prefix}color-border-brand-tertiary) !default;
+$ouds-button-color-border-quaternary: var(--#{$prefix}button-color-border-quaternary) !default;
// scss-docs-end ouds-component-button
// Checkbox
diff --git a/packages/sosh/scss/tokens/_composite.scss b/packages/sosh/scss/tokens/_composite.scss
index 5805dd981c..382575dc27 100644
--- a/packages/sosh/scss/tokens/_composite.scss
+++ b/packages/sosh/scss/tokens/_composite.scss
@@ -68,6 +68,23 @@ $play-icon: url("data:image/svg+xml, ") !default;
$helper-icon: url("data:image/svg+xml, ") !default;
+// Alert
+// icon tick-confirmation-fill v1.4
+$alert-icon-success: url("data:image/svg+xml, ") !default;
+// icon info-fill v1.4
+$alert-icon-info: url("data:image/svg+xml, ") !default;
+// icon warning-external-shape v1.4
+$alert-icon-warning-external: url("data:image/svg+xml, ") !default;
+// icon warning-internal-shape v1.4
+$alert-icon-warning-internal: url("data:image/svg+xml, ") !default;
+// icon important-fill v1.4
+$alert-icon-important: url("data:image/svg+xml, ") !default;
+
+// Assistant button
+// icon button assistant v1.5
+$btn-assistant-icon: url("data:image/svg+xml, ") !default;
+// $btn-assistant-background: linear-gradient(var(--#{$prefix}btn-bg, var(--#{$prefix}color-bg-primary))) padding-box, conic-gradient($ouds-button-color-border-secondary 0deg 82deg, $ouds-button-color-border-tertiary 82deg 118deg, $ouds-button-color-border-quaternary 118deg 242deg, $ouds-button-color-border-primary 242deg 360deg) border-box !default;
+
// Breadcrumb
$breadcrumb-divider: url("data:image/svg+xml, ") !default; // OUDS mod
@@ -87,28 +104,16 @@ $form-check-radio-checked-bg-image: url("data:image/svg+xml, ") !default;
$form-switch-checked-bg-image: url("data:image/svg+xml, ") !default;
-// Alert
-// icon tick-confirmation-fill v1.4
-$alert-icon-success: url("data:image/svg+xml, ") !default;
-// icon info-fill v1.4
-$alert-icon-info: url("data:image/svg+xml, ") !default;
-// icon warning-external-shape v1.4
-$alert-icon-warning-external: url("data:image/svg+xml, ") !default;
-// icon warning-internal-shape v1.4
-$alert-icon-warning-internal: url("data:image/svg+xml, ") !default;
-// icon important-fill v1.4
-$alert-icon-important: url("data:image/svg+xml, ") !default;
-
-// Select input
-$select-input-chevron: url("data:image/svg+xml, ") !default;
-$select-input-expanded-chevron: url("data:image/svg+xml, ") !default;
-
// Navigation button
// icon button previous v1.4
$btn-previous-icon: url("data:image/svg+xml, ") !default;
// icon button next v1.4
$btn-next-icon: url("data:image/svg+xml, ") !default;
+// Select input
+$select-input-chevron: url("data:image/svg+xml, ") !default;
+$select-input-expanded-chevron: url("data:image/svg+xml, ") !default;
+
//// SVG used several times
$svg-as-custom-props: (
"chevron": $chevron-icon,
diff --git a/scss/_buttons.scss b/scss/_buttons.scss
index b471ae7703..86247d28b2 100644
--- a/scss/_buttons.scss
+++ b/scss/_buttons.scss
@@ -60,6 +60,7 @@
display: inline-flex; // OUDS mod: instead of `inline-block`
flex-shrink: 0;
+ gap: var(--#{$prefix}btn-icon-gap);
align-items: center; // OUDS mod
justify-content: center; // OUDS mod
min-width: var(--#{$prefix}btn-min-width); // OUDS mod
@@ -187,7 +188,6 @@
flex-shrink: 0;
width: 1em;
height: 1em;
- margin-right: var(--#{$prefix}btn-icon-gap);
overflow: hidden;
font-size: var(--#{$prefix}btn-icon-size);
line-height: 1;
@@ -495,29 +495,23 @@
.btn-previous {
--#{$prefix}btn-padding-start: #{$ouds-button-space-padding-inline-chevron-start};
--#{$prefix}btn-padding-end: #{$ouds-button-space-padding-inline-end-icon-start};
+ --#{$prefix}btn-icon-gap: #{$ouds-button-space-column-gap-chevron};
&::before {
content: "";
mask-image: $btn-previous-icon;
}
-
- &:not(.btn-icon)::before {
- margin-right: $ouds-button-space-column-gap-chevron;
- }
}
.btn-next {
--#{$prefix}btn-padding-start: #{$ouds-button-space-padding-inline-start-icon-end};
--#{$prefix}btn-padding-end: #{$ouds-button-space-padding-inline-chevron-end};
+ --#{$prefix}btn-icon-gap: #{$ouds-button-space-column-gap-chevron};
&::after {
content: "";
mask-image: $btn-next-icon;
}
-
- &:not(.btn-icon)::after {
- margin-left: $ouds-button-space-column-gap-chevron;
- }
}
.btn-previous::before,
@@ -527,3 +521,42 @@
background-color: currentcolor;
}
+.btn-assistant {
+ --#{$prefix}btn-padding-start: #{$ouds-button-space-padding-inline-icon-start};
+ --#{$prefix}btn-padding-end: #{$ouds-button-space-padding-inline-start-icon-end};
+ --#{$prefix}btn-interaction-border-width: #{$ouds-button-border-width-default-interaction};
+ --#{$prefix}btn-color: #{$ouds-button-mono-color-content-default-enabled};
+ --#{$prefix}btn-bg: initial;
+ --#{$prefix}btn-hover-color: #{$ouds-button-color-content-default-hover};
+ --#{$prefix}btn-active-color: #{$ouds-button-color-content-default-pressed};
+ --#{$prefix}btn-disabled-color: #{$ouds-button-color-content-default-disabled};
+ --#{$prefix}btn-focus-color: #{$ouds-button-color-content-default-focus};
+ --#{$prefix}btn-loading-color: #{$ouds-button-color-content-default-loading};
+
+ &::before {
+ width: var(--#{$prefix}btn-icon-size);
+ height: var(--#{$prefix}btn-icon-size);
+ content: "";
+ background-color: currentcolor;
+ mask-image: $btn-assistant-icon;
+ }
+
+ background: linear-gradient(var(--#{$prefix}btn-bg, var(--#{$prefix}color-bg-primary))) padding-box, conic-gradient($ouds-button-color-border-secondary 0deg 82deg, $ouds-button-color-border-tertiary 82deg 118deg, $ouds-button-color-border-quaternary 118deg 242deg, $ouds-button-color-border-primary 242deg 360deg) border-box;
+ background-origin: border-box;
+ border-color: transparent;
+
+ &:hover,
+ &:active,
+ &:focus-visible {
+ border-color: transparent;
+ }
+
+ &:disabled:not(&.loading-indeterminate, &.loading-determinate) {
+ background: initial;
+ // border-color: transparent;
+ }
+
+ &.btn-icon {
+ --#{$prefix}btn-border-radius: 50%;
+ }
+}
diff --git a/site/data/components-details.ts b/site/data/components-details.ts
index a1cca06d11..6a7619815b 100644
--- a/site/data/components-details.ts
+++ b/site/data/components-details.ts
@@ -3,6 +3,13 @@ import { getConfig } from '@libs/config'
import { getVersionedDocsPath } from '@libs/path'
export const componentsDetails: ComponentCardData[] = [
+ {
+ name: 'Assistant button',
+ slug: 'assistant-button',
+ link: 'buttons#assistant-button',
+ category: 'Actions',
+ snippet: `Label `
+ },
{
name: 'Alert message',
slug: 'alert-message',
diff --git a/site/src/content/docs/components/buttons.mdx b/site/src/content/docs/components/buttons.mdx
index 898c647645..cd24d03581 100644
--- a/site/src/content/docs/components/buttons.mdx
+++ b/site/src/content/docs/components/buttons.mdx
@@ -7,6 +7,7 @@ toc: true
types:
- Button
- Navigation button
+ - Assistant button
---
import { getData } from '@libs/data'
@@ -22,7 +23,7 @@ import { getMode } from '@libs/sass-variables'
### Component types
-
+
@@ -43,14 +44,26 @@ import { getMode } from '@libs/sass-variables'
Navigation button is a UI element that enables movement between different pages within a multi-page interface.
+
+
+
+
Assistant button is a UI element that triggers an AI-related action or event.
+
+
-For the two types of button, OUDS Web has a common base `.btn` class that sets up default styles such as padding and content alignment. By default, `.btn` controls have a transparent border and background color, but still defines basic focus and hover styles. The `.btn` class is intended to be used in conjunction with our button variants, or to serve as a basis for your own custom styles. The most basic button is the `.btn-default` variant.
+For the three types of button, OUDS Web has a common base `.btn` class that sets up default styles such as padding and content alignment. By default, `.btn` controls have a transparent border and background color, but still defines basic focus and hover styles. The `.btn` class is intended to be used in conjunction with our button variants, or to serve as a basis for your own custom styles. The most basic button is the `.btn-default` variant.
Default`} />
Next`} />
+Default`} />
+
### Accessibility (semantics)
The `.btn` classes are designed to be used with the `` element, but can be used on `` or ` ` elements (with `type` equal to `button`, `reset`, or `submit`). You should use any semantic element that best fits the context to appropriately convey its purpose to assistive technologies such as screen readers.
@@ -62,8 +75,11 @@ Use an ` ` element only for navigation purpose; it must include an `href` attr
Generally speaking, you should always ask yourself which tag is appropriate for your specific context. The visual rendering will remain the same anyway:
Standard button
+
Button link
+
+
Navigation button link `} />
When navigation buttons are used for global navigation (between pages or within content), they should be wrapped in a `` tag, which must have an explicit (accessible) name defined using, for example, an `aria-label` attribute.
@@ -77,9 +93,13 @@ Button is a UI element that triggers an action or event, used to initiate tasks
OUDS Web includes several button variants, each serving its own semantic purpose, with a few extras thrown in for more control. Please follow the [button design specifications](https://r.orange.fr/r/S-ouds-doc-button) to choose the right button variant for the right action.
Default
+
Strong
+
Brand
+
Minimal
+
Negative `} />
@@ -99,17 +119,25 @@ OUDS Web offers a few variations to use on [colored backgrounds]([[docsref:/util
+
Default
+
Strong
+
Minimal
+
+
Default
+
Strong
+
Minimal
+
`} />
@@ -128,11 +156,17 @@ Rounded corners buttons is a project-wide option therefore all your buttons shou
+
Default
+
Strong
+
Brand
+
Minimal
+
Negative
+
`} />
@@ -149,30 +183,35 @@ Rounded corners buttons is a project-wide option therefore all your buttons shou
You don’t need to apply any spacing utility on the icon to get consistent spacing, as the margin is already handled by OUDS Web.
+
Default
+
Strong
+
Brand
+
Minimal
+
@@ -184,22 +223,26 @@ You don’t need to apply any spacing utility on the icon to get consistent spac
Default
+
+
Default
+
Strong
+
@@ -211,6 +254,7 @@ You don’t need to apply any spacing utility on the icon to get consistent spac
Default
+
`} />
@@ -225,30 +269,35 @@ Add `.btn-icon` to get a squared button, meant to only contain an icon. Make sur
{/* TODO: Add a paragraph about tooltip and/or title */}
+
Default
+
Strong
+
Brand
+
Minimal
+
@@ -260,22 +309,26 @@ Add `.btn-icon` to get a squared button, meant to only contain an icon. Make sur
Default
+
+
Default
+
Strong
+
@@ -287,6 +340,7 @@ Add `.btn-icon` to get a squared button, meant to only contain an icon. Make sur
Default
+
`} />
@@ -306,21 +360,31 @@ In need of a button, but not the hefty background colors they bring? Replace the
#### Disabled
-Make buttons inactive by adding the `disabled` boolean attribute to any `` element. Disabled buttons have `pointer-events: none` applied to, preventing hover and active states from triggering.
+Make buttons inactive by adding the `[disabled]` boolean attribute to any `` element. Disabled buttons have `pointer-events: none` applied to, preventing hover and active states from triggering.
+
Default
+
Strong
+
Brand
+
Minimal
+
Negative
+
+
Default
+
Strong
+
Minimal
+
`} />
@@ -330,13 +394,19 @@ Disabled buttons using the `` element behave a bit different:
- Disabled buttons using ` ` *should not* include the `href` attribute. In case you need to keep the `href`, please refer to [disabled link accessibility warning]([[docsref:/components/links#disabled-link-accessibility-warning]]).
+
Default link
+
Strong link
+
`} />
@@ -375,6 +445,7 @@ At the end of the loading, you should:
You can see it live and find a JavaScript example on our [loading buttons live example]([[docsref:/examples/loading-buttons/]]).
+
Download file 1
@@ -382,6 +453,7 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 1
+
Download file 2
@@ -389,6 +461,7 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 2
+
Download file 100
@@ -396,6 +469,7 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 100
+
Download file 3
@@ -403,6 +477,7 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 3
+
Download file 4
@@ -410,9 +485,11 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 4
+
+
Download file 5
@@ -420,6 +497,7 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 5: xx%
+
Download file 6
@@ -427,6 +505,7 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 6: xx%
+
Download file 101
@@ -434,6 +513,7 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 101: xx%
+
Download file 7
@@ -441,6 +521,7 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 7: xx%
+
Download file 8
@@ -448,10 +529,12 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 8: xx%
+
+
Download file 9
@@ -459,6 +542,7 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 9
+
Download file 10
@@ -466,6 +550,7 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 10
+
Download file 11
@@ -473,11 +558,13 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 11
+
+
Download file 12
@@ -485,6 +572,7 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 12: xx%
+
Download file 13
@@ -492,6 +580,7 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 13: xx%
+
Download file 14
@@ -499,12 +588,14 @@ You can see it live and find a JavaScript example on our [loading buttons live e
Downloading file 14: xx%
+
`} />
Loading state can also be combined with all kind of buttons, including icons.
+
')}
@@ -515,6 +606,7 @@ Loading state can also be combined with all kind of buttons, including icons.
Downloading file 15
+
')}
@@ -525,6 +617,7 @@ Loading state can also be combined with all kind of buttons, including icons.
Downloading file 16: xx%
+
')}
@@ -535,6 +628,7 @@ Loading state can also be combined with all kind of buttons, including icons.
Downloading file 17
+
')}
@@ -545,6 +639,7 @@ Loading state can also be combined with all kind of buttons, including icons.
Downloading file 18
+
`} />
@@ -553,7 +648,9 @@ Loading state can also be combined with all kind of buttons, including icons.
+
Default
+
`} />
### Layout
@@ -565,29 +662,41 @@ Create responsive stacks of full-width, "block buttons" with a mix of our displa
Please note that these **full-width** buttons should not be used on desktop screens.
+
Button
+
Button
+
`} />
Here we create a responsive variation, starting with vertically stacked buttons until the `md` breakpoint, where `.md:d-block` replaces the `.d-grid` class, thus nullifying the `gap-small` utility. Resize your browser to see them change.
+
Button
+
Button
+
`} />
You can adjust the width of your block buttons with grid column width classes. For example, for a half-width "block button", use `.col-6`. Center it horizontally with `.mx-auto`, too.
+
Button
+
Button
+
`} />
Additional utilities can be used to adjust the alignment of buttons when horizontal. Here we’ve taken our previous responsive example and added some flex utilities and a margin utility on the button to right-align the buttons when they’re no longer stacked.
+
Button
+
Button
+
`} />
#### Disable text wrapping
@@ -601,7 +710,9 @@ Navigation button is a UI element that enables movement between different pages
You can use `.btn-previous` and `.btn-next` classes to indicate backward and forward actions in a process or a flow. These classes will add a directional arrow to the left or right of the button text, respectively. As navigation buttons generaly indicate a navigation purpose, in our examples, we have used `` elements, but this could be adapted to your own context (in that case, don't forget to add an `href` attribute to make the element focusable). The visual rendering will remain the same anyway:
Previous
+
Next
+
Next `} />
### Variants
@@ -613,13 +724,21 @@ The button and the navigation button have the same variants except for the negat
Default
+
Strong
+
Brand
+
Minimal
+
+
Default
+
Strong
+
Brand
+
Minimal `} />
#### Icon only
@@ -627,8 +746,11 @@ The button and the navigation button have the same variants except for the negat
Add the class `.btn-icon` to get a squared button that only contains an icon. Make sure to provide an accessible name to your button, either using a `.visually-hidden` content or an `aria-label` attribute.
Previous
+
Next
+
Next
+
`} />
#### Colored background
@@ -651,6 +773,7 @@ OUDS Web offers a few variations to use on [colored backgrounds]([[docsref:/util
+
Default
@@ -677,8 +800,11 @@ OUDS Web offers a few variations to use on [colored backgrounds]([[docsref:/util
+
Next
+
Next
+
`} />
@@ -691,14 +817,14 @@ Make navigation buttons inactive by:
- Including the `aria-disabled="true"` attribute, to indicate the state of the element to assistive technologies, make it visually appear disabled and disable all `pointer-events`.
- Removing the `href` attribute. In case you need to keep the `href`, please refer to [disabled link accessibility warning]([[docsref:/components/links#disabled-link-accessibility-warning]]).
-
Next
+Next
+
Next `} />
-In case you use a `` element, simply add the `disabled` boolean attribute to it. Disabled navigation buttons have `pointer-events: none` applied to, preventing hover and active states from triggering.
+In case you use a `` element, simply add the `[disabled]` boolean attribute to it. Disabled navigation buttons have `pointer-events: none` applied to, preventing hover and active states from triggering.
+
+Next
-Next
Next `} />
#### Loading
@@ -707,14 +833,14 @@ The loading state of a navigation button indicates that an action is currently p
Please refer to the [loading state section of the button component](#loading) for guidelines on how to implement loading states, as well as a JavaScript example and a live demo.
-
+
Next
Loading next page
+
Next
@@ -722,6 +848,7 @@ Please refer to the [loading state section of the button component](#loading) fo
Loading next page: xx%
+
Next
@@ -730,3 +857,113 @@ Please refer to the [loading state section of the button component](#loading) fo
Loading next page
`} />
+#### Skeleton
+
+
+
+
+ Next
+
+ Previous
+ `} />
+
+## [[comp]] Assistant button
+
+An AI assistant button is a UI element used to trigger an interaction with an AI-powered feature, such as conversational assistance, content generation, or contextual suggestions.
+
+It combines standard button behaviors with AI-specific visual attributes to clearly identify actions enhanced or powered by artificial intelligence.
+
+You can use `.btn-assistant` class to indicate AI actions in a process or a flow. This class will add an icon before the button text and a specific border color. As Assistant buttons generally indicate an AI-related action, in our examples, we have used `` elements, but this could be adapted to your own context (in that case, don't forget to add an `href` attribute to make the element focusable). The visual rendering will remain the same anyway:
+
+Default
+
+ Default `} />
+
+
+ Due to technical limitations, an Assistant button does not have a transparent background. To simulate transparency, set `--bs-btn-bg` to its container background color. Make sure that the used variable isn't semi-transparent (ie. use background tokens instead of surface tokens).
+
+
+
+
+
+ Default
+
+
+
+ Default
+
+
+ `} />
+
+### Variants
+
+#### Icon only
+
+Add the class `.btn-icon` to get a icon-only assistant button. Make sure to provide an accessible name to your button, either using a `.visually-hidden` content or an `aria-label` attribute. Icon-only assistant buttons are always completely circular.
+
+
+ Default
+ `} />
+
+
+ #### Rounded corners
+
+ Rounded corners Assistant buttons is a project-wide option therefore all your buttons should either be rounded or not. Add `.use-rounded-corner-buttons` on a top container (for example ``) to use rounded corners.
+
+
+ Rounded corners could be used in more emotional, immersive contexts or those tied to specific visual identities. **For standard or business-oriented usage, keep the default square corners.**
+
+
+
+ We use a `` as a parent container because we cannot use `` in an example.
+
+
+
+
+ Default
+
+
`} />
+
+
+### States
+
+#### Disabled
+
+Assistant buttons typically use the `` element. To disable an Assistant button, add the `[disabled]` boolean attribute. Disabled Assistant buttons have `pointer-events: none` applied to, preventing hover and active states from triggering.
+
+Default
+
+
+ Default
+ `} />
+
+#### Loading
+
+The loading state of an Assistant button indicates that an action is currently processing or taking place. This state provides feedback to users, enhancing user experience.
+
+Please refer to the [loading state section of the button component](#loading) for guidelines on how to implement loading states, as well as a JavaScript example and a live demo.
+
+
+ Default
+
+
+
+ Loading answer
+
+
+
+
+
+
+ Loading answer
+ `} />
+
+#### Skeleton
+
+
+
+
+
+ Default
+
+ `} />
diff --git a/site/src/content/docs/getting-started/migration-from-boosted.mdx b/site/src/content/docs/getting-started/migration-from-boosted.mdx
index f49beb5863..72e8d956d7 100644
--- a/site/src/content/docs/getting-started/migration-from-boosted.mdx
+++ b/site/src/content/docs/getting-started/migration-from-boosted.mdx
@@ -144,6 +144,7 @@ All responsive classes, helpers, and utilities have been updated accordingly to
- New `.btn-default`, `.btn-strong`, `.btn-brand`, `.btn-minimal`, and `.btn-negative` have been added.
- New `.btn-previous` and `.btn-next` have been added.
+- New `.btn-ai` has been added.
- New `.btn-on-colored-bg` has been added; it can be used with `.btn-default`, `.btn-strong` and `.btn-minimal` to get variants on colored backgrounds (neither primary, nor secondary, nor tertiary, nor emphasized backgrounds).
- New `.use-rounded-corner-buttons` have been added; it can be added on `` to toggle project-wide rounded corners buttons.
- Breaking `.btn-primary`, `.btn-secondary`, `.btn-success`, `.btn-danger`, `.btn-warning`, `.btn-info`, `.btn-light`, `.btn-dark` and `btn-dropdown` have been removed. You can still have them using `$enable-bootstrap-compatibility`. Here is the visual correspondence:
diff --git a/site/static/orange-compact/docs/[version]/assets/img/ouds-web-sprite.svg b/site/static/orange-compact/docs/[version]/assets/img/ouds-web-sprite.svg
index f55ea3bd3a..ba32b1e3cb 100644
--- a/site/static/orange-compact/docs/[version]/assets/img/ouds-web-sprite.svg
+++ b/site/static/orange-compact/docs/[version]/assets/img/ouds-web-sprite.svg
@@ -183,4 +183,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/site/static/orange/docs/[version]/assets/img/ouds-web-sprite.svg b/site/static/orange/docs/[version]/assets/img/ouds-web-sprite.svg
index f55ea3bd3a..ba32b1e3cb 100644
--- a/site/static/orange/docs/[version]/assets/img/ouds-web-sprite.svg
+++ b/site/static/orange/docs/[version]/assets/img/ouds-web-sprite.svg
@@ -183,4 +183,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/site/static/sosh/docs/[version]/assets/img/ouds-web-sprite.svg b/site/static/sosh/docs/[version]/assets/img/ouds-web-sprite.svg
index bc4618bc99..b4cb843997 100644
--- a/site/static/sosh/docs/[version]/assets/img/ouds-web-sprite.svg
+++ b/site/static/sosh/docs/[version]/assets/img/ouds-web-sprite.svg
@@ -164,4 +164,8 @@
+
+
+
+