diff --git a/cubic.yaml b/cubic.yaml index ceaf62262a8..52923b369b3 100644 --- a/cubic.yaml +++ b/cubic.yaml @@ -40,6 +40,14 @@ reviews: - Version files Approve if reasonably tested. Let humans handle edge cases. + + ## Step 4: Design System Tokens + + For any hard-coded visual values in CSS (colors, shadows, spacing), check + `@n8n/design-system/src/css/_primitives.scss` and + `@n8n/design-system/src/css/_tokens.scss` for an appropriate alternative. + If one exists, suggest using it. If none exist, ask why the hard-coded + value is required. custom_rules: - name: Tests description: |- @@ -187,9 +195,15 @@ reviews: - Higher scrutiny for: expression engine, credential handling, code execution nodes, license enforcement, SSO integrations - Consider n8n's security audit categories: credentials, database, nodes, instance, filesystem risks - Community/custom nodes have higher risk profile than official nodes + - name: Design System Tokens + description: |- + For any hard-coded visual values in CSS (colors, shadows, spacing), + check `@n8n/design-system/src/css/_primitives.scss` and + `@n8n/design-system/src/css/_tokens.scss` for an appropriate alternative. + If one exists, suggest using it. If none exist, ask why the hard-coded + value is required. pr_descriptions: generate: false instructions: Each PR is supposed to have a limited scope. In your review, focus on changes made in the PR and avoid pointing out problems you found in the code that already existed. issues: fix_with_cubic_buttons: true - diff --git a/packages/frontend/@n8n/design-system/src/components/DateRangePicker/DateRangePicker.stories.ts b/packages/frontend/@n8n/design-system/src/components/DateRangePicker/DateRangePicker.stories.ts index 3177e52f781..3b42d164e95 100644 --- a/packages/frontend/@n8n/design-system/src/components/DateRangePicker/DateRangePicker.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/DateRangePicker/DateRangePicker.stories.ts @@ -4,7 +4,7 @@ import DateRangePicker from './DateRangePicker.vue'; const meta = { component: DateRangePicker, - title: 'Components v2/DateRangePicker', + title: 'Experimental/DateRangePicker', } satisfies Meta; export default meta; diff --git a/packages/frontend/@n8n/design-system/src/components/IconTextButton/IconTextButton.stories.ts b/packages/frontend/@n8n/design-system/src/components/IconTextButton/IconTextButton.stories.ts index 7fb555c9feb..d49643877df 100644 --- a/packages/frontend/@n8n/design-system/src/components/IconTextButton/IconTextButton.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/IconTextButton/IconTextButton.stories.ts @@ -4,7 +4,7 @@ import { action } from 'storybook/actions'; import IconTextButton from './IconTextButton.vue'; export default { - title: 'Atoms/IconTextButton', + title: 'Core/IconTextButton', component: IconTextButton, argTypes: { icon: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nActionBox/ActionBox.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nActionBox/ActionBox.stories.ts index d7aa4a8bf71..626137960ad 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nActionBox/ActionBox.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nActionBox/ActionBox.stories.ts @@ -6,7 +6,7 @@ import N8nLink from '../N8nLink'; import N8nText from '../N8nText'; export default { - title: 'Atoms/ActionBox', + title: 'Core/ActionBox', component: N8nActionBox, argTypes: { calloutTheme: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nActionDropdown/ActionDropdown.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nActionDropdown/ActionDropdown.stories.ts index 57b2b54fd2e..b70f515cef8 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nActionDropdown/ActionDropdown.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nActionDropdown/ActionDropdown.stories.ts @@ -3,7 +3,7 @@ import type { StoryFn } from '@storybook/vue3-vite'; import N8nActionDropdown from './ActionDropdown.vue'; export default { - title: 'Atoms/ActionDropdown', + title: 'Core/ActionDropdown', component: N8nActionDropdown, argTypes: { placement: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nActionToggle/ActionToggle.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nActionToggle/ActionToggle.stories.ts index 6aedd411a4d..e1a2757679b 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nActionToggle/ActionToggle.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nActionToggle/ActionToggle.stories.ts @@ -4,7 +4,7 @@ import { action } from 'storybook/actions'; import N8nActionToggle from './ActionToggle.vue'; export default { - title: 'Atoms/ActionToggle', + title: 'Core/ActionToggle', component: N8nActionToggle, argTypes: { placement: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nAlert/Alert.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nAlert/Alert.stories.ts index 15ea52c491d..2e22d8f831a 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nAlert/Alert.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nAlert/Alert.stories.ts @@ -4,7 +4,7 @@ import N8nAlert from './Alert.vue'; import N8nIcon from '../N8nIcon'; export default { - title: 'Atoms/Alert', + title: 'Core/Alert', component: N8nAlert, argTypes: { type: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nAlertDialog/AlertDialog.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nAlertDialog/AlertDialog.stories.ts index 9b8c3198d14..62b30440b8e 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nAlertDialog/AlertDialog.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nAlertDialog/AlertDialog.stories.ts @@ -5,7 +5,7 @@ import { N8nAlertDialog } from '@n8n/design-system/components/N8nAlertDialog'; import N8nButton from '@n8n/design-system/components/N8nButton/Button.vue'; const meta = { - title: 'Components/N8nAlertDialog', + title: 'Core/AlertDialog', component: N8nAlertDialog, parameters: { docs: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nAvatar/Avatar.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nAvatar/Avatar.stories.ts index 8cd47ef300b..6f61ccb7906 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nAvatar/Avatar.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nAvatar/Avatar.stories.ts @@ -3,7 +3,7 @@ import type { StoryFn } from '@storybook/vue3-vite'; import N8nAvatar from './Avatar.vue'; export default { - title: 'Atoms/Avatar', + title: 'Core/Avatar', component: N8nAvatar, argTypes: { size: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nBadge/Badge.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nBadge/Badge.stories.ts index ed6fa212ec6..1b4044424da 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nBadge/Badge.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nBadge/Badge.stories.ts @@ -3,7 +3,7 @@ import type { StoryFn } from '@storybook/vue3-vite'; import N8nBadge from './Badge.vue'; export default { - title: 'Atoms/Badge', + title: 'Core/Badge', component: N8nBadge, argTypes: { theme: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nBlockUi/BlockUi.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nBlockUi/BlockUi.stories.ts index c297bbecd57..3cbee3a06df 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nBlockUi/BlockUi.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nBlockUi/BlockUi.stories.ts @@ -3,7 +3,7 @@ import type { StoryFn } from '@storybook/vue3-vite'; import N8nBlockUi from './BlockUi.vue'; export default { - title: 'Atoms/BlockUI', + title: 'Core/BlockUI', component: N8nBlockUi, }; diff --git a/packages/frontend/@n8n/design-system/src/components/N8nBreadcrumbs/Breadcrumbs.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nBreadcrumbs/Breadcrumbs.stories.ts index 7b7a6ee5c43..671fc907449 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nBreadcrumbs/Breadcrumbs.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nBreadcrumbs/Breadcrumbs.stories.ts @@ -9,7 +9,7 @@ import ActionToggle from '../N8nActionToggle/ActionToggle.vue'; import Tags from '../N8nTags/Tags.vue'; export default { - title: 'Atoms/Breadcrumbs', + title: 'Core/Breadcrumbs', component: Breadcrumbs, argTypes: { items: { control: 'object' }, diff --git a/packages/frontend/@n8n/design-system/src/components/N8nButton/Button.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nButton/Button.stories.ts index b1d4438a77d..a29dd753081 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nButton/Button.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nButton/Button.stories.ts @@ -4,7 +4,7 @@ import N8nButton from './Button.vue'; import N8nIcon from '../N8nIcon/Icon.vue'; const meta = { - title: 'Atoms/Button', + title: 'Core/Button', component: N8nButton, argTypes: { variant: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nButton/Button.vue b/packages/frontend/@n8n/design-system/src/components/N8nButton/Button.vue index b0862c1bab9..d0b9d6b4b2a 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nButton/Button.vue +++ b/packages/frontend/@n8n/design-system/src/components/N8nButton/Button.vue @@ -186,35 +186,35 @@ const handleClick = (event: MouseEvent) => { } &.xsmall { - --button--height: 1.5rem; + --button--height: var(--height--xs); --button--padding: 0 var(--spacing--2xs); --button--radius: var(--radius--3xs); --button--font-size: var(--font-size--2xs); } &.small { - --button--height: 1.75rem; + --button--height: var(--height--sm); --button--padding: 0 var(--spacing--xs); --button--radius: var(--radius--3xs); --button--font-size: var(--font-size--xs); } &.medium { - --button--height: 2rem; + --button--height: var(--height--md); --button--padding: 0 var(--spacing--xs); --button--radius: var(--radius--3xs); --button--font-size: var(--font-size--sm); } &.large { - --button--height: 2.25rem; + --button--height: var(--height--lg); --button--padding: 0 var(--spacing--sm); --button--radius: var(--radius--2xs); --button--font-size: var(--font-size--sm); } &.xlarge { - --button--height: 2.5rem; + --button--height: var(--height--xl); --button--padding: 0 var(--spacing--sm); --button--radius: var(--radius--xs); --button--font-size: var(--font-size--md); @@ -251,7 +251,7 @@ const handleClick = (event: MouseEvent) => { ); --button--shadow: 0 1px 3px light-dark(var(--color--black-alpha-100), var(--color--black-alpha-300)), - 0 0 0 1px light-dark(transparent, var(--color--black-alpha-100)); + 0 0 0 1.5px light-dark(transparent, var(--color--black-alpha-100)); --button--shadow--hover: 0 1px 3px 0 light-dark(var(--color--black-alpha-200), var(--color--black-alpha-300)), 0 0 0 1px light-dark(transparent, var(--color--black-alpha-100)); diff --git a/packages/frontend/@n8n/design-system/src/components/N8nCallout/Callout.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nCallout/Callout.stories.ts index 7c92f2e41db..ed8ca08c4eb 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nCallout/Callout.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nCallout/Callout.stories.ts @@ -5,7 +5,7 @@ import N8nLink from '../N8nLink'; import N8nText from '../N8nText'; export default { - title: 'Atoms/Callout', + title: 'Core/Callout', component: N8nCallout, argTypes: { theme: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nCard/Card.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nCard/Card.stories.ts index e6362c7e1ee..3abd0d5fdbd 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nCard/Card.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nCard/Card.stories.ts @@ -6,7 +6,7 @@ import N8nIcon from '../N8nIcon/Icon.vue'; import N8nText from '../N8nText/Text.vue'; export default { - title: 'Atoms/Card', + title: 'Core/Card', component: N8nCard, }; diff --git a/packages/frontend/@n8n/design-system/src/components/N8nCircleLoader/CircleLoader.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nCircleLoader/CircleLoader.stories.ts index e95ce8ec2f3..cf9882a99fb 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nCircleLoader/CircleLoader.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nCircleLoader/CircleLoader.stories.ts @@ -3,7 +3,7 @@ import type { StoryFn } from '@storybook/vue3-vite'; import N8nCircleLoader from './CircleLoader.vue'; export default { - title: 'Atoms/CircleLoader', + title: 'Core/CircleLoader', component: N8nCircleLoader, argTypes: { radius: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nCollapsiblePanel/CollapsiblePanel.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nCollapsiblePanel/CollapsiblePanel.stories.ts index 0fe399adfd1..1333d90251c 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nCollapsiblePanel/CollapsiblePanel.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nCollapsiblePanel/CollapsiblePanel.stories.ts @@ -9,7 +9,7 @@ import N8nOption from '../N8nOption'; import N8nSelect from '../N8nSelect'; export default { - title: 'Atoms/CollapsiblePanel', + title: 'Core/CollapsiblePanel', component: N8nCollapsiblePanel, argTypes: { modelValue: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nColorPicker/ColorPicker.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nColorPicker/ColorPicker.stories.ts index 80ac5f2778b..0b6fdf67d4f 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nColorPicker/ColorPicker.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nColorPicker/ColorPicker.stories.ts @@ -4,7 +4,7 @@ import { action } from 'storybook/actions'; import N8nColorPicker from './ColorPicker.vue'; export default { - title: 'Atoms/ColorPicker', + title: 'Core/ColorPicker', component: N8nColorPicker, argTypes: { disabled: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nCommandBar/CommandBar.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nCommandBar/CommandBar.stories.ts index 3137995e085..cd525327c4c 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nCommandBar/CommandBar.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nCommandBar/CommandBar.stories.ts @@ -101,7 +101,7 @@ const sampleItems = [ ]; export default { - title: 'Molecules/CommandBar', + title: 'Core/CommandBar', component: N8nCommandBar, argTypes: { placeholder: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nDatatable/Datatable.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nDatatable/Datatable.stories.ts index effe228810a..ab462dcead8 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nDatatable/Datatable.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nDatatable/Datatable.stories.ts @@ -4,7 +4,7 @@ import { rows, columns } from './__tests__/data'; import N8nDatatable from './Datatable.vue'; export default { - title: 'Atoms/Datatable', + title: 'Core/Datatable', component: N8nDatatable, }; diff --git a/packages/frontend/@n8n/design-system/src/components/N8nDialog/Dialog.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nDialog/Dialog.stories.ts index 78cb5cee4b1..20607145688 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nDialog/Dialog.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nDialog/Dialog.stories.ts @@ -13,7 +13,7 @@ import { } from '@n8n/design-system/components/N8nDialog'; const meta = { - title: 'Components/Dialog', + title: 'Core/Dialog', // Use N8nDialog as component; docgen may have issues with reka-ui imports but types must match component: N8nDialog, parameters: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nDropdown/Dropdown.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nDropdown/Dropdown.stories.ts index 48caa2ace6c..faad32938a3 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nDropdown/Dropdown.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nDropdown/Dropdown.stories.ts @@ -7,7 +7,7 @@ import N8nDropdown from './Dropdown.vue'; import type { N8nDropdownOption } from './Dropdown.vue'; export default { - title: 'Atoms/Dropdown', + title: 'Core/Dropdown', component: N8nDropdown, argTypes: {}, parameters: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nExternalLink/ExternalLink.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nExternalLink/ExternalLink.stories.ts index 2b048186dff..677ab7d9323 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nExternalLink/ExternalLink.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nExternalLink/ExternalLink.stories.ts @@ -3,7 +3,7 @@ import type { StoryFn } from '@storybook/vue3-vite'; import N8nExternalLink from './ExternalLink.vue'; export default { - title: 'Atoms/ExternalLink', + title: 'Core/ExternalLink', component: N8nExternalLink, argTypes: { size: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nFormBox/FormBox.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nFormBox/FormBox.stories.ts index 5b6a866e336..31f88700dec 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nFormBox/FormBox.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nFormBox/FormBox.stories.ts @@ -4,7 +4,7 @@ import { action } from 'storybook/actions'; import N8nFormBox from './FormBox.vue'; export default { - title: 'Modules/FormBox', + title: 'Core/FormBox', component: N8nFormBox, argTypes: {}, parameters: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nFormInput/FormInput.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nFormInput/FormInput.stories.ts index 75566133f3a..d5f725d5379 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nFormInput/FormInput.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nFormInput/FormInput.stories.ts @@ -4,7 +4,7 @@ import { action } from 'storybook/actions'; import N8nFormInput from './FormInput.vue'; export default { - title: 'Modules/FormInput', + title: 'Core/FormInput', component: N8nFormInput, argTypes: {}, }; diff --git a/packages/frontend/@n8n/design-system/src/components/N8nFormInputs/FormInputs.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nFormInputs/FormInputs.stories.ts index 254d2d0d8d1..9c2b05077ad 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nFormInputs/FormInputs.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nFormInputs/FormInputs.stories.ts @@ -4,7 +4,7 @@ import { action } from 'storybook/actions'; import N8nFormInputs from './FormInputs.vue'; export default { - title: 'Modules/FormInputs', + title: 'Core/FormInputs', component: N8nFormInputs, argTypes: {}, parameters: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nHeading/Heading.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nHeading/Heading.stories.ts index 6a00731479d..6b011f573a2 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nHeading/Heading.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nHeading/Heading.stories.ts @@ -3,7 +3,7 @@ import type { StoryFn } from '@storybook/vue3-vite'; import N8nHeading from './Heading.vue'; export default { - title: 'Atoms/Heading', + title: 'Core/Heading', component: N8nHeading, argTypes: { size: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nIcon/Icon.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nIcon/Icon.stories.ts index 33c36abe79d..185c018a6cd 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nIcon/Icon.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nIcon/Icon.stories.ts @@ -3,7 +3,7 @@ import type { StoryFn } from '@storybook/vue3-vite'; import N8nIcon from './Icon.vue'; export default { - title: 'Atoms/Icon', + title: 'Core/Icon', component: N8nIcon, argTypes: { icon: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nIconButton/IconButton.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nIconButton/IconButton.stories.ts index 949abec41bd..b1d1dac2863 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nIconButton/IconButton.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nIconButton/IconButton.stories.ts @@ -4,7 +4,7 @@ import { action } from 'storybook/actions'; import N8nIconButton from './IconButton.vue'; export default { - title: 'Atoms/Icon Button', + title: 'Core/Icon Button', component: N8nIconButton, argTypes: { type: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nIconPicker/IconPicker.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nIconPicker/IconPicker.stories.ts index da0a1f5ac71..32c7dbf6b72 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nIconPicker/IconPicker.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nIconPicker/IconPicker.stories.ts @@ -5,7 +5,7 @@ import N8nIconPicker from './IconPicker.vue'; import { type IconOrEmoji } from './types'; export default { - title: 'Atoms/Icon Picker', + title: 'Core/Icon Picker', component: N8nIconPicker, argTypes: { buttonTooltip: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nInfoAccordion/InfoAccordion.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nInfoAccordion/InfoAccordion.stories.ts index 45a506ce0e6..b4c2f073980 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nInfoAccordion/InfoAccordion.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nInfoAccordion/InfoAccordion.stories.ts @@ -4,7 +4,7 @@ import { action } from 'storybook/actions'; import N8nInfoAccordion from './InfoAccordion.vue'; export default { - title: 'Atoms/Info Accordion', + title: 'Core/Info Accordion', component: N8nInfoAccordion, argTypes: {}, parameters: { diff --git a/packages/frontend/@n8n/design-system/src/components/N8nInfoTip/InfoTip.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nInfoTip/InfoTip.stories.ts index dbdb2807b50..bab78722ce2 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nInfoTip/InfoTip.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nInfoTip/InfoTip.stories.ts @@ -3,7 +3,7 @@ import type { StoryFn } from '@storybook/vue3-vite'; import N8nInfoTip from './InfoTip.vue'; export default { - title: 'Atoms/InfoTip', + title: 'Core/InfoTip', component: N8nInfoTip, }; diff --git a/packages/frontend/@n8n/design-system/src/components/N8nInlineTextEdit/InlineTextEdit.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nInlineTextEdit/InlineTextEdit.stories.ts index 435c7745fde..e76c89c20f3 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nInlineTextEdit/InlineTextEdit.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nInlineTextEdit/InlineTextEdit.stories.ts @@ -3,7 +3,7 @@ import type { StoryFn } from '@storybook/vue3-vite'; import InlineTextEdit from './InlineTextEdit.vue'; export default { - title: 'Atoms/InlineTextEdit', + title: 'Core/InlineTextEdit', component: InlineTextEdit, }; diff --git a/packages/frontend/@n8n/design-system/src/components/N8nInput/Input.stories.ts b/packages/frontend/@n8n/design-system/src/components/N8nInput/Input.stories.ts index 9842c81b2bc..f405fb6b239 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nInput/Input.stories.ts +++ b/packages/frontend/@n8n/design-system/src/components/N8nInput/Input.stories.ts @@ -1,14 +1,69 @@ import type { Meta, StoryObj } from '@storybook/vue3-vite'; import { ref } from 'vue'; +import N8nButton from '@n8n/design-system/components/N8nButton/Button.vue'; import N8nIcon from '@n8n/design-system/components/N8nIcon/Icon.vue'; import Input from './Input.vue'; +import type { InputProps } from './Input.types'; import './Input.stories.css'; const meta = { - title: 'Atoms/Input', + title: 'Core/Input', component: Input, + argTypes: { + type: { + control: 'select', + options: ['text', 'textarea', 'password', 'number', 'email'], + }, + size: { + control: 'select', + options: ['xlarge', 'large', 'medium', 'small', 'mini'], + }, + disabled: { + control: 'boolean', + }, + readonly: { + control: 'boolean', + }, + clearable: { + control: 'boolean', + }, + autosize: { + control: 'boolean', + }, + autofocus: { + control: 'boolean', + }, + rows: { + control: 'number', + }, + maxlength: { + control: 'number', + }, + placeholder: { + control: 'text', + }, + modelValue: { + control: 'text', + }, + autocomplete: { + control: 'select', + options: [ + 'off', + 'on', + 'new-password', + 'current-password', + 'given-name', + 'family-name', + 'one-time-code', + 'email', + ], + }, + name: { + control: 'text', + }, + }, parameters: { docs: { source: { type: 'dynamic' }, @@ -20,7 +75,7 @@ export default meta; type Story = StoryObj; export const Text = { - render: (args) => ({ + render: (args: InputProps) => ({ components: { Input }, setup() { const value = ref(args.modelValue); @@ -40,7 +95,7 @@ export const Text = { } satisfies Story; export const TextareaFixedRows = { - render: (args) => ({ + render: (args: InputProps) => ({ components: { Input }, setup() { const value = ref(args.modelValue); @@ -61,7 +116,7 @@ export const TextareaFixedRows = { } satisfies Story; export const TextareaAutosize = { - render: (args) => ({ + render: (args: InputProps) => ({ components: { Input }, setup() { const value = ref(args.modelValue); @@ -82,7 +137,7 @@ export const TextareaAutosize = { } satisfies Story; export const TextareaAutosizeMinMax = { - render: (args) => ({ + render: (args: InputProps) => ({ components: { Input }, setup() { const value = ref(args.modelValue); @@ -103,7 +158,7 @@ export const TextareaAutosizeMinMax = { } satisfies Story; export const Password = { - render: (args) => ({ + render: (args: InputProps) => ({ components: { Input }, setup() { const value = ref(args.modelValue); @@ -123,7 +178,7 @@ export const Password = { } satisfies Story; export const WithPrefixSlot = { - render: (args) => ({ + render: (args: InputProps) => ({ components: { Input, N8nIcon }, setup() { const value = ref(args.modelValue); @@ -146,7 +201,7 @@ export const WithPrefixSlot = { } satisfies Story; export const WithSuffixSlot = { - render: (args) => ({ + render: (args: InputProps) => ({ components: { Input, N8nIcon }, setup() { const value = ref(args.modelValue); @@ -169,7 +224,7 @@ export const WithSuffixSlot = { } satisfies Story; export const WithPrefixAndSuffixSlots = { - render: (args) => ({ + render: (args: InputProps) => ({ components: { Input, N8nIcon }, setup() { const value = ref(args.modelValue); @@ -195,7 +250,7 @@ export const WithPrefixAndSuffixSlots = { } satisfies Story; export const Clearable = { - render: (args) => ({ + render: (args: InputProps) => ({ components: { Input }, setup() { const value = ref(args.modelValue); @@ -215,7 +270,7 @@ export const Clearable = { } satisfies Story; export const Disabled = { - render: (args) => ({ + render: (args: InputProps) => ({ components: { Input }, setup() { const value = ref(args.modelValue); @@ -236,7 +291,7 @@ export const Disabled = { } satisfies Story; export const Sizes = { - render: (args) => ({ + render: (args: InputProps) => ({ components: { Input }, setup() { const value = ref(args.modelValue); @@ -244,16 +299,38 @@ export const Sizes = { }, template: `
-

xlarge (48px)

- -

large (40px) - default

- -

medium (36px)

- -

small (28px)

- -

mini (22px)

- +
+
+ + + xlarge (40px) + +
+
+ + + large (36px) + +
+
+ + + medium (32px) + +
+
+ + + small (28px) + +
+
+ + + mini (24px) + +
+
`, }), @@ -262,3 +339,33 @@ export const Sizes = { modelValue: '', }, } satisfies Story; + +export const InlineWithButton = { + render: (args: InputProps) => ({ + components: { Input, N8nButton }, + setup() { + const primaryValue = ref(args.modelValue); + const secondaryValue = ref(''); + return { args, primaryValue, secondaryValue }; + }, + template: ` +
+
+ + Search +
+
+ + Invite +
+
+ `, + }), + args: { + placeholder: 'Search workflows', + modelValue: '', + size: 'large', + }, +} satisfies Story; diff --git a/packages/frontend/@n8n/design-system/src/components/N8nInput/Input.vue b/packages/frontend/@n8n/design-system/src/components/N8nInput/Input.vue index 418d09b673b..d7d09a13760 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nInput/Input.vue +++ b/packages/frontend/@n8n/design-system/src/components/N8nInput/Input.vue @@ -377,11 +377,64 @@ defineExpose({ focus, blur, select });