mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 22:34:56 +00:00
ORGANIZED INTO 4 MAIN CATEGORIES: - react/ React TypeScript components (145 components + Python bindings) - qml/ QML desktop components (104+ QML components) - python/ Python package implementations - legacy/ Utilities, contexts, and migration-in-progress code SUPPORTING FOLDERS (kept as-is): - icons/ 421 SVG icons - theming/ Material Design 3 theme system - styles/ SCSS modules and utilities - scss/ SCSS preprocessor files - docs/ Documentation files STRUCTURE IMPROVEMENTS: ✅ All code preserved (nothing deleted) ✅ Clear separation by implementation type ✅ Better navigation and discoverability ✅ Easy to find what you need ✅ Professional organization DOCUMENTATION: - Added STRUCTURE.md explaining the new layout - Updated folder organization with clear purpose - Maintained all original functionality All files reorganized while keeping full functionality intact. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
39 lines
865 B
JavaScript
39 lines
865 B
JavaScript
/**
|
|
* Utility function to combine class names conditionally
|
|
* Similar to the 'clsx' or 'classnames' npm packages
|
|
*/
|
|
export function classNames(...args) {
|
|
const classes = []
|
|
|
|
args.forEach((arg) => {
|
|
if (!arg) return
|
|
|
|
const argType = typeof arg
|
|
|
|
if (argType === 'string' || argType === 'number') {
|
|
classes.push(arg)
|
|
} else if (Array.isArray(arg)) {
|
|
if (arg.length) {
|
|
const inner = classNames(...arg)
|
|
if (inner) {
|
|
classes.push(inner)
|
|
}
|
|
}
|
|
} else if (argType === 'object') {
|
|
if (arg.toString !== Object.prototype.toString) {
|
|
classes.push(arg.toString())
|
|
} else {
|
|
Object.entries(arg).forEach(([key, value]) => {
|
|
if (value) {
|
|
classes.push(key)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
})
|
|
|
|
return classes.join(' ')
|
|
}
|
|
|
|
export default classNames
|