@itshixun/qst-ui-system 0.0.1
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 +59 -0
- package/dist/index.common.js +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.es.js +1 -0
- package/dist/theme/defaultThemeList.d.ts +2 -0
- package/dist/theme/theme.d.ts +71 -0
- package/dist/theme/themeForUnocss.d.ts +31 -0
- package/package.json +73 -0
package/README.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# qst-ui-system
|
|
2
|
+
QST前端UI基础库:
|
|
3
|
+
1. 对接设计端定制的颜色/间距/风格(圆角/边框)等主题规范,作为UI设计和前端开发之间的“接口”;
|
|
4
|
+
2. 将设计端定制的主题规范 关联到常用组件库的主题配置上;
|
|
5
|
+
3. 将设计端定制的主题规范 关联到常用css框架的配置上;
|
|
6
|
+
4. 通用的normalize(reset)样式和其他全局样式;
|
|
7
|
+
## 主要功能
|
|
8
|
+
- [x] 基于element-plus的css变量,生成主题变量配置:颜色/字色/背景色/圆角/间距/组件尺寸 等等,
|
|
9
|
+
- [x] 全局初始化样式:normalize,全局文字配置(字体/抗锯齿等)
|
|
10
|
+
- [ ] 组件库适配主题变量配置(样式覆盖)
|
|
11
|
+
- [x] element-plus
|
|
12
|
+
- [ ] element-ui
|
|
13
|
+
- [ ] ant-design / ant-design-vue
|
|
14
|
+
- [ ] vant
|
|
15
|
+
- [ ] css框架适配主题变量配置
|
|
16
|
+
- [x] unocss
|
|
17
|
+
- [ ] windicss
|
|
18
|
+
- [ ] tailwind
|
|
19
|
+
- [ ] 整合夜间模式切换功能
|
|
20
|
+
|
|
21
|
+
## 对接&使用说明
|
|
22
|
+
设计端:
|
|
23
|
+
1. 设计师使用[主题编辑器](https://mutueye.github.io/vite-vue3-scaffold/#/themeeditor)配置并导出json格式的主题列表
|
|
24
|
+
2. 在UI设计的过程中遵循配置好的主题进行设计
|
|
25
|
+
前端:
|
|
26
|
+
1. 在项目入口(main.js/main.ts)调用`initQstTheme()`初始化主题样式,引入设计端定制好的主题(不传则使用默认主题列表)
|
|
27
|
+
```js
|
|
28
|
+
import { initQstTheme } from 'qst-ui-system';
|
|
29
|
+
// 初始化qst主题,不传参数使用默认配置
|
|
30
|
+
initQstTheme();
|
|
31
|
+
// 参数示例:
|
|
32
|
+
initQstTheme({
|
|
33
|
+
/** css变量命名空间,如果使用element-plus切修改了element-plus的命名空间,需要和element-plus统一 */
|
|
34
|
+
namespace: '--el',
|
|
35
|
+
/** 主题列表,可以传入设计师定制的主题列表,不传使用默认主题列表 */
|
|
36
|
+
themeList?: UITheme[];
|
|
37
|
+
/** 主题样式设置完成后的回调函数 */
|
|
38
|
+
onStylesSet?: () => void;
|
|
39
|
+
/** 是否包含css重置样式(reset/normalize) 默认true */
|
|
40
|
+
cssReset?: boolean;
|
|
41
|
+
/** 需要适配的组件库(进行样式覆盖/主题定制),默认'element-plus' */
|
|
42
|
+
uiLibs?: UILib | UILib[];
|
|
43
|
+
})
|
|
44
|
+
```
|
|
45
|
+
2. 如果使用element-plus组件库,则element组件自动适配引入的主题配置;其他组件库需要额外的步骤(WIP)
|
|
46
|
+
3. 使用css框架(比如unocss),可以方便的调用主题配置进行样式编写(需要在相应的配置文件中引入主题配置 WIP)。
|
|
47
|
+
```js
|
|
48
|
+
import { generateUnocssTheme } from 'qst-ui-system';
|
|
49
|
+
// unocss配置
|
|
50
|
+
{
|
|
51
|
+
...
|
|
52
|
+
presets: [...],
|
|
53
|
+
safelist: [...],
|
|
54
|
+
transformers: [...]
|
|
55
|
+
// 生成主题配置 参数为namespace,默认'--el'
|
|
56
|
+
theme: generateUnocssTheme('--el'),
|
|
57
|
+
...
|
|
58
|
+
}
|
|
59
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e=require("color2k");const r=[{name:"athena",config:{light:{color:{primary:"#217aff",success:"#67c23a",warning:"#f2711c",danger:"#db2828",info:"#96979c"},"text-color":{primary:"#131b26",regular:"#5f6165",secondary:"#96979c",placeholder:"#cacbd0",disabled:"#c0c4cc"},"bg-color":{DEFAULT:"#ffffff",page:"#f7f8fd",secondary:"#eef0f8"},"border-color":{"extra-light":"#f2f6fc",lighter:"#ebeef5",light:"#e4e7ed",DEFAULT:"#dcdfe6",dark:"#d4d7de",darker:"#cdd0d6"},"fill-color":{blank:"#ffffff","extra-light":"#fafcff",lighter:"#f8fafc",light:"#f5f7fa",DEFAULT:"#f0f2f5",dark:"#ebedf0",darker:"#e6e8eb"},"border-radius":{small:"2px",base:"4px",large:"6px",huge:"8px",round:"20px",circle:"100%"},space:{xxxs:"4px",xxs:"8px",xs:"12px",sm:"16px",md:"20px",DEFAULT:"24px",lg:"28px",xl:"32px",xxl:"36px",xxxl:"40px"},"font-size":{"extra-small":"12px",small:"13px",base:"14px",medium:"16px",large:"18px","extra-large":"20px"},"component-size":{mini:"24px",small:"28px",DEFAULT:"36px",large:"40px"}},dark:{color:{primary:"#217aff",success:"#67c23a",warning:"#f2711c",danger:"#db2828",info:"#96979c"},"text-color":{primary:"#ffffff",regular:"#cfd3dc",secondary:"#a3a6ad",placeholder:"#8d9095",disabled:"#6c6e72"},"bg-color":{DEFAULT:"#28303d",page:"#1b2431",secondary:"#171f2b"},"border-color":{"extra-light":"#313a47",lighter:"#3a4554",light:"#444f5e",DEFAULT:"#576273",dark:"#677282",darker:"#707b8c"},"fill-color":{blank:"transparent","extra-light":"#252c38",lighter:"#222b38",light:"#1f2733",DEFAULT:"#1e2633",dark:"#1a222e",darker:"#171e29"},"border-radius":{small:"2px",base:"4px",large:"6px",huge:"8px",round:"20px",circle:"100%"},space:{xxxs:"4px",xxs:"8px",xs:"12px",sm:"16px",md:"20px",DEFAULT:"24px",lg:"28px",xl:"32px",xxl:"36px",xxxl:"40px"},"font-size":{"extra-small":"12px",small:"13px",base:"14px",medium:"16px",large:"18px","extra-large":"20px"},"component-size":{mini:"24px",small:"28px",DEFAULT:"36px",large:"40px"}}}},{name:"uplus",config:{light:{color:{primary:"#67aef7",success:"#62d65c",warning:"#f39800",danger:"#fc7373",info:"#969eb3"},"text-color":{primary:"#222222",regular:"#666666",secondary:"#999999",placeholder:"#bbbbbb",disabled:"#cccccc"},"bg-color":{DEFAULT:"#ffffff",page:"#f8f9fa",secondary:"#f2f3f4"},"border-color":{"extra-light":"#f2f6fc",lighter:"#ebeef5",light:"#e4e7ed",DEFAULT:"#dcdfe6",dark:"#d4d7de",darker:"#cdd0d6"},"fill-color":{blank:"#ffffff","extra-light":"#fafcff",lighter:"#fafafa",light:"#f5f7fa",DEFAULT:"#f0f2f5",dark:"#ebedf0",darker:"#e6e8eb"},"border-radius":{small:"2px",base:"4px",large:"6px",huge:"8px",round:"20px",circle:"100%"},space:{xxxs:"4px",xxs:"8px",xs:"12px",sm:"16px",md:"20px",DEFAULT:"24px",lg:"28px",xl:"32px",xxl:"36px",xxxl:"40px"},"font-size":{"extra-small":"12px",small:"13px",base:"14px",medium:"16px",large:"18px","extra-large":"20px"},"component-size":{mini:"24px",small:"32px",DEFAULT:"40px",large:"48px"}},dark:{color:{primary:"#67aef7",success:"#62d65c",warning:"#f39800",danger:"#fc7373",info:"#969eb3"},"text-color":{primary:"#e5eaf3",regular:"#cfd3dc",secondary:"#a3a6ad",placeholder:"#8d9095",disabled:"#6c6e72"},"bg-color":{DEFAULT:"#252525",page:"#181818",secondary:"#111111"},"border-color":{"extra-light":"#2B2B2C",lighter:"#363637",light:"#414243",DEFAULT:"#4C4D4F",dark:"#58585B",darker:"#636466"},"fill-color":{blank:"transparent","extra-light":"#191919",lighter:"#1D1D1D",light:"#262727",DEFAULT:"#303030",dark:"#39393A",darker:"#424243"},"border-radius":{small:"2px",base:"4px",large:"6px",huge:"8px",round:"20px",circle:"100%"},space:{xxxs:"4px",xxs:"8px",xs:"12px",sm:"16px",md:"20px",DEFAULT:"24px",lg:"28px",xl:"32px",xxl:"36px",xxxl:"40px"},"font-size":{"extra-small":"12px",small:"13px",base:"14px",medium:"16px",large:"18px","extra-large":"20px"},"component-size":{mini:"24px",small:"32px",DEFAULT:"40px",large:"48px"}}}}];var a,o,l;exports.ThemeCategory=void 0,(a=exports.ThemeCategory||(exports.ThemeCategory={})).Color="color",a.TextColor="text-color",a.BgColor="bg-color",a.BorderColor="border-color",a.FillColor="fill-color",a.BorderRadius="border-radius",a.Space="space",a.FontSize="font-size",a.ComponentSize="component-size",exports.DayNightModeEnum=void 0,(o=exports.DayNightModeEnum||(exports.DayNightModeEnum={})).light="light",o.dark="dark",exports.MixModeEnum=void 0,(l=exports.MixModeEnum||(exports.MixModeEnum={})).light="light",l.dark="dark";const t={[exports.ThemeCategory.Color]:["primary","success","warning","danger","info"],[exports.ThemeCategory.TextColor]:["primary","regular","secondary","placeholder","disabled"],[exports.ThemeCategory.BgColor]:["DEFAULT","page","secondary"],[exports.ThemeCategory.BorderColor]:["extra-light","lighter","light","DEFAULT","dark","darker"],[exports.ThemeCategory.FillColor]:["blank","extra-light","lighter","light","DEFAULT","dark","darker"],[exports.ThemeCategory.BorderRadius]:["small","base","large","huge","round","circle"],[exports.ThemeCategory.Space]:["xxxs","xxs","xs","sm","md","DEFAULT","lg","xl","xxl","xxxl"],[exports.ThemeCategory.FontSize]:["extra-small","small","base","medium","large","extra-large"],[exports.ThemeCategory.ComponentSize]:["small","DEFAULT","large","mini"]},s={[exports.DayNightModeEnum.light]:{light:"#FFFFFF",dark:"#000000"},[exports.DayNightModeEnum.dark]:{light:"#000000",dark:"#FFFFFF"}},i={namespace:"--el",themeList:r,cssReset:!0,uiLibs:"element-plus"},n=[],c=e=>{const r=Object.assign({},i,e||{});n.length=0,n.push(...r.themeList);const a=document.head.querySelector("#theme");let o="";const{namespace:l,themeList:t}=r;t.forEach((e=>{Object.keys(exports.DayNightModeEnum).forEach((r=>{const a=x({namespace:l,targetTheme:e,mode:r});r===exports.DayNightModeEnum.light?o+=`.${e.name} { ${a} }`:o+=`.${e.name}.${r} { ${a} }`}))})),a.innerText=`${d(r)} ${o}`,r&&"function"==typeof r.onStylesSet&&r.onStylesSet()},d=e=>{const{namespace:r,cssReset:a,uiLibs:o}=e;let l=`${a?'html,body,body div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,figure,footer,header,menu,nav,section,time,mark,audio,video,details,summary{padding:0;margin:0;vertical-align:baseline;background:transparent;border-style:solid;border-width:0;}main,article,aside,figure,footer,header,nav,section,details,summary{display:block;}html{box-sizing:border-box;}*,*::before,*::after{box-sizing:inherit;}img,object,embed{max-width:100%;}ul{list-style:none;}a{padding:0;margin:0;font-size:100%;vertical-align:baseline;background:transparent;}table{font:100%;font-size:inherit;border-spacing:0;border-collapse:separate;}table th{font-weight:bold;vertical-align:bottom;}table td{font-weight:normal;vertical-align:top;}table td img{vertical-align:top;}button,input,select,textarea{margin:0;}.clearfix::after{display:block;clear:both;content:\' \';}html{font-family:"PingFang SC","Microsoft YaHei","Hiragino Sans GB",SimSun,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}':""} body { font-size: var(${r}-font-size-base); background-color: var(${r}-bg-color-page); }`;return("string"==typeof o?[o]:o).includes("element-plus")&&(l+="body{--el-menu-bg-color:transparent;--el-menu-base-level-padding:var(--el-space);--el-menu-level-padding:var(--el-space-sm);}.el-button{--el-button-size:var(--el-component-size);height:var(--el-button-size);padding:0 var(--el-space-sm);}.el-button--small{--el-button-size:var(--el-component-size-small);padding:0 var(--el-space-xs);}.el-button--large{--el-button-size:var(--el-component-size-large);padding:0 var(--el-space);}.el-dialog{--el-dialog-border-radius:var(--el-border-radius-base);}.el-dialog .el-dialog__body{padding:var(--el-space-md);}.el-collapse{--el-collapse-header-text-color:var(--el-text-color-secondary);}.el-message-box{--el-messagebox-border-radius:var(--el-border-radius-base);}.el-tooltip__trigger:focus-visible{outline:none;}.el-form-item__label{height:var(--el-component-size);line-height:var(--el-component-size);}.el-form-item--large .el-form-item__label{height:var(--el-component-size-large);line-height:var(--el-component-size-large);}.el-form-item--small .el-form-item__label{height:var(--el-component-size-small);line-height:var(--el-component-size-small);}".replace("--el-",`${r}-`)),l+="html { --el-color-white: #ffffff; --el-color-black: #000000; }",l},x=({namespace:r,targetTheme:a,mode:o})=>{const l=a.config[o];let t,i="";for(t in l){const a=l[t];Object.keys(a).forEach((l=>{const n="DEFAULT"===l?`${r}-${t}`:`${r}-${t}-${l}`;i+=`${n}: ${a[l]}; `,t===exports.ThemeCategory.Color&&Object.keys(exports.MixModeEnum).forEach((r=>{for(let t=1;t<10;t++)i+=`${n}-${r}-${t}: ${e.toHex(e.mix(a[l],s[o][r],.1*t))}; `}))}))}return i=i.concat(" ",`${r}-color-error: var(${r}-color-danger);`),i=i.concat(" ",`${r}-bg-color-overlay: var(${r}-bg-color);`),i},p=e=>{if(e>n.length-1)return;const r=document.getElementsByTagName("html")[0],a=n[e].name;n.forEach((e=>{r.classList.contains(e.name)&&e.name!==a&&r.classList.remove(e.name)})),r.classList.contains(a)||r.classList.add(a)},g=e=>{const r={},a=[];return e.forEach((e=>{const o=e.split("-");if(o.length>1){const e=o.shift(),l=g(o);r[e]?r[e].push(...l):(r[e]=l,a.push({[e]:r[e]}))}else a.push(e)})),a},m=(()=>{const e={};for(const r in t)r.includes("color")?e[r]=g(t[r]):e[r]=t[r];return e})(),f=e=>{const r={};return m.color.forEach((a=>{r[a]={DEFAULT:`var(${e}-color-${a})`};["light","dark"].forEach((o=>{const l={};for(let r=1;r<10;r++)l[r]=`var(${e}-color-${a}-${o}-${r})`;r[a][o]=l}))})),r},h=(e,r,a,o="")=>{const l={},t=e[r];return t&&t.forEach((e=>{if("string"==typeof e)"DEFAULT"===e?l[o||e]=`var(${a}-${r})`:l[o?o+"-"+e:e]=`var(${a}-${r}-${e})`;else{const t=Object.keys(e)[0];l[o?o+"-"+t:t]=h(e,t,`${a}-${r}`)}})),l},b=e=>({...h(m,"space",e,"space"),...h(m,"component-size",e,"component-size"),header:"72px","left-menu":"300px"});exports.cssVarCodex=t,exports.currentThemeList=n,exports.defaultThemeList=r,exports.generateUnocssTheme=(e="--el")=>({width:b(e),height:b(e),spacing:b(e),borderRadius:{...h(m,"border-radius",e)},colors:{theme:`var(${e}-color-primary)`,...f(e),text:h(m,"text-color",e),bg:h(m,"bg-color",e),border:h(m,"border-color",e),fill:h(m,"fill-color",e)},fontSize:{...h(m,"font-size",e)}}),exports.initQstTheme=e=>{const r=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");r.appendChild(a),a.setAttribute("id","theme"),c(e),p(0)},exports.injectThemeStyle=c,exports.mixModeBaseColors=s,exports.setThemeClassByIndex=p;
|
package/dist/index.d.ts
ADDED
package/dist/index.es.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{toHex as e,mix as r}from"color2k";const a=[{name:"athena",config:{light:{color:{primary:"#217aff",success:"#67c23a",warning:"#f2711c",danger:"#db2828",info:"#96979c"},"text-color":{primary:"#131b26",regular:"#5f6165",secondary:"#96979c",placeholder:"#cacbd0",disabled:"#c0c4cc"},"bg-color":{DEFAULT:"#ffffff",page:"#f7f8fd",secondary:"#eef0f8"},"border-color":{"extra-light":"#f2f6fc",lighter:"#ebeef5",light:"#e4e7ed",DEFAULT:"#dcdfe6",dark:"#d4d7de",darker:"#cdd0d6"},"fill-color":{blank:"#ffffff","extra-light":"#fafcff",lighter:"#f8fafc",light:"#f5f7fa",DEFAULT:"#f0f2f5",dark:"#ebedf0",darker:"#e6e8eb"},"border-radius":{small:"2px",base:"4px",large:"6px",huge:"8px",round:"20px",circle:"100%"},space:{xxxs:"4px",xxs:"8px",xs:"12px",sm:"16px",md:"20px",DEFAULT:"24px",lg:"28px",xl:"32px",xxl:"36px",xxxl:"40px"},"font-size":{"extra-small":"12px",small:"13px",base:"14px",medium:"16px",large:"18px","extra-large":"20px"},"component-size":{mini:"24px",small:"28px",DEFAULT:"36px",large:"40px"}},dark:{color:{primary:"#217aff",success:"#67c23a",warning:"#f2711c",danger:"#db2828",info:"#96979c"},"text-color":{primary:"#ffffff",regular:"#cfd3dc",secondary:"#a3a6ad",placeholder:"#8d9095",disabled:"#6c6e72"},"bg-color":{DEFAULT:"#28303d",page:"#1b2431",secondary:"#171f2b"},"border-color":{"extra-light":"#313a47",lighter:"#3a4554",light:"#444f5e",DEFAULT:"#576273",dark:"#677282",darker:"#707b8c"},"fill-color":{blank:"transparent","extra-light":"#252c38",lighter:"#222b38",light:"#1f2733",DEFAULT:"#1e2633",dark:"#1a222e",darker:"#171e29"},"border-radius":{small:"2px",base:"4px",large:"6px",huge:"8px",round:"20px",circle:"100%"},space:{xxxs:"4px",xxs:"8px",xs:"12px",sm:"16px",md:"20px",DEFAULT:"24px",lg:"28px",xl:"32px",xxl:"36px",xxxl:"40px"},"font-size":{"extra-small":"12px",small:"13px",base:"14px",medium:"16px",large:"18px","extra-large":"20px"},"component-size":{mini:"24px",small:"28px",DEFAULT:"36px",large:"40px"}}}},{name:"uplus",config:{light:{color:{primary:"#67aef7",success:"#62d65c",warning:"#f39800",danger:"#fc7373",info:"#969eb3"},"text-color":{primary:"#222222",regular:"#666666",secondary:"#999999",placeholder:"#bbbbbb",disabled:"#cccccc"},"bg-color":{DEFAULT:"#ffffff",page:"#f8f9fa",secondary:"#f2f3f4"},"border-color":{"extra-light":"#f2f6fc",lighter:"#ebeef5",light:"#e4e7ed",DEFAULT:"#dcdfe6",dark:"#d4d7de",darker:"#cdd0d6"},"fill-color":{blank:"#ffffff","extra-light":"#fafcff",lighter:"#fafafa",light:"#f5f7fa",DEFAULT:"#f0f2f5",dark:"#ebedf0",darker:"#e6e8eb"},"border-radius":{small:"2px",base:"4px",large:"6px",huge:"8px",round:"20px",circle:"100%"},space:{xxxs:"4px",xxs:"8px",xs:"12px",sm:"16px",md:"20px",DEFAULT:"24px",lg:"28px",xl:"32px",xxl:"36px",xxxl:"40px"},"font-size":{"extra-small":"12px",small:"13px",base:"14px",medium:"16px",large:"18px","extra-large":"20px"},"component-size":{mini:"24px",small:"32px",DEFAULT:"40px",large:"48px"}},dark:{color:{primary:"#67aef7",success:"#62d65c",warning:"#f39800",danger:"#fc7373",info:"#969eb3"},"text-color":{primary:"#e5eaf3",regular:"#cfd3dc",secondary:"#a3a6ad",placeholder:"#8d9095",disabled:"#6c6e72"},"bg-color":{DEFAULT:"#252525",page:"#181818",secondary:"#111111"},"border-color":{"extra-light":"#2B2B2C",lighter:"#363637",light:"#414243",DEFAULT:"#4C4D4F",dark:"#58585B",darker:"#636466"},"fill-color":{blank:"transparent","extra-light":"#191919",lighter:"#1D1D1D",light:"#262727",DEFAULT:"#303030",dark:"#39393A",darker:"#424243"},"border-radius":{small:"2px",base:"4px",large:"6px",huge:"8px",round:"20px",circle:"100%"},space:{xxxs:"4px",xxs:"8px",xs:"12px",sm:"16px",md:"20px",DEFAULT:"24px",lg:"28px",xl:"32px",xxl:"36px",xxxl:"40px"},"font-size":{"extra-small":"12px",small:"13px",base:"14px",medium:"16px",large:"18px","extra-large":"20px"},"component-size":{mini:"24px",small:"32px",DEFAULT:"40px",large:"48px"}}}}];var l,o,t;!function(e){e.Color="color",e.TextColor="text-color",e.BgColor="bg-color",e.BorderColor="border-color",e.FillColor="fill-color",e.BorderRadius="border-radius",e.Space="space",e.FontSize="font-size",e.ComponentSize="component-size"}(l||(l={})),function(e){e.light="light",e.dark="dark"}(o||(o={})),function(e){e.light="light",e.dark="dark"}(t||(t={}));const i={[l.Color]:["primary","success","warning","danger","info"],[l.TextColor]:["primary","regular","secondary","placeholder","disabled"],[l.BgColor]:["DEFAULT","page","secondary"],[l.BorderColor]:["extra-light","lighter","light","DEFAULT","dark","darker"],[l.FillColor]:["blank","extra-light","lighter","light","DEFAULT","dark","darker"],[l.BorderRadius]:["small","base","large","huge","round","circle"],[l.Space]:["xxxs","xxs","xs","sm","md","DEFAULT","lg","xl","xxl","xxxl"],[l.FontSize]:["extra-small","small","base","medium","large","extra-large"],[l.ComponentSize]:["small","DEFAULT","large","mini"]},s={[o.light]:{light:"#FFFFFF",dark:"#000000"},[o.dark]:{light:"#000000",dark:"#FFFFFF"}},n={namespace:"--el",themeList:a,cssReset:!0,uiLibs:"element-plus"},c=[],d=e=>{const r=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");r.appendChild(a),a.setAttribute("id","theme"),p(e),g(0)},p=e=>{const r=Object.assign({},n,e||{});c.length=0,c.push(...r.themeList);const a=document.head.querySelector("#theme");let l="";const{namespace:t,themeList:i}=r;i.forEach((e=>{Object.keys(o).forEach((r=>{const a=f({namespace:t,targetTheme:e,mode:r});r===o.light?l+=`.${e.name} { ${a} }`:l+=`.${e.name}.${r} { ${a} }`}))})),a.innerText=`${x(r)} ${l}`,r&&"function"==typeof r.onStylesSet&&r.onStylesSet()},x=e=>{const{namespace:r,cssReset:a,uiLibs:l}=e;let o=`${a?'html,body,body div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,figure,footer,header,menu,nav,section,time,mark,audio,video,details,summary{padding:0;margin:0;vertical-align:baseline;background:transparent;border-style:solid;border-width:0;}main,article,aside,figure,footer,header,nav,section,details,summary{display:block;}html{box-sizing:border-box;}*,*::before,*::after{box-sizing:inherit;}img,object,embed{max-width:100%;}ul{list-style:none;}a{padding:0;margin:0;font-size:100%;vertical-align:baseline;background:transparent;}table{font:100%;font-size:inherit;border-spacing:0;border-collapse:separate;}table th{font-weight:bold;vertical-align:bottom;}table td{font-weight:normal;vertical-align:top;}table td img{vertical-align:top;}button,input,select,textarea{margin:0;}.clearfix::after{display:block;clear:both;content:\' \';}html{font-family:"PingFang SC","Microsoft YaHei","Hiragino Sans GB",SimSun,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}':""} body { font-size: var(${r}-font-size-base); background-color: var(${r}-bg-color-page); }`;return("string"==typeof l?[l]:l).includes("element-plus")&&(o+="body{--el-menu-bg-color:transparent;--el-menu-base-level-padding:var(--el-space);--el-menu-level-padding:var(--el-space-sm);}.el-button{--el-button-size:var(--el-component-size);height:var(--el-button-size);padding:0 var(--el-space-sm);}.el-button--small{--el-button-size:var(--el-component-size-small);padding:0 var(--el-space-xs);}.el-button--large{--el-button-size:var(--el-component-size-large);padding:0 var(--el-space);}.el-dialog{--el-dialog-border-radius:var(--el-border-radius-base);}.el-dialog .el-dialog__body{padding:var(--el-space-md);}.el-collapse{--el-collapse-header-text-color:var(--el-text-color-secondary);}.el-message-box{--el-messagebox-border-radius:var(--el-border-radius-base);}.el-tooltip__trigger:focus-visible{outline:none;}.el-form-item__label{height:var(--el-component-size);line-height:var(--el-component-size);}.el-form-item--large .el-form-item__label{height:var(--el-component-size-large);line-height:var(--el-component-size-large);}.el-form-item--small .el-form-item__label{height:var(--el-component-size-small);line-height:var(--el-component-size-small);}".replace("--el-",`${r}-`)),o+="html { --el-color-white: #ffffff; --el-color-black: #000000; }",o},f=({namespace:a,targetTheme:o,mode:i})=>{const n=o.config[i];let c,d="";for(c in n){const o=n[c];Object.keys(o).forEach((n=>{const p="DEFAULT"===n?`${a}-${c}`:`${a}-${c}-${n}`;d+=`${p}: ${o[n]}; `,c===l.Color&&Object.keys(t).forEach((a=>{for(let l=1;l<10;l++)d+=`${p}-${a}-${l}: ${e(r(o[n],s[i][a],.1*l))}; `}))}))}return d=d.concat(" ",`${a}-color-error: var(${a}-color-danger);`),d=d.concat(" ",`${a}-bg-color-overlay: var(${a}-bg-color);`),d},g=e=>{if(e>c.length-1)return;const r=document.getElementsByTagName("html")[0],a=c[e].name;c.forEach((e=>{r.classList.contains(e.name)&&e.name!==a&&r.classList.remove(e.name)})),r.classList.contains(a)||r.classList.add(a)},m=e=>{const r={},a=[];return e.forEach((e=>{const l=e.split("-");if(l.length>1){const e=l.shift(),o=m(l);r[e]?r[e].push(...o):(r[e]=o,a.push({[e]:r[e]}))}else a.push(e)})),a},b=(()=>{const e={};for(const r in i)r.includes("color")?e[r]=m(i[r]):e[r]=i[r];return e})(),h=e=>{const r={};return b.color.forEach((a=>{r[a]={DEFAULT:`var(${e}-color-${a})`};["light","dark"].forEach((l=>{const o={};for(let r=1;r<10;r++)o[r]=`var(${e}-color-${a}-${l}-${r})`;r[a][l]=o}))})),r},u=(e,r,a,l="")=>{const o={},t=e[r];return t&&t.forEach((e=>{if("string"==typeof e)"DEFAULT"===e?o[l||e]=`var(${a}-${r})`:o[l?l+"-"+e:e]=`var(${a}-${r}-${e})`;else{const t=Object.keys(e)[0];o[l?l+"-"+t:t]=u(e,t,`${a}-${r}`)}})),o},k=e=>({...u(b,"space",e,"space"),...u(b,"component-size",e,"component-size"),header:"72px","left-menu":"300px"}),y=(e="--el")=>({width:k(e),height:k(e),spacing:k(e),borderRadius:{...u(b,"border-radius",e)},colors:{theme:`var(${e}-color-primary)`,...h(e),text:u(b,"text-color",e),bg:u(b,"bg-color",e),border:u(b,"border-color",e),fill:u(b,"fill-color",e)},fontSize:{...u(b,"font-size",e)}});export{o as DayNightModeEnum,t as MixModeEnum,l as ThemeCategory,i as cssVarCodex,c as currentThemeList,a as defaultThemeList,y as generateUnocssTheme,d as initQstTheme,p as injectThemeStyle,s as mixModeBaseColors,g as setThemeClassByIndex};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export declare enum ThemeCategory {
|
|
2
|
+
Color = "color",
|
|
3
|
+
TextColor = "text-color",
|
|
4
|
+
BgColor = "bg-color",
|
|
5
|
+
BorderColor = "border-color",
|
|
6
|
+
FillColor = "fill-color",
|
|
7
|
+
BorderRadius = "border-radius",
|
|
8
|
+
Space = "space",
|
|
9
|
+
FontSize = "font-size",
|
|
10
|
+
ComponentSize = "component-size"
|
|
11
|
+
}
|
|
12
|
+
export declare enum DayNightModeEnum {
|
|
13
|
+
light = "light",
|
|
14
|
+
dark = "dark"
|
|
15
|
+
}
|
|
16
|
+
export declare enum MixModeEnum {
|
|
17
|
+
light = "light",
|
|
18
|
+
dark = "dark"
|
|
19
|
+
}
|
|
20
|
+
export declare const cssVarCodex: {
|
|
21
|
+
readonly color: readonly ["primary", "success", "warning", "danger", "info"];
|
|
22
|
+
readonly "text-color": readonly ["primary", "regular", "secondary", "placeholder", "disabled"];
|
|
23
|
+
readonly "bg-color": readonly ["DEFAULT", "page", "secondary"];
|
|
24
|
+
readonly "border-color": readonly ["extra-light", "lighter", "light", "DEFAULT", "dark", "darker"];
|
|
25
|
+
readonly "fill-color": readonly ["blank", "extra-light", "lighter", "light", "DEFAULT", "dark", "darker"];
|
|
26
|
+
readonly "border-radius": readonly ["small", "base", "large", "huge", "round", "circle"];
|
|
27
|
+
readonly space: readonly ["xxxs", "xxs", "xs", "sm", "md", "DEFAULT", "lg", "xl", "xxl", "xxxl"];
|
|
28
|
+
readonly "font-size": readonly ["extra-small", "small", "base", "medium", "large", "extra-large"];
|
|
29
|
+
readonly "component-size": readonly ["small", "DEFAULT", "large", "mini"];
|
|
30
|
+
};
|
|
31
|
+
export type ThemeConfig = {
|
|
32
|
+
[K in ThemeCategory]: Record<(typeof cssVarCodex)[K][number], string>;
|
|
33
|
+
};
|
|
34
|
+
export interface UITheme {
|
|
35
|
+
name: string;
|
|
36
|
+
config: {
|
|
37
|
+
[T in DayNightModeEnum]: ThemeConfig;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export declare const mixModeBaseColors: {
|
|
41
|
+
light: {
|
|
42
|
+
light: string;
|
|
43
|
+
dark: string;
|
|
44
|
+
};
|
|
45
|
+
dark: {
|
|
46
|
+
light: string;
|
|
47
|
+
dark: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
export type UILib = 'element-ui' | 'element-plus' | 'ant-design-vue' | 'ant-design' | 'vant';
|
|
51
|
+
/** 主题选项 */
|
|
52
|
+
export interface ThemeOption {
|
|
53
|
+
/** 主题css变量命名空间 默认--el */
|
|
54
|
+
namespace?: string;
|
|
55
|
+
/** 主题列表 */
|
|
56
|
+
themeList?: UITheme[];
|
|
57
|
+
/** 主题样式设置完成后的回调函数 */
|
|
58
|
+
onStylesSet?: () => void;
|
|
59
|
+
/** 是否包含css重置样式(reset/normalize) 默认是 */
|
|
60
|
+
cssReset?: boolean;
|
|
61
|
+
/** 需要适配的组件库(进行样式覆盖/主题定制) */
|
|
62
|
+
uiLibs?: UILib | UILib[];
|
|
63
|
+
}
|
|
64
|
+
export declare const currentThemeList: UITheme[];
|
|
65
|
+
/**
|
|
66
|
+
* 初始化QstUI
|
|
67
|
+
* @param option {ThemeOption} UI主题选项
|
|
68
|
+
*/
|
|
69
|
+
export declare const initQstTheme: (option?: ThemeOption) => void;
|
|
70
|
+
export declare const injectThemeStyle: (option: ThemeOption) => void;
|
|
71
|
+
export declare const setThemeClassByIndex: (themeIndex: number) => void;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type CssVarConfigType = Record<string, (string | CssVarConfigType)[]>;
|
|
2
|
+
export interface ConfigList {
|
|
3
|
+
[key: string]: ConfigList | string;
|
|
4
|
+
}
|
|
5
|
+
export declare const generateUnocssTheme: (namespace?: string) => {
|
|
6
|
+
width: {
|
|
7
|
+
header: string;
|
|
8
|
+
'left-menu': string;
|
|
9
|
+
};
|
|
10
|
+
height: {
|
|
11
|
+
header: string;
|
|
12
|
+
'left-menu': string;
|
|
13
|
+
};
|
|
14
|
+
spacing: {
|
|
15
|
+
header: string;
|
|
16
|
+
'left-menu': string;
|
|
17
|
+
};
|
|
18
|
+
borderRadius: {
|
|
19
|
+
[x: string]: string;
|
|
20
|
+
};
|
|
21
|
+
colors: {
|
|
22
|
+
text: ConfigList;
|
|
23
|
+
bg: ConfigList;
|
|
24
|
+
border: ConfigList;
|
|
25
|
+
fill: ConfigList;
|
|
26
|
+
theme: string;
|
|
27
|
+
};
|
|
28
|
+
fontSize: {
|
|
29
|
+
[x: string]: string;
|
|
30
|
+
};
|
|
31
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@itshixun/qst-ui-system",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"packageManager": "pnpm@8.3.0",
|
|
5
|
+
"description": "qst ui system",
|
|
6
|
+
"author": "mutueye <mutuyueniao@gmail.com>",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"main": "dist/index.common.js",
|
|
9
|
+
"module": "dist/index.es.js",
|
|
10
|
+
"types": "dist/index.d.ts",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"keywords": [
|
|
15
|
+
"qst",
|
|
16
|
+
"ui",
|
|
17
|
+
"system",
|
|
18
|
+
"ui-system"
|
|
19
|
+
],
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"access": "public"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build:lib": "rimraf dist && rollup -c",
|
|
25
|
+
"watch": "imraf dist && rollup -cw",
|
|
26
|
+
"lint": "npx lint-staged",
|
|
27
|
+
"format": "prettier . --write",
|
|
28
|
+
"format:check": "prettier . --check",
|
|
29
|
+
"lint:es": "eslint --ext .js,.ts --ignore-path .eslintignore --fix src",
|
|
30
|
+
"lint:es:check": "eslint --ext .js,.ts --ignore-path .eslintignore src",
|
|
31
|
+
"lint:style": "stylelint ./src/**/*.{vue,css,scss} --fix",
|
|
32
|
+
"lint:style:check": "stylelint ./src/**/*.{vue,css,scss}"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"color2k": "^2.0.1"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@rollup/plugin-terser": "^0.2.1",
|
|
39
|
+
"@rollup/plugin-typescript": "^10.0.1",
|
|
40
|
+
"@types/lodash-es": "^4.17.6",
|
|
41
|
+
"@typescript-eslint/eslint-plugin": "^5.48.0",
|
|
42
|
+
"@typescript-eslint/parser": "^5.48.0",
|
|
43
|
+
"element-theme-chalk": "^2.15.13",
|
|
44
|
+
"eslint": "^8.31.0",
|
|
45
|
+
"eslint-config-prettier": "^8.6.0",
|
|
46
|
+
"eslint-plugin-prettier": "^4.2.1",
|
|
47
|
+
"gh-pages": "^4.0.0",
|
|
48
|
+
"glob": "^8.0.3",
|
|
49
|
+
"lint-staged": "^13.1.0",
|
|
50
|
+
"postcss": "^8.4.20",
|
|
51
|
+
"postcss-html": "^1.5.0",
|
|
52
|
+
"postcss-scss": "^4.0.6",
|
|
53
|
+
"prettier": "^2.8.1",
|
|
54
|
+
"rimraf": "^3.0.2",
|
|
55
|
+
"rollup": "^3.9.1",
|
|
56
|
+
"rollup-plugin-copy": "^3.4.0",
|
|
57
|
+
"rollup-plugin-import-css": "^3.2.1",
|
|
58
|
+
"rollup-plugin-scss": "^4.0.0",
|
|
59
|
+
"sass": "^1.60.0",
|
|
60
|
+
"stylelint": "^15.3.0",
|
|
61
|
+
"stylelint-config-css-modules": "^4.2.0",
|
|
62
|
+
"stylelint-config-recess-order": "^4.0.0",
|
|
63
|
+
"stylelint-config-recommended-vue": "^1.4.0",
|
|
64
|
+
"stylelint-config-standard-scss": "^7.0.1",
|
|
65
|
+
"stylelint-scss": "^4.3.0",
|
|
66
|
+
"typescript": "^4.9.4"
|
|
67
|
+
},
|
|
68
|
+
"lint-staged": {
|
|
69
|
+
"./**/*.{vue,js,ts,jsx,tsx,json}": "eslint --ignore-path .eslintignore --fix",
|
|
70
|
+
"./**/*.{vue,js,ts,jsx,tsx,md,json,scss,css,html}": "prettier . --write",
|
|
71
|
+
"./**/*.{scss,css,vue}": "stylelint --fix"
|
|
72
|
+
}
|
|
73
|
+
}
|