{"version":3,"file":"/Users/anthonygubler/development/dojo-org/widgets/src/middleware/theme.tsx","sourceRoot":"","sources":["theme.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,SAEN,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,iCAAiC,EAAE,MAAM,oCAAoC,CAAC;AAEvF,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAuC,CAAC;AACxF,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC;AAEjC,SAAS,kBAAkB,CAAC,KAAa;IACxC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACxC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAU;IACrC,OAAO,KAAK,IAAI,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAID,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAS,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE;IAC9E,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IAC9D,SAAS,QAAQ;QAChB,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,CAAC;QAC/B,IAAI,KAAK,EAAE;YACV,OAAO,KAAK,CAAC;SACb;QAED,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;QACrC,IAAI,iCAAiC,CAAC,YAAY,CAAC,EAAE;YACpD,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC;SACpE;aAAM,IAAI,YAAY,EAAE;YACxB,OAAO,YAAY,CAAC,KAAK,CAAC;SAC1B;IACF,CAAC;IAED,OAAO;QACN,OAAO,EAAE,CACR,OAAU,EACV,GAAM,EACN,MAAe,EACY,EAAE;YAC7B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACnC,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAC7C,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE;gBACnB,IAAI,GAAG,KAAK,SAAS,EAAE;oBACtB,OAAO,UAAU,CAAC;iBAClB;gBACD,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBACjE,UAAU,CAAC,GAAG,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;iBACxD;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACd,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;iBACtB;gBACD,OAAO,UAAU,CAAC;YACnB,CAAC,EACD,EAAE,CAAC,SAAS,CAAC,EAAE,UAAU,EAAgB,CACzC,CAAC;YACF,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,MAAM,EAAE;gBACX,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,mBAAM,YAAY,EAAK,YAAY,EAAG,CAAC,MAAM,CAC3E,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE;oBAClB,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,MAAM,EAAE;wBAChD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;wBAC7D,MAAM,YAAY,GACjB,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;wBACnE,MAAM,YAAY,GACjB,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;wBACnE,IAAI,CAAC,YAAY,IAAI,YAAY,EAAE;4BAClC,SAAS,CAAC,QAAQ,CAAC,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;yBAC/D;wBACD,IAAI,YAAY,EAAE;4BACjB,SAAS,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;yBACxC;qBACD;oBACD,OAAO,SAAS,CAAC;gBAClB,CAAC,EACD,EAAgB,CAChB,CAAC;gBACF,SAAS,qBAAQ,SAAS,EAAK,WAAW,CAAE,CAAC;gBAE7C,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;oBAC9B,OAAO;wBACN,KAAK,EAAE;4BACN,KAAK,oBACD,KAAK,CAAC,KAAK,CAAC,KAAK,IACpB,CAAC,OAAO,CAAC,EAAE,SAAS,GACpB;4BACD,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ;yBAC9B;wBACD,OAAO,EAAE,KAAK,CAAC,OAAO;qBACtB,CAAC;iBACF;gBAED,yBACI,KAAK,IACR,CAAC,OAAO,CAAC,EAAE,SAAS,IACnB;aACF;YAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CACrD,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACd,IAAI,GAAG,KAAK,SAAS,EAAE;oBACtB,OAAO,KAAK,CAAC;iBACb;gBACD,MAAM,oBAAoB,GACzB,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnE,MAAM,YAAY,GACjB,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnE,IAAI,oBAAoB,EAAE;oBACzB,KAAK,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC;iBAClC;qBAAM,IAAI,YAAY,EAAE;oBACxB,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC;iBAC7C;gBACD,OAAO,KAAK,CAAC;YACd,CAAC,EACD,kBAAK,SAAS,CAAgB,CAC9B,CAAC;YAEF,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBAC9B,OAAO;oBACN,KAAK,EAAE;wBACN,KAAK,oBACD,KAAK,CAAC,KAAK,CAAC,KAAK,IACpB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAC3B;wBACD,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ;qBAC9B;oBACD,OAAO,EAAE,KAAK,CAAC,OAAO;iBACtB,CAAC;aACF;YAED,yBACI,KAAK,IACR,CAAC,OAAO,CAAC,EAAE,gBAAgB,IAC1B;QACH,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACb,OAAO,UAAU,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACvE,CAAC;QACD,GAAG;QACH,GAAG;QACH,OAAO;KACP,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,eAAe,KAAK,CAAC","sourcesContent":["import { create } from '@dojo/framework/core/vdom';\nimport coreTheme, {\n\tThemeProperties as CoreThemeProperties\n} from '@dojo/framework/core/middleware/theme';\nimport { ThemeWithVariant, ClassNames, Theme } from '@dojo/framework/core/interfaces';\nimport { isThemeInjectorPayloadWithVariant } from '@dojo/framework/core/ThemeInjector';\n\nconst factory = create({ coreTheme }).properties<{ variant?: 'default' | 'inherit' }>();\nexport const THEME_KEY = ' _key';\n\nfunction uppercaseFirstChar(value: string) {\n\treturn `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n\nfunction lowercaseFirstChar(value: string) {\n\treturn `${value.charAt(0).toLowerCase()}${value.slice(1)}`;\n}\n\nfunction isThemeWithVariant(theme: any): theme is ThemeWithVariant {\n\treturn theme && theme.hasOwnProperty('variant');\n}\n\nexport interface ThemeProperties extends CoreThemeProperties {}\n\nexport const theme = factory(function({ middleware: { coreTheme }, properties }) {\n\tconst { variant: coreVariant, get, set, classes } = coreTheme;\n\tfunction getTheme() {\n\t\tconst { theme } = properties();\n\t\tif (theme) {\n\t\t\treturn theme;\n\t\t}\n\n\t\tconst themePayload = coreTheme.get();\n\t\tif (isThemeInjectorPayloadWithVariant(themePayload)) {\n\t\t\treturn { theme: themePayload.theme, variant: themePayload.variant };\n\t\t} else if (themePayload) {\n\t\t\treturn themePayload.theme;\n\t\t}\n\t}\n\n\treturn {\n\t\tcompose: <T extends ClassNames, B extends ClassNames>(\n\t\t\tbaseCss: B,\n\t\t\tcss: T,\n\t\t\tprefix?: string\n\t\t): Theme | ThemeWithVariant => {\n\t\t\tconst theme = getTheme();\n\t\t\tconst baseKey = baseCss[THEME_KEY];\n\t\t\tconst variantKey = css[THEME_KEY];\n\t\t\tconst virtualCss = Object.keys(baseCss).reduce(\n\t\t\t\t(virtualCss, key) => {\n\t\t\t\t\tif (key === THEME_KEY) {\n\t\t\t\t\t\treturn virtualCss;\n\t\t\t\t\t}\n\t\t\t\t\tif (prefix && !virtualCss[`${prefix}${uppercaseFirstChar(key)}`]) {\n\t\t\t\t\t\tvirtualCss[`${prefix}${uppercaseFirstChar(key)}`] = ' ';\n\t\t\t\t\t}\n\t\t\t\t\tif (!css[key]) {\n\t\t\t\t\t\tvirtualCss[key] = ' ';\n\t\t\t\t\t}\n\t\t\t\t\treturn virtualCss;\n\t\t\t\t},\n\t\t\t\t{ [THEME_KEY]: variantKey } as ClassNames\n\t\t\t);\n\t\t\tconst virtualTheme = coreTheme.classes(virtualCss);\n\t\t\tconst variantTheme = coreTheme.classes(css);\n\t\t\tlet baseTheme = coreTheme.classes(baseCss);\n\t\t\tif (prefix) {\n\t\t\t\tconst prefixedCss = Object.keys({ ...virtualTheme, ...variantTheme }).reduce(\n\t\t\t\t\t(prefixCss, key) => {\n\t\t\t\t\t\tif (key.indexOf(prefix) === 0 && key !== prefix) {\n\t\t\t\t\t\t\tconst classKey = lowercaseFirstChar(key.replace(prefix, ''));\n\t\t\t\t\t\t\tconst variantClass =\n\t\t\t\t\t\t\t\ttypeof variantTheme[key] === 'string' && variantTheme[key].trim();\n\t\t\t\t\t\t\tconst virtualClass =\n\t\t\t\t\t\t\t\ttypeof virtualTheme[key] === 'string' && virtualTheme[key].trim();\n\t\t\t\t\t\t\tif (!variantClass && virtualClass) {\n\t\t\t\t\t\t\t\tprefixCss[classKey] = `${baseTheme[classKey]} ${virtualClass}`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (variantClass) {\n\t\t\t\t\t\t\t\tprefixCss[classKey] = variantTheme[key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn prefixCss;\n\t\t\t\t\t},\n\t\t\t\t\t{} as ClassNames\n\t\t\t\t);\n\t\t\t\tbaseTheme = { ...baseTheme, ...prefixedCss };\n\n\t\t\t\tif (isThemeWithVariant(theme)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttheme: {\n\t\t\t\t\t\t\ttheme: {\n\t\t\t\t\t\t\t\t...theme.theme.theme,\n\t\t\t\t\t\t\t\t[baseKey]: baseTheme\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvariants: theme.theme.variants\n\t\t\t\t\t\t},\n\t\t\t\t\t\tvariant: theme.variant\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t...theme,\n\t\t\t\t\t[baseKey]: baseTheme\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst constructedTheme = Object.keys(baseTheme).reduce(\n\t\t\t\t(theme, key) => {\n\t\t\t\t\tif (key === THEME_KEY) {\n\t\t\t\t\t\treturn theme;\n\t\t\t\t\t}\n\t\t\t\t\tconst variantComposesClass =\n\t\t\t\t\t\ttypeof variantTheme[key] === 'string' && variantTheme[key].trim();\n\t\t\t\t\tconst virtualClass =\n\t\t\t\t\t\ttypeof virtualTheme[key] === 'string' && virtualTheme[key].trim();\n\t\t\t\t\tif (variantComposesClass) {\n\t\t\t\t\t\ttheme[key] = variantComposesClass;\n\t\t\t\t\t} else if (virtualClass) {\n\t\t\t\t\t\ttheme[key] = `${theme[key]} ${virtualClass}`;\n\t\t\t\t\t}\n\t\t\t\t\treturn theme;\n\t\t\t\t},\n\t\t\t\t{ ...baseTheme } as ClassNames\n\t\t\t);\n\n\t\t\tif (isThemeWithVariant(theme)) {\n\t\t\t\treturn {\n\t\t\t\t\ttheme: {\n\t\t\t\t\t\ttheme: {\n\t\t\t\t\t\t\t...theme.theme.theme,\n\t\t\t\t\t\t\t[baseKey]: constructedTheme\n\t\t\t\t\t\t},\n\t\t\t\t\t\tvariants: theme.theme.variants\n\t\t\t\t\t},\n\t\t\t\t\tvariant: theme.variant\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...theme,\n\t\t\t\t[baseKey]: constructedTheme\n\t\t\t};\n\t\t},\n\t\tvariant: () => {\n\t\t\treturn properties().variant === 'inherit' ? undefined : coreVariant();\n\t\t},\n\t\tget,\n\t\tset,\n\t\tclasses\n\t};\n});\n\nexport default theme;\n"]}