unframer 2.2.2 → 2.4.0
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.
- package/README.md +17 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +62 -16
- package/dist/cli.js.map +1 -1
- package/dist/css.d.ts +10 -9
- package/dist/css.d.ts.map +1 -1
- package/dist/css.js +20 -16
- package/dist/css.js.map +1 -1
- package/dist/exporter.d.ts +9 -1
- package/dist/exporter.d.ts.map +1 -1
- package/dist/exporter.js +2 -2
- package/dist/exporter.js.map +1 -1
- package/dist/framer.d.ts.map +1 -1
- package/dist/framer.js +7300 -6415
- package/dist/framer.js.map +1 -1
- package/dist/react.d.ts +2 -2
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +5 -3
- package/dist/react.js.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +3 -0
- package/dist/utils.js.map +1 -1
- package/esm/cli.d.ts.map +1 -1
- package/esm/cli.js +39 -16
- package/esm/cli.js.map +1 -1
- package/esm/css.d.ts +10 -9
- package/esm/css.d.ts.map +1 -1
- package/esm/css.js +12 -9
- package/esm/css.js.map +1 -1
- package/esm/exporter.d.ts +9 -1
- package/esm/exporter.d.ts.map +1 -1
- package/esm/exporter.js +2 -2
- package/esm/exporter.js.map +1 -1
- package/esm/framer.d.ts.map +1 -1
- package/esm/framer.js +7278 -6398
- package/esm/framer.js.map +1 -1
- package/esm/react.d.ts +2 -2
- package/esm/react.d.ts.map +1 -1
- package/esm/react.js +6 -4
- package/esm/react.js.map +1 -1
- package/esm/utils.d.ts +1 -0
- package/esm/utils.d.ts.map +1 -1
- package/esm/utils.js +3 -0
- package/esm/utils.js.map +1 -1
- package/package.json +15 -4
- package/src/cli.tsx +48 -17
- package/src/css.ts +25 -20
- package/src/exporter.ts +3 -1
- package/src/framer.js +13178 -11810
- package/src/react.tsx +11 -6
- package/src/utils.ts +3 -0
package/esm/react.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ComponentType } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
export type UnframerBreakpoint = keyof typeof
|
|
2
|
+
import { defaultBreakpointSizes } from './css.js';
|
|
3
|
+
export type UnframerBreakpoint = keyof typeof defaultBreakpointSizes;
|
|
4
4
|
/**
|
|
5
5
|
* @deprecated Use styles.css import instead
|
|
6
6
|
*/
|
package/esm/react.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEH,aAAa,EAKhB,MAAM,OAAO,CAAA;AACd,OAAO,
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEH,aAAa,EAKhB,MAAM,OAAO,CAAA;AACd,OAAO,EAEH,sBAAsB,EAEzB,MAAM,UAAU,CAAA;AAWjB,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,sBAAsB,CAAA;AA8BpE;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,UAAwB,EAAE;;CAAA,GAAG,GAAG,CAmD9D;AAED,eAAO,MAAM,qBAAqB;;kBACM,GAAG;;;;;cAAH,GAAG;;uDA2EzC,CAAA"}
|
package/esm/react.js
CHANGED
|
@@ -13,14 +13,14 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
13
13
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
14
|
import { combinedCSSRules } from './framer';
|
|
15
15
|
import { forwardRef, useId, useMemo, useSyncExternalStore, } from 'react';
|
|
16
|
-
import {
|
|
16
|
+
import { breakpointsStyles, defaultBreakpointSizes, getFontsStyles, } from './css.js';
|
|
17
17
|
function classNames(...args) {
|
|
18
18
|
return args.filter(Boolean).join(' ');
|
|
19
19
|
}
|
|
20
20
|
// breakpoints from the higher to the lower
|
|
21
|
-
const defaultBreakpoints = Object.keys(
|
|
21
|
+
const defaultBreakpoints = Object.keys(defaultBreakpointSizes).reverse();
|
|
22
22
|
function getBreakpointNameFromWindowWidth(windowWidth) {
|
|
23
|
-
return defaultBreakpoints.find((name) => windowWidth >=
|
|
23
|
+
return defaultBreakpoints.find((name) => windowWidth >= defaultBreakpointSizes[name]);
|
|
24
24
|
}
|
|
25
25
|
function fillBreakpoints(breakpoints) {
|
|
26
26
|
const breakpointsOrder = ['base', 'sm', 'md', 'lg', 'xl', '2xl'];
|
|
@@ -43,7 +43,9 @@ const nothing = () => {
|
|
|
43
43
|
*/
|
|
44
44
|
export function FramerStyles({ Components = [] }) {
|
|
45
45
|
const isClient = useSyncExternalStore(nothing, () => true, () => false);
|
|
46
|
-
const breakpoints = (_jsx("style", { dangerouslySetInnerHTML: {
|
|
46
|
+
const breakpoints = (_jsx("style", { dangerouslySetInnerHTML: {
|
|
47
|
+
__html: breakpointsStyles(defaultBreakpointSizes),
|
|
48
|
+
}, suppressHydrationWarning: true, hidden: true }, 'breakpointsStyles'));
|
|
47
49
|
const fonts = (_jsx("style", { dangerouslySetInnerHTML: {
|
|
48
50
|
__html: getFontsStyles(Components.map((x) => x.fonts || []).flat()),
|
|
49
51
|
}, suppressHydrationWarning: true, hidden: true }, 'fonts'));
|
package/esm/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;;;;;;;;;AACZ,OAAO,EAAE,gBAAgB,EAAe,MAAM,UAAU,CAAA;AAExD,OAAO,EAGH,UAAU,EACV,KAAK,EACL,OAAO,EACP,oBAAoB,GACvB,MAAM,OAAO,CAAA;AACd,OAAO,
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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"}
|
package/esm/utils.d.ts
CHANGED
package/esm/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;;;;CAUlB,CAAA"}
|
package/esm/utils.js
CHANGED
|
@@ -4,6 +4,9 @@ export const logger = {
|
|
|
4
4
|
log(...args) {
|
|
5
5
|
console.log(prefix, ...args);
|
|
6
6
|
},
|
|
7
|
+
green(...args) {
|
|
8
|
+
console.log([prefix, ...args].map((x) => pico.green(x)).join(' '));
|
|
9
|
+
},
|
|
7
10
|
error(...args) {
|
|
8
11
|
console.error([prefix, ...args].map((x) => pico.red(x)).join(' '));
|
|
9
12
|
},
|
package/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,YAAY,CAAA;AAE7B,MAAM,MAAM,GAAG,YAAY,CAAA;AAC3B,MAAM,CAAC,MAAM,MAAM,GAAG;IAClB,GAAG,CAAC,GAAG,IAAI;QACP,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IAChC,CAAC;IACD,KAAK,CAAC,GAAG,IAAI;QACT,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACtE,CAAC;CACJ,CAAA"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,YAAY,CAAA;AAE7B,MAAM,MAAM,GAAG,YAAY,CAAA;AAC3B,MAAM,CAAC,MAAM,MAAM,GAAG;IAClB,GAAG,CAAC,GAAG,IAAI;QACP,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IAChC,CAAC;IACD,KAAK,CAAC,GAAG,IAAI;QACT,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACtE,CAAC;IACD,KAAK,CAAC,GAAG,IAAI;QACT,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACtE,CAAC;CACJ,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unframer",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "",
|
|
3
|
+
"version": "2.4.0",
|
|
4
|
+
"description": "Import Framer components directly in your React app, type safe and customizable",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"repository": "https://github.com/remorses/unframer",
|
|
7
7
|
"bin": "bin.js",
|
|
@@ -44,16 +44,27 @@
|
|
|
44
44
|
"json5": "^2.2.3",
|
|
45
45
|
"native-fetch": "^4.0.2",
|
|
46
46
|
"picocolors": "^1.0.0",
|
|
47
|
-
"real-framer-motion": "npm:framer-motion@11.
|
|
47
|
+
"real-framer-motion": "npm:framer-motion@11.1.7",
|
|
48
48
|
"tmp": "^0.2.1"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
+
"@babel/core": "^7.24.5",
|
|
52
|
+
"@babel/helper-annotate-as-pure": "^7.22.5",
|
|
53
|
+
"@babel/helper-environment-visitor": "^7.22.20",
|
|
54
|
+
"@babel/helper-split-export-declaration": "^7.24.5",
|
|
55
|
+
"@babel/plugin-transform-react-pure-annotations": "^7.24.1",
|
|
56
|
+
"@babel/traverse": "^7.24.5",
|
|
57
|
+
"@babel/types": "^7.24.5",
|
|
58
|
+
"@types/babel__core": "^7.20.5",
|
|
59
|
+
"@types/babel__traverse": "^7.20.5",
|
|
51
60
|
"@types/fs-extra": "^11.0.1",
|
|
52
61
|
"@types/node": "^20.5.7",
|
|
53
62
|
"@xmorse/deployment-utils": "^0.1.0",
|
|
63
|
+
"openai": "^4.40.2",
|
|
54
64
|
"posthtml": "^0.16.6",
|
|
55
65
|
"react": "^18.3.0",
|
|
56
|
-
"react-dom": "^18.3.0"
|
|
66
|
+
"react-dom": "^18.3.0",
|
|
67
|
+
"tiktoken": "^1.0.14"
|
|
57
68
|
},
|
|
58
69
|
"scripts": {
|
|
59
70
|
"build": "rm -rf dist && tsc -m esnext --outDir esm && tsc && cp ../README.md ./README.md && cp ./src/framer.d.ts ./dist/framer.d.ts && cp ./src/framer.d.ts ./esm/framer.d.ts",
|
package/src/cli.tsx
CHANGED
|
@@ -6,34 +6,42 @@ import chokidar from 'chokidar'
|
|
|
6
6
|
import fs from 'fs-extra'
|
|
7
7
|
import findUp from 'find-up'
|
|
8
8
|
import tmp from 'tmp'
|
|
9
|
-
import path from 'path'
|
|
10
|
-
const
|
|
9
|
+
import path, { basename } from 'path'
|
|
10
|
+
const configNames = ['unframer.config.json', 'unframer.json']
|
|
11
11
|
import { cac } from 'cac'
|
|
12
12
|
import { logger } from './utils.js'
|
|
13
|
+
import { BreakpointSizes } from './css.js'
|
|
13
14
|
|
|
14
15
|
export const cli = cac()
|
|
15
16
|
|
|
16
17
|
cli.command('', 'Run unframer')
|
|
17
|
-
.option('--watch', 'Watch for Framer and unframer.json changes')
|
|
18
|
+
.option('--watch', 'Watch for Framer and unframer.config.json changes')
|
|
18
19
|
.action(async function main(options) {
|
|
20
|
+
fixOldUnframerPath()
|
|
19
21
|
const cwd = process.cwd()
|
|
20
22
|
const watch = process.argv.includes('--watch')
|
|
21
|
-
logger.log(`Looking for ${
|
|
22
|
-
const configPath = await findUp(
|
|
23
|
+
logger.log(`Looking for ${configNames.join(', ')} in ${cwd}`)
|
|
24
|
+
const configPath = await findUp(configNames, { cwd })
|
|
23
25
|
if (!configPath) {
|
|
24
|
-
logger.log(`No ${
|
|
26
|
+
logger.log(`No ${configNames.join(', ')} found`)
|
|
25
27
|
return
|
|
26
28
|
}
|
|
29
|
+
let configBasename = basename(configPath!)
|
|
27
30
|
const configContent = fs.readFileSync(configPath, 'utf8')
|
|
28
31
|
if (!configContent) {
|
|
29
|
-
logger.log(`No ${
|
|
32
|
+
logger.log(`No ${configBasename} contents found`)
|
|
30
33
|
return
|
|
31
34
|
}
|
|
32
35
|
let config = JSON.parse(configContent)
|
|
33
36
|
|
|
34
37
|
let controller = new AbortController()
|
|
35
38
|
setMaxListeners(0, controller.signal)
|
|
36
|
-
processConfig({
|
|
39
|
+
processConfig({
|
|
40
|
+
config,
|
|
41
|
+
watch,
|
|
42
|
+
signal: controller.signal,
|
|
43
|
+
configBasename,
|
|
44
|
+
})
|
|
37
45
|
if (!watch) {
|
|
38
46
|
return
|
|
39
47
|
}
|
|
@@ -43,7 +51,7 @@ cli.command('', 'Run unframer')
|
|
|
43
51
|
})
|
|
44
52
|
|
|
45
53
|
watcher.on('change', async (path) => {
|
|
46
|
-
logger.log(`${
|
|
54
|
+
logger.log(`${configBasename} changed`)
|
|
47
55
|
console.log()
|
|
48
56
|
controller.abort()
|
|
49
57
|
|
|
@@ -54,7 +62,7 @@ cli.command('', 'Run unframer')
|
|
|
54
62
|
fs.readFileSync(configPath!, 'utf8'),
|
|
55
63
|
)
|
|
56
64
|
if (!newConfig) {
|
|
57
|
-
logger.log(`Invalid ${
|
|
65
|
+
logger.log(`Invalid ${configBasename} file`)
|
|
58
66
|
return
|
|
59
67
|
}
|
|
60
68
|
const newNames = getNewNames(config, newConfig)
|
|
@@ -66,6 +74,7 @@ cli.command('', 'Run unframer')
|
|
|
66
74
|
components: pluck(newConfig.components, newNames),
|
|
67
75
|
},
|
|
68
76
|
watch,
|
|
77
|
+
configBasename,
|
|
69
78
|
// signal: controller.signal,
|
|
70
79
|
})
|
|
71
80
|
}
|
|
@@ -83,11 +92,29 @@ const defaultConfig = `{
|
|
|
83
92
|
}
|
|
84
93
|
`
|
|
85
94
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
95
|
+
function fixOldUnframerPath() {
|
|
96
|
+
// if unframer.json exists, rename it to unframer.config.json
|
|
97
|
+
|
|
98
|
+
const oldConfigPath = fs.existsSync('unframer.json')
|
|
99
|
+
if (oldConfigPath) {
|
|
100
|
+
fs.renameSync('unframer.json', 'unframer.config.json')
|
|
101
|
+
logger.green('legacy unframer.json config renamed to unframer.config.json')
|
|
102
|
+
return true
|
|
103
|
+
}
|
|
104
|
+
return false
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
cli.command('init', 'Init the unframer.config.json config').action(
|
|
108
|
+
async (options) => {
|
|
109
|
+
let fixed = fixOldUnframerPath()
|
|
110
|
+
if (fixed) {
|
|
111
|
+
return
|
|
112
|
+
}
|
|
113
|
+
fs.writeFileSync(`unframer.config.json`, defaultConfig)
|
|
114
|
+
const p = path.resolve(process.cwd(), 'unframer.config.json')
|
|
115
|
+
console.log(`${p} file created`)
|
|
116
|
+
},
|
|
117
|
+
)
|
|
91
118
|
|
|
92
119
|
cli.help()
|
|
93
120
|
|
|
@@ -123,27 +150,31 @@ type Config = {
|
|
|
123
150
|
components: {
|
|
124
151
|
[name: string]: string
|
|
125
152
|
}
|
|
153
|
+
breakpoints?: BreakpointSizes
|
|
126
154
|
outDir?: string
|
|
127
155
|
}
|
|
128
156
|
async function processConfig({
|
|
129
157
|
config,
|
|
130
158
|
watch,
|
|
131
159
|
signal,
|
|
160
|
+
configBasename,
|
|
132
161
|
}: {
|
|
133
162
|
config: Config
|
|
134
163
|
watch: boolean
|
|
164
|
+
configBasename: string
|
|
135
165
|
signal?: AbortSignal
|
|
136
166
|
}) {
|
|
137
167
|
try {
|
|
138
|
-
const { components, outDir } = config || {}
|
|
168
|
+
const { components, breakpoints, outDir } = config || {}
|
|
139
169
|
const installDir = path.resolve(process.cwd(), outDir || 'framer')
|
|
140
170
|
if (!components) {
|
|
141
|
-
logger.log(`No components found in ${
|
|
171
|
+
logger.log(`No components found in ${configBasename}`)
|
|
142
172
|
return
|
|
143
173
|
}
|
|
144
174
|
|
|
145
175
|
await bundle({
|
|
146
176
|
components,
|
|
177
|
+
breakpoints,
|
|
147
178
|
cwd: installDir,
|
|
148
179
|
watch,
|
|
149
180
|
signal,
|
package/src/css.ts
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
import dedent from 'dedent'
|
|
2
2
|
import { ComponentFont } from './framer.js'
|
|
3
3
|
|
|
4
|
-
export const breakpointSizes = {
|
|
5
|
-
base: 0,
|
|
6
|
-
sm: 320,
|
|
7
|
-
md: 768,
|
|
8
|
-
lg: 960,
|
|
9
|
-
xl: 1200,
|
|
10
|
-
'2xl': 1536,
|
|
11
|
-
} as const
|
|
12
|
-
|
|
13
4
|
function deduplicateByKey<T>(arr: T[], key: (k: T) => string): T[] {
|
|
14
5
|
let map = new Map()
|
|
15
6
|
for (let item of arr) {
|
|
@@ -121,11 +112,24 @@ export function getFontsStyles(_fontsDefs: ComponentFontBundle[]) {
|
|
|
121
112
|
return str
|
|
122
113
|
}
|
|
123
114
|
|
|
124
|
-
export const
|
|
115
|
+
export const defaultBreakpointSizes = {
|
|
116
|
+
base: 0,
|
|
117
|
+
sm: 320,
|
|
118
|
+
md: 768,
|
|
119
|
+
lg: 960,
|
|
120
|
+
xl: 1200,
|
|
121
|
+
'2xl': 1536,
|
|
122
|
+
} as const
|
|
123
|
+
|
|
124
|
+
export type BreakpointSizes = typeof defaultBreakpointSizes
|
|
125
|
+
|
|
126
|
+
export const breakpointsStyles = (breakpointSizes?: BreakpointSizes) => {
|
|
127
|
+
breakpointSizes = { ...defaultBreakpointSizes, ...breakpointSizes }
|
|
128
|
+
return /* css */ `
|
|
125
129
|
/* Base */
|
|
126
130
|
@media (min-width: ${breakpointSizes.base}px) and (max-width: ${
|
|
127
|
-
|
|
128
|
-
}px) {
|
|
131
|
+
breakpointSizes.sm - 1
|
|
132
|
+
}px) {
|
|
129
133
|
.unframer-hidden.unframer-base {
|
|
130
134
|
display: contents;
|
|
131
135
|
}
|
|
@@ -133,8 +137,8 @@ export const breakpointsStyles = /* css */ `
|
|
|
133
137
|
|
|
134
138
|
/* Small */
|
|
135
139
|
@media (min-width: ${breakpointSizes.sm}px) and (max-width: ${
|
|
136
|
-
|
|
137
|
-
}px) {
|
|
140
|
+
breakpointSizes.md - 1
|
|
141
|
+
}px) {
|
|
138
142
|
.unframer-hidden.unframer-sm {
|
|
139
143
|
display: contents;
|
|
140
144
|
}
|
|
@@ -142,8 +146,8 @@ export const breakpointsStyles = /* css */ `
|
|
|
142
146
|
|
|
143
147
|
/* Medium */
|
|
144
148
|
@media (min-width: ${breakpointSizes.md}px) and (max-width: ${
|
|
145
|
-
|
|
146
|
-
}px) {
|
|
149
|
+
breakpointSizes.lg - 1
|
|
150
|
+
}px) {
|
|
147
151
|
.unframer-hidden.unframer-md {
|
|
148
152
|
display: contents;
|
|
149
153
|
}
|
|
@@ -151,8 +155,8 @@ export const breakpointsStyles = /* css */ `
|
|
|
151
155
|
|
|
152
156
|
/* Large */
|
|
153
157
|
@media (min-width: ${breakpointSizes.lg}px) and (max-width: ${
|
|
154
|
-
|
|
155
|
-
}px) {
|
|
158
|
+
breakpointSizes.xl - 1
|
|
159
|
+
}px) {
|
|
156
160
|
.unframer-hidden.unframer-lg {
|
|
157
161
|
display: contents;
|
|
158
162
|
}
|
|
@@ -160,8 +164,8 @@ export const breakpointsStyles = /* css */ `
|
|
|
160
164
|
|
|
161
165
|
/* Extra Large */
|
|
162
166
|
@media (min-width: ${breakpointSizes.xl}px) and (max-width: ${
|
|
163
|
-
|
|
164
|
-
}px) {
|
|
167
|
+
breakpointSizes['2xl'] - 1
|
|
168
|
+
}px) {
|
|
165
169
|
.unframer-hidden.unframer-xl {
|
|
166
170
|
display: contents;
|
|
167
171
|
}
|
|
@@ -178,6 +182,7 @@ export const breakpointsStyles = /* css */ `
|
|
|
178
182
|
display: none;
|
|
179
183
|
}
|
|
180
184
|
`
|
|
185
|
+
}
|
|
181
186
|
|
|
182
187
|
export function groupBy<T>(arr: T[], key: (x: T) => string) {
|
|
183
188
|
const map = new Map<string, T[]>()
|
package/src/exporter.ts
CHANGED
|
@@ -19,6 +19,7 @@ import fs from 'fs'
|
|
|
19
19
|
import path from 'path'
|
|
20
20
|
import { exec, execSync } from 'child_process'
|
|
21
21
|
import {
|
|
22
|
+
BreakpointSizes,
|
|
22
23
|
ComponentFontBundle,
|
|
23
24
|
breakpointsStyles,
|
|
24
25
|
getFontsStyles,
|
|
@@ -45,6 +46,7 @@ export async function bundle({
|
|
|
45
46
|
cwd: out = '',
|
|
46
47
|
watch = false,
|
|
47
48
|
components = {} as Record<string, string>,
|
|
49
|
+
breakpoints = {} as BreakpointSizes,
|
|
48
50
|
signal = undefined as AbortSignal | undefined,
|
|
49
51
|
}) {
|
|
50
52
|
out ||= path.resolve(process.cwd(), 'example')
|
|
@@ -220,7 +222,7 @@ export async function bundle({
|
|
|
220
222
|
|
|
221
223
|
const cssString =
|
|
222
224
|
'/* This css file has all the necessary styles to run all your components */\n' +
|
|
223
|
-
breakpointsStyles +
|
|
225
|
+
breakpointsStyles(breakpoints) +
|
|
224
226
|
'\n\n' +
|
|
225
227
|
combinedCSSRules
|
|
226
228
|
.map((x) => (x?.startsWith(' ') ? dedent(x) : x))
|