@marigold/system 0.0.3 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/Box.d.ts +14 -0
  3. package/dist/Global.d.ts +2 -0
  4. package/dist/SVG.d.ts +6 -0
  5. package/dist/SVG.stories.d.ts +5 -0
  6. package/dist/index.d.ts +6 -3
  7. package/dist/normalize.d.ts +144 -0
  8. package/dist/system.cjs.development.js +348 -132
  9. package/dist/system.cjs.development.js.map +1 -1
  10. package/dist/system.cjs.production.min.js +1 -1
  11. package/dist/system.cjs.production.min.js.map +1 -1
  12. package/dist/system.esm.js +341 -129
  13. package/dist/system.esm.js.map +1 -1
  14. package/dist/theme.d.ts +136 -0
  15. package/dist/types.d.ts +2 -3
  16. package/dist/useTheme.d.ts +15 -5
  17. package/dist/variant.d.ts +29 -0
  18. package/package.json +4 -6
  19. package/src/Box.test.tsx +308 -0
  20. package/src/Box.tsx +199 -0
  21. package/src/Global.test.tsx +57 -0
  22. package/src/Global.tsx +34 -0
  23. package/src/SVG.stories.tsx +48 -0
  24. package/src/SVG.test.tsx +82 -0
  25. package/src/SVG.tsx +24 -0
  26. package/src/index.ts +6 -3
  27. package/src/normalize.test.tsx +15 -0
  28. package/src/normalize.ts +100 -0
  29. package/src/theme.ts +157 -0
  30. package/src/types.ts +2 -3
  31. package/src/useTheme.test.tsx +43 -18
  32. package/src/useTheme.tsx +45 -7
  33. package/src/variant.test.ts +93 -0
  34. package/src/variant.ts +54 -0
  35. package/dist/cache.d.ts +0 -4
  36. package/dist/reset.d.ts +0 -24
  37. package/dist/useClassname.d.ts +0 -2
  38. package/dist/useStyles.d.ts +0 -15
  39. package/src/Colors.stories.mdx +0 -455
  40. package/src/cache.ts +0 -4
  41. package/src/concepts-principles.mdx +0 -84
  42. package/src/reset.ts +0 -106
  43. package/src/useClassname.test.tsx +0 -70
  44. package/src/useClassname.ts +0 -24
  45. package/src/useStyles.test.tsx +0 -286
  46. package/src/useStyles.ts +0 -55
  47. package/src/writeComponent.stories.mdx +0 -126
@@ -1 +1 @@
1
- {"version":3,"file":"system.cjs.production.min.js","sources":["../src/useTheme.tsx","../src/useClassname.ts","../src/reset.ts","../src/useStyles.ts"],"sourcesContent":["import React, { createContext, useContext } from 'react';\nimport { Theme } from '@marigold/system';\n\nconst Context = createContext<Theme>({});\n\nexport const useTheme = () => useContext(Context);\n\nexport type ThemeProviderProps = { theme: any };\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n theme,\n children,\n}) => <Context.Provider value={theme}>{children}</Context.Provider>;\n","import { css as emotion } from '@emotion/css';\nimport { css } from '@theme-ui/css';\nimport { StyleObject } from './types';\nimport { useTheme } from './useTheme';\n\n// 🤫 https://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object\n// lodash.isEmpty is tooo much KBs!\nconst isEmpty = (val: any) =>\n val && Object.keys(val).length === 0 && val.constructor === Object;\n\nexport const useClassname = (...styles: StyleObject[]) => {\n const theme = useTheme();\n return styles\n .map(style => {\n /**\n * emotion will create a `css-0` class whenever an empty object is\n * passed. Since this makes debugging harder we'll do not pass empty\n * objects to emotion.\n */\n const themedStyle = css(style)(theme);\n return isEmpty(themedStyle) ? '' : emotion(themedStyle);\n })\n .join(' ');\n};\n","import { css } from '@emotion/css';\n\nconst base = css({\n boxSizing: 'border-box',\n margin: 0,\n padding: 0,\n minWidth: 0,\n fontSize: '100%',\n font: 'inherit',\n verticalAlign: 'baseline',\n WebkitTapHighlightColor: 'transparent',\n});\n\n// Content\n// ---------------\nconst block = css({\n display: 'block',\n});\n\nconst list = css({\n listStyle: 'none',\n});\n\nconst table = css({\n borderCollapse: 'collapse',\n borderSpacing: 0,\n});\n\n// Typography\n// ---------------\nconst a = css({\n textDecoration: 'none',\n});\n\nconst quote = css({\n quotes: 'none',\n selectors: {\n '&:before, &:after': {\n content: \"''\",\n },\n },\n});\n\n// Form Elements\n// ---------------\nconst button = css({\n display: 'block',\n appearance: 'none',\n background: 'transparent',\n textAlign: 'center',\n});\n\nconst input = css({\n display: 'block',\n appearance: 'none',\n selectors: {\n '&::-ms-clear': {\n display: 'none',\n },\n '&::-webkit-search-cancel-button': {\n WebkitAppearance: 'none',\n },\n },\n});\n\nconst select = css({\n display: 'block',\n appearance: 'none',\n selectors: {\n '&::-ms-expand': {\n display: 'none',\n },\n },\n});\n\nconst textarea = css({\n display: 'block',\n appearance: 'none',\n});\n\n// Reset\n// ---------------\nexport const reset = {\n article: block,\n aside: block,\n details: block,\n figcaption: block,\n figure: block,\n footer: block,\n header: block,\n hgroup: block,\n menu: block,\n nav: block,\n section: block,\n ul: list,\n ol: list,\n blockquote: quote,\n q: quote,\n a,\n base,\n table,\n select,\n button,\n textarea,\n input,\n} as const;\n","import { ElementType } from 'react';\nimport { reset } from './reset';\nimport { CSSObject } from './types';\nimport { useClassname } from './useClassname';\n\nexport type UseStyleInput = {\n\telement?: ElementType;\n\tcss?: Omit<CSSObject, 'variant' | 'element'> & { variant?: never; element?: never };\n\tvariant?: string | string[];\n\tclassName?: string;\n}\n\n/**\n * Hook that can adds base styles, reset for certain elements, variants and custom styles\n */\nexport const useStyles = ({ element, css: styles = {}, variant, className = '' }: UseStyleInput) => {\n /**\n * Get reset styles. Base is always applied. An additional reset maybe applied\n * based on the passed element.\n *\n * We check the passed className if it already includes the reset styles so no\n * duplicates are applied.\n */\n const baseClassName = className.includes(reset.base) ? '' : reset.base;\n const resetClassName =\n typeof element === 'string'\n ? className.includes((reset as { [key: string]: string })[element])\n ? ''\n : (reset as { [key: string]: string })[element]\n : '';\n\n /**\n * Get variant styles (from theme).\n */\n const variants = Array.isArray(variant)\n ? variant.map(v => ({ variant: v }))\n : [{ variant }];\n const variantsClassName = useClassname(...variants);\n\n /**\n * Custom styles are applied \"on runtime\". They are usually controlled via component\n * props and can change between component instances.\n */\n const customClassName = useClassname(styles);\n\n return [\n baseClassName,\n resetClassName,\n variantsClassName,\n customClassName,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n};\n"],"names":["Context","createContext","useTheme","useContext","isEmpty","val","Object","keys","length","constructor","useClassname","theme","styles","map","style","themedStyle","css","emotion","join","base","boxSizing","margin","padding","minWidth","fontSize","font","verticalAlign","WebkitTapHighlightColor","block","display","list","listStyle","table","borderCollapse","borderSpacing","a","textDecoration","quote","quotes","selectors","content","button","appearance","background","textAlign","input","WebkitAppearance","reset","article","aside","details","figcaption","figure","footer","header","hgroup","menu","nav","section","ul","ol","blockquote","q","select","textarea","React","Provider","value","children","element","variant","className","baseClassName","includes","resetClassName","variants","Array","isArray","v","filter","Boolean"],"mappings":"kJAGMA,EAAUC,gBAAqB,IAExBC,EAAW,kBAAMC,aAAWH,ICEnCI,EAAU,SAACC,UACfA,GAAmC,IAA5BC,OAAOC,KAAKF,GAAKG,QAAgBH,EAAII,cAAgBH,QAEjDI,EAAe,mBACpBC,EAAQT,uBADgBU,2BAAAA,yBAEvBA,EACJC,KAAI,SAAAC,OAMGC,EAAcC,MAAIF,EAAJE,CAAWL,UACxBP,EAAQW,GAAe,GAAKE,MAAQF,MAE5CG,KAAK,MCpBJC,EAAOH,MAAI,CACfI,UAAW,aACXC,OAAQ,EACRC,QAAS,EACTC,SAAU,EACVC,SAAU,OACVC,KAAM,UACNC,cAAe,WACfC,wBAAyB,gBAKrBC,EAAQZ,MAAI,CAChBa,QAAS,UAGLC,EAAOd,MAAI,CACfe,UAAW,SAGPC,EAAQhB,MAAI,CAChBiB,eAAgB,WAChBC,cAAe,IAKXC,EAAInB,MAAI,CACZoB,eAAgB,SAGZC,EAAQrB,MAAI,CAChBsB,OAAQ,OACRC,UAAW,qBACY,CACnBC,QAAS,SAOTC,EAASzB,MAAI,CACjBa,QAAS,QACTa,WAAY,OACZC,WAAY,cACZC,UAAW,WAGPC,EAAQ7B,MAAI,CAChBa,QAAS,QACTa,WAAY,OACZH,UAAW,gBACO,CACdV,QAAS,0CAEwB,CACjCiB,iBAAkB,WAsBXC,EAAQ,CACnBC,QAASpB,EACTqB,MAAOrB,EACPsB,QAAStB,EACTuB,WAAYvB,EACZwB,OAAQxB,EACRyB,OAAQzB,EACR0B,OAAQ1B,EACR2B,OAAQ3B,EACR4B,KAAM5B,EACN6B,IAAK7B,EACL8B,QAAS9B,EACT+B,GAAI7B,EACJ8B,GAAI9B,EACJ+B,WAAYxB,EACZyB,EAAGzB,EACHF,EAAAA,EACAhB,KAAAA,EACAa,MAAAA,EACA+B,OApCa/C,MAAI,CACjBa,QAAS,QACTa,WAAY,OACZH,UAAW,iBACQ,CACfV,QAAS,WAgCbY,OAAAA,EACAuB,SA5BehD,MAAI,CACnBa,QAAS,QACTa,WAAY,SA2BZG,MAAAA,+GFhGyD,mBAGrDoB,gBAACjE,EAAQkE,UAASC,QAFtBxD,SACAyD,oDGKuB,gBAAGC,IAAAA,YAASrD,IAAKJ,aAAS,KAAI0D,IAAAA,YAASC,UAAAA,aAAY,KAQpEC,EAAgBD,EAAUE,SAAS1B,EAAM5B,MAAQ,GAAK4B,EAAM5B,KAC5DuD,EACe,iBAAZL,EACHE,EAAUE,SAAU1B,EAAoCsB,IACtD,GACCtB,EAAoCsB,GACvC,GAKAM,EAAWC,MAAMC,QAAQP,GAC3BA,EAAQzD,KAAI,SAAAiE,SAAM,CAAER,QAASQ,MAC7B,CAAC,CAAER,QAAAA,UASA,CACLE,EACAE,EAVwBhE,eAAgBiE,GAMlBjE,EAAaE,GAOnC2D,GAECQ,OAAOC,SACP9D,KAAK"}
1
+ {"version":3,"file":"system.cjs.production.min.js","sources":["../src/normalize.ts","../src/variant.ts","../src/Box.tsx","../src/useTheme.tsx","../src/Global.tsx","../src/SVG.tsx"],"sourcesContent":["/**\n * Normalize styling of certain elements between browsers.\n * Based on https://www.joshwcomeau.com/css/custom-css-reset/\n */\nimport { ElementType } from 'react';\n\nconst base = {\n boxSizing: 'border-box',\n margin: 0,\n minWidth: 0,\n} as const;\n\nconst a = {\n ...base,\n textDecoration: 'none',\n} as const;\n\nconst text = {\n ...base,\n overflowWrap: 'break-word',\n} as const;\n\nconst media = {\n ...base,\n display: 'block',\n maxWidth: '100%',\n} as const;\n\nconst button = {\n ...base,\n display: 'block',\n appearance: 'none',\n font: 'inherit',\n background: 'transparent',\n textAlign: 'center',\n} as const;\n\nconst input = {\n ...base,\n display: 'block',\n appearance: 'none',\n font: 'inherit',\n '&::-ms-clear': {\n display: 'none',\n },\n '&::-webkit-search-cancel-button': {\n WebkitAppearance: 'none',\n },\n} as const;\n\nconst select = {\n ...base,\n display: 'block',\n appearance: 'none',\n font: 'inherit',\n '&::-ms-expand': {\n display: 'none',\n },\n} as const;\n\nconst textarea = {\n ...base,\n display: 'block',\n appearance: 'none',\n font: 'inherit',\n} as const;\n\n// Normalize\n// ---------------\nexport const normalize = {\n base,\n a,\n p: text,\n h1: text,\n h2: text,\n h3: text,\n h4: text,\n h5: text,\n h6: text,\n img: media,\n picture: media,\n video: media,\n canvas: media,\n svg: media,\n select,\n button,\n textarea,\n input,\n} as const;\n\nexport type NormalizedElement = keyof typeof normalize;\n\n/**\n * Type-safe helper to get normalization. If no normalization is found,\n * returns the *base* normalization.\n */\nexport const getNormalizedStyles = (val?: ElementType) =>\n typeof val === 'string' && val in normalize\n ? normalize[val as NormalizedElement] // Typescript doesn't infer this correctly\n : normalize.base;\n","const isNil = (value: any): value is null | undefined =>\n value === null || value === undefined;\n\n/**\n * Ensures that the `val` is an array. Will return an empty array if `val` is falsy.\n */\nexport const ensureArray = <T>(val?: T | T[]) =>\n isNil(val) ? [] : Array.isArray(val) ? val : [val];\n\n/**\n * Removes trailing dot from variant, if necessary. This is necessary to support\n * `__default` styles. See https://github.com/system-ui/theme-ui/pull/951\n */\nexport const ensureVariantDefault = (val: string) => val.replace(/\\.$/, '');\n\n/**\n * Ensures that the `variant` is an array and supports the `__default` key.\n */\nexport const ensureArrayVariant = <T extends string>(variant?: T | T[]) =>\n ensureArray(variant).map(ensureVariantDefault);\n\nexport type State = {\n checked?: boolean;\n focus?: boolean;\n hover?: boolean;\n disabled?: boolean;\n error?: boolean;\n};\n\n/**\n * Appends given `state` to a `variant`.\n */\nexport const appendVariantState = (variant: string, state: keyof State) => {\n return `${ensureVariantDefault(variant)}.:${state}`;\n};\n\n/**\n * Create a variant array from a `variant` and `state` containing\n * passed states, if they are truthy.\n */\nexport const conditional = (\n variant: string,\n { disabled = false, ...states }: State\n) => {\n const entries = [...Object.entries(states), ['disabled', disabled]] as [\n keyof State,\n boolean\n ][];\n const stateVariants = entries\n .filter(([, val]) => Boolean(val))\n .map(([key]) => appendVariantState(variant, key));\n\n return [variant, ...stateVariants];\n};\n","import { jsx, Theme } from '@emotion/react';\nimport { css as transformStyleObject } from '@theme-ui/css';\nimport { forwardRef } from 'react';\nimport {\n PolymorphicPropsWithRef,\n PolymorphicComponentWithRef,\n} from '@marigold/types';\n\nimport { getNormalizedStyles } from './normalize';\nimport { CSSObject } from './types';\nimport { ensureArrayVariant } from './variant';\n\nexport type StyleProps = Pick<\n CSSObject,\n | 'display'\n | 'height'\n | 'width'\n | 'minWidth'\n | 'maxWidth'\n | 'position'\n | 'top'\n | 'bottom'\n | 'right'\n | 'left'\n | 'zIndex'\n | 'p'\n | 'px'\n | 'py'\n | 'pt'\n | 'pb'\n | 'pl'\n | 'pr'\n | 'm'\n | 'mx'\n | 'my'\n | 'mt'\n | 'mb'\n | 'ml'\n | 'mr'\n | 'flexDirection'\n | 'flexWrap'\n | 'flexShrink'\n | 'flexGrow'\n | 'alignItems'\n | 'justifyContent'\n | 'bg'\n | 'border'\n | 'borderRadius'\n | 'boxShadow'\n | 'opacity'\n | 'overflow'\n | 'transition'\n>;\n\nexport type BoxOwnProps = {\n css?: CSSObject;\n variant?: string | string[];\n /**\n * Use to set base styles for the component\n * @internal Used to set default styles for Marigold components\n */\n __baseCSS?: CSSObject;\n} & StyleProps;\n\nexport type BoxProps = PolymorphicPropsWithRef<BoxOwnProps, 'div'>;\n\n/**\n * Check if there is any falsy value or empty object\n */\nconst isNotEmpty = (val: any) =>\n !(val && Object.keys(val).length === 0 && val.constructor === Object);\n\ntype CreateStyleProps = {\n as?: BoxProps['as'];\n __baseCSS?: BoxOwnProps['__baseCSS'];\n variant?: BoxOwnProps['variant'];\n css?: BoxOwnProps['css'];\n styles?: StyleProps;\n};\n\nconst createThemedStyle =\n ({ as, __baseCSS, variant, styles, css }: CreateStyleProps) =>\n (theme: Theme) => {\n return [\n getNormalizedStyles(as),\n transformStyleObject(__baseCSS)(theme),\n ...ensureArrayVariant(variant).map(v =>\n transformStyleObject({ variant: v })(theme)\n ),\n transformStyleObject(styles)(theme),\n transformStyleObject(css)(theme),\n ].filter(isNotEmpty);\n };\n\nexport const Box: PolymorphicComponentWithRef<BoxOwnProps, 'div'> = forwardRef(\n (\n {\n as = 'div',\n children,\n __baseCSS,\n variant,\n css = {},\n display,\n height,\n width,\n minWidth,\n maxWidth,\n position,\n top,\n bottom,\n right,\n left,\n zIndex,\n p,\n px,\n py,\n pt,\n pb,\n pl,\n pr,\n m,\n mx,\n my,\n mt,\n mb,\n ml,\n mr,\n flexDirection,\n flexWrap,\n flexShrink,\n flexGrow,\n alignItems,\n justifyContent,\n bg,\n border,\n borderRadius,\n boxShadow,\n opacity,\n overflow,\n transition,\n ...props\n },\n ref\n ) =>\n jsx(\n as,\n {\n ...props,\n css: createThemedStyle({\n as,\n __baseCSS,\n variant,\n css,\n styles: {\n display,\n height,\n width,\n minWidth,\n maxWidth,\n position,\n top,\n bottom,\n right,\n left,\n zIndex,\n p,\n px,\n py,\n pt,\n pb,\n pl,\n pr,\n m,\n mx,\n my,\n mt,\n mb,\n ml,\n mr,\n flexDirection,\n flexWrap,\n flexShrink,\n flexGrow,\n alignItems,\n justifyContent,\n bg,\n border,\n borderRadius,\n boxShadow,\n opacity,\n overflow,\n transition,\n },\n }),\n ref,\n },\n children\n )\n);\n","import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n} from 'react';\nimport { css as transformStyleObject } from '@theme-ui/css';\nimport { ThemeProvider as EmotionProvider } from '@emotion/react';\n\nimport { Theme } from './theme';\nimport { StyleObject } from './types';\n\n/**\n * @internal\n */\nexport const __defaultTheme: Theme = {};\n\nconst InternalContext = createContext<Theme>(__defaultTheme);\n\nexport const useTheme = () => {\n const theme = useContext(InternalContext);\n /**\n * We cast the theme here to `any` since our subset is not\n * compatible with the typings of `theme-ui`, since they\n * also support arrays as scale values, while we don't.\n */\n const css = useCallback(\n (style: StyleObject) => transformStyleObject(style)(theme as any),\n [theme]\n );\n return { theme, css };\n};\n\nexport type ThemeProviderProps<T extends Theme> = {\n theme: T;\n children: ReactNode;\n};\n\nexport function ThemeProvider<T extends Theme>({\n theme,\n children,\n}: ThemeProviderProps<T>) {\n return (\n <EmotionProvider theme={theme}>\n <InternalContext.Provider value={theme}>\n {children}\n </InternalContext.Provider>\n </EmotionProvider>\n );\n}\n","import React from 'react';\nimport { Global as EmotionGlobal } from '@emotion/react';\nimport { useTheme } from './useTheme';\n\n/**\n * CSS snippet and idea from:\n * https://css-tricks.com/revisiting-prefers-reduced-motion-the-reduced-motion-media-query/\n */\nconst reduceMotionStyles = {\n '@media screen and (prefers-reduced-motion: reduce), (update: slow)': {\n '*': {\n animationDuration: '0.001ms !important',\n animationIterationCount: '1 !important',\n transitionDuration: '0.001ms !important',\n },\n },\n};\n\nexport const Global = () => {\n const { css } = useTheme();\n const styles = css({\n html: {\n height: '100%',\n variant: 'root.html',\n },\n body: {\n height: '100%',\n lineHeight: 1.5,\n WebkitFontSmoothing: 'antialiased',\n variant: 'root.body',\n },\n });\n return <EmotionGlobal styles={{ reduceMotionStyles, ...styles }} />;\n};\n","import React from 'react';\nimport { jsx } from '@emotion/react';\nimport { ComponentProps } from '@marigold/types';\nimport { getNormalizedStyles } from '@marigold/system';\n\nconst css = getNormalizedStyles('svg');\n\nexport type SVGProps = {\n size?: number;\n} & ComponentProps<'svg'>;\n\nexport const SVG: React.FC<SVGProps> = ({ size = 24, children, ...props }) =>\n jsx(\n 'svg',\n {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'currentcolor',\n ...props,\n css,\n },\n children\n );\n"],"names":["base","boxSizing","margin","minWidth","a","textDecoration","text","overflowWrap","media","display","maxWidth","button","appearance","font","background","textAlign","input","WebkitAppearance","normalize","p","h1","h2","h3","h4","h5","h6","img","picture","video","canvas","svg","select","textarea","getNormalizedStyles","val","ensureArray","value","Array","isArray","ensureVariantDefault","replace","ensureArrayVariant","variant","map","appendVariantState","state","isNotEmpty","Object","keys","length","constructor","createThemedStyle","as","__baseCSS","styles","css","theme","transformStyleObject","v","filter","Box","forwardRef","ref","children","height","width","position","top","bottom","right","left","zIndex","px","py","pt","pb","pl","pr","m","mx","my","mt","mb","ml","mr","flexDirection","flexWrap","flexShrink","flexGrow","alignItems","justifyContent","bg","border","borderRadius","boxShadow","opacity","overflow","transition","props","jsx","__defaultTheme","InternalContext","createContext","useTheme","useContext","useCallback","style","reduceMotionStyles","animationDuration","animationIterationCount","transitionDuration","html","body","lineHeight","WebkitFontSmoothing","React","EmotionGlobal","size","viewBox","fill","EmotionProvider","Provider","disabled","states","stateVariants","entries","Boolean"],"mappings":"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"}
@@ -1,180 +1,392 @@
1
- import { css as css$1 } from '@emotion/css';
2
- export { cache } from '@emotion/css';
3
- import { css } from '@theme-ui/css';
4
- import React, { useContext, createContext } from 'react';
1
+ import { jsx, ThemeProvider as ThemeProvider$1, Global as Global$1 } from '@emotion/react';
2
+ import { css as css$1 } from '@theme-ui/css';
3
+ import React, { forwardRef, useContext, useCallback, createContext } from 'react';
4
+ import { getNormalizedStyles as getNormalizedStyles$1 } from '@marigold/system';
5
5
 
6
- var Context = /*#__PURE__*/createContext({});
7
- var useTheme = function useTheme() {
8
- return useContext(Context);
9
- };
10
- var ThemeProvider = function ThemeProvider(_ref) {
11
- var theme = _ref.theme,
12
- children = _ref.children;
13
- return React.createElement(Context.Provider, {
14
- value: theme
15
- }, children);
16
- };
6
+ function _extends() {
7
+ _extends = Object.assign || function (target) {
8
+ for (var i = 1; i < arguments.length; i++) {
9
+ var source = arguments[i];
17
10
 
18
- // lodash.isEmpty is tooo much KBs!
11
+ for (var key in source) {
12
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
13
+ target[key] = source[key];
14
+ }
15
+ }
16
+ }
19
17
 
20
- var isEmpty = function isEmpty(val) {
21
- return val && Object.keys(val).length === 0 && val.constructor === Object;
22
- };
18
+ return target;
19
+ };
20
+
21
+ return _extends.apply(this, arguments);
22
+ }
23
23
 
24
- var useClassname = function useClassname() {
25
- var theme = useTheme();
24
+ function _objectWithoutPropertiesLoose(source, excluded) {
25
+ if (source == null) return {};
26
+ var target = {};
27
+ var sourceKeys = Object.keys(source);
28
+ var key, i;
26
29
 
27
- for (var _len = arguments.length, styles = new Array(_len), _key = 0; _key < _len; _key++) {
28
- styles[_key] = arguments[_key];
30
+ for (i = 0; i < sourceKeys.length; i++) {
31
+ key = sourceKeys[i];
32
+ if (excluded.indexOf(key) >= 0) continue;
33
+ target[key] = source[key];
29
34
  }
30
35
 
31
- return styles.map(function (style) {
32
- /**
33
- * emotion will create a `css-0` class whenever an empty object is
34
- * passed. Since this makes debugging harder we'll do not pass empty
35
- * objects to emotion.
36
- */
37
- var themedStyle = css(style)(theme);
38
- return isEmpty(themedStyle) ? '' : css$1(themedStyle);
39
- }).join(' ');
40
- };
36
+ return target;
37
+ }
41
38
 
42
- var base = /*#__PURE__*/css$1({
39
+ var base = {
43
40
  boxSizing: 'border-box',
44
41
  margin: 0,
45
- padding: 0,
46
- minWidth: 0,
47
- fontSize: '100%',
48
- font: 'inherit',
49
- verticalAlign: 'baseline',
50
- WebkitTapHighlightColor: 'transparent'
51
- }); // Content
52
- // ---------------
42
+ minWidth: 0
43
+ };
53
44
 
54
- var block = /*#__PURE__*/css$1({
55
- display: 'block'
45
+ var a = /*#__PURE__*/_extends({}, base, {
46
+ textDecoration: 'none'
56
47
  });
57
- var list = /*#__PURE__*/css$1({
58
- listStyle: 'none'
48
+
49
+ var text = /*#__PURE__*/_extends({}, base, {
50
+ overflowWrap: 'break-word'
59
51
  });
60
- var table = /*#__PURE__*/css$1({
61
- borderCollapse: 'collapse',
62
- borderSpacing: 0
63
- }); // Typography
64
- // ---------------
65
52
 
66
- var a = /*#__PURE__*/css$1({
67
- textDecoration: 'none'
53
+ var media = /*#__PURE__*/_extends({}, base, {
54
+ display: 'block',
55
+ maxWidth: '100%'
68
56
  });
69
- var quote = /*#__PURE__*/css$1({
70
- quotes: 'none',
71
- selectors: {
72
- '&:before, &:after': {
73
- content: "''"
74
- }
75
- }
76
- }); // Form Elements
77
- // ---------------
78
57
 
79
- var button = /*#__PURE__*/css$1({
58
+ var button = /*#__PURE__*/_extends({}, base, {
80
59
  display: 'block',
81
60
  appearance: 'none',
61
+ font: 'inherit',
82
62
  background: 'transparent',
83
63
  textAlign: 'center'
84
64
  });
85
- var input = /*#__PURE__*/css$1({
65
+
66
+ var input = /*#__PURE__*/_extends({}, base, {
86
67
  display: 'block',
87
68
  appearance: 'none',
88
- selectors: {
89
- '&::-ms-clear': {
90
- display: 'none'
91
- },
92
- '&::-webkit-search-cancel-button': {
93
- WebkitAppearance: 'none'
94
- }
69
+ font: 'inherit',
70
+ '&::-ms-clear': {
71
+ display: 'none'
72
+ },
73
+ '&::-webkit-search-cancel-button': {
74
+ WebkitAppearance: 'none'
95
75
  }
96
76
  });
97
- var select = /*#__PURE__*/css$1({
77
+
78
+ var select = /*#__PURE__*/_extends({}, base, {
98
79
  display: 'block',
99
80
  appearance: 'none',
100
- selectors: {
101
- '&::-ms-expand': {
102
- display: 'none'
103
- }
81
+ font: 'inherit',
82
+ '&::-ms-expand': {
83
+ display: 'none'
104
84
  }
105
85
  });
106
- var textarea = /*#__PURE__*/css$1({
86
+
87
+ var textarea = /*#__PURE__*/_extends({}, base, {
107
88
  display: 'block',
108
- appearance: 'none'
109
- }); // Reset
89
+ appearance: 'none',
90
+ font: 'inherit'
91
+ }); // Normalize
110
92
  // ---------------
111
93
 
112
- var reset = {
113
- article: block,
114
- aside: block,
115
- details: block,
116
- figcaption: block,
117
- figure: block,
118
- footer: block,
119
- header: block,
120
- hgroup: block,
121
- menu: block,
122
- nav: block,
123
- section: block,
124
- ul: list,
125
- ol: list,
126
- blockquote: quote,
127
- q: quote,
128
- a: a,
94
+
95
+ var normalize = {
129
96
  base: base,
130
- table: table,
97
+ a: a,
98
+ p: text,
99
+ h1: text,
100
+ h2: text,
101
+ h3: text,
102
+ h4: text,
103
+ h5: text,
104
+ h6: text,
105
+ img: media,
106
+ picture: media,
107
+ video: media,
108
+ canvas: media,
109
+ svg: media,
131
110
  select: select,
132
111
  button: button,
133
112
  textarea: textarea,
134
113
  input: input
135
114
  };
115
+ /**
116
+ * Type-safe helper to get normalization. If no normalization is found,
117
+ * returns the *base* normalization.
118
+ */
136
119
 
120
+ var getNormalizedStyles = function getNormalizedStyles(val) {
121
+ return typeof val === 'string' && val in normalize ? normalize[val] // Typescript doesn't infer this correctly
122
+ : normalize.base;
123
+ };
124
+
125
+ var _excluded = ["disabled"];
126
+
127
+ var isNil = function isNil(value) {
128
+ return value === null || value === undefined;
129
+ };
137
130
  /**
138
- * Hook that can adds base styles, reset for certain elements, variants and custom styles
131
+ * Ensures that the `val` is an array. Will return an empty array if `val` is falsy.
139
132
  */
140
133
 
141
- var useStyles = function useStyles(_ref) {
142
- var element = _ref.element,
143
- _ref$css = _ref.css,
144
- styles = _ref$css === void 0 ? {} : _ref$css,
134
+
135
+ var ensureArray = function ensureArray(val) {
136
+ return isNil(val) ? [] : Array.isArray(val) ? val : [val];
137
+ };
138
+ /**
139
+ * Removes trailing dot from variant, if necessary. This is necessary to support
140
+ * `__default` styles. See https://github.com/system-ui/theme-ui/pull/951
141
+ */
142
+
143
+ var ensureVariantDefault = function ensureVariantDefault(val) {
144
+ return val.replace(/\.$/, '');
145
+ };
146
+ /**
147
+ * Ensures that the `variant` is an array and supports the `__default` key.
148
+ */
149
+
150
+ var ensureArrayVariant = function ensureArrayVariant(variant) {
151
+ return ensureArray(variant).map(ensureVariantDefault);
152
+ };
153
+ /**
154
+ * Appends given `state` to a `variant`.
155
+ */
156
+
157
+ var appendVariantState = function appendVariantState(variant, state) {
158
+ return ensureVariantDefault(variant) + ".:" + state;
159
+ };
160
+ /**
161
+ * Create a variant array from a `variant` and `state` containing
162
+ * passed states, if they are truthy.
163
+ */
164
+
165
+ var conditional = function conditional(variant, _ref) {
166
+ var _ref$disabled = _ref.disabled,
167
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
168
+ states = _objectWithoutPropertiesLoose(_ref, _excluded);
169
+
170
+ var entries = [].concat(Object.entries(states), [['disabled', disabled]]);
171
+ var stateVariants = entries.filter(function (_ref2) {
172
+ var val = _ref2[1];
173
+ return Boolean(val);
174
+ }).map(function (_ref3) {
175
+ var key = _ref3[0];
176
+ return appendVariantState(variant, key);
177
+ });
178
+ return [variant].concat(stateVariants);
179
+ };
180
+
181
+ var _excluded$1 = ["as", "children", "__baseCSS", "variant", "css", "display", "height", "width", "minWidth", "maxWidth", "position", "top", "bottom", "right", "left", "zIndex", "p", "px", "py", "pt", "pb", "pl", "pr", "m", "mx", "my", "mt", "mb", "ml", "mr", "flexDirection", "flexWrap", "flexShrink", "flexGrow", "alignItems", "justifyContent", "bg", "border", "borderRadius", "boxShadow", "opacity", "overflow", "transition"];
182
+ /**
183
+ * Check if there is any falsy value or empty object
184
+ */
185
+
186
+ var isNotEmpty = function isNotEmpty(val) {
187
+ return !(val && Object.keys(val).length === 0 && val.constructor === Object);
188
+ };
189
+
190
+ var createThemedStyle = function createThemedStyle(_ref) {
191
+ var as = _ref.as,
192
+ __baseCSS = _ref.__baseCSS,
145
193
  variant = _ref.variant,
146
- _ref$className = _ref.className,
147
- className = _ref$className === void 0 ? '' : _ref$className;
194
+ styles = _ref.styles,
195
+ css = _ref.css;
196
+ return function (theme) {
197
+ return [getNormalizedStyles(as), css$1(__baseCSS)(theme)].concat(ensureArrayVariant(variant).map(function (v) {
198
+ return css$1({
199
+ variant: v
200
+ })(theme);
201
+ }), [css$1(styles)(theme), css$1(css)(theme)]).filter(isNotEmpty);
202
+ };
203
+ };
148
204
 
149
- /**
150
- * Get reset styles. Base is always applied. An additional reset maybe applied
151
- * based on the passed element.
152
- *
153
- * We check the passed className if it already includes the reset styles so no
154
- * duplicates are applied.
155
- */
156
- var baseClassName = className.includes(reset.base) ? '' : reset.base;
157
- var resetClassName = typeof element === 'string' ? className.includes(reset[element]) ? '' : reset[element] : '';
158
- /**
159
- * Get variant styles (from theme).
160
- */
205
+ var Box = /*#__PURE__*/forwardRef(function (_ref2, ref) {
206
+ var _ref2$as = _ref2.as,
207
+ as = _ref2$as === void 0 ? 'div' : _ref2$as,
208
+ children = _ref2.children,
209
+ __baseCSS = _ref2.__baseCSS,
210
+ variant = _ref2.variant,
211
+ _ref2$css = _ref2.css,
212
+ css = _ref2$css === void 0 ? {} : _ref2$css,
213
+ display = _ref2.display,
214
+ height = _ref2.height,
215
+ width = _ref2.width,
216
+ minWidth = _ref2.minWidth,
217
+ maxWidth = _ref2.maxWidth,
218
+ position = _ref2.position,
219
+ top = _ref2.top,
220
+ bottom = _ref2.bottom,
221
+ right = _ref2.right,
222
+ left = _ref2.left,
223
+ zIndex = _ref2.zIndex,
224
+ p = _ref2.p,
225
+ px = _ref2.px,
226
+ py = _ref2.py,
227
+ pt = _ref2.pt,
228
+ pb = _ref2.pb,
229
+ pl = _ref2.pl,
230
+ pr = _ref2.pr,
231
+ m = _ref2.m,
232
+ mx = _ref2.mx,
233
+ my = _ref2.my,
234
+ mt = _ref2.mt,
235
+ mb = _ref2.mb,
236
+ ml = _ref2.ml,
237
+ mr = _ref2.mr,
238
+ flexDirection = _ref2.flexDirection,
239
+ flexWrap = _ref2.flexWrap,
240
+ flexShrink = _ref2.flexShrink,
241
+ flexGrow = _ref2.flexGrow,
242
+ alignItems = _ref2.alignItems,
243
+ justifyContent = _ref2.justifyContent,
244
+ bg = _ref2.bg,
245
+ border = _ref2.border,
246
+ borderRadius = _ref2.borderRadius,
247
+ boxShadow = _ref2.boxShadow,
248
+ opacity = _ref2.opacity,
249
+ overflow = _ref2.overflow,
250
+ transition = _ref2.transition,
251
+ props = _objectWithoutPropertiesLoose(_ref2, _excluded$1);
161
252
 
162
- var variants = Array.isArray(variant) ? variant.map(function (v) {
163
- return {
164
- variant: v
165
- };
166
- }) : [{
167
- variant: variant
168
- }];
169
- var variantsClassName = useClassname.apply(void 0, variants);
253
+ return jsx(as, _extends({}, props, {
254
+ css: createThemedStyle({
255
+ as: as,
256
+ __baseCSS: __baseCSS,
257
+ variant: variant,
258
+ css: css,
259
+ styles: {
260
+ display: display,
261
+ height: height,
262
+ width: width,
263
+ minWidth: minWidth,
264
+ maxWidth: maxWidth,
265
+ position: position,
266
+ top: top,
267
+ bottom: bottom,
268
+ right: right,
269
+ left: left,
270
+ zIndex: zIndex,
271
+ p: p,
272
+ px: px,
273
+ py: py,
274
+ pt: pt,
275
+ pb: pb,
276
+ pl: pl,
277
+ pr: pr,
278
+ m: m,
279
+ mx: mx,
280
+ my: my,
281
+ mt: mt,
282
+ mb: mb,
283
+ ml: ml,
284
+ mr: mr,
285
+ flexDirection: flexDirection,
286
+ flexWrap: flexWrap,
287
+ flexShrink: flexShrink,
288
+ flexGrow: flexGrow,
289
+ alignItems: alignItems,
290
+ justifyContent: justifyContent,
291
+ bg: bg,
292
+ border: border,
293
+ borderRadius: borderRadius,
294
+ boxShadow: boxShadow,
295
+ opacity: opacity,
296
+ overflow: overflow,
297
+ transition: transition
298
+ }
299
+ }),
300
+ ref: ref
301
+ }), children);
302
+ });
303
+
304
+ /**
305
+ * @internal
306
+ */
307
+
308
+ var __defaultTheme = {};
309
+ var InternalContext = /*#__PURE__*/createContext(__defaultTheme);
310
+ var useTheme = function useTheme() {
311
+ var theme = useContext(InternalContext);
170
312
  /**
171
- * Custom styles are applied "on runtime". They are usually controlled via component
172
- * props and can change between component instances.
313
+ * We cast the theme here to `any` since our subset is not
314
+ * compatible with the typings of `theme-ui`, since they
315
+ * also support arrays as scale values, while we don't.
173
316
  */
174
317
 
175
- var customClassName = useClassname(styles);
176
- return [baseClassName, resetClassName, variantsClassName, customClassName, className].filter(Boolean).join(' ');
318
+ var css = useCallback(function (style) {
319
+ return css$1(style)(theme);
320
+ }, [theme]);
321
+ return {
322
+ theme: theme,
323
+ css: css
324
+ };
325
+ };
326
+ function ThemeProvider(_ref) {
327
+ var theme = _ref.theme,
328
+ children = _ref.children;
329
+ return React.createElement(ThemeProvider$1, {
330
+ theme: theme
331
+ }, React.createElement(InternalContext.Provider, {
332
+ value: theme
333
+ }, children));
334
+ }
335
+
336
+ /**
337
+ * CSS snippet and idea from:
338
+ * https://css-tricks.com/revisiting-prefers-reduced-motion-the-reduced-motion-media-query/
339
+ */
340
+
341
+ var reduceMotionStyles = {
342
+ '@media screen and (prefers-reduced-motion: reduce), (update: slow)': {
343
+ '*': {
344
+ animationDuration: '0.001ms !important',
345
+ animationIterationCount: '1 !important',
346
+ transitionDuration: '0.001ms !important'
347
+ }
348
+ }
349
+ };
350
+ var Global = function Global() {
351
+ var _useTheme = useTheme(),
352
+ css = _useTheme.css;
353
+
354
+ var styles = css({
355
+ html: {
356
+ height: '100%',
357
+ variant: 'root.html'
358
+ },
359
+ body: {
360
+ height: '100%',
361
+ lineHeight: 1.5,
362
+ WebkitFontSmoothing: 'antialiased',
363
+ variant: 'root.body'
364
+ }
365
+ });
366
+ return React.createElement(Global$1, {
367
+ styles: _extends({
368
+ reduceMotionStyles: reduceMotionStyles
369
+ }, styles)
370
+ });
371
+ };
372
+
373
+ var _excluded$2 = ["size", "children"];
374
+ var css = /*#__PURE__*/getNormalizedStyles$1('svg');
375
+ var SVG = function SVG(_ref) {
376
+ var _ref$size = _ref.size,
377
+ size = _ref$size === void 0 ? 24 : _ref$size,
378
+ children = _ref.children,
379
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
380
+
381
+ return jsx('svg', _extends({
382
+ width: size,
383
+ height: size,
384
+ viewBox: '0 0 24 24',
385
+ fill: 'currentcolor'
386
+ }, props, {
387
+ css: css
388
+ }), children);
177
389
  };
178
390
 
179
- export { ThemeProvider, useClassname, useStyles, useTheme };
391
+ export { Box, Global, SVG, ThemeProvider, __defaultTheme, appendVariantState, conditional, ensureArray, ensureArrayVariant, ensureVariantDefault, getNormalizedStyles, normalize, useTheme };
180
392
  //# sourceMappingURL=system.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.esm.js","sources":["../src/useTheme.tsx","../src/useClassname.ts","../src/reset.ts","../src/useStyles.ts"],"sourcesContent":["import React, { createContext, useContext } from 'react';\nimport { Theme } from '@marigold/system';\n\nconst Context = createContext<Theme>({});\n\nexport const useTheme = () => useContext(Context);\n\nexport type ThemeProviderProps = { theme: any };\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n theme,\n children,\n}) => <Context.Provider value={theme}>{children}</Context.Provider>;\n","import { css as emotion } from '@emotion/css';\nimport { css } from '@theme-ui/css';\nimport { StyleObject } from './types';\nimport { useTheme } from './useTheme';\n\n// 🤫 https://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object\n// lodash.isEmpty is tooo much KBs!\nconst isEmpty = (val: any) =>\n val && Object.keys(val).length === 0 && val.constructor === Object;\n\nexport const useClassname = (...styles: StyleObject[]) => {\n const theme = useTheme();\n return styles\n .map(style => {\n /**\n * emotion will create a `css-0` class whenever an empty object is\n * passed. Since this makes debugging harder we'll do not pass empty\n * objects to emotion.\n */\n const themedStyle = css(style)(theme);\n return isEmpty(themedStyle) ? '' : emotion(themedStyle);\n })\n .join(' ');\n};\n","import { css } from '@emotion/css';\n\nconst base = css({\n boxSizing: 'border-box',\n margin: 0,\n padding: 0,\n minWidth: 0,\n fontSize: '100%',\n font: 'inherit',\n verticalAlign: 'baseline',\n WebkitTapHighlightColor: 'transparent',\n});\n\n// Content\n// ---------------\nconst block = css({\n display: 'block',\n});\n\nconst list = css({\n listStyle: 'none',\n});\n\nconst table = css({\n borderCollapse: 'collapse',\n borderSpacing: 0,\n});\n\n// Typography\n// ---------------\nconst a = css({\n textDecoration: 'none',\n});\n\nconst quote = css({\n quotes: 'none',\n selectors: {\n '&:before, &:after': {\n content: \"''\",\n },\n },\n});\n\n// Form Elements\n// ---------------\nconst button = css({\n display: 'block',\n appearance: 'none',\n background: 'transparent',\n textAlign: 'center',\n});\n\nconst input = css({\n display: 'block',\n appearance: 'none',\n selectors: {\n '&::-ms-clear': {\n display: 'none',\n },\n '&::-webkit-search-cancel-button': {\n WebkitAppearance: 'none',\n },\n },\n});\n\nconst select = css({\n display: 'block',\n appearance: 'none',\n selectors: {\n '&::-ms-expand': {\n display: 'none',\n },\n },\n});\n\nconst textarea = css({\n display: 'block',\n appearance: 'none',\n});\n\n// Reset\n// ---------------\nexport const reset = {\n article: block,\n aside: block,\n details: block,\n figcaption: block,\n figure: block,\n footer: block,\n header: block,\n hgroup: block,\n menu: block,\n nav: block,\n section: block,\n ul: list,\n ol: list,\n blockquote: quote,\n q: quote,\n a,\n base,\n table,\n select,\n button,\n textarea,\n input,\n} as const;\n","import { ElementType } from 'react';\nimport { reset } from './reset';\nimport { CSSObject } from './types';\nimport { useClassname } from './useClassname';\n\nexport type UseStyleInput = {\n\telement?: ElementType;\n\tcss?: Omit<CSSObject, 'variant' | 'element'> & { variant?: never; element?: never };\n\tvariant?: string | string[];\n\tclassName?: string;\n}\n\n/**\n * Hook that can adds base styles, reset for certain elements, variants and custom styles\n */\nexport const useStyles = ({ element, css: styles = {}, variant, className = '' }: UseStyleInput) => {\n /**\n * Get reset styles. Base is always applied. An additional reset maybe applied\n * based on the passed element.\n *\n * We check the passed className if it already includes the reset styles so no\n * duplicates are applied.\n */\n const baseClassName = className.includes(reset.base) ? '' : reset.base;\n const resetClassName =\n typeof element === 'string'\n ? className.includes((reset as { [key: string]: string })[element])\n ? ''\n : (reset as { [key: string]: string })[element]\n : '';\n\n /**\n * Get variant styles (from theme).\n */\n const variants = Array.isArray(variant)\n ? variant.map(v => ({ variant: v }))\n : [{ variant }];\n const variantsClassName = useClassname(...variants);\n\n /**\n * Custom styles are applied \"on runtime\". They are usually controlled via component\n * props and can change between component instances.\n */\n const customClassName = useClassname(styles);\n\n return [\n baseClassName,\n resetClassName,\n variantsClassName,\n customClassName,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n};\n"],"names":["Context","createContext","useTheme","useContext","ThemeProvider","theme","children","React","Provider","value","isEmpty","val","Object","keys","length","constructor","useClassname","styles","map","style","themedStyle","css","emotion","join","base","boxSizing","margin","padding","minWidth","fontSize","font","verticalAlign","WebkitTapHighlightColor","block","display","list","listStyle","table","borderCollapse","borderSpacing","a","textDecoration","quote","quotes","selectors","content","button","appearance","background","textAlign","input","WebkitAppearance","select","textarea","reset","article","aside","details","figcaption","figure","footer","header","hgroup","menu","nav","section","ul","ol","blockquote","q","useStyles","element","variant","className","baseClassName","includes","resetClassName","variants","Array","isArray","v","variantsClassName","customClassName","filter","Boolean"],"mappings":";;;;;AAGA,IAAMA,OAAO,gBAAGC,aAAa,CAAQ,EAAR,CAA7B;IAEaC,QAAQ,GAAG,SAAXA,QAAW;AAAA,SAAMC,UAAU,CAACH,OAAD,CAAhB;AAAA;IAGXI,aAAa,GAAiC,SAA9CA,aAA8C;AAAA,MACzDC,KADyD,QACzDA,KADyD;AAAA,MAEzDC,QAFyD,QAEzDA,QAFyD;AAAA,SAGrDC,mBAAA,CAACP,OAAO,CAACQ,QAAT;AAAkBC,IAAAA,KAAK,EAAEJ;GAAzB,EAAiCC,QAAjC,CAHqD;AAAA;;ACF3D;;AACA,IAAMI,OAAO,GAAG,SAAVA,OAAU,CAACC,GAAD;AAAA,SACdA,GAAG,IAAIC,MAAM,CAACC,IAAP,CAAYF,GAAZ,EAAiBG,MAAjB,KAA4B,CAAnC,IAAwCH,GAAG,CAACI,WAAJ,KAAoBH,MAD9C;AAAA,CAAhB;;AAGA,IAAaI,YAAY,GAAG,SAAfA,YAAe;AAC1B,MAAMX,KAAK,GAAGH,QAAQ,EAAtB;;oCAD8Be;AAAAA,IAAAA;;;AAE9B,SAAOA,MAAM,CACVC,GADI,CACA,UAAAC,KAAK;AACR;;;;;AAKA,QAAMC,WAAW,GAAGC,GAAG,CAACF,KAAD,CAAH,CAAWd,KAAX,CAApB;AACA,WAAOK,OAAO,CAACU,WAAD,CAAP,GAAuB,EAAvB,GAA4BE,KAAO,CAACF,WAAD,CAA1C;AACD,GATI,EAUJG,IAVI,CAUC,GAVD,CAAP;AAWD,CAbM;;ACRP,IAAMC,IAAI,gBAAGH,KAAG,CAAC;AACfI,EAAAA,SAAS,EAAE,YADI;AAEfC,EAAAA,MAAM,EAAE,CAFO;AAGfC,EAAAA,OAAO,EAAE,CAHM;AAIfC,EAAAA,QAAQ,EAAE,CAJK;AAKfC,EAAAA,QAAQ,EAAE,MALK;AAMfC,EAAAA,IAAI,EAAE,SANS;AAOfC,EAAAA,aAAa,EAAE,UAPA;AAQfC,EAAAA,uBAAuB,EAAE;AARV,CAAD,CAAhB;AAYA;;AACA,IAAMC,KAAK,gBAAGZ,KAAG,CAAC;AAChBa,EAAAA,OAAO,EAAE;AADO,CAAD,CAAjB;AAIA,IAAMC,IAAI,gBAAGd,KAAG,CAAC;AACfe,EAAAA,SAAS,EAAE;AADI,CAAD,CAAhB;AAIA,IAAMC,KAAK,gBAAGhB,KAAG,CAAC;AAChBiB,EAAAA,cAAc,EAAE,UADA;AAEhBC,EAAAA,aAAa,EAAE;AAFC,CAAD,CAAjB;AAMA;;AACA,IAAMC,CAAC,gBAAGnB,KAAG,CAAC;AACZoB,EAAAA,cAAc,EAAE;AADJ,CAAD,CAAb;AAIA,IAAMC,KAAK,gBAAGrB,KAAG,CAAC;AAChBsB,EAAAA,MAAM,EAAE,MADQ;AAEhBC,EAAAA,SAAS,EAAE;AACT,yBAAqB;AACnBC,MAAAA,OAAO,EAAE;AADU;AADZ;AAFK,CAAD,CAAjB;AAUA;;AACA,IAAMC,MAAM,gBAAGzB,KAAG,CAAC;AACjBa,EAAAA,OAAO,EAAE,OADQ;AAEjBa,EAAAA,UAAU,EAAE,MAFK;AAGjBC,EAAAA,UAAU,EAAE,aAHK;AAIjBC,EAAAA,SAAS,EAAE;AAJM,CAAD,CAAlB;AAOA,IAAMC,KAAK,gBAAG7B,KAAG,CAAC;AAChBa,EAAAA,OAAO,EAAE,OADO;AAEhBa,EAAAA,UAAU,EAAE,MAFI;AAGhBH,EAAAA,SAAS,EAAE;AACT,oBAAgB;AACdV,MAAAA,OAAO,EAAE;AADK,KADP;AAIT,uCAAmC;AACjCiB,MAAAA,gBAAgB,EAAE;AADe;AAJ1B;AAHK,CAAD,CAAjB;AAaA,IAAMC,MAAM,gBAAG/B,KAAG,CAAC;AACjBa,EAAAA,OAAO,EAAE,OADQ;AAEjBa,EAAAA,UAAU,EAAE,MAFK;AAGjBH,EAAAA,SAAS,EAAE;AACT,qBAAiB;AACfV,MAAAA,OAAO,EAAE;AADM;AADR;AAHM,CAAD,CAAlB;AAUA,IAAMmB,QAAQ,gBAAGhC,KAAG,CAAC;AACnBa,EAAAA,OAAO,EAAE,OADU;AAEnBa,EAAAA,UAAU,EAAE;AAFO,CAAD,CAApB;AAMA;;AACA,AAAO,IAAMO,KAAK,GAAG;AACnBC,EAAAA,OAAO,EAAEtB,KADU;AAEnBuB,EAAAA,KAAK,EAAEvB,KAFY;AAGnBwB,EAAAA,OAAO,EAAExB,KAHU;AAInByB,EAAAA,UAAU,EAAEzB,KAJO;AAKnB0B,EAAAA,MAAM,EAAE1B,KALW;AAMnB2B,EAAAA,MAAM,EAAE3B,KANW;AAOnB4B,EAAAA,MAAM,EAAE5B,KAPW;AAQnB6B,EAAAA,MAAM,EAAE7B,KARW;AASnB8B,EAAAA,IAAI,EAAE9B,KATa;AAUnB+B,EAAAA,GAAG,EAAE/B,KAVc;AAWnBgC,EAAAA,OAAO,EAAEhC,KAXU;AAYnBiC,EAAAA,EAAE,EAAE/B,IAZe;AAanBgC,EAAAA,EAAE,EAAEhC,IAbe;AAcnBiC,EAAAA,UAAU,EAAE1B,KAdO;AAenB2B,EAAAA,CAAC,EAAE3B,KAfgB;AAgBnBF,EAAAA,CAAC,EAADA,CAhBmB;AAiBnBhB,EAAAA,IAAI,EAAJA,IAjBmB;AAkBnBa,EAAAA,KAAK,EAALA,KAlBmB;AAmBnBe,EAAAA,MAAM,EAANA,MAnBmB;AAoBnBN,EAAAA,MAAM,EAANA,MApBmB;AAqBnBO,EAAAA,QAAQ,EAARA,QArBmB;AAsBnBH,EAAAA,KAAK,EAALA;AAtBmB,CAAd;;ACtEP;;;;AAGA,IAAaoB,SAAS,GAAG,SAAZA,SAAY;MAAGC,eAAAA;sBAASlD;MAAKJ,+BAAS;MAAIuD,eAAAA;4BAASC;MAAAA,wCAAY;;AAC1E;;;;;;;AAOA,MAAMC,aAAa,GAAGD,SAAS,CAACE,QAAV,CAAmBrB,KAAK,CAAC9B,IAAzB,IAAiC,EAAjC,GAAsC8B,KAAK,CAAC9B,IAAlE;AACA,MAAMoD,cAAc,GAClB,OAAOL,OAAP,KAAmB,QAAnB,GACIE,SAAS,CAACE,QAAV,CAAoBrB,KAAmC,CAACiB,OAAD,CAAvD,IACE,EADF,GAEGjB,KAAmC,CAACiB,OAAD,CAH1C,GAII,EALN;AAOA;;;;AAGA,MAAMM,QAAQ,GAAGC,KAAK,CAACC,OAAN,CAAcP,OAAd,IACbA,OAAO,CAACtD,GAAR,CAAY,UAAA8D,CAAC;AAAA,WAAK;AAAER,MAAAA,OAAO,EAAEQ;AAAX,KAAL;AAAA,GAAb,CADa,GAEb,CAAC;AAAER,IAAAA,OAAO,EAAPA;AAAF,GAAD,CAFJ;AAGA,MAAMS,iBAAiB,GAAGjE,YAAY,MAAZ,SAAgB6D,QAAhB,CAA1B;AAEA;;;;;AAIA,MAAMK,eAAe,GAAGlE,YAAY,CAACC,MAAD,CAApC;AAEA,SAAO,CACLyD,aADK,EAELE,cAFK,EAGLK,iBAHK,EAILC,eAJK,EAKLT,SALK,EAOJU,MAPI,CAOGC,OAPH,EAQJ7D,IARI,CAQC,GARD,CAAP;AASD,CAvCM;;;;"}
1
+ {"version":3,"file":"system.esm.js","sources":["../src/normalize.ts","../src/variant.ts","../src/Box.tsx","../src/useTheme.tsx","../src/Global.tsx","../src/SVG.tsx"],"sourcesContent":["/**\n * Normalize styling of certain elements between browsers.\n * Based on https://www.joshwcomeau.com/css/custom-css-reset/\n */\nimport { ElementType } from 'react';\n\nconst base = {\n boxSizing: 'border-box',\n margin: 0,\n minWidth: 0,\n} as const;\n\nconst a = {\n ...base,\n textDecoration: 'none',\n} as const;\n\nconst text = {\n ...base,\n overflowWrap: 'break-word',\n} as const;\n\nconst media = {\n ...base,\n display: 'block',\n maxWidth: '100%',\n} as const;\n\nconst button = {\n ...base,\n display: 'block',\n appearance: 'none',\n font: 'inherit',\n background: 'transparent',\n textAlign: 'center',\n} as const;\n\nconst input = {\n ...base,\n display: 'block',\n appearance: 'none',\n font: 'inherit',\n '&::-ms-clear': {\n display: 'none',\n },\n '&::-webkit-search-cancel-button': {\n WebkitAppearance: 'none',\n },\n} as const;\n\nconst select = {\n ...base,\n display: 'block',\n appearance: 'none',\n font: 'inherit',\n '&::-ms-expand': {\n display: 'none',\n },\n} as const;\n\nconst textarea = {\n ...base,\n display: 'block',\n appearance: 'none',\n font: 'inherit',\n} as const;\n\n// Normalize\n// ---------------\nexport const normalize = {\n base,\n a,\n p: text,\n h1: text,\n h2: text,\n h3: text,\n h4: text,\n h5: text,\n h6: text,\n img: media,\n picture: media,\n video: media,\n canvas: media,\n svg: media,\n select,\n button,\n textarea,\n input,\n} as const;\n\nexport type NormalizedElement = keyof typeof normalize;\n\n/**\n * Type-safe helper to get normalization. If no normalization is found,\n * returns the *base* normalization.\n */\nexport const getNormalizedStyles = (val?: ElementType) =>\n typeof val === 'string' && val in normalize\n ? normalize[val as NormalizedElement] // Typescript doesn't infer this correctly\n : normalize.base;\n","const isNil = (value: any): value is null | undefined =>\n value === null || value === undefined;\n\n/**\n * Ensures that the `val` is an array. Will return an empty array if `val` is falsy.\n */\nexport const ensureArray = <T>(val?: T | T[]) =>\n isNil(val) ? [] : Array.isArray(val) ? val : [val];\n\n/**\n * Removes trailing dot from variant, if necessary. This is necessary to support\n * `__default` styles. See https://github.com/system-ui/theme-ui/pull/951\n */\nexport const ensureVariantDefault = (val: string) => val.replace(/\\.$/, '');\n\n/**\n * Ensures that the `variant` is an array and supports the `__default` key.\n */\nexport const ensureArrayVariant = <T extends string>(variant?: T | T[]) =>\n ensureArray(variant).map(ensureVariantDefault);\n\nexport type State = {\n checked?: boolean;\n focus?: boolean;\n hover?: boolean;\n disabled?: boolean;\n error?: boolean;\n};\n\n/**\n * Appends given `state` to a `variant`.\n */\nexport const appendVariantState = (variant: string, state: keyof State) => {\n return `${ensureVariantDefault(variant)}.:${state}`;\n};\n\n/**\n * Create a variant array from a `variant` and `state` containing\n * passed states, if they are truthy.\n */\nexport const conditional = (\n variant: string,\n { disabled = false, ...states }: State\n) => {\n const entries = [...Object.entries(states), ['disabled', disabled]] as [\n keyof State,\n boolean\n ][];\n const stateVariants = entries\n .filter(([, val]) => Boolean(val))\n .map(([key]) => appendVariantState(variant, key));\n\n return [variant, ...stateVariants];\n};\n","import { jsx, Theme } from '@emotion/react';\nimport { css as transformStyleObject } from '@theme-ui/css';\nimport { forwardRef } from 'react';\nimport {\n PolymorphicPropsWithRef,\n PolymorphicComponentWithRef,\n} from '@marigold/types';\n\nimport { getNormalizedStyles } from './normalize';\nimport { CSSObject } from './types';\nimport { ensureArrayVariant } from './variant';\n\nexport type StyleProps = Pick<\n CSSObject,\n | 'display'\n | 'height'\n | 'width'\n | 'minWidth'\n | 'maxWidth'\n | 'position'\n | 'top'\n | 'bottom'\n | 'right'\n | 'left'\n | 'zIndex'\n | 'p'\n | 'px'\n | 'py'\n | 'pt'\n | 'pb'\n | 'pl'\n | 'pr'\n | 'm'\n | 'mx'\n | 'my'\n | 'mt'\n | 'mb'\n | 'ml'\n | 'mr'\n | 'flexDirection'\n | 'flexWrap'\n | 'flexShrink'\n | 'flexGrow'\n | 'alignItems'\n | 'justifyContent'\n | 'bg'\n | 'border'\n | 'borderRadius'\n | 'boxShadow'\n | 'opacity'\n | 'overflow'\n | 'transition'\n>;\n\nexport type BoxOwnProps = {\n css?: CSSObject;\n variant?: string | string[];\n /**\n * Use to set base styles for the component\n * @internal Used to set default styles for Marigold components\n */\n __baseCSS?: CSSObject;\n} & StyleProps;\n\nexport type BoxProps = PolymorphicPropsWithRef<BoxOwnProps, 'div'>;\n\n/**\n * Check if there is any falsy value or empty object\n */\nconst isNotEmpty = (val: any) =>\n !(val && Object.keys(val).length === 0 && val.constructor === Object);\n\ntype CreateStyleProps = {\n as?: BoxProps['as'];\n __baseCSS?: BoxOwnProps['__baseCSS'];\n variant?: BoxOwnProps['variant'];\n css?: BoxOwnProps['css'];\n styles?: StyleProps;\n};\n\nconst createThemedStyle =\n ({ as, __baseCSS, variant, styles, css }: CreateStyleProps) =>\n (theme: Theme) => {\n return [\n getNormalizedStyles(as),\n transformStyleObject(__baseCSS)(theme),\n ...ensureArrayVariant(variant).map(v =>\n transformStyleObject({ variant: v })(theme)\n ),\n transformStyleObject(styles)(theme),\n transformStyleObject(css)(theme),\n ].filter(isNotEmpty);\n };\n\nexport const Box: PolymorphicComponentWithRef<BoxOwnProps, 'div'> = forwardRef(\n (\n {\n as = 'div',\n children,\n __baseCSS,\n variant,\n css = {},\n display,\n height,\n width,\n minWidth,\n maxWidth,\n position,\n top,\n bottom,\n right,\n left,\n zIndex,\n p,\n px,\n py,\n pt,\n pb,\n pl,\n pr,\n m,\n mx,\n my,\n mt,\n mb,\n ml,\n mr,\n flexDirection,\n flexWrap,\n flexShrink,\n flexGrow,\n alignItems,\n justifyContent,\n bg,\n border,\n borderRadius,\n boxShadow,\n opacity,\n overflow,\n transition,\n ...props\n },\n ref\n ) =>\n jsx(\n as,\n {\n ...props,\n css: createThemedStyle({\n as,\n __baseCSS,\n variant,\n css,\n styles: {\n display,\n height,\n width,\n minWidth,\n maxWidth,\n position,\n top,\n bottom,\n right,\n left,\n zIndex,\n p,\n px,\n py,\n pt,\n pb,\n pl,\n pr,\n m,\n mx,\n my,\n mt,\n mb,\n ml,\n mr,\n flexDirection,\n flexWrap,\n flexShrink,\n flexGrow,\n alignItems,\n justifyContent,\n bg,\n border,\n borderRadius,\n boxShadow,\n opacity,\n overflow,\n transition,\n },\n }),\n ref,\n },\n children\n )\n);\n","import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n} from 'react';\nimport { css as transformStyleObject } from '@theme-ui/css';\nimport { ThemeProvider as EmotionProvider } from '@emotion/react';\n\nimport { Theme } from './theme';\nimport { StyleObject } from './types';\n\n/**\n * @internal\n */\nexport const __defaultTheme: Theme = {};\n\nconst InternalContext = createContext<Theme>(__defaultTheme);\n\nexport const useTheme = () => {\n const theme = useContext(InternalContext);\n /**\n * We cast the theme here to `any` since our subset is not\n * compatible with the typings of `theme-ui`, since they\n * also support arrays as scale values, while we don't.\n */\n const css = useCallback(\n (style: StyleObject) => transformStyleObject(style)(theme as any),\n [theme]\n );\n return { theme, css };\n};\n\nexport type ThemeProviderProps<T extends Theme> = {\n theme: T;\n children: ReactNode;\n};\n\nexport function ThemeProvider<T extends Theme>({\n theme,\n children,\n}: ThemeProviderProps<T>) {\n return (\n <EmotionProvider theme={theme}>\n <InternalContext.Provider value={theme}>\n {children}\n </InternalContext.Provider>\n </EmotionProvider>\n );\n}\n","import React from 'react';\nimport { Global as EmotionGlobal } from '@emotion/react';\nimport { useTheme } from './useTheme';\n\n/**\n * CSS snippet and idea from:\n * https://css-tricks.com/revisiting-prefers-reduced-motion-the-reduced-motion-media-query/\n */\nconst reduceMotionStyles = {\n '@media screen and (prefers-reduced-motion: reduce), (update: slow)': {\n '*': {\n animationDuration: '0.001ms !important',\n animationIterationCount: '1 !important',\n transitionDuration: '0.001ms !important',\n },\n },\n};\n\nexport const Global = () => {\n const { css } = useTheme();\n const styles = css({\n html: {\n height: '100%',\n variant: 'root.html',\n },\n body: {\n height: '100%',\n lineHeight: 1.5,\n WebkitFontSmoothing: 'antialiased',\n variant: 'root.body',\n },\n });\n return <EmotionGlobal styles={{ reduceMotionStyles, ...styles }} />;\n};\n","import React from 'react';\nimport { jsx } from '@emotion/react';\nimport { ComponentProps } from '@marigold/types';\nimport { getNormalizedStyles } from '@marigold/system';\n\nconst css = getNormalizedStyles('svg');\n\nexport type SVGProps = {\n size?: number;\n} & ComponentProps<'svg'>;\n\nexport const SVG: React.FC<SVGProps> = ({ size = 24, children, ...props }) =>\n jsx(\n 'svg',\n {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'currentcolor',\n ...props,\n css,\n },\n children\n );\n"],"names":["base","boxSizing","margin","minWidth","a","textDecoration","text","overflowWrap","media","display","maxWidth","button","appearance","font","background","textAlign","input","WebkitAppearance","select","textarea","normalize","p","h1","h2","h3","h4","h5","h6","img","picture","video","canvas","svg","getNormalizedStyles","val","isNil","value","undefined","ensureArray","Array","isArray","ensureVariantDefault","replace","ensureArrayVariant","variant","map","appendVariantState","state","conditional","disabled","states","entries","Object","stateVariants","filter","Boolean","key","isNotEmpty","keys","length","constructor","createThemedStyle","as","__baseCSS","styles","css","theme","transformStyleObject","v","Box","forwardRef","ref","children","height","width","position","top","bottom","right","left","zIndex","px","py","pt","pb","pl","pr","m","mx","my","mt","mb","ml","mr","flexDirection","flexWrap","flexShrink","flexGrow","alignItems","justifyContent","bg","border","borderRadius","boxShadow","opacity","overflow","transition","props","jsx","__defaultTheme","InternalContext","createContext","useTheme","useContext","useCallback","style","ThemeProvider","React","EmotionProvider","Provider","reduceMotionStyles","animationDuration","animationIterationCount","transitionDuration","Global","html","body","lineHeight","WebkitFontSmoothing","EmotionGlobal","SVG","size","viewBox","fill"],"mappings":"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"}