diff --git a/web/src/components/ui/AppButton.test.ts b/web/src/components/ui/AppButton.test.ts index fc83279a..4e9c8468 100644 --- a/web/src/components/ui/AppButton.test.ts +++ b/web/src/components/ui/AppButton.test.ts @@ -39,4 +39,21 @@ describe('AppButton', () => { await button.trigger('click') expect(onClick).not.toHaveBeenCalled() }) + + it('exposes danger and size as semantic classes', () => { + const wrapper = mount(AppButton, { + props: { + variant: 'danger', + size: 'lg', + }, + slots: { + default: 'Delete permanently', + }, + }) + + expect(wrapper.get('button').classes()).toEqual( + expect.arrayContaining(['app-button--danger', 'app-button--lg']), + ) + expect(wrapper.text()).toBe('Delete permanently') + }) }) diff --git a/web/src/components/ui/AppButton.vue b/web/src/components/ui/AppButton.vue index c9ad0369..f4b16216 100644 --- a/web/src/components/ui/AppButton.vue +++ b/web/src/components/ui/AppButton.vue @@ -4,13 +4,15 @@ withDefaults( type?: 'button' | 'submit' | 'reset' disabled?: boolean busy?: boolean - variant?: 'primary' | 'secondary' | 'ghost' + variant?: 'primary' | 'secondary' | 'ghost' | 'danger' + size?: 'sm' | 'md' | 'lg' }>(), { type: 'button', disabled: false, busy: false, variant: 'primary', + size: 'md', }, ) @@ -18,7 +20,7 @@ withDefaults(