feat: add form design
Some checks failed
Build / build (push) Successful in 4m14s
Build / deploy-stage (push) Failing after 1m52s
Build / switch-stage (push) Has been skipped

This commit is contained in:
2025-04-22 16:53:00 +02:00
parent 6214e262cc
commit 5ca9e98106
9 changed files with 381 additions and 7 deletions

62
safelist-loader.js Normal file
View File

@@ -0,0 +1,62 @@
// safelist-loader.js
const fs = require('fs');
const path = require('path');
const yaml = require('js-yaml');
/**
* Generate a Tailwind CSS safelist array from a YAML file.
* @param {string} yamlFilePath - Path to the YAML file, relative to the working directory.
* @returns {string[]} Array of unique class names.
*/
function generateSafelist(yamlFilePath) {
// Resolve the YAML file path
const absolutePath = path.resolve(process.cwd(), yamlFilePath);
const content = fs.readFileSync(absolutePath, 'utf8');
const doc = yaml.load(content);
const classes = new Set();
function walk(obj) {
if (Array.isArray(obj)) {
obj.forEach(walk);
} else if (obj && typeof obj === 'object') {
// Expand gridColumnClassAutoConfiguration placeholders
if (obj.gridColumnClassAutoConfiguration) {
const { gridSize, viewPorts } = obj.gridColumnClassAutoConfiguration;
const placeholder = /\{\@[\w]+\}/g;
if (typeof gridSize === 'number' && viewPorts) {
Object.values(viewPorts).forEach(vp => {
if (typeof vp.classPattern === 'string') {
for (let i = 1; i <= gridSize; i++) {
classes.add(vp.classPattern.replace(placeholder, i));
}
}
});
}
}
// Collect any *ClassAttribute strings
Object.entries(obj).forEach(([key, val]) => {
if (/Class(Attribute)?$/.test(key) && typeof val === 'string') {
val.split(/\s+/).forEach(c => {
if (c) classes.add(c);
});
} else {
walk(val);
}
});
}
}
walk(doc);
return Array.from(classes);
}
module.exports = generateSafelist;
// Usage in tailwind.config.js:
// const safelistLoader = require('./safelist-loader');
// module.exports = {
// // ... other config ...
// safelist: generateSafelist('packages/base/Configuration/Ext/Form/Yaml/Setup.yaml'),
// };