UNPKG

typed-bem

Version:

A TypeScript library for generating BEM class names.

1 lines 5.12 kB
{"version":3,"file":"browser.cjs","sources":["../src/browser/class.ts","../src/browser/helpers.ts"],"sourcesContent":["import { default as easyBem } from 'easy-bem';\nimport { BemBlocks, BemSchema } from '../types';\n\ntype KeysOfSet<T> = T extends Set<infer U> ? U : never;\n\nfunction generateBemClassNames<B extends BemBlocks<BemSchema>>() {\n\tconst bemBlocks = new Map<string, ReturnType<typeof easyBem>>();\n\n\tconst bem = <BlockName extends keyof B, ElementName extends keyof NonNullable<B[BlockName]['elements']>>(\n\t\tblockName: BlockName,\n\n\t\t// Block-Modifier oder Element-Name\n\t\tblockModifiersOrElementName?:\n\t\t\t| (KeysOfSet<B[BlockName]['modifiers']> extends never ? undefined : Partial<Record<KeysOfSet<B[BlockName]['modifiers']>, boolean>>)\n\t\t\t| ElementName,\n\n\t\t// Element-Modifier, wenn ein Element angegeben wurde\n\t\telementModifiers?: KeysOfSet<NonNullable<B[BlockName]['elements']>[ElementName]['modifiers']> extends never\n\t\t\t? undefined\n\t\t\t: Partial<Record<KeysOfSet<NonNullable<B[BlockName]['elements']>[ElementName]['modifiers']>, boolean>>,\n\t): string => {\n\t\ttry {\n\t\t\treturn bemBlocks.get(blockName as string)!(blockModifiersOrElementName as string, elementModifiers);\n\t\t} catch {\n\t\t\treturn bemBlocks.set(blockName as string, easyBem(blockName as string)).get(blockName as string)!(\n\t\t\t\tblockModifiersOrElementName as string,\n\t\t\t\telementModifiers,\n\t\t\t);\n\t\t}\n\t};\n\n\t// Block-gebundener BEM Generator\n\tbem.forBlock = <BlockName extends keyof B>(blockName: BlockName) => {\n\t\ttype BlockBem = {\n\t\t\t<ElementName extends keyof NonNullable<B[BlockName]['elements']>>(\n\t\t\t\telementNameOrBlockModifiers?:\n\t\t\t\t\t| ElementName\n\t\t\t\t\t| (KeysOfSet<B[BlockName]['modifiers']> extends never ? undefined : Partial<Record<KeysOfSet<B[BlockName]['modifiers']>, boolean>>),\n\t\t\t\telementModifiers?: KeysOfSet<NonNullable<B[BlockName]['elements']>[ElementName]['modifiers']> extends never\n\t\t\t\t\t? undefined\n\t\t\t\t\t: Partial<Record<KeysOfSet<NonNullable<B[BlockName]['elements']>[ElementName]['modifiers']>, boolean>>,\n\t\t\t): string;\n\t\t\tforElement: <ElementName extends keyof NonNullable<B[BlockName]['elements']>>(\n\t\t\t\telementName: ElementName,\n\t\t\t) => (\n\t\t\t\telementModifiers?: KeysOfSet<NonNullable<B[BlockName]['elements']>[ElementName]['modifiers']> extends never\n\t\t\t\t\t? undefined\n\t\t\t\t\t: Partial<Record<KeysOfSet<NonNullable<B[BlockName]['elements']>[ElementName]['modifiers']>, boolean>>,\n\t\t\t) => string;\n\t\t};\n\n\t\tconst blockBem: BlockBem = <ElementName extends keyof NonNullable<B[BlockName]['elements']>>(\n\t\t\telementNameOrBlockModifiers?:\n\t\t\t\t| ElementName\n\t\t\t\t| (KeysOfSet<B[BlockName]['modifiers']> extends never ? undefined : Partial<Record<KeysOfSet<B[BlockName]['modifiers']>, boolean>>),\n\t\t\telementModifiers?: KeysOfSet<NonNullable<B[BlockName]['elements']>[ElementName]['modifiers']> extends never\n\t\t\t\t? undefined\n\t\t\t\t: Partial<Record<KeysOfSet<NonNullable<B[BlockName]['elements']>[ElementName]['modifiers']>, boolean>>,\n\t\t): string => {\n\t\t\treturn bem(blockName, elementNameOrBlockModifiers as any, elementModifiers);\n\t\t};\n\n\t\t// Element-gebundener BEM Generator für spezifische Elemente\n\t\tblockBem.forElement = <ElementName extends keyof NonNullable<B[BlockName]['elements']>>(elementName: ElementName) => {\n\t\t\treturn (\n\t\t\t\telementModifiers?: KeysOfSet<NonNullable<B[BlockName]['elements']>[ElementName]['modifiers']> extends never\n\t\t\t\t\t? undefined\n\t\t\t\t\t: Partial<Record<KeysOfSet<NonNullable<B[BlockName]['elements']>[ElementName]['modifiers']>, boolean>>,\n\t\t\t): string => {\n\t\t\t\treturn bem(blockName, elementName, elementModifiers);\n\t\t\t};\n\t\t};\n\n\t\treturn blockBem;\n\t};\n\n\ttype BemFunction = typeof bem & {\n\t\tforBlock: typeof bem.forBlock;\n\t};\n\n\treturn bem as BemFunction;\n}\n\nexport { generateBemClassNames };\n","function uniqueClassNames(...chunks: (string | undefined | null | false)[]): string {\n\tconst set = new Set<string>();\n\tfor (const chunk of chunks) {\n\t\tif (!chunk) continue;\n\t\tfor (const cls of chunk.split(/\\s+/)) set.add(cls);\n\t}\n\treturn [...set].join(' ');\n}\n\nexport { uniqueClassNames };\n"],"names":["generateBemClassNames","bemBlocks","bem","blockName","blockModifiersOrElementName","elementModifiers","easyBem","blockBem","elementNameOrBlockModifiers","elementName","uniqueClassNames","chunks","set","chunk","cls"],"mappings":"6KAKA,SAASA,GAAwD,CAChE,MAAMC,EAAY,IAAI,IAEhBC,EAAM,CACXC,EAGAC,EAKAC,IAGY,CACZ,GAAI,CACH,OAAOJ,EAAU,IAAIE,CAAmB,EAAGC,EAAuCC,CAAgB,CACnG,MAAQ,CACP,OAAOJ,EAAU,IAAIE,EAAqBG,WAAQH,CAAmB,CAAC,EAAE,IAAIA,CAAmB,EAC9FC,EACAC,CACD,CACD,CACD,EAGA,OAAAH,EAAI,SAAuCC,GAAyB,CAmBnE,MAAMI,EAAqB,CAC1BC,EAGAH,IAIOH,EAAIC,EAAWK,EAAoCH,CAAgB,EAI3E,OAAAE,EAAS,WAA+EE,GAEtFJ,GAIOH,EAAIC,EAAWM,EAAaJ,CAAgB,EAI9CE,CACR,EAMOL,CACR,CCjFA,SAASQ,KAAoBC,EAAuD,CACnF,MAAMC,EAAM,IAAI,IAChB,UAAWC,KAASF,EACnB,GAAKE,EACL,UAAWC,KAAOD,EAAM,MAAM,KAAK,EAAGD,EAAI,IAAIE,CAAG,EAElD,MAAO,CAAC,GAAGF,CAAG,EAAE,KAAK,GAAG,CACzB"}