import { Component, Input } from "@angular/core"; import { FormsModule, ReactiveFormsModule, FormBuilder, Validators, FormGroup, FormControl, } from "@angular/forms"; import { Meta, StoryObj, moduleMetadata } from "@storybook/angular"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { BadgeModule } from "../badge"; import { FormControlModule } from "../form-control"; import { TableModule } from "../table"; import { I18nMockService } from "../utils/i18n-mock.service"; import { CheckboxModule } from "./checkbox.module"; const template = /*html*/ `
Click me
`; @Component({ selector: "app-example", template, }) class ExampleComponent { protected formObj = this.formBuilder.group({ checkbox: [false, Validators.requiredTrue], }); @Input() set checked(value: boolean) { this.formObj.patchValue({ checkbox: value }); } @Input() set disabled(disable: boolean) { if (disable) { this.formObj.disable(); } else { this.formObj.enable(); } } constructor(private formBuilder: FormBuilder) {} } export default { title: "Component Library/Form/Checkbox", decorators: [ moduleMetadata({ declarations: [ExampleComponent], imports: [ FormsModule, ReactiveFormsModule, FormControlModule, CheckboxModule, TableModule, BadgeModule, ], providers: [ { provide: I18nService, useFactory: () => { return new I18nMockService({ required: "required", inputRequired: "Input is required.", inputEmail: "Input is not an email-address.", }); }, }, ], }), ], parameters: { design: { type: "figma", url: "https://www.figma.com/design/Zt3YSeb6E6lebAffrNLa0h/Tailwind-Component-Library?node-id=16329-35837&t=b5tDKylm5sWm2yKo-4", }, }, } as Meta; type Story = StoryObj; export const Default: Story = { render: (args) => ({ props: args, template: /*html*/ ` `, }), parameters: { docs: { source: { code: template, }, }, }, }; export const LongLabel: Story = { render: () => ({ props: { formObj: new FormGroup({ checkbox: new FormControl(false), }), }, template: /*html*/ `
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur iaculis consequat enim vitae elementum. Ut non odio est. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur iaculis consequat enim vitae elementum. Ut non odio est. Premium
`, }), parameters: { docs: { source: { code: template, }, }, }, }; export const Hint: Story = { render: (args) => ({ props: { formObj: new FormGroup({ checkbox: new FormControl(false), }), }, template: /*html*/ `
Really long value that never ends. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur iaculis consequat enim vitae elementum. Ut non odio est. Duis eu nisi ultrices, porttitor lorem eget, ornare libero. Fusce ex ante, consequat ac sem et, euismod placerat tellus.
`, }), parameters: { docs: { source: { code: template, }, }, }, args: { checked: false, disabled: false, }, }; export const Disabled: Story = { render: (args) => ({ props: args, template: /*html*/ ` `, }), parameters: { docs: { source: { code: template, }, }, }, }; export const Custom: Story = { render: (args) => ({ props: args, template: /*html*/ `
`, }), }; export const Indeterminate: Story = { render: (args) => ({ props: args, template: /*html*/ ` `, }), }; export const InTableRow: Story = { render: () => ({ template: /*html*/ ` Foo Bar Lorem Ipsum `, }), };