@musica-sacra/hooks
Version:
Plugin with useful hooks for MusicaSacra web applications.
1 lines • 4.55 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../src/hooks/useBem/useBem.ts"],"sourcesContent":["export function useBem(base: string) {\n // ToDo Will return scrambled classname\n const bem = (\n name?: string | Record<string, boolean>,\n ...names: Array<string | Record<string, boolean>>\n ) => {\n const classnames: string[] = [];\n\n const addClass = (classname: string) => {\n if (classname && !classnames.includes(classname)) {\n classnames.push(classname);\n }\n };\n\n const handleObject = (\n obj: Record<string, boolean>,\n prefixBase = true\n ) => {\n for (const [key, value] of Object.entries(obj)) {\n if (value) {\n if (key === base) {\n addClass(base);\n } else {\n addClass(prefixBase ? `${base}__${key}` : key);\n }\n }\n }\n };\n\n if (name === base || name === undefined) {\n addClass(base);\n } else {\n if (typeof name === 'string' && name !== '') {\n addClass(`${base}__${name}`);\n }\n\n if (typeof name === 'object') {\n handleObject(name);\n }\n }\n\n for (const classname of names) {\n if (classname === base) {\n addClass(base);\n } else {\n if (typeof classname === 'string' && classname !== '') {\n addClass(classname);\n }\n\n if (typeof classname === 'object') {\n handleObject(classname, false);\n }\n\n addClass(base);\n }\n }\n\n return classnames.join(' ');\n };\n\n // ToDo Looks unnecesery, but later will return unscrambled className\n const element = (element?: string | Record<string, boolean>) => {\n if (typeof element === 'string' && element !== '') {\n return `${base}__${element}`;\n }\n\n if (typeof element === 'object') {\n return Object.entries(element)\n .filter(([, value]) => value)\n .map(([key]) => `${base}__${key}`)\n .join(' ');\n }\n\n return base;\n };\n\n const modifier = (modifier: string | Record<string, boolean>) => {\n if (typeof modifier === 'string' && modifier !== '') {\n return `${base}--${modifier}`;\n }\n\n if (typeof modifier === 'object') {\n return Object.entries(modifier)\n .filter(([, value]) => value)\n .map(([key]) => `${base}--${key}`)\n .join(' ');\n }\n\n return '';\n };\n\n return {\n bem,\n element,\n modifier,\n base,\n };\n}\n"],"names":["useBem","base","bem","name","names","_i","arguments","length","classnames","addClass","classname","includes","push","handleObject","obj","prefixBase","_a","Object","entries","_b","key","concat","undefined","names_1","join","element","filter","map","modifier"],"mappings":"AAAM,SAAUA,EAAOC,GA2FnB,MAAO,CACHC,IA1FQ,SACRC,OACA,IAAAC,EAAA,GAAAC,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAD,EAAAC,EAAA,GAAAC,UAAAD,GAEA,IAAMG,EAAuB,GAEvBC,EAAW,SAACC,GACVA,IAAcF,EAAWG,SAASD,IAClCF,EAAWI,KAAKF,EAExB,EAEMG,EAAe,SACjBC,EACAC,QAAA,IAAAA,IAAAA,GAAA,GAEA,IAA2B,IAAAV,EAAA,EAAAW,EAAAC,OAAOC,QAAQJ,GAAfT,EAAAW,EAAAT,OAAAF,IAAqB,CAArC,IAAAc,OAACC,EAAGD,EAAA,GAAOA,EAAA,IAGVV,EADAW,IAAQnB,EACCA,EAEAc,EAAa,GAAAM,OAAGpB,EAAI,MAAAoB,OAAKD,GAAQA,EAGtD,CACJ,EAEIjB,IAASF,QAAiBqB,IAATnB,EACjBM,EAASR,IAEW,iBAATE,GAA8B,KAATA,GAC5BM,EAAS,GAAAY,OAAGpB,eAASE,IAGL,iBAATA,GACPU,EAAaV,IAIrB,IAAwB,IAAAa,EAAA,EAAAO,EAAAnB,EAAAY,WAAAA,IAAO,CAA1B,IAAMN,EAASa,EAAAP,GACZN,IAAcT,IAGW,iBAAdS,GAAwC,KAAdA,GACjCD,EAASC,GAGY,iBAAdA,GACPG,EAAaH,GAAW,IAP5BD,EAASR,EAYjB,CAEA,OAAOO,EAAWgB,KAAK,IAC3B,EAmCIC,QAhCY,SAACA,GACb,MAAuB,iBAAZA,GAAoC,KAAZA,EACxB,GAAAJ,OAAGpB,EAAI,MAAAoB,OAAKI,GAGA,iBAAZA,EACAR,OAAOC,QAAQO,GACjBC,OAAO,SAACV,GAAc,OAANA,EAAA,EAAM,GACtBW,IAAI,SAACX,GAAC,IAAAI,EAAGJ,EAAA,GAAM,MAAA,GAAAK,OAAGpB,EAAI,MAAAoB,OAAKD,EAAZ,GACfI,KAAK,KAGPvB,CACX,EAoBI2B,SAlBa,SAACA,GACd,MAAwB,iBAAbA,GAAsC,KAAbA,EACzB,GAAAP,OAAGpB,EAAI,MAAAoB,OAAKO,GAGC,iBAAbA,EACAX,OAAOC,QAAQU,GACjBF,OAAO,SAACV,GAAc,OAANA,EAAA,EAAM,GACtBW,IAAI,SAACX,GAAC,IAAAI,EAAGJ,EAAA,GAAM,MAAA,GAAAK,OAAGpB,EAAI,MAAAoB,OAAKD,EAAZ,GACfI,KAAK,KAGP,EACX,EAMIvB,KAAIA,EAEZ"}