Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
6ef73f9
Add feedback message parameter to banner component
olxmpe Jan 19, 2026
c006d4e
Fix test
olxmpe Jan 19, 2026
a2f5de7
Review
olxmpe Jan 19, 2026
ce5f0e3
Facultative feedbackMessage.value
olxmpe Jan 19, 2026
61f35aa
Support zero values for skins in the OSS::ProgressBar
JulienVannier66 Jan 28, 2026
69f6d5e
Simplify code logic for OSS::ProgressBar
JulienVannier66 Jan 29, 2026
0ae6286
Merge pull request #629 from upfluence/jv/support-zero-values-skins-p…
JulienVannier66 Jan 29, 2026
c610db1
3.89.0
JulienVannier66 Jan 29, 2026
32507a3
Added error warning and success feedback option
nathalieArnoux Feb 2, 2026
918f612
Updated storybook
nathalieArnoux Feb 2, 2026
0997186
Fixed PR feedback
nathalieArnoux Feb 3, 2026
b881523
Fixed forgotten as const
nathalieArnoux Feb 3, 2026
2800a26
Removed hasError parameter as feedbackMessage value is to become opti…
nathalieArnoux Feb 4, 2026
29e4bc8
Cleaned up dummy app
nathalieArnoux Feb 4, 2026
fa813ac
Added index on Power Select option items
nathalieArnoux Feb 5, 2026
dc0bd30
Merge pull request #635 from upfluence/na/dra-3742
nathalieArnoux Feb 6, 2026
9e03584
[Fix] sync issue with package version
aprentout Feb 9, 2026
fed8625
3.89.2
nathalieArnoux Feb 9, 2026
38ec42c
Fixed: InfineSelect scroll-behavior prop at higher container level
Miexil Feb 9, 2026
83bf71a
Merge pull request #632 from upfluence/na/vel-7099
nathalieArnoux Feb 10, 2026
65a9ac2
3.89.3
nathalieArnoux Feb 10, 2026
313a8e1
oss/avatar: ensure loading avatar stays round
phndiaye Feb 10, 2026
8480e67
3.89.4
phndiaye Feb 10, 2026
0a70bce
Merge pull request #636 from upfluence/mb/DRA-4560
Miexil Feb 10, 2026
78e31df
3.89.5
Miexil Feb 10, 2026
3075f0a
add support for Tag in NavTab tab item
phndiaye Feb 10, 2026
d5780c8
Merge pull request #637 from upfluence/pn/vel-7096
phndiaye Feb 11, 2026
14bcc32
3.89.6
phndiaye Feb 11, 2026
d6a5b21
feat: added @suffixIcon arg to oss::button
OwenCoogan Feb 12, 2026
8dd1a1a
fix: fixed linter issue
OwenCoogan Feb 13, 2026
ff82870
fix: removed dynamic gap for suffix icon
OwenCoogan Feb 13, 2026
00e1853
fix: added fix for margin size
OwenCoogan Feb 13, 2026
9ef4f25
fix: fixed gap based on design input
OwenCoogan Feb 13, 2026
2943e38
[Infinite select] Add ability to group by items (#622)
aprentout Jan 23, 2026
aefbdde
feat: added hasError param to text area
OwenCoogan Jan 28, 2026
7a3e2dd
[WIP] Add new OSS::ContextMenu::Panel component
aprentout Jan 26, 2026
7f3e5e5
[WIP] Improve component & add tests
aprentout Jan 27, 2026
080971c
[ContextMenu::Panel] Improve mouse event behavior & add scroll shadow
aprentout Jan 28, 2026
3c43c11
[ContextMenu::Panel] Add styling
aprentout Jan 28, 2026
d743918
[ContextMenu::Panel] Cleanup
aprentout Jan 28, 2026
b19ddcf
[ContextMenu::Panel] Fix pr feedbacks
aprentout Jan 28, 2026
3776c66
[ContextMenu::Panel] Improve default values
aprentout Jan 29, 2026
4e6d847
[ContextMenu::Panel] Fix failing tests & pr feedbacks
aprentout Jan 29, 2026
3171371
[ContextMenu] Add new context-menu component
aprentout Jan 29, 2026
f067971
[ContextMenu] Add documentation & few behavior improvements
aprentout Jan 30, 2026
de9b01e
[ContextMenu] Improve documentation
aprentout Jan 30, 2026
2539c32
[ContextMenu] fix pr feedbacks
aprentout Jan 30, 2026
fbaa435
fix: added mouse event param to actions for context menu component
OwenCoogan Feb 12, 2026
9bf90bf
feat: added chevron to contextual menu
OwenCoogan Feb 12, 2026
bc26f77
fix: removed unused arg
OwenCoogan Feb 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions addon/components/o-s-s/banner.hbs
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
<div class="upf-banner fx-1 fx-row fx-xalign-center fx-gap-px-12 {{this.modifierClasses}}"
...attributes>
<div class="upf-banner fx-1 fx-row fx-xalign-center fx-gap-px-12 {{this.modifierClasses}}" ...attributes>
{{#if (has-block "custom-icon")}}
<div>{{yield to="custom-icon"}}</div>
{{else if @icon}}
<OSS::Icon @style={{fa-icon-style @icon}} @icon={{fa-icon-value @icon}}
class="upf-badge upf-badge--shape-round upf-badge--size-md" />
<OSS::Icon
@style={{fa-icon-style @icon}}
@icon={{fa-icon-value @icon}}
class="upf-badge upf-badge--shape-round upf-badge--size-md"
/>
{{else if @image}}
<img class="upf-badge upf-badge--size-md upf-badge--shape-round" src={{@image}} alt="banner" />
{{/if}}
Expand All @@ -27,4 +29,9 @@
{{#if (has-block "actions")}}
<div>{{yield to="actions"}}</div>
{{/if}}
</div>
{{#if this.feedbackMessage.value}}
<div class="upf-banner--feedback font-color-{{this.feedbackMessage.type}}-500">
{{this.feedbackMessage.value}}
</div>
{{/if}}
</div>
28 changes: 22 additions & 6 deletions addon/components/o-s-s/banner.stories.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { hbs } from 'ember-cli-htmlbars';

const COMPONENT_SIZES = ['sm', 'md', 'lg'];
const FEEDBACK_TYPES = ['error', 'warning', 'success'];

export default {
title: 'Components/OSS::Banner',
Expand Down Expand Up @@ -77,9 +78,19 @@ export default {
type: 'boolean'
}
},
feedbackMessage: {
description: 'A feedback message that will be displayed below the banner. Its color changes based on its type',
table: {
type: {
summary: `{ type: ${FEEDBACK_TYPES.join(' | ')}, value: string }`
},
defaultValue: { summary: 'undefined' }
},
control: { type: 'object' }
},
size: {
description:
'Allows to adjust the size of the component. Currently available options are `sm`, `md` and `lg`. Defaults to `md`.',
'Allows to adjust the size of the component. Currently available options are `sm`, `md` and `lg`. Defaults to `md`',
table: {
type: COMPONENT_SIZES.join('|'),
defaultValue: { summary: 'md' }
Expand All @@ -93,7 +104,7 @@ export default {
parameters: {
docs: {
description: {
component: 'A configurable Banner component. Can display a badge or an image, a title and a subtitle.'
component: 'A configurable Banner component. Can display a badge or an image, a title and a subtitle'
},
iframeHeight: 120
}
Expand All @@ -108,21 +119,24 @@ const defaultArgs = {
plain: false,
selected: false,
disabled: false,
feedbackMessage: undefined,
size: undefined
};

const Template = (args) => ({
template: hbs`
<OSS::Banner @title={{this.title}} @subtitle={{this.subtitle}} @icon={{this.icon}} @plain={{this.plain}}
@image={{this.image}} @selected={{this.selected}} @disabled={{this.disabled}} @size={{this.size}} />
@image={{this.image}} @selected={{this.selected}} @disabled={{this.disabled}} @size={{this.size}}
@feedbackMessage={{this.feedbackMessage}} />
`,
context: args
});

const CustomTitleTemplate = (args) => ({
template: hbs`
<OSS::Banner @title={{this.title}} @subtitle={{this.subtitle}} @icon={{this.icon}} @plain={{this.plain}}
@image={{this.image}} @selected={{this.selected}} @disabled={{this.disabled}} @size={{this.size}}>
@image={{this.image}} @selected={{this.selected}} @disabled={{this.disabled}} @size={{this.size}}
@feedbackMessage={{this.feedbackMessage}}>
<:title-suffix>
<div class="fx-row fx-gap-px-6 fx-xalign-center">
<OSS::Icon @icon="fa-users" /> <span class="font-color-gray-500">Custom title</span>
Expand All @@ -136,7 +150,8 @@ const CustomTitleTemplate = (args) => ({
const CustomIconTemplate = (args) => ({
template: hbs`
<OSS::Banner @title={{this.title}} @subtitle={{this.subtitle}} @icon={{this.icon}} @plain={{this.plain}}
@image={{this.image}} @selected={{this.selected}} @disabled={{this.disabled}} @size={{this.size}}>
@image={{this.image}} @selected={{this.selected}} @disabled={{this.disabled}} @size={{this.size}}
@feedbackMessage={{this.feedbackMessage}}>
<:custom-icon>
<OSS::Badge @icon="fas fa-check" />
</:custom-icon>
Expand All @@ -148,7 +163,8 @@ const CustomIconTemplate = (args) => ({
const ActionTemplate = (args) => ({
template: hbs`
<OSS::Banner @title={{this.title}} @subtitle={{this.subtitle}} @icon={{this.icon}} @plain={{this.plain}}
@image={{this.image}} @selected={{this.selected}} @disabled={{this.disabled}} @size={{this.size}}>
@image={{this.image}} @selected={{this.selected}} @disabled={{this.disabled}} @size={{this.size}}
@feedbackMessage={{this.feedbackMessage}}>
<:actions>
<OSS::Button @label="Click me" />
</:actions>
Expand Down
27 changes: 26 additions & 1 deletion addon/components/o-s-s/banner.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { isBlank } from '@ember/utils';
import Component from '@glimmer/component';
import { FEEDBACK_TYPES, type FeedbackMessage } from './input-container';

type SizeType = 'sm' | 'md' | 'lg';

Expand All @@ -8,6 +9,7 @@ interface OSSBannerArgs {
plain?: boolean;
selected?: boolean;
disabled?: boolean;
feedbackMessage?: FeedbackMessage;
}

const SIZE_CLASSES: Record<string, string> = {
Expand All @@ -32,8 +34,31 @@ export default class OSSBanner extends Component<OSSBannerArgs> {
return SIZE_CLASSES[this.args.size ?? 'md'] ?? '';
}

get feedbackMessage(): FeedbackMessage | undefined {
if (this.args.feedbackMessage && FEEDBACK_TYPES.includes(this.args.feedbackMessage.type)) {
return this.args.feedbackMessage;
}
return undefined;
}

get borderColorClass(): string {
if (this.feedbackMessage) return `upf-banner--${this.feedbackMessage.type}`;
return '';
}

get feedbackMarginClass(): string {
return this.feedbackMessage?.value ? 'margin-bottom-px-24' : '';
}

get modifierClasses(): string {
return [this.disabledClass, this.selectedClass, this.plainClass, this.sizeClass]
return [
this.disabledClass,
this.selectedClass,
this.plainClass,
this.sizeClass,
this.borderColorClass,
this.feedbackMarginClass
]
.filter((mc) => !isBlank(mc))
.join(' ');
}
Expand Down
8 changes: 7 additions & 1 deletion addon/components/o-s-s/button.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,15 @@
{{else if @iconUrl}}
<img src={{@iconUrl}} alt="icon" />
{{/if}}

{{#if @label}}
<span class={{if (or @icon @iconUrl) "margin-left-px-6"}}>{{@label}}</span>
{{/if}}
{{#if @suffixIcon}}
<OSS::Icon
@style={{fa-icon-style @suffixIcon}}
@icon={{fa-icon-value @suffixIcon}}
class={{if @label "margin-left-px-18"}}
/>
{{/if}}
{{/if}}
</button>
22 changes: 21 additions & 1 deletion addon/components/o-s-s/button.stories.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,16 @@ export default {
type: 'text'
}
},
suffixIcon: {
description: 'Font Awesome class for an icon displayed after the label (e.g. fas fa-chevron-down)',
table: {
type: { summary: 'string' },
defaultValue: { summary: 'undefined' }
},
control: {
type: 'text'
}
},
square: {
description: 'Displays the button as a square. Useful for icon buttons.',
table: {
Expand Down Expand Up @@ -164,6 +174,7 @@ const defaultArgs = {
countDown: undefined,
loadingOptions: undefined,
iconUrl: undefined,
suffixIcon: undefined,
disabled: undefined
};

Expand All @@ -172,7 +183,8 @@ const Template = (args) => ({
<OSS::Button
@skin={{this.skin}} @size={{this.size}} @loading={{this.loading}} @label={{this.label}} @icon={{this.icon}}
@theme={{this.theme}} @square={{this.square}} @countDown={{this.countDown}}
@iconUrl={{this.iconUrl}} @loadingOptions={{this.loadingOptions}} disabled={{this.disabled}} />
@iconUrl={{this.iconUrl}} @suffixIcon={{this.suffixIcon}}
@loadingOptions={{this.loadingOptions}} disabled={{this.disabled}} />
`,
context: args
});
Expand Down Expand Up @@ -201,3 +213,11 @@ WithIconUrl.args = {
iconUrl: '/@upfluence/oss-components/assets/heart.svg'
}
};

export const WithSuffixIcon = Template.bind({});
WithSuffixIcon.args = {
...defaultArgs,
...{
suffixIcon: 'fas fa-chevron-down'
}
};
1 change: 1 addition & 0 deletions addon/components/o-s-s/button.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ export interface OSSButtonArgs {
loadingOptions?: LoadingOptions;
icon?: string;
iconUrl?: string;
suffixIcon?: string;
label?: string;
theme?: string;
square?: boolean;
Expand Down
31 changes: 31 additions & 0 deletions addon/components/o-s-s/context-menu.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<OSS::Button
@skin={{@skin}}
@size={{@size}}
@loading={{@loading}}
@loadingOptions={{@loadingOptions}}
@icon={{@icon}}
@iconUrl={{@iconUrl}}
@label={{@label}}
@theme={{@theme}}
@square={{@square}}
@countDown={{@countDown}}
@suffixIcon={{if this.displayContextMenuPanel "fa-chevron-up" "fa-chevron-down"}}
@gap={{or @chevronGap @gap "fx-gap-px-6"}}
{{did-insert this.registerMenuTrigger}}
{{on "click" this.toggleContextMenuPanel}}
...attributes
/>

{{#if this.displayContextMenuPanel}}
<OSS::ContextMenu::Panel
@referenceTarget={{this.referenceTarget}}
@items={{@items}}
@offset={{4}}
@placement="bottom-start"
@onMouseLeave={{this.onContextMenuPanelMouseLeave}}
@onClose={{this.closeContextMenuPanel}}
@registerPanel={{this.registerContextMenuPanel}}
@unregisterPanel={{this.unregisterContextMenuPanel}}
{{on-click-outside this.onClickOutsidePanel useCapture=true}}
/>
{{/if}}
Loading