@engie-group/fluid-design-system-angular
Version:
Fluid Design System Angular
98 lines (91 loc) • 2.84 kB
text/typescript
import { CommonModule } from '@angular/common';
import { provideAnimations } from '@angular/platform-browser/animations';
import {
applicationConfig,
argsToTemplate,
componentWrapperDecorator,
Meta,
moduleMetadata,
StoryObj
} from '@storybook/angular';
import {
ButtonComponent,
SidepanelComponent,
SidepanelFooterDirective,
SidepanelHeaderComponent,
SidepanelHeaderDirective,
SidepanelLayoutComponent,
SidepanelLayoutPanelDirective
} from '../../public-api';
const meta: Meta<SidepanelLayoutComponent> = {
title: 'Components/Sidepanel/Layout',
id: 'sidepanel-layout',
component: SidepanelLayoutComponent,
decorators: [
moduleMetadata({
imports: [
SidepanelComponent,
SidepanelFooterDirective,
SidepanelHeaderDirective,
SidepanelHeaderComponent,
SidepanelLayoutPanelDirective,
ButtonComponent,
CommonModule
]
}),
applicationConfig({
providers: [provideAnimations()]
}),
componentWrapperDecorator(
(story) => `
<div style="height: 80vh">${story}</div>
`
)
],
parameters: {
docs: {
description: {
component: 'This component is designed to display a panel beside or over a content, positioned to the right.'
},
imports: [
SidepanelComponent,
SidepanelFooterDirective,
SidepanelHeaderComponent,
SidepanelHeaderDirective,
SidepanelLayoutComponent,
SidepanelLayoutPanelDirective
]
}
},
argTypes: {
sidepanelVisibilityChange: {
control: {
type: null
}
}
}
};
export default meta;
type Story = StoryObj<SidepanelComponent>;
export const Basic: Story = {
render: (args) => ({
props: args,
template: `
<nj-sidepanel-layout ${argsToTemplate(
args
)} style="border: var(--nj-semantic-size-border-width) solid var(--nj-semantic-color-border-neutral-minimal);" #layout>
<div style="height: 100%; width: 100%; display: grid; place-items: center">
Main content
<nj-button (buttonClick)="layout.showPanel()">Open panel</nj-button>
</div>
<nj-sidepanel *njSidepanelLayoutPanel>
<nj-sidepanel-header *njSidepanelHeader title="Title" (closeIconClicked)="layout.hidePanel()"></nj-sidepanel-header>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque ducimus laboriosam nostrum quibusdam saepe, tempore vel veritatis? Consectetur doloremque ducimus eveniet iste, maiores, minus neque nesciunt qui quos tenetur unde?
<div *njSidepanelFooter style="display: flex; align-items: center; justify-content: flex-end;">
<nj-button (buttonClick)="layout.hidePanel()">Close pannel</nj-button>
</div>
</nj-sidepanel>
</nj-sidepanel-layout>
`
})
};