import type { Meta, StoryObj } from '@storybook/vue3-vite' import { copyableClass, copyableCopiedClass, readTokens, tokenTableClass, useCopier } from '@/stories/tokenUtils' const meta: Meta = { title: 'Foundations/Focus Rings', tags: ['!dev'], parameters: { layout: 'padded', controls: { disable: true }, docs: { source: { code: null } }, }, } export default meta type Story = StoryObj const previewStyle = (tokenName: string): string => `display: inline-flex; align-items: center; justify-content: center; height: 40px; padding: 0 18px; border-radius: 8px; background: #ffffff; border: 1px solid #e9eaf6; color: #36384d; font-size: 14px; box-shadow: var(${tokenName});` /** * Composite focus-ring tokens (one token per color role). Each token is a * multi-layered `box-shadow` that produces a consistent, accessible focus * outline when applied to an element. */ export const Composite: Story = { render: () => ({ setup() { const composites = readTokens([/^--cp-shadow-focus-ring-[^-]+$/]) const { copiedKey, copy } = useCopier() return { composites, copiedKey, copy, tableClass: tokenTableClass, copyClass: copyableClass, copiedClass: copyableCopiedClass, preview: (tokenName: string) => previewStyle(tokenName), } }, template: `
| Token | Value | Preview |
|---|---|---|
| {{ copiedKey === token.name ? 'Copied!' : token.name }} | {{ token.value }} | Focused |