UNPKG

5.04 kBSource Map (JSON)View Raw
1{"version":3,"file":"classes.umd.min.js","sources":["../src/index.ts"],"sourcesContent":["type IsClassPresent = classes.IsClassPresent;\r\ntype NormalizedClassObject = classes.NormalizedClassObject;\r\ntype ClassName = classes.ClassName;\r\n\r\nfunction eachTrue(\r\n base: Record<string, unknown>,\r\n callback: (key: string) => void\r\n): void;\r\n\r\nfunction eachTrue<R>(\r\n base: Record<string, unknown>,\r\n callback: (key: string, output: R) => R,\r\n output: R\r\n): R;\r\n\r\nfunction eachTrue<R>(\r\n base: Record<string, unknown>,\r\n callback: (key: string, output?: R | undefined) => R | undefined,\r\n output?: R,\r\n): R | undefined {\r\n for (const key in base) {\r\n if (base[key]) {\r\n output = callback(\r\n key,\r\n output,\r\n );\r\n }\r\n }\r\n return output;\r\n}\r\n\r\nfunction normStrings(names: string[], value: boolean, output: NormalizedClassObject): NormalizedClassObject {\r\n const { length } = names;\r\n for (let i = 0; i < length; i++) {\r\n if (names[i]) {\r\n output[names[i]] = value;\r\n }\r\n }\r\n return output;\r\n}\r\n\r\nfunction processItem(item: ClassName, output: NormalizedClassObject): void {\r\n if (item && typeof item === 'object') {\r\n if (Array.isArray(item)) {\r\n normArray(\r\n item,\r\n output,\r\n );\r\n } else {\r\n for (const key in item) {\r\n if ({}.hasOwnProperty.call(item, key)) {\r\n if (key) {\r\n let value = item[key];\r\n if (typeof value === 'function') {\r\n value = (value as IsClassPresent)(\r\n eachTrue<Record<string, true>>(\r\n output,\r\n (key, result) => {\r\n result[key] = true;\r\n return result;\r\n },\r\n {},\r\n ),\r\n key.split(' '),\r\n );\r\n }\r\n normStrings(\r\n key.split(' '),\r\n !!value,\r\n output,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n } else if (typeof item === 'function') {\r\n processItem(\r\n item(\r\n eachTrue<Record<string, true>>(\r\n output,\r\n (key, result) => {\r\n result[key] = true;\r\n return result;\r\n },\r\n {},\r\n ),\r\n ),\r\n output,\r\n );\r\n } else if (item != null) {\r\n const names = `${item}`;\r\n if (names) {\r\n normStrings(\r\n names.split(' '),\r\n true,\r\n output,\r\n );\r\n }\r\n }\r\n}\r\n\r\nfunction normArray(array: ArrayLike<ClassName>, output: NormalizedClassObject): NormalizedClassObject {\r\n const { length } = array;\r\n for (let i = 0; i < length; i++) {\r\n const item = array[i];\r\n processItem(item, output);\r\n }\r\n return output;\r\n}\r\n\r\nfunction classes(...classnames: ClassName[]): string;\r\nfunction classes(): string {\r\n return eachTrue(\r\n normArray(\r\n // eslint-disable-next-line prefer-rest-params\r\n arguments as ArrayLike<ClassName>,\r\n {},\r\n ),\r\n (name, result) => result ? `${result} ${name}` : name,\r\n '',\r\n );\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-namespace\r\nnamespace classes {\r\n export type CurrentState = Readonly<Record<string, true>>;\r\n export type IsClassPresent = (current: CurrentState, classnames: string[]) => unknown;\r\n export type ResolveClass = (current: CurrentState) => ClassName;\r\n export type ClassObject = Record<string, IsClassPresent | unknown>;\r\n export type NormalizedClassObject = Record<string, boolean>;\r\n export type ClassName = string | ResolveClass | ClassArray | ClassObject | NormalizedClassObject | null | undefined | void;\r\n export type ClassArray = ClassName[];\r\n}\r\n\r\nexport default classes;\r\n"],"names":["eachTrue","base","callback","output","key","normStrings","names","value","length","i","processItem","item","Array","isArray","normArray","hasOwnProperty","call","result","split","array","arguments","name"],"mappings":"4BAeA,SAASA,EACPC,EACAC,EACAC,OAEK,IAAMC,KAAOH,EACZA,EAAKG,KACPD,EAASD,EACPE,EACAD,WAICA,EAGT,SAASE,EAAYC,EAAiBC,EAAgBJ,WAC5CK,EAAWF,EAAXE,OACCC,EAAI,EAAGA,EAAID,EAAQC,IACtBH,EAAMG,KACRN,EAAOG,EAAMG,IAAMF,UAGhBJ,EAGT,SAASO,EAAYC,EAAiBR,MAChCQ,GAAwB,iBAATA,MACbC,MAAMC,QAAQF,GAChBG,EACEH,EACAR,YAGG,IAAMC,KAAOO,KACZ,GAAGI,eAAeC,KAAKL,EAAMP,IAC3BA,EAAK,KACHG,EAAQI,EAAKP,GACI,mBAAVG,IACTA,EAASA,EACPP,EACEG,GACA,SAACC,EAAKa,UACJA,EAAOb,IAAO,EACPa,IAET,IAEFb,EAAIc,MAAM,OAGdb,EACED,EAAIc,MAAM,OACRX,EACFJ,SAML,GAAoB,mBAATQ,EAChBD,EACEC,EACEX,EACEG,GACA,SAACC,EAAKa,UACJA,EAAOb,IAAO,EACPa,IAET,KAGJd,QAEG,GAAY,MAARQ,EAAc,KACjBL,KAAWK,EACbL,GACFD,EACEC,EAAMY,MAAM,MACZ,EACAf,IAMR,SAASW,EAAUK,EAA6BhB,WACtCK,EAAWW,EAAXX,OACCC,EAAI,EAAGA,EAAID,EAAQC,IAE1BC,EADaS,EAAMV,GACDN,UAEbA,SAIT,kBACSH,EACLc,EAEEM,UACA,KAEF,SAACC,EAAMJ,UAAWA,EAAYA,MAAUI,EAASA,IACjD"}
\No newline at end of file