packages-theme/console-base-theme/stories/util/generate-code-mixin-link.ts (55 lines of code) (raw):

import { ICodeGenerator } from '../types'; import { CODE_BEGIN_LINK } from '../const'; import pushCode from './push-code'; import toCode from './to-code'; import buildExportedMixinVarName from './build-exported-mixin-var-name'; import buildCssCode from './build-css-code'; const THEMES = ['LINK_PRIMARY', 'LINK_SECONDARY', 'LINK_TERTIARY', 'LINK_BRAND', 'LINK_BRAND_SECONDARY']; const STATES = ['visited', 'hover', 'active']; function buildLinkStyle(theme: string, state: string, indent?: number): string { return buildCssCode({ attr: 'color', keys: ['COLOR', theme, state], indent: indent ?? state ? 2 : 1 }); } // 生成 mixin/link.ts export default function generateCodeMixinLink(): string { const generator: ICodeGenerator = { generator: 'generate-code-mixin-link', begin: CODE_BEGIN_LINK }; pushCode(generator, `export const mixinLinkDisabled = css\` &, &:link, &:visited, &:hover, &:focus, &:active { cursor: default; text-decoration: none; ${buildLinkStyle('LINK_DISABLED', '', 2)} } \`;`); THEMES.forEach(v => { function buildState(state: string): string { return ` ${state === 'hover' ? '&:hover,\n &:focus' : `&:${state}`} { ${buildLinkStyle(v, state)} }`; } const cssCode2 = buildCssCode({ attr: 'color', keys: ['COLOR', v] }); pushCode(generator, `export const ${buildExportedMixinVarName(v)} = css\` ${cssCode2} \${linkCommon}; ${STATES.map(buildState).join('\n ')} \`;`); }); return toCode(generator); }