From 2ef354447db0446f51806a7032017e99ca9e139f Mon Sep 17 00:00:00 2001 From: Dante Date: Tue, 10 Mar 2026 11:49:47 +0900 Subject: [PATCH] feat: add Storybook stories for Slider components (#9634) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Add Storybook stories for `Slider` component matching Figma design system variants 1:1 - Stories at `Components/Slider`: **Default** and **Disabled** - Add hover background (`hover:bg-component-node-widget-background-hovered`) to `WidgetInputNumberSlider` only ## Figma reference [Comfy Design System — Slider](https://www.figma.com/design/vALUV83vIdBzEsTJAhQgXq/Comfy-Design-System?node-id=2-9718&m=dev) ## Scope decisions - **Hover**: Added to `WidgetInputNumberSlider.vue` only — other widgets need separate verification before applying - **Invalid**: Not implemented in `Slider.vue` — excluded until component supports it ## Files changed - `src/components/ui/slider/Slider.stories.ts` — new - `src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberSlider.vue` — add hover background ## Test plan - [ ] `pnpm storybook` — verify Default and Disabled render under `Components/Slider` - [ ] Hover background visible on slider widget in app (e.g. KSampler `cfg` slider) - [ ] Other widget inputs (text, textarea, select) unchanged - [ ] `pnpm typecheck` — passes - [ ] `pnpm lint` — passes 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 --- src/components/ui/slider/Slider.stories.ts | 77 +++++++++++++++++++ .../components/WidgetInputNumberSlider.vue | 9 ++- 2 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 src/components/ui/slider/Slider.stories.ts diff --git a/src/components/ui/slider/Slider.stories.ts b/src/components/ui/slider/Slider.stories.ts new file mode 100644 index 0000000000..d22956c4f6 --- /dev/null +++ b/src/components/ui/slider/Slider.stories.ts @@ -0,0 +1,77 @@ +import type { + ComponentPropsAndSlots, + Meta, + StoryObj +} from '@storybook/vue3-vite' +import { computed, ref, toRefs } from 'vue' + +import Slider from './Slider.vue' + +interface StoryArgs extends ComponentPropsAndSlots { + disabled: boolean +} + +const meta: Meta = { + title: 'Components/Slider', + component: Slider, + tags: ['autodocs'], + parameters: { layout: 'centered' }, + argTypes: { + min: { control: 'number' }, + max: { control: 'number' }, + step: { control: 'number' }, + disabled: { control: 'boolean' } + }, + args: { + min: 0, + max: 100, + step: 1, + disabled: false + }, + decorators: [ + (story) => ({ + components: { story }, + template: '
' + }) + ] +} + +export default meta +type Story = StoryObj + +export const Default: Story = { + render: (args) => ({ + components: { Slider }, + setup() { + const { min, max, step, disabled } = toRefs(args) + const value = ref([36]) + const display = computed(() => value.value[0]) + return { value, display, min, max, step, disabled } + }, + template: ` +
+ + {{ display }} +
+ ` + }) +} + +export const Disabled: Story = { + args: { disabled: true }, + render: (args) => ({ + components: { Slider }, + setup() { + const { min, max, step, disabled } = toRefs(args) + const value = ref([36]) + const display = computed(() => value.value[0]) + return { value, display, min, max, step, disabled } + }, + template: ` +
+ + {{ display }} +
+ ` + }) +} diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberSlider.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberSlider.vue index 83622f4bc9..e116966b8e 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberSlider.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberSlider.vue @@ -1,6 +1,13 @@