UNPKG

@yamada-ui/react

Version:

React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion

1 lines 6.04 kB
{"version":3,"file":"breakpoint.cjs","names":[],"sources":["../../../../src/core/system/breakpoint.ts"],"sourcesContent":["import type { Dict } from \"../../utils\"\nimport type {\n Breakpoint,\n BreakpointConfig,\n DefineThemeBreakpointTokens,\n} from \"./index.types\"\nimport { getPx, isObject } from \"../../utils\"\n\ninterface BreakpointQuery {\n breakpoint: Breakpoint\n maxW: number | undefined\n maxWQuery: string | undefined\n minMaxQuery: string | undefined\n minW: number | undefined\n minWQuery: string | undefined\n query: string | undefined\n}\n\nexport interface Breakpoints {\n getQuery: (key: string) => string | undefined\n isResponsive: (obj: any, strict?: boolean) => boolean\n isResponsiveKey: (key: string) => boolean\n keys: Breakpoint[]\n queries: BreakpointQuery[]\n queriesObj: { [key: string]: BreakpointQuery }\n}\n\nfunction createQuery(\n min: number | undefined,\n max: number | undefined,\n identifier = \"@media screen\",\n): string | undefined {\n const query = [identifier]\n\n if (min) query.push(\"and\", `(min-width: ${min}px)`)\n if (max) query.push(\"and\", `(max-width: ${max}px)`)\n\n return query.length > 1\n ? query.join(\" \").replace(/^@container(\\s+\\w*)?\\s+and/, `@container$1`)\n : undefined\n}\n\nfunction createQueries(breakpoints: Dict<number>, config: BreakpointConfig) {\n const { direction, identifier } = config\n const down = direction !== \"up\"\n\n const queryEntries = Object.entries(breakpoints)\n .map(([breakpoint, width], i, entry) => {\n const [, relatedWidth] = entry[i + 1] ?? []\n let minW = down ? relatedWidth : width\n let maxW = down ? width : relatedWidth\n\n if (breakpoint === \"base\") {\n if (down) {\n maxW = undefined\n } else {\n minW = undefined\n }\n }\n\n if (down) {\n if (minW) minW += 1\n } else {\n if (maxW) maxW -= 1\n }\n\n const maxWQuery = createQuery(undefined, maxW, identifier)\n const minWQuery = createQuery(minW, undefined, identifier)\n const minMaxQuery = createQuery(minW, maxW, identifier)\n const query = down ? maxWQuery : minWQuery\n\n return [\n breakpoint,\n {\n breakpoint: breakpoint as Breakpoint,\n maxW,\n maxWQuery,\n minMaxQuery,\n minW,\n minWQuery,\n query,\n },\n ] as const\n })\n .sort((a, b) =>\n down\n ? (b[1].maxW ?? Infinity) - (a[1].maxW ?? Infinity)\n : (a[1].minW ?? 0) - (b[1].minW ?? 0),\n )\n\n const queries = queryEntries.map(([_, query]) => query)\n const queriesObj = Object.fromEntries(queryEntries)\n\n return { queries, queriesObj }\n}\n\nfunction transformBreakpoints(\n breakpoints: Dict,\n config: BreakpointConfig,\n): Dict {\n return Object.fromEntries(\n Object.entries(breakpoints)\n .map(([name, value]) => [name, getPx(value)] as const)\n .sort((a, b) => {\n if (config.direction !== \"up\") {\n return b[1] - a[1]\n } else {\n return a[1] - b[1]\n }\n }),\n )\n}\n\nexport function createBreakpoints(\n breakpoints: DefineThemeBreakpointTokens = {},\n config: BreakpointConfig = {},\n): Breakpoints {\n config.base ??= \"9999px\"\n config.direction ??= \"down\"\n\n breakpoints.base = config.direction !== \"up\" ? config.base : \"0px\"\n\n const transformedBreakpoints = transformBreakpoints(breakpoints, config)\n const { queries, queriesObj } = createQueries(transformedBreakpoints, config)\n const keys = Object.keys(queriesObj) as Breakpoint[]\n\n function isResponsive(obj: any, strict = false) {\n if (!isObject(obj)) return false\n\n const providedKeys = Object.keys(obj) as Breakpoint[]\n\n if (!providedKeys.length) return false\n\n if (strict && !providedKeys.includes(\"base\")) return false\n\n return providedKeys.every((key) => keys.includes(key))\n }\n\n function isResponsiveKey(key: string) {\n return key in queriesObj\n }\n\n function getQuery(key: string) {\n return key in queriesObj ? queriesObj[key]?.query : undefined\n }\n\n return {\n getQuery,\n isResponsive,\n isResponsiveKey,\n keys,\n queries,\n queriesObj,\n }\n}\n"],"mappings":";;;AA2BA,SAAS,YACP,KACA,KACA,aAAa,iBACO;CACpB,MAAM,QAAQ,CAAC,WAAW;AAE1B,KAAI,IAAK,OAAM,KAAK,OAAO,eAAe,IAAI,KAAK;AACnD,KAAI,IAAK,OAAM,KAAK,OAAO,eAAe,IAAI,KAAK;AAEnD,QAAO,MAAM,SAAS,IAClB,MAAM,KAAK,IAAI,CAAC,QAAQ,8BAA8B,eAAe,GACrE;;AAGN,SAAS,cAAc,aAA2B,QAA0B;CAC1E,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,OAAO,cAAc;CAE3B,MAAM,eAAe,OAAO,QAAQ,YAAY,CAC7C,KAAK,CAAC,YAAY,QAAQ,GAAG,UAAU;EACtC,MAAM,GAAG,gBAAgB,MAAM,IAAI,MAAM,EAAE;EAC3C,IAAI,OAAO,OAAO,eAAe;EACjC,IAAI,OAAO,OAAO,QAAQ;AAE1B,MAAI,eAAe,OACjB,KAAI,KACF,QAAO;MAEP,QAAO;AAIX,MAAI,MACF;OAAI,KAAM,SAAQ;aAEd,KAAM,SAAQ;EAGpB,MAAM,YAAY,YAAY,QAAW,MAAM,WAAW;EAC1D,MAAM,YAAY,YAAY,MAAM,QAAW,WAAW;EAC1D,MAAM,cAAc,YAAY,MAAM,MAAM,WAAW;AAGvD,SAAO,CACL,YACA;GACc;GACZ;GACA;GACA;GACA;GACA;GACA,OAXU,OAAO,YAAY;GAY9B,CACF;GACD,CACD,MAAM,GAAG,MACR,QACK,EAAE,GAAG,QAAQ,aAAa,EAAE,GAAG,QAAQ,aACvC,EAAE,GAAG,QAAQ,MAAM,EAAE,GAAG,QAAQ,GACtC;AAKH,QAAO;EAAE,SAHO,aAAa,KAAK,CAAC,GAAG,WAAW,MAAM;EAGrC,YAFC,OAAO,YAAY,aAAa;EAErB;;AAGhC,SAAS,qBACP,aACA,QACM;AACN,QAAO,OAAO,YACZ,OAAO,QAAQ,YAAY,CACxB,KAAK,CAAC,MAAM,WAAW,CAAC,mDAAY,MAAM,CAAC,CAAU,CACrD,MAAM,GAAG,MAAM;AACd,MAAI,OAAO,cAAc,KACvB,QAAO,EAAE,KAAK,EAAE;MAEhB,QAAO,EAAE,KAAK,EAAE;GAElB,CACL;;AAGH,SAAgB,kBACd,cAA2C,EAAE,EAC7C,SAA2B,EAAE,EAChB;AACb,QAAO,SAAS;AAChB,QAAO,cAAc;AAErB,aAAY,OAAO,OAAO,cAAc,OAAO,OAAO,OAAO;CAG7D,MAAM,EAAE,SAAS,eAAe,cADD,qBAAqB,aAAa,OAAO,EACF,OAAO;CAC7E,MAAM,OAAO,OAAO,KAAK,WAAW;CAEpC,SAAS,aAAa,KAAU,SAAS,OAAO;AAC9C,MAAI,iDAAU,IAAI,CAAE,QAAO;EAE3B,MAAM,eAAe,OAAO,KAAK,IAAI;AAErC,MAAI,CAAC,aAAa,OAAQ,QAAO;AAEjC,MAAI,UAAU,CAAC,aAAa,SAAS,OAAO,CAAE,QAAO;AAErD,SAAO,aAAa,OAAO,QAAQ,KAAK,SAAS,IAAI,CAAC;;CAGxD,SAAS,gBAAgB,KAAa;AACpC,SAAO,OAAO;;CAGhB,SAAS,SAAS,KAAa;AAC7B,SAAO,OAAO,aAAa,WAAW,MAAM,QAAQ;;AAGtD,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD"}