import type { Meta, StoryObj } from '@storybook/vue3-vite' import type { Token } from '@/stories/tokenUtils' import { copyableClass, copyableCopiedClass, readTokens, sortTokensBySize, splitRemPx, tokenTableClass, useCopier, } from '@/stories/tokenUtils' const meta: Meta = { title: 'Foundations/Dimensions', tags: ['!dev'], parameters: { layout: 'padded', controls: { disable: true }, docs: { source: { code: null } }, }, } export default meta type Story = StoryObj type DimensionKind = 'bar' | 'none' | 'radius' | 'square' const previewStyle = (kind: DimensionKind, tokenName: string): string => { const ref = `var(${tokenName})` switch (kind) { case 'bar': return `height: 12px; width: ${ref}; max-width: 100%; background: var(--cp-background-accent-solid, #603dfd); border-radius: 4px;` case 'radius': return `width: 56px; height: 56px; background: var(--cp-background-accent-primary, #eaecff); border: 1px solid var(--cp-border-accent-primary, #ccd0ff); border-radius: ${ref};` case 'square': return `width: ${ref}; height: ${ref}; background: var(--cp-background-accent-solid, #603dfd); border-radius: 2px;` case 'none': return '' } } type SectionArgs = { kind: DimensionKind; prefix: string } const makeSectionStory = (section: SectionArgs): Story => ({ render: () => ({ setup() { const tokens = sortTokensBySize(readTokens([section.prefix])) const { copiedKey, copy } = useCopier() return { kind: section.kind, tokens, copiedKey, copy, tableClass: tokenTableClass, copyClass: copyableClass, copiedClass: copyableCopiedClass, preview: (kind: DimensionKind, tokenName: string) => previewStyle(kind, tokenName), split: (token: Token) => splitRemPx(token), } }, template: `
| Token | rem | px | Preview |
|---|---|---|---|
| {{ copiedKey === token.name ? 'Copied!' : token.name }} | {{ split(token).rem }} | {{ split(token).px }} |