* chore: update deps * chore: update archiver v8 * fix: 还原 vue/html-closing-bracket-newline * feat: 增加默认配置和配置注释 * feat: 增加oxlint默认插件配置和注释 * refactor: remove unicorn ESLint configuration and update dependencies - Deleted the unicorn ESLint configuration file from the lint-configs package. - Removed unicorn configuration from the main index file. - Updated oxlint-config to include a comprehensive set of unicorn rules. - Adjusted preferences and vxe-table files to disable specific unicorn rules. - Removed references to eslint-plugin-unicorn from pnpm-lock.yaml and pnpm-workspace.yaml. * refactor: 移除 eslint 的 @typescript-eslint/eslint-plugin 依赖,将 TypeScript 配置迁移到 oxlint * feat: open typeAware * fix: mac 和linux下报错
107 lines
2.8 KiB
TypeScript
107 lines
2.8 KiB
TypeScript
import { DEFAULT_NAMESPACE } from '@vben-core/shared/constants';
|
|
|
|
/**
|
|
* @see copy https://github.com/element-plus/element-plus/blob/dev/packages/hooks/use-namespace/index.ts
|
|
*/
|
|
|
|
const statePrefix = 'is-';
|
|
|
|
const _bem = (
|
|
namespace: string,
|
|
block: string,
|
|
blockSuffix: string,
|
|
element: string,
|
|
modifier: string,
|
|
) => {
|
|
let cls = `${namespace}-${block}`;
|
|
if (blockSuffix) {
|
|
cls += `-${blockSuffix}`;
|
|
}
|
|
if (element) {
|
|
cls += `__${element}`;
|
|
}
|
|
if (modifier) {
|
|
cls += `--${modifier}`;
|
|
}
|
|
return cls;
|
|
};
|
|
|
|
const is: {
|
|
(name: string): string;
|
|
// oxlint-disable-next-line typescript/unified-signatures
|
|
(name: string, state: boolean | undefined): string;
|
|
} = (name: string, ...args: [] | [boolean | undefined]) => {
|
|
const state = args.length > 0 ? args[0] : true;
|
|
return name && state ? `${statePrefix}${name}` : '';
|
|
};
|
|
|
|
const useNamespace = (block: string) => {
|
|
const namespace = DEFAULT_NAMESPACE;
|
|
const b = (blockSuffix = '') => _bem(namespace, block, blockSuffix, '', '');
|
|
const e = (element?: string) =>
|
|
element ? _bem(namespace, block, '', element, '') : '';
|
|
const m = (modifier?: string) =>
|
|
modifier ? _bem(namespace, block, '', '', modifier) : '';
|
|
const be = (blockSuffix?: string, element?: string) =>
|
|
blockSuffix && element
|
|
? _bem(namespace, block, blockSuffix, element, '')
|
|
: '';
|
|
const em = (element?: string, modifier?: string) =>
|
|
element && modifier ? _bem(namespace, block, '', element, modifier) : '';
|
|
const bm = (blockSuffix?: string, modifier?: string) =>
|
|
blockSuffix && modifier
|
|
? _bem(namespace, block, blockSuffix, '', modifier)
|
|
: '';
|
|
const bem = (blockSuffix?: string, element?: string, modifier?: string) =>
|
|
blockSuffix && element && modifier
|
|
? _bem(namespace, block, blockSuffix, element, modifier)
|
|
: '';
|
|
|
|
// for css var
|
|
// --el-xxx: value;
|
|
const cssVar = (object: Record<string, string>) => {
|
|
const styles: Record<string, string> = {};
|
|
for (const key in object) {
|
|
if (object[key]) {
|
|
styles[`--${namespace}-${key}`] = object[key];
|
|
}
|
|
}
|
|
return styles;
|
|
};
|
|
// with block
|
|
const cssVarBlock = (object: Record<string, string>) => {
|
|
const styles: Record<string, string> = {};
|
|
for (const key in object) {
|
|
if (object[key]) {
|
|
styles[`--${namespace}-${block}-${key}`] = object[key];
|
|
}
|
|
}
|
|
return styles;
|
|
};
|
|
|
|
const cssVarName = (name: string) => `--${namespace}-${name}`;
|
|
const cssVarBlockName = (name: string) => `--${namespace}-${block}-${name}`;
|
|
|
|
return {
|
|
b,
|
|
be,
|
|
bem,
|
|
bm,
|
|
// css
|
|
cssVar,
|
|
cssVarBlock,
|
|
cssVarBlockName,
|
|
cssVarName,
|
|
e,
|
|
em,
|
|
is,
|
|
m,
|
|
namespace,
|
|
};
|
|
};
|
|
|
|
type UseNamespaceReturn = ReturnType<typeof useNamespace>;
|
|
|
|
export type { UseNamespaceReturn };
|
|
export { useNamespace };
|