Buckets:
ktongue/docker_container / fem_tutos /node_modules /@mui /system /cssContainerQueries /cssContainerQueries.js
| ; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.default = cssContainerQueries; | |
| exports.getContainerQuery = getContainerQuery; | |
| exports.isCqShorthand = isCqShorthand; | |
| exports.sortContainerQueries = sortContainerQueries; | |
| /** | |
| * For using in `sx` prop to sort the breakpoint from low to high. | |
| * Note: this function does not work and will not support multiple units. | |
| * e.g. input: { '@container (min-width:300px)': '1rem', '@container (min-width:40rem)': '2rem' } | |
| * output: { '@container (min-width:40rem)': '2rem', '@container (min-width:300px)': '1rem' } // since 40 < 300 even though 40rem > 300px | |
| */ | |
| function sortContainerQueries(theme, css) { | |
| if (!theme.containerQueries) { | |
| return css; | |
| } | |
| const sorted = Object.keys(css).filter(key => key.startsWith('@container')).sort((a, b) => { | |
| const regex = /min-width:\s*([0-9.]+)/; | |
| return +(a.match(regex)?.[1] || 0) - +(b.match(regex)?.[1] || 0); | |
| }); | |
| if (!sorted.length) { | |
| return css; | |
| } | |
| return sorted.reduce((acc, key) => { | |
| const value = css[key]; | |
| delete acc[key]; | |
| acc[key] = value; | |
| return acc; | |
| }, { | |
| ...css | |
| }); | |
| } | |
| function isCqShorthand(breakpointKeys, value) { | |
| return value === '@' || value.startsWith('@') && (breakpointKeys.some(key => value.startsWith(`@${key}`)) || !!value.match(/^@\d/)); | |
| } | |
| function getContainerQuery(theme, shorthand) { | |
| const matches = shorthand.match(/^@([^/]+)?\/?(.+)?$/); | |
| if (!matches) { | |
| if (process.env.NODE_ENV !== 'production') { | |
| throw /* minify-error */new Error(`MUI: The provided shorthand ${`(${shorthand})`} is invalid. The format should be \`@<breakpoint | number>\` or \`@<breakpoint | number>/<container>\`.\n` + 'For example, `@sm` or `@600` or `@40rem/sidebar`.'); | |
| } | |
| return null; | |
| } | |
| const [, containerQuery, containerName] = matches; | |
| const value = Number.isNaN(+containerQuery) ? containerQuery || 0 : +containerQuery; | |
| return theme.containerQueries(containerName).up(value); | |
| } | |
| function cssContainerQueries(themeInput) { | |
| const toContainerQuery = (mediaQuery, name) => mediaQuery.replace('@media', name ? `@container ${name}` : '@container'); | |
| function attachCq(node, name) { | |
| node.up = (...args) => toContainerQuery(themeInput.breakpoints.up(...args), name); | |
| node.down = (...args) => toContainerQuery(themeInput.breakpoints.down(...args), name); | |
| node.between = (...args) => toContainerQuery(themeInput.breakpoints.between(...args), name); | |
| node.only = (...args) => toContainerQuery(themeInput.breakpoints.only(...args), name); | |
| node.not = (...args) => { | |
| const result = toContainerQuery(themeInput.breakpoints.not(...args), name); | |
| if (result.includes('not all and')) { | |
| // `@container` does not work with `not all and`, so need to invert the logic | |
| return result.replace('not all and ', '').replace('min-width:', 'width<').replace('max-width:', 'width>').replace('and', 'or'); | |
| } | |
| return result; | |
| }; | |
| } | |
| const node = {}; | |
| const containerQueries = name => { | |
| attachCq(node, name); | |
| return node; | |
| }; | |
| attachCq(containerQueries); | |
| return { | |
| ...themeInput, | |
| containerQueries | |
| }; | |
| } |
Xet Storage Details
- Size:
- 3.18 kB
- Xet hash:
- 35bcb671c2ac5d9f2a5440572b9db8dac81208e1e3e1ba6423d1882add609a19
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.