onejs-core 0.3.5
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/.gitattributes +2 -0
- package/.github/workflows/jsr.yml +19 -0
- package/.prettierrc +5 -0
- package/3rdparty/preact/LICENSE +21 -0
- package/3rdparty/preact/clone-element.ts +45 -0
- package/3rdparty/preact/compat/Children.ts +21 -0
- package/3rdparty/preact/compat/forwardRef.ts +49 -0
- package/3rdparty/preact/compat/index.ts +3 -0
- package/3rdparty/preact/compat/memo.ts +34 -0
- package/3rdparty/preact/compat/util.ts +38 -0
- package/3rdparty/preact/component.ts +235 -0
- package/3rdparty/preact/constants.ts +3 -0
- package/3rdparty/preact/create-context.ts +71 -0
- package/3rdparty/preact/create-element.ts +98 -0
- package/3rdparty/preact/diff/catch-error.ts +40 -0
- package/3rdparty/preact/diff/children.ts +355 -0
- package/3rdparty/preact/diff/index.ts +563 -0
- package/3rdparty/preact/diff/props.ts +174 -0
- package/3rdparty/preact/hooks/index.ts +536 -0
- package/3rdparty/preact/hooks/internal.d.ts +85 -0
- package/3rdparty/preact/hooks.d.ts +145 -0
- package/3rdparty/preact/index.ts +13 -0
- package/3rdparty/preact/internal.d.ts +155 -0
- package/3rdparty/preact/jsx-runtime/index.ts +80 -0
- package/3rdparty/preact/jsx.d.ts +1008 -0
- package/3rdparty/preact/options.ts +16 -0
- package/3rdparty/preact/preact.d.ts +317 -0
- package/3rdparty/preact/render.ts +76 -0
- package/3rdparty/preact/signals/index.ts +443 -0
- package/3rdparty/preact/signals/internal.d.ts +36 -0
- package/3rdparty/preact/signals-core/index.ts +663 -0
- package/3rdparty/preact/style.d.ts +205 -0
- package/3rdparty/preact/util.ts +29 -0
- package/@DO_NOT_CHANGE.txt +3 -0
- package/README.md +33 -0
- package/definitions/app.d.ts +52048 -0
- package/definitions/augments.d.ts +16 -0
- package/definitions/globals.d.ts +34 -0
- package/definitions/index.d.ts +9 -0
- package/definitions/jsx.d.ts +517 -0
- package/definitions/modules.d.ts +29 -0
- package/definitions/onejs.d.ts +164 -0
- package/definitions/preact.jsx.d.ts +7 -0
- package/definitions/proto-overrides.d.ts +13 -0
- package/definitions/puerts.d.ts +31 -0
- package/definitions/unity-engine.d.ts +23 -0
- package/hooks/eventful.ts +56 -0
- package/import-transform.mjs +42 -0
- package/index.ts +44 -0
- package/jsr.json +10 -0
- package/onejs-tw-config.cjs +188 -0
- package/package.json +9 -0
- package/preloads/inject.ts +44 -0
- package/styling/index.tsx +80 -0
- package/styling/utils/generateAlphabeticName.ts +21 -0
- package/styling/utils/generateComponentId.ts +6 -0
- package/styling/utils/hash.ts +46 -0
- package/switch.cjs +185 -0
- package/uss-transform-plugin.cjs +83 -0
- package/utils/color-palettes.ts +3 -0
- package/utils/color-parser.ts +249 -0
- package/utils/float-parser.ts +31 -0
- package/utils/index.ts +12 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { h } from "preact"
|
|
2
|
+
import flatten from "css-flatten"
|
|
3
|
+
import { forwardRef } from "preact/compat"
|
|
4
|
+
import generateComponentId from "./utils/generateComponentId"
|
|
5
|
+
|
|
6
|
+
export function hashAndAddRuntimeUSS(style: string) {
|
|
7
|
+
let compId = generateComponentId(style)
|
|
8
|
+
style = `.${compId} {${style}}`
|
|
9
|
+
style = flatten(style)
|
|
10
|
+
document.addRuntimeUSS(style)
|
|
11
|
+
|
|
12
|
+
return compId
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function _processTemplate(props, strings: TemplateStringsArray, values: any[]) {
|
|
16
|
+
// ref: https://medium.com/styled-components/how-styled-components-works-618a69970421
|
|
17
|
+
let style = values.reduce((result, expr, index) => {
|
|
18
|
+
let value = typeof expr === "function" ? expr(props) : expr
|
|
19
|
+
if (typeof value === "function")
|
|
20
|
+
value = value(props)
|
|
21
|
+
|
|
22
|
+
return result + (value ? value : "") + strings[index + 1]
|
|
23
|
+
}, strings[0])
|
|
24
|
+
return style as string
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function styled<T extends keyof h.JSX.IntrinsicElements>(Tag: T | ((props?) => h.JSX.Element)) {
|
|
28
|
+
const AnyTag = Tag as any
|
|
29
|
+
|
|
30
|
+
const tag = function (strings: TemplateStringsArray, ...values) {
|
|
31
|
+
return forwardRef((props, ref) => {
|
|
32
|
+
let style = _processTemplate(props, strings, values)
|
|
33
|
+
let compId = hashAndAddRuntimeUSS(style)
|
|
34
|
+
return <AnyTag ref={ref} class={compId} {...props}></AnyTag>
|
|
35
|
+
}) as (props: h.JSX.IntrinsicElements[T], ref: any) => h.JSX.Element
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
tag.attrs = (func: (props: any) => ({})) => {
|
|
39
|
+
return function (strings: TemplateStringsArray, ...values) {
|
|
40
|
+
return (props) => {
|
|
41
|
+
let defaultProps = func(props)
|
|
42
|
+
let condensedProps = Object.assign({}, defaultProps, props)
|
|
43
|
+
let style = _processTemplate(condensedProps, strings, values)
|
|
44
|
+
let compId = hashAndAddRuntimeUSS(style)
|
|
45
|
+
|
|
46
|
+
return <AnyTag class={compId} {...condensedProps}></AnyTag>
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return tag
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
styled.div = styled("div")
|
|
55
|
+
styled.button = styled("button")
|
|
56
|
+
styled.textfield = styled("textfield")
|
|
57
|
+
|
|
58
|
+
export const uss = function (strings: TemplateStringsArray, ...values) {
|
|
59
|
+
return (props) => {
|
|
60
|
+
return _processTemplate(props, strings, values)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Similar to the Emotion api, this function takes a template string and returns
|
|
66
|
+
* a class name that can be used to style an element.
|
|
67
|
+
* @param strings
|
|
68
|
+
* @param values
|
|
69
|
+
* @returns
|
|
70
|
+
*/
|
|
71
|
+
export const emo = function (strings: TemplateStringsArray, ...values: any[]): string {
|
|
72
|
+
let style = values.reduce((result, expr, index) => {
|
|
73
|
+
const value = expr
|
|
74
|
+
return result + (value ? value : "") + strings[index + 1]
|
|
75
|
+
}, strings[0])
|
|
76
|
+
|
|
77
|
+
return hashAndAddRuntimeUSS(style)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export type CompType<T,K> = (props: K | T, ref: any) => h.JSX.Element
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const AD_REPLACER_R = /(a)(d)/gi
|
|
2
|
+
|
|
3
|
+
/* This is the "capacity" of our alphabet i.e. 2x26 for all letters plus their capitalised
|
|
4
|
+
* counterparts */
|
|
5
|
+
const charsLength = 52
|
|
6
|
+
|
|
7
|
+
/* start at 75 for 'a' until 'z' (25) and then start at 65 for capitalised letters */
|
|
8
|
+
const getAlphabeticChar = (code: number) => String.fromCharCode(code + (code > 25 ? 39 : 97));
|
|
9
|
+
|
|
10
|
+
/* input a number, usually a hash and convert it to base-52 */
|
|
11
|
+
export default function generateAlphabeticName(code: number) {
|
|
12
|
+
let name = ''
|
|
13
|
+
let x
|
|
14
|
+
|
|
15
|
+
/* get a char and divide by alphabet-length */
|
|
16
|
+
for (x = Math.abs(code); x > charsLength; x = (x / charsLength) | 0) {
|
|
17
|
+
name = getAlphabeticChar(x % charsLength) + name
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return (getAlphabeticChar(x % charsLength) + name).replace(AD_REPLACER_R, '$1-$2')
|
|
21
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export const SEED = 5381;
|
|
2
|
+
|
|
3
|
+
// When we have separate strings it's useful to run a progressive
|
|
4
|
+
// version of djb2 where we pretend that we're still looping over
|
|
5
|
+
// the same string
|
|
6
|
+
export const phash = (h: number, x: string) => {
|
|
7
|
+
let i = x.length;
|
|
8
|
+
|
|
9
|
+
while (i) {
|
|
10
|
+
h = (h * 33) ^ x.charCodeAt(--i);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return h;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// This is a djb2 hashing function
|
|
17
|
+
export const hash = (x: string) => {
|
|
18
|
+
return phash(SEED, x);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const AD_REPLACER_R = /(a)(d)/gi
|
|
22
|
+
|
|
23
|
+
/* This is the "capacity" of our alphabet i.e. 2x26 for all letters plus their capitalised
|
|
24
|
+
* counterparts */
|
|
25
|
+
const charsLength = 52
|
|
26
|
+
|
|
27
|
+
/* start at 75 for 'a' until 'z' (25) and then start at 65 for capitalised letters */
|
|
28
|
+
const getAlphabeticChar = (code: number) => String.fromCharCode(code + (code > 25 ? 39 : 97));
|
|
29
|
+
|
|
30
|
+
/* input a number, usually a hash and convert it to base-52 */
|
|
31
|
+
export function generateAlphabeticName(code: number) {
|
|
32
|
+
let name = ''
|
|
33
|
+
let x
|
|
34
|
+
|
|
35
|
+
/* get a char and divide by alphabet-length */
|
|
36
|
+
for (x = Math.abs(code); x > charsLength; x = (x / charsLength) | 0) {
|
|
37
|
+
name = getAlphabeticChar(x % charsLength) + name
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return (getAlphabeticChar(x % charsLength) + name).replace(AD_REPLACER_R, '$1-$2')
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export default function generateComponentId(str: string) {
|
|
44
|
+
return generateAlphabeticName(hash(str) >>> 0)
|
|
45
|
+
}
|
|
46
|
+
|
package/switch.cjs
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
const fs = require('fs')
|
|
2
|
+
const tar = require('tar')
|
|
3
|
+
const url = require('url')
|
|
4
|
+
const path = require('path')
|
|
5
|
+
const fse = require('fs-extra')
|
|
6
|
+
const { rimraf } = require('rimraf')
|
|
7
|
+
|
|
8
|
+
const fsp = fs.promises
|
|
9
|
+
|
|
10
|
+
const backends = [
|
|
11
|
+
{ name: "QuickJS", tgzUrl: "https://github.com/Tencent/puerts/releases/download/Unity_v2.1.0/PuerTS_Quickjs_2.1.0.tgz" },
|
|
12
|
+
{ name: "V8", tgzUrl: "https://github.com/Tencent/puerts/releases/download/Unity_v2.1.0/PuerTS_V8_2.1.0.tgz" },
|
|
13
|
+
{ name: "NodeJS", tgzUrl: "https://github.com/Tencent/puerts/releases/download/Unity_v2.1.0/PuerTS_Nodejs_2.1.0.tgz" }
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
const args = process.argv.slice(2)
|
|
17
|
+
|
|
18
|
+
if (args.length > 0 && args[0].toLowerCase() == "clear") {
|
|
19
|
+
for (const backend of backends) {
|
|
20
|
+
const filename = getFilenameFromUrl(backend.tgzUrl)
|
|
21
|
+
const outputDir = "./tmp"
|
|
22
|
+
const downloadedPath = path.join(outputDir, filename)
|
|
23
|
+
if (fs.existsSync(downloadedPath)) {
|
|
24
|
+
fs.unlinkSync(downloadedPath)
|
|
25
|
+
console.log(`Deleted ${downloadedPath}`)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
} else if (args.length > 0 && ["quickjs", "v8", "nodejs"].includes(args[0].toLowerCase())) {
|
|
29
|
+
const backend = backends.find(b => b.name.toLowerCase() === args[0])
|
|
30
|
+
const outputDir = "./tmp"
|
|
31
|
+
Process(backend, outputDir)
|
|
32
|
+
} else {
|
|
33
|
+
console.log("Usage: npm run switch <quickjs|v8|nodejs|clear>\n")
|
|
34
|
+
console.log(" quickjs: Switch to QuickJS backend")
|
|
35
|
+
console.log(" v8: Switch to V8 backend")
|
|
36
|
+
console.log(" nodejs: Switch to NodeJS backend")
|
|
37
|
+
console.log(" clear: Clear all downloaded .tgz files\n")
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function Process(backend, outputDir) {
|
|
41
|
+
try {
|
|
42
|
+
// Download
|
|
43
|
+
const downloadedPath = await downloadFile(backend.tgzUrl, outputDir)
|
|
44
|
+
|
|
45
|
+
// Extraction
|
|
46
|
+
const upmDir = path.join(outputDir, "upm")
|
|
47
|
+
if (fs.existsSync(upmDir)) {
|
|
48
|
+
await rimraf(upmDir)
|
|
49
|
+
}
|
|
50
|
+
await extractTgz(downloadedPath, outputDir)
|
|
51
|
+
|
|
52
|
+
// Safe keep asmdef files
|
|
53
|
+
const onejsDir = getOneJSUnityDir()
|
|
54
|
+
const a = path.join(onejsDir, 'Puerts/Editor/com.tencent.puerts.core.Editor.asmdef')
|
|
55
|
+
const b = path.join(upmDir, 'Editor/com.tencent.puerts.core.Editor.asmdef')
|
|
56
|
+
const c = path.join(onejsDir, 'Puerts/Runtime/com.tencent.puerts.core.asmdef')
|
|
57
|
+
const d = path.join(upmDir, 'Runtime/com.tencent.puerts.core.asmdef')
|
|
58
|
+
await fse.copy(a, b)
|
|
59
|
+
await fse.copy(c, d)
|
|
60
|
+
|
|
61
|
+
// Replace OneJS/Puerts with the new one
|
|
62
|
+
const puertsDir = path.join(onejsDir, "Puerts")
|
|
63
|
+
if (await deleteDirectorySafely(puertsDir)) {
|
|
64
|
+
await fse.copy(upmDir, puertsDir)
|
|
65
|
+
console.log(`Switched to ${backend.name} successfully.`)
|
|
66
|
+
} else {
|
|
67
|
+
console.error("Failed to delete old Puerts directory. Please make sure Unity Editor is not running as it may be using the files. (We cannot reliably replace native plugins while Unity Editor is using them)")
|
|
68
|
+
}
|
|
69
|
+
} catch (err) {
|
|
70
|
+
console.error(`Error: ${err.message}`)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// --- Support Functions ---
|
|
75
|
+
|
|
76
|
+
function getOneJSUnityDir() {
|
|
77
|
+
var packageJsonPath = path.join(__dirname, '../package.json')
|
|
78
|
+
var json = require(packageJsonPath)
|
|
79
|
+
return json.onejs.unityPackagePath
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function ensureDirectoryExistence(filePath) {
|
|
83
|
+
const dirname = path.dirname(filePath);
|
|
84
|
+
if (fs.existsSync(dirname)) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
fs.mkdirSync(dirname, { recursive: true });
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function getFilenameFromUrl(fileUrl) {
|
|
91
|
+
const parsedUrl = url.parse(fileUrl);
|
|
92
|
+
return path.basename(parsedUrl.pathname);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
async function downloadFile(fileUrl, outputDir) {
|
|
96
|
+
const filename = getFilenameFromUrl(fileUrl);
|
|
97
|
+
const outputLocationPath = path.join(outputDir, filename);
|
|
98
|
+
|
|
99
|
+
ensureDirectoryExistence(outputLocationPath);
|
|
100
|
+
|
|
101
|
+
// Check if the file already exists
|
|
102
|
+
if (fs.existsSync(outputLocationPath)) {
|
|
103
|
+
console.log(`Local .tgz found: ${outputLocationPath}`);
|
|
104
|
+
return outputLocationPath;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
console.log(`Downloading ${filename}`);
|
|
108
|
+
const response = await fetch(fileUrl);
|
|
109
|
+
|
|
110
|
+
if (!response.ok) {
|
|
111
|
+
throw new Error(`Failed to fetch ${fileUrl}: ${response.statusText}`);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const fileStream = fs.createWriteStream(outputLocationPath);
|
|
115
|
+
for await (const chunk of response.body) {
|
|
116
|
+
fileStream.write(chunk);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
fileStream.end();
|
|
120
|
+
fileStream.on('finish', () => {
|
|
121
|
+
console.log(`Download completed: ${outputLocationPath}`);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
return new Promise((resolve, reject) => {
|
|
125
|
+
fileStream.on('close', () => resolve(outputLocationPath));
|
|
126
|
+
fileStream.on('error', reject);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
async function extractTgz(filePath, outputDir) {
|
|
131
|
+
await tar.x({
|
|
132
|
+
file: filePath,
|
|
133
|
+
cwd: outputDir,
|
|
134
|
+
})
|
|
135
|
+
console.log(`Extraction completed.`);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
async function checkFileInUse(file) {
|
|
141
|
+
try {
|
|
142
|
+
const handle = await fsp.open(file, 'r+');
|
|
143
|
+
await handle.close();
|
|
144
|
+
} catch (err) {
|
|
145
|
+
if (err.code === 'EBUSY' || err.code === 'EPERM' || err.code === 'EACCES') {
|
|
146
|
+
console.error('File is in use by another program or access is denied:', err);
|
|
147
|
+
return false;
|
|
148
|
+
} else {
|
|
149
|
+
console.error('Cannot access file:', err);
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
async function checkAllDeletable(currentPath) {
|
|
157
|
+
try {
|
|
158
|
+
const stats = await fsp.stat(currentPath);
|
|
159
|
+
|
|
160
|
+
if (stats.isDirectory()) {
|
|
161
|
+
const files = await fsp.readdir(currentPath);
|
|
162
|
+
|
|
163
|
+
for (const file of files) {
|
|
164
|
+
const deletable = await checkAllDeletable(path.join(currentPath, file));
|
|
165
|
+
if (!deletable) {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return true;
|
|
170
|
+
} else {
|
|
171
|
+
return await checkFileInUse(currentPath);
|
|
172
|
+
}
|
|
173
|
+
} catch (err) {
|
|
174
|
+
console.log(`Error accessing: ${currentPath}, ${err}`);
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
async function deleteDirectorySafely(dirPath) {
|
|
180
|
+
if (await checkAllDeletable(dirPath)) {
|
|
181
|
+
await rimraf(dirPath)
|
|
182
|
+
return true
|
|
183
|
+
}
|
|
184
|
+
return false
|
|
185
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
module.exports = () => {
|
|
2
|
+
const screenBreakpoints = {
|
|
3
|
+
'sm': 640,
|
|
4
|
+
'md': 768,
|
|
5
|
+
'lg': 1024,
|
|
6
|
+
'xl': 1280,
|
|
7
|
+
'2xl': 1536,
|
|
8
|
+
};
|
|
9
|
+
return {
|
|
10
|
+
postcssPlugin: 'uss-transform',
|
|
11
|
+
Once(root, { result }) {
|
|
12
|
+
root.walkRules((rule) => {
|
|
13
|
+
// Transform class selectors
|
|
14
|
+
rule.selectors = rule.selectors.map(selector =>
|
|
15
|
+
"." + selector.slice(1).replace(/(\\\.|\\#|\\%|\\:|\\\/|\\\[|\\\]|\\\(|\\\)|\\2c)/g, match => {
|
|
16
|
+
switch (match) {
|
|
17
|
+
case '\\.': return '_d_';
|
|
18
|
+
case '\\#': return '_n_';
|
|
19
|
+
case '\\%': return '_p_';
|
|
20
|
+
case '\\:': return '_c_';
|
|
21
|
+
case '\\/': return '_s_';
|
|
22
|
+
case '\\[': return '_lb_';
|
|
23
|
+
case '\\]': return '_rb_';
|
|
24
|
+
case '\\(': return '_lp_';
|
|
25
|
+
case '\\)': return '_rp_';
|
|
26
|
+
case '\\2c': return '_cm_';
|
|
27
|
+
default: return match;
|
|
28
|
+
}
|
|
29
|
+
})
|
|
30
|
+
);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// RGB to RGBA conversion
|
|
34
|
+
root.walkDecls(decl => {
|
|
35
|
+
if (decl.value.includes('rgb(')) {
|
|
36
|
+
decl.value = decl.value.replace(/rgb\((.*?) \/\s*(.*?)\)/g, 'rgba($1 $2)');
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Handle hexadecimal colors with alpha value to RGBA conversion
|
|
41
|
+
root.walkDecls(decl => {
|
|
42
|
+
decl.value = decl.value.replace(/: #([A-Fa-f0-9]{8})/g, (match, hex) => {
|
|
43
|
+
const r = parseInt(hex.slice(0, 2), 16);
|
|
44
|
+
const g = parseInt(hex.slice(2, 4), 16);
|
|
45
|
+
const b = parseInt(hex.slice(4, 6), 16);
|
|
46
|
+
const a = parseInt(hex.slice(6, 8), 16) / 255;
|
|
47
|
+
return `: rgba(${r}, ${g}, ${b}, ${a})`;
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Media queries transformation
|
|
52
|
+
root.walkAtRules('media', atRule => {
|
|
53
|
+
// Extract the min-width value from the media query
|
|
54
|
+
const minWidthMatch = atRule.params.match(/min-width:\s*(\d+)px/);
|
|
55
|
+
if (minWidthMatch) {
|
|
56
|
+
const minWidthValue = parseInt(minWidthMatch[1], 10);
|
|
57
|
+
|
|
58
|
+
// Determine the correct breakpoint
|
|
59
|
+
let appliedBreakpointName = null;
|
|
60
|
+
Object.entries(screenBreakpoints).forEach(([name, value]) => {
|
|
61
|
+
if (minWidthValue >= value) {
|
|
62
|
+
appliedBreakpointName = name;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
if (appliedBreakpointName) {
|
|
67
|
+
const className = `.onejs-media-${appliedBreakpointName}`;
|
|
68
|
+
|
|
69
|
+
// Prepend the class to each rule inside this media query
|
|
70
|
+
atRule.walkRules(rule => {
|
|
71
|
+
rule.selectors = rule.selectors.map(selector => `${className} ${selector}`);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// Remove the @media rule by replacing it with its contents
|
|
75
|
+
atRule.replaceWith(atRule.nodes);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
module.exports.postcss = true;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
let palettes = [["#69d2e7", "#a7dbd8", "#e0e4cc", "#f38630", "#fa6900"], ["#fe4365", "#fc9d9a", "#f9cdad", "#c8c8a9", "#83af9b"], ["#ecd078", "#d95b43", "#c02942", "#542437", "#53777a"], ["#556270", "#4ecdc4", "#c7f464", "#ff6b6b", "#c44d58"], ["#774f38", "#e08e79", "#f1d4af", "#ece5ce", "#c5e0dc"], ["#e8ddcb", "#cdb380", "#036564", "#033649", "#031634"], ["#490a3d", "#bd1550", "#e97f02", "#f8ca00", "#8a9b0f"], ["#594f4f", "#547980", "#45ada8", "#9de0ad", "#e5fcc2"], ["#00a0b0", "#6a4a3c", "#cc333f", "#eb6841", "#edc951"], ["#e94e77", "#d68189", "#c6a49a", "#c6e5d9", "#f4ead5"], ["#3fb8af", "#7fc7af", "#dad8a7", "#ff9e9d", "#ff3d7f"], ["#d9ceb2", "#948c75", "#d5ded9", "#7a6a53", "#99b2b7"], ["#ffffff", "#cbe86b", "#f2e9e1", "#1c140d", "#cbe86b"], ["#efffcd", "#dce9be", "#555152", "#2e2633", "#99173c"], ["#343838", "#005f6b", "#008c9e", "#00b4cc", "#00dffc"], ["#413e4a", "#73626e", "#b38184", "#f0b49e", "#f7e4be"], ["#ff4e50", "#fc913a", "#f9d423", "#ede574", "#e1f5c4"], ["#99b898", "#fecea8", "#ff847c", "#e84a5f", "#2a363b"], ["#655643", "#80bca3", "#f6f7bd", "#e6ac27", "#bf4d28"], ["#00a8c6", "#40c0cb", "#f9f2e7", "#aee239", "#8fbe00"], ["#351330", "#424254", "#64908a", "#e8caa4", "#cc2a41"], ["#554236", "#f77825", "#d3ce3d", "#f1efa5", "#60b99a"], ["#5d4157", "#838689", "#a8caba", "#cad7b2", "#ebe3aa"], ["#8c2318", "#5e8c6a", "#88a65e", "#bfb35a", "#f2c45a"], ["#fad089", "#ff9c5b", "#f5634a", "#ed303c", "#3b8183"], ["#ff4242", "#f4fad2", "#d4ee5e", "#e1edb9", "#f0f2eb"], ["#f8b195", "#f67280", "#c06c84", "#6c5b7b", "#355c7d"], ["#d1e751", "#ffffff", "#000000", "#4dbce9", "#26ade4"], ["#1b676b", "#519548", "#88c425", "#bef202", "#eafde6"], ["#5e412f", "#fcebb6", "#78c0a8", "#f07818", "#f0a830"], ["#bcbdac", "#cfbe27", "#f27435", "#f02475", "#3b2d38"], ["#452632", "#91204d", "#e4844a", "#e8bf56", "#e2f7ce"], ["#eee6ab", "#c5bc8e", "#696758", "#45484b", "#36393b"], ["#f0d8a8", "#3d1c00", "#86b8b1", "#f2d694", "#fa2a00"], ["#2a044a", "#0b2e59", "#0d6759", "#7ab317", "#a0c55f"], ["#f04155", "#ff823a", "#f2f26f", "#fff7bd", "#95cfb7"], ["#b9d7d9", "#668284", "#2a2829", "#493736", "#7b3b3b"], ["#bbbb88", "#ccc68d", "#eedd99", "#eec290", "#eeaa88"], ["#b3cc57", "#ecf081", "#ffbe40", "#ef746f", "#ab3e5b"], ["#a3a948", "#edb92e", "#f85931", "#ce1836", "#009989"], ["#300030", "#480048", "#601848", "#c04848", "#f07241"], ["#67917a", "#170409", "#b8af03", "#ccbf82", "#e33258"], ["#aab3ab", "#c4cbb7", "#ebefc9", "#eee0b7", "#e8caaf"], ["#e8d5b7", "#0e2430", "#fc3a51", "#f5b349", "#e8d5b9"], ["#ab526b", "#bca297", "#c5ceae", "#f0e2a4", "#f4ebc3"], ["#607848", "#789048", "#c0d860", "#f0f0d8", "#604848"], ["#b6d8c0", "#c8d9bf", "#dadabd", "#ecdbbc", "#fedcba"], ["#a8e6ce", "#dcedc2", "#ffd3b5", "#ffaaa6", "#ff8c94"], ["#3e4147", "#fffedf", "#dfba69", "#5a2e2e", "#2a2c31"], ["#fc354c", "#29221f", "#13747d", "#0abfbc", "#fcf7c5"], ["#cc0c39", "#e6781e", "#c8cf02", "#f8fcc1", "#1693a7"], ["#1c2130", "#028f76", "#b3e099", "#ffeaad", "#d14334"], ["#a7c5bd", "#e5ddcb", "#eb7b59", "#cf4647", "#524656"], ["#dad6ca", "#1bb0ce", "#4f8699", "#6a5e72", "#563444"], ["#5c323e", "#a82743", "#e15e32", "#c0d23e", "#e5f04c"], ["#edebe6", "#d6e1c7", "#94c7b6", "#403b33", "#d3643b"], ["#fdf1cc", "#c6d6b8", "#987f69", "#e3ad40", "#fcd036"], ["#230f2b", "#f21d41", "#ebebbc", "#bce3c5", "#82b3ae"], ["#b9d3b0", "#81bda4", "#b28774", "#f88f79", "#f6aa93"], ["#3a111c", "#574951", "#83988e", "#bcdea5", "#e6f9bc"], ["#5e3929", "#cd8c52", "#b7d1a3", "#dee8be", "#fcf7d3"], ["#1c0113", "#6b0103", "#a30006", "#c21a01", "#f03c02"], ["#000000", "#9f111b", "#b11623", "#292c37", "#cccccc"], ["#382f32", "#ffeaf2", "#fcd9e5", "#fbc5d8", "#f1396d"], ["#e3dfba", "#c8d6bf", "#93ccc6", "#6cbdb5", "#1a1f1e"], ["#f6f6f6", "#e8e8e8", "#333333", "#990100", "#b90504"], ["#1b325f", "#9cc4e4", "#e9f2f9", "#3a89c9", "#f26c4f"], ["#a1dbb2", "#fee5ad", "#faca66", "#f7a541", "#f45d4c"], ["#c1b398", "#605951", "#fbeec2", "#61a6ab", "#accec0"], ["#5e9fa3", "#dcd1b4", "#fab87f", "#f87e7b", "#b05574"], ["#951f2b", "#f5f4d7", "#e0dfb1", "#a5a36c", "#535233"], ["#8dccad", "#988864", "#fea6a2", "#f9d6ac", "#ffe9af"], ["#2d2d29", "#215a6d", "#3ca2a2", "#92c7a3", "#dfece6"], ["#413d3d", "#040004", "#c8ff00", "#fa023c", "#4b000f"], ["#eff3cd", "#b2d5ba", "#61ada0", "#248f8d", "#605063"], ["#ffefd3", "#fffee4", "#d0ecea", "#9fd6d2", "#8b7a5e"], ["#cfffdd", "#b4dec1", "#5c5863", "#a85163", "#ff1f4c"], ["#9dc9ac", "#fffec7", "#f56218", "#ff9d2e", "#919167"], ["#4e395d", "#827085", "#8ebe94", "#ccfc8e", "#dc5b3e"], ["#a8a7a7", "#cc527a", "#e8175d", "#474747", "#363636"], ["#f8edd1", "#d88a8a", "#474843", "#9d9d93", "#c5cfc6"], ["#046d8b", "#309292", "#2fb8ac", "#93a42a", "#ecbe13"], ["#f38a8a", "#55443d", "#a0cab5", "#cde9ca", "#f1edd0"], ["#a70267", "#f10c49", "#fb6b41", "#f6d86b", "#339194"], ["#ff003c", "#ff8a00", "#fabe28", "#88c100", "#00c176"], ["#ffedbf", "#f7803c", "#f54828", "#2e0d23", "#f8e4c1"], ["#4e4d4a", "#353432", "#94ba65", "#2790b0", "#2b4e72"], ["#0ca5b0", "#4e3f30", "#fefeeb", "#f8f4e4", "#a5b3aa"], ["#4d3b3b", "#de6262", "#ffb88c", "#ffd0b3", "#f5e0d3"], ["#fffbb7", "#a6f6af", "#66b6ab", "#5b7c8d", "#4f2958"], ["#edf6ee", "#d1c089", "#b3204d", "#412e28", "#151101"], ["#9d7e79", "#ccac95", "#9a947c", "#748b83", "#5b756c"], ["#fcfef5", "#e9ffe1", "#cdcfb7", "#d6e6c3", "#fafbe3"], ["#9cddc8", "#bfd8ad", "#ddd9ab", "#f7af63", "#633d2e"], ["#30261c", "#403831", "#36544f", "#1f5f61", "#0b8185"], ["#aaff00", "#ffaa00", "#ff00aa", "#aa00ff", "#00aaff"], ["#d1313d", "#e5625c", "#f9bf76", "#8eb2c5", "#615375"], ["#ffe181", "#eee9e5", "#fad3b2", "#ffba7f", "#ff9c97"], ["#73c8a9", "#dee1b6", "#e1b866", "#bd5532", "#373b44"], ["#805841", "#dcf7f3", "#fffcdd", "#ffd8d8", "#f5a2a2"]]
|
|
2
|
+
|
|
3
|
+
export { palettes }
|