diff --git a/apps/angular-kits-doc/stories/ui-components/form-field/select/index.stories.ts b/apps/angular-kits-doc/stories/ui-components/form-field/select/index.stories.ts index 3b756260..301de90a 100644 --- a/apps/angular-kits-doc/stories/ui-components/form-field/select/index.stories.ts +++ b/apps/angular-kits-doc/stories/ui-components/form-field/select/index.stories.ts @@ -17,6 +17,10 @@ export { Default } from './overview/default.stories'; export { Size } from './overview/size.stories'; export { CustomPreview } from './overview/custom-preview.stories'; export { OptionGroup } from './overview/option-group.stories'; +export { Type } from './overview/type.stories'; +export { Color } from './overview/color.stories'; +export { WithNgModel } from './overview/withngmodel.stories'; +export { ReactiveForm } from './overview/reactiveform.stories'; const meta: StoriesMeta = { component: SelectComponent, diff --git a/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/color.stories.ts b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/color.stories.ts new file mode 100644 index 00000000..fd1dbd70 --- /dev/null +++ b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/color.stories.ts @@ -0,0 +1,57 @@ +import { SelectComponent } from '@cocokits/angular-form-field'; +import { CCK_CONTROL, renderWithPageTab, renderWithThemeProp } from '@cocokits/storybook-addon-theme'; +import { StoryObj } from '@cocokits/storybook-addon-theme-angular'; + +export const Color: StoryObj = { + name: 'Color', + parameters: { + docs: { + description: { + story: + 'The color is adjustable to match the design language or emphasize the Select field in the form', + }, + }, + cckAddon: { + renderConditions: [renderWithThemeProp('color'), renderWithPageTab('Overview')], + singleControls: ['type'], + source: [ + { + filename: 'example.component.html', + language: 'angular-html', + code: ` + <% themeComponentConfig.color.values.map(color => { %> + type='<%= type %>' <% } %> + > + Favorite food + + Steak + Pizza + Burger + + + <% }) %> + `, + }, + ], + controls: [CCK_CONTROL.type()], + }, + }, + render: (args) => ({ + props: { + ...args, + }, + template: ` + @for (color of cckControl.themeComponentConfig.color.values; let col = $index; track color) { + + Select - {{color}} + + Steak + Pizza + Burger + + + } + `, + }), +}; diff --git a/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/default.stories.ts b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/default.stories.ts index a643b599..ca97af7c 100644 --- a/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/default.stories.ts +++ b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/default.stories.ts @@ -57,7 +57,7 @@ export const Default: StoryObj = { ...args, }, template: ` - + @if(cckControl.label) { {{cckControl.label}} } diff --git a/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/option-group.stories.ts b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/option-group.stories.ts index 01930a07..6a4d99f2 100644 --- a/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/option-group.stories.ts +++ b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/option-group.stories.ts @@ -53,7 +53,7 @@ export const OptionGroup: StoryObj = { ...args, }, template: ` - + Favorite Food diff --git a/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/reactiveform.stories.ts b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/reactiveform.stories.ts new file mode 100644 index 00000000..194ac11d --- /dev/null +++ b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/reactiveform.stories.ts @@ -0,0 +1,65 @@ +import { moduleMetadata } from '@storybook/angular'; +import { ReactiveFormsModule, FormControl } from '@angular/forms'; +import { SelectComponent } from '@cocokits/angular-form-field'; +import { StoryObj } from '@cocokits/storybook-addon-theme-angular'; +import { CCK_CONTROL, renderWithPageTab, renderWithThemeProp } from '@cocokits/storybook-addon-theme'; + +export const ReactiveForm: StoryObj = { + name: 'With ReactiveForms', + parameters: { + docs: { + description: { + story: 'Integration with Angular Reactive Forms using FormControl', + }, + }, + cckAddon: { + renderConditions: [renderWithPageTab('Overview')], + singleControls: ['type'], + source: [ + { + filename: 'example.component.html', + language: 'angular-html', + code: ` + + Favorite food + + Steak + Pizza + Burger + + + +

Selected: {{ foodControl.value }}

+ `, + }, + ], + controls: [CCK_CONTROL.type()], + }, + }, + decorators: [ + moduleMetadata({ + imports: [ReactiveFormsModule], + }), + ], + render: (args) => { + const foodControl = new FormControl('Pizza'); + + return { + props: { + foodControl, + ...args, + }, + template: ` + + Favorite food + + Steak + Pizza + Burger + + +

Selected: {{ foodControl.value }}

+ `, + }; + }, +}; \ No newline at end of file diff --git a/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/size.stories.ts b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/size.stories.ts index 57d568f2..3f6a9728 100644 --- a/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/size.stories.ts +++ b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/size.stories.ts @@ -21,7 +21,6 @@ export const Size: StoryObj = { code: ` <% themeComponentConfig.size.values.map(size => { %> - type='<%= type %>' <% } %> @@ -46,9 +45,9 @@ export const Size: StoryObj = { }, template: ` @for (size of cckControl.themeComponentConfig.size.values; let col = $index; track size) { - + Select - {{size}} - + Steak Pizza Burger diff --git a/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/type.stories.ts b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/type.stories.ts new file mode 100644 index 00000000..a904e933 --- /dev/null +++ b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/type.stories.ts @@ -0,0 +1,58 @@ +import { SelectComponent } from '@cocokits/angular-form-field'; +import { CCK_CONTROL, renderWithPageTab, renderWithThemeProp } from '@cocokits/storybook-addon-theme'; +import { StoryObj } from '@cocokits/storybook-addon-theme-angular'; + +export const Type: StoryObj = { + name: 'Type', + parameters: { + docs: { + description: { + story: + 'The `type` property customizes the visual style of the select component, allowing for different appearances such as filled, outline, etc.', + }, + }, + cckAddon: { + renderConditions: [renderWithThemeProp('type'), renderWithPageTab('Overview')], + singleControls: ['size'], + source: [ + { + filename: 'example.component.html', + language: 'angular-html', + code: ` + <% themeComponentConfig.type.values.map(type => { %> + size='<%= size %>' <% } %> + > + Favorite food + + Steak + Pizza + Burger + + + <% }) %> + `, + }, + ], + controls: [CCK_CONTROL.size()], + }, + }, + render: (args) => ({ + props: { + ...args, + }, + template: ` + @for (type of cckControl.themeComponentConfig.type.values; track type) { + + Select - {{type}} + + Steak + Pizza + Burger + + + } + `, + }), +}; \ No newline at end of file diff --git a/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/withngmodel.stories.ts b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/withngmodel.stories.ts new file mode 100644 index 00000000..850be4a9 --- /dev/null +++ b/apps/angular-kits-doc/stories/ui-components/form-field/select/overview/withngmodel.stories.ts @@ -0,0 +1,68 @@ +import { moduleMetadata } from '@storybook/angular'; +import { FormsModule } from '@angular/forms'; +import { SelectComponent } from '@cocokits/angular-form-field'; +import { StoryObj } from '@cocokits/storybook-addon-theme-angular'; +import { CCK_CONTROL, renderWithPageTab, renderWithThemeProp } from '@cocokits/storybook-addon-theme'; + +export const WithNgModel: StoryObj = { + name: 'With ngModel', + parameters: { + docs: { + description: { + story: 'Use ngModel with the select component to enable two-way data binding.', + }, + }, + cckAddon: { + renderConditions: [renderWithPageTab('Overview')], + singleControls: ['type'], + controls: [CCK_CONTROL.type()], + source: [ + { + filename: 'example.component.html', + language: 'angular-html', + code: ` + + Select your food + + Steak + Pizza + Burger + + + +

+ You selected: {{ selectedValue }} +

+ `, + }, + ], + }, + }, + decorators: [ + moduleMetadata({ + imports: [FormsModule], + }), + ], + render: () => ({ + props: { + selectedValue: 'Pizza', + }, + template: ` + + Select your food + + Steak + Pizza + Burger + + +

+ You selected: {{ selectedValue }} +

+ `, + }), +}; \ No newline at end of file diff --git a/apps/angular-kits-doc/stories/ui-components/form-field/textarea/color.stories.ts b/apps/angular-kits-doc/stories/ui-components/form-field/textarea/color.stories.ts new file mode 100644 index 00000000..611dfb6c --- /dev/null +++ b/apps/angular-kits-doc/stories/ui-components/form-field/textarea/color.stories.ts @@ -0,0 +1,48 @@ +import { TextareaComponent } from '@cocokits/angular-form-field'; +import { renderWithPageTab, renderWithThemeProp } from '@cocokits/storybook-addon-theme'; +import { StoryObj } from '@cocokits/storybook-addon-theme-angular'; + +export const Color: StoryObj = { + name: 'Color', + parameters: { + docs: { + description: { + story: 'This demonstrates the different color variations of the textarea.', + }, + }, + cckAddon: { + renderConditions: [renderWithThemeProp('color'), renderWithPageTab('Overview')], + source: [ + { + filename: 'example.component.html', + language: 'angular-html', + code: ` + <% themeComponentConfig.color.values.map(color => { %> + + <%= color %> + + + <% }) %> + `, + }, + ], + }, + }, + render: (args) => ({ + props: { + ...args, + }, + template: ` + @for (color of cckControl.themeComponentConfig.color.values; let col = $index; track color) { + + {{color}} + + + } + `, + }), +}; \ No newline at end of file diff --git a/apps/angular-kits-doc/stories/ui-components/form-field/textarea/index.stories.ts b/apps/angular-kits-doc/stories/ui-components/form-field/textarea/index.stories.ts index 344fea56..6124bdc5 100644 --- a/apps/angular-kits-doc/stories/ui-components/form-field/textarea/index.stories.ts +++ b/apps/angular-kits-doc/stories/ui-components/form-field/textarea/index.stories.ts @@ -7,6 +7,9 @@ import descriptionMd from './description.md'; export { Default } from './default.stories'; export { AutoResize } from './auto-resize.stories'; +export { Color } from './color.stories'; +export { Size } from './size.stories'; +export { Type } from './type.stories'; const meta: StoriesMeta = { component: TextareaComponent, diff --git a/apps/angular-kits-doc/stories/ui-components/form-field/textarea/size.stories.ts b/apps/angular-kits-doc/stories/ui-components/form-field/textarea/size.stories.ts new file mode 100644 index 00000000..a6076084 --- /dev/null +++ b/apps/angular-kits-doc/stories/ui-components/form-field/textarea/size.stories.ts @@ -0,0 +1,48 @@ +import { TextareaComponent } from '@cocokits/angular-form-field'; +import { renderWithPageTab, renderWithThemeProp } from '@cocokits/storybook-addon-theme'; +import { StoryObj } from '@cocokits/storybook-addon-theme-angular'; + +export const Size: StoryObj = { + name: 'Size', + parameters: { + docs: { + description: { + story: 'This demonstrates the different size variations of the textarea.', + }, + }, + cckAddon: { + renderConditions: [renderWithThemeProp('size'), renderWithPageTab('Overview')], + source: [ + { + filename: 'example.component.html', + language: 'angular-html', + code: ` + <% themeComponentConfig.size.values.map(size => { %> + + <%= size %> + + + <% }) %> + `, + }, + ], + }, + }, + render: (args) => ({ + props: { + ...args, + }, + template: ` + @for (size of cckControl.themeComponentConfig.size.values; let index = $index; track size) { + + {{size}} + + + } + `, + }), +}; \ No newline at end of file diff --git a/apps/angular-kits-doc/stories/ui-components/form-field/textarea/type.stories.ts b/apps/angular-kits-doc/stories/ui-components/form-field/textarea/type.stories.ts new file mode 100644 index 00000000..2d20b75f --- /dev/null +++ b/apps/angular-kits-doc/stories/ui-components/form-field/textarea/type.stories.ts @@ -0,0 +1,48 @@ +import { TextareaComponent } from '@cocokits/angular-form-field'; +import { renderWithPageTab, renderWithThemeProp } from '@cocokits/storybook-addon-theme'; +import { StoryObj } from '@cocokits/storybook-addon-theme-angular'; + +export const Type: StoryObj = { + name: 'Type', + parameters: { + docs: { + description: { + story: 'This demonstrates the different type variations of the textarea.', + }, + }, + cckAddon: { + renderConditions: [renderWithThemeProp('type'), renderWithPageTab('Overview')], + source: [ + { + filename: 'example.component.html', + language: 'angular-html', + code: ` + <% themeComponentConfig.type.values.map(type => { %> + + <%= type %> + + + <% }) %> + `, + }, + ], + }, + }, + render: (args) => ({ + props: { + ...args, + }, + template: ` + @for (type of cckControl.themeComponentConfig.type.values; let index = $index; track type) { + + {{type}} + + + } + `, + }), +}; \ No newline at end of file diff --git a/apps/react-kits-doc/stories/ui-components/form-field/select/index.stories.ts b/apps/react-kits-doc/stories/ui-components/form-field/select/index.stories.ts index 1e83e473..74e2909b 100644 --- a/apps/react-kits-doc/stories/ui-components/form-field/select/index.stories.ts +++ b/apps/react-kits-doc/stories/ui-components/form-field/select/index.stories.ts @@ -6,7 +6,10 @@ import descriptionMd from './description.md?raw'; export { Default } from './overview/default.stories'; export { Options } from './overview/options.stories'; export { CustomPreview } from './overview/custom-preview.stories'; -// export { Size } from './size.stories'; +export { Type } from './overview/type.stories'; +export { Size } from './overview/size.stories'; +export { Color } from './overview/color.stories'; +export { ErrorState } from './overview/error-state.stories'; const meta: StoriesMeta = { component: Select, diff --git a/apps/react-kits-doc/stories/ui-components/form-field/select/overview/color.stories.tsx b/apps/react-kits-doc/stories/ui-components/form-field/select/overview/color.stories.tsx new file mode 100644 index 00000000..69dbf585 --- /dev/null +++ b/apps/react-kits-doc/stories/ui-components/form-field/select/overview/color.stories.tsx @@ -0,0 +1,62 @@ +import { FormField, Label, Option, Select } from '@cocokits/react-form-field'; +import { CCK_CONTROL, renderWithPageTab, renderWithThemeProp } from '@cocokits/storybook-addon-theme'; +import { StoryObj } from '@cocokits/storybook-addon-theme-react'; + +export const Color: StoryObj = { + name: 'Color', + parameters: { + docs: { + description: { + story: 'The color is adjustable to match the design language or emphasize the Select field in the form', + }, + }, + cckAddon: { + renderConditions: [renderWithThemeProp('color'), renderWithPageTab('Overview')], + singleControls: ['type'], + source: [ + { + filename: 'Source Code', + language: 'tsx', + code: ` + import { FormField, Label, Option, Select } from "@cocokits/react-components"; + export const MyComponent = () => { + return ( + <> + <% themeComponentConfig.color.values.map(color => { %> + + + + + <% }) %> + + ); + } + `, + }, + ], + controls: [CCK_CONTROL.type()], + }, + }, + + render: (args) => ( + <> + {args.cckControl.themeComponentConfig.color?.values.map((color, index) => ( + + + + + ))} + + ), +}; diff --git a/apps/react-kits-doc/stories/ui-components/form-field/select/overview/default.stories.tsx b/apps/react-kits-doc/stories/ui-components/form-field/select/overview/default.stories.tsx index af0e3e0f..f2ab3b24 100644 --- a/apps/react-kits-doc/stories/ui-components/form-field/select/overview/default.stories.tsx +++ b/apps/react-kits-doc/stories/ui-components/form-field/select/overview/default.stories.tsx @@ -70,7 +70,7 @@ export const Default: StoryObj = { }, }, render: (args) => ( - + {args.cckControl.label && } + + + + + + ); + }; + `, + }, + ], + }, + }, + render: () => ( + + + + + ), +}; diff --git a/apps/react-kits-doc/stories/ui-components/form-field/select/overview/size.stories.tsx b/apps/react-kits-doc/stories/ui-components/form-field/select/overview/size.stories.tsx new file mode 100644 index 00000000..79c05494 --- /dev/null +++ b/apps/react-kits-doc/stories/ui-components/form-field/select/overview/size.stories.tsx @@ -0,0 +1,62 @@ +import { FormField, Label, Option, Select } from '@cocokits/react-form-field'; +import { CCK_CONTROL, renderWithPageTab, renderWithThemeProp } from '@cocokits/storybook-addon-theme'; +import { StoryObj } from '@cocokits/storybook-addon-theme-react'; + +export const Size: StoryObj = { + name: 'Size', + parameters: { + docs: { + description: { + story: + 'The size is adjustable to suit different design needs and screen dimensions, improving both aesthetics and usability.', + }, + }, + cckAddon: { + renderConditions: [renderWithThemeProp('size'), renderWithPageTab('Overview')], + singleControls: ['type'], + source: [ + { + filename: 'Source Code', + language: 'tsx', + code: ` + import { FormField, Label, Option, Select } from "@cocokits/react-components"; + export const MyComponent = () => { + return ( + <> + <% themeComponentConfig.size.values.map(size => { %> + + + + + <% }) %> + + ); + } + `, + }, + ], + controls: [CCK_CONTROL.type()], + }, + }, + render: (args) => ( + <> + {args.cckControl.themeComponentConfig.size?.values.map((size, index) => ( + + + + + ))} + + ), +}; diff --git a/apps/react-kits-doc/stories/ui-components/form-field/select/overview/type.stories.tsx b/apps/react-kits-doc/stories/ui-components/form-field/select/overview/type.stories.tsx new file mode 100644 index 00000000..550ac954 --- /dev/null +++ b/apps/react-kits-doc/stories/ui-components/form-field/select/overview/type.stories.tsx @@ -0,0 +1,58 @@ +import { FormField, Label, Option, Select } from '@cocokits/react-form-field'; +import { renderWithPageTab, renderWithThemeProp } from '@cocokits/storybook-addon-theme'; +import { StoryObj } from '@cocokits/storybook-addon-theme-react'; + +export const Type: StoryObj = { + name: 'Type', + parameters: { + docs: { + description: { + story: + 'The type prop adjusts the visual style of the Select component, allowing for different UI purposes like default, secondary, or ghost.', + }, + }, + cckAddon: { + renderConditions: [renderWithThemeProp('type'), renderWithPageTab('Overview')], + source: [ + { + filename: 'Source Code', + language: 'tsx', + code: ` + import { FormField, Label, Option, Select } from "@cocokits/react-components"; + + export const MyComponent = () => { + return ( + <> + <% themeComponentConfig.type.values.map(type => { %> + + + + + <% }) %> + + ); + } + `, + }, + ], + }, + }, + render: (args) => ( + <> + {args.cckControl.themeComponentConfig.type?.values.map((type, index) => ( + + + + + ))} + + ), +}; diff --git a/apps/react-kits-doc/stories/ui-components/form-field/textarea/index.stories.ts b/apps/react-kits-doc/stories/ui-components/form-field/textarea/index.stories.ts index eb68cb78..acd18c84 100644 --- a/apps/react-kits-doc/stories/ui-components/form-field/textarea/index.stories.ts +++ b/apps/react-kits-doc/stories/ui-components/form-field/textarea/index.stories.ts @@ -4,6 +4,11 @@ import { StoriesMeta } from '@cocokits/storybook-addon-theme-react'; import descriptionMd from './description.md?raw'; export { Default } from './overview/default.stories'; +export { ErrorState } from './overview/error-state.stories'; +export { AutoResize } from './overview/autoresize.stories'; +export { Color } from './overview/color.stories'; +export { Size } from './overview/size.stories'; +export { Type } from './overview/type.stories'; const meta: StoriesMeta = { component: Textarea, diff --git a/apps/react-kits-doc/stories/ui-components/form-field/textarea/overview/autoresize.stories.tsx b/apps/react-kits-doc/stories/ui-components/form-field/textarea/overview/autoresize.stories.tsx new file mode 100644 index 00000000..02c54c2f --- /dev/null +++ b/apps/react-kits-doc/stories/ui-components/form-field/textarea/overview/autoresize.stories.tsx @@ -0,0 +1,50 @@ +import { FormField, Label, Textarea } from '@cocokits/react-components'; +import { renderWithPageTab } from '@cocokits/storybook-addon-theme'; +import { StoryObj } from '@cocokits/storybook-addon-theme-react'; + +export const AutoResize: StoryObj = { + name: 'Auto Resize', + parameters: { + docs: { + description: { + story: + 'This demonstrates the textarea with the autoResize property enabled, allowing it to automatically adjust its height based on content.', + }, + }, + cckAddon: { + renderConditions: [renderWithPageTab('Overview')], + source: [ + { + filename: 'Source Code', + language: 'tsx', + code: ` + import { FormField, Label, Textarea } from "@cocokits/react-components"; + export const MyComponent = () => { + return ( + <> + + + + + + ); + } + `, + }, + ], + }, + }, + render: () => ( + <> + + + + + + <% }) %> + + ); + } + `, + }, + ], + }, + }, + render: (args) => ( + <> + {args.cckControl.themeComponentConfig.color?.values.map((color, index) => ( + + + + + + <% }) %> + + ); + } + `, + }, + ], + }, + }, + render: (args) => ( + <> + {args.cckControl.themeComponentConfig.size?.values.map((size, index) => ( + + + + + + <% }) %> + + ); + } + `, + }, + ], + }, + }, + render: (args) => ( + <> + {args.cckControl.themeComponentConfig.type?.values.map((type, index) => ( + + +