smart-admin-web 10.23.1 → 10.24.0

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.
@@ -51,6 +51,8 @@ export interface SmartAdminOptions extends SmartAdminPlugin {
51
51
  filterSerializer?: FilterSerializer;
52
52
  /** 所有数据列默认可拖拽列宽。内核默认 true;设 false 全局关掉,单列用列上的 `resizable` 覆盖。 */
53
53
  resizable?: boolean;
54
+ /** 值为 null / undefined 时单元格显示的占位。不传沿用库内置的 `—`;传 `''` 就是留空。 */
55
+ emptyText?: string;
54
56
  };
55
57
  }
56
58
  export interface SmartAdminApp {
@@ -1,40 +1,40 @@
1
- import { createApp as L, computed as z } from "vue";
2
- import { createPinia as E } from "pinia";
3
- import T from "pinia-plugin-persistedstate";
4
- import { SMART_TABLE_DEFAULTS as x, createSmartTableDefaults as w, zhCNLabels as R, defaultLabels as y } from "smart-naive-table";
5
- import A from "./App.vue.js";
6
- import { router as n } from "./router/index.js";
7
- import { registerLocales as _, i18n as a } from "./locales/index.js";
8
- import { registerMenuTitles as S } from "./locales/menuTitle.js";
9
- import { KERNEL_MENU_TITLES as N } from "./locales/kernelMenuTitles.js";
10
- import { registerViews as B } from "./router/viewRegistry.js";
11
- import { vAuth as C } from "./directives/auth.js";
12
- import { setupIcons as D } from "./lib/icons.js";
13
- import { reloadOnChunkError as v, reloadOnce as P } from "./lib/chunkReload.js";
1
+ import { createApp as x, computed as L } from "vue";
2
+ import { createPinia as z } from "pinia";
3
+ import E from "pinia-plugin-persistedstate";
4
+ import { SMART_TABLE_DEFAULTS as y, createSmartTableDefaults as w, zhCNLabels as R, defaultLabels as A } from "smart-naive-table";
5
+ import _ from "./App.vue.js";
6
+ import { router as l } from "./router/index.js";
7
+ import { registerLocales as N, i18n as a } from "./locales/index.js";
8
+ import { registerMenuTitles as v } from "./locales/menuTitle.js";
9
+ import { KERNEL_MENU_TITLES as B } from "./locales/kernelMenuTitles.js";
10
+ import { registerViews as C } from "./router/viewRegistry.js";
11
+ import { vAuth as D } from "./directives/auth.js";
12
+ import { setupIcons as P } from "./lib/icons.js";
13
+ import { reloadOnChunkError as h, reloadOnce as M } from "./lib/chunkReload.js";
14
14
  import { runtime as o } from "./lib/runtime.js";
15
- import { useSite as M } from "./composables/useSite.js";
16
- import { flatFilterSerializer as O } from "./utils/tableFilter.js";
17
- import { trimTrailingSlashes as j } from "./utils/url.js";
18
- function te(r = {}) {
19
- var c, d, u, p, b, g;
20
- o.apiBase = j(r.apiBase ?? ""), r.version && (o.version = r.version), o.dev = !!r.dev, o.brand = r.brand ?? {}, (c = r.brand) != null && c.title && (M().site.title = r.brand.title), S(N);
21
- const l = [...r.plugins ?? [], r], m = {}, f = [];
22
- for (const e of l) {
23
- e.views && B(e.views), e.locales && _(e.locales), e.menuTitles && S(e.menuTitles), e.icons && Object.assign(m, e.icons), e.iconSets && f.push(...e.iconSets);
24
- for (const t of e.routes ?? []) n.addRoute(t);
15
+ import { useSite as O } from "./composables/useSite.js";
16
+ import { flatFilterSerializer as j } from "./utils/tableFilter.js";
17
+ import { trimTrailingSlashes as F } from "./utils/url.js";
18
+ function re(r = {}) {
19
+ var c, d, u, p, b, g, S;
20
+ o.apiBase = F(r.apiBase ?? ""), r.version && (o.version = r.version), o.dev = !!r.dev, o.brand = r.brand ?? {}, (c = r.brand) != null && c.title && (O().site.title = r.brand.title), v(B);
21
+ const n = [...r.plugins ?? [], r], m = {}, f = [];
22
+ for (const e of n) {
23
+ e.views && C(e.views), e.locales && N(e.locales), e.menuTitles && v(e.menuTitles), e.icons && Object.assign(m, e.icons), e.iconSets && f.push(...e.iconSets);
24
+ for (const t of e.routes ?? []) l.addRoute(t);
25
25
  }
26
- D(m, f), window.addEventListener("unhandledrejection", (e) => {
27
- v(e.reason) && e.preventDefault();
26
+ P(m, f), window.addEventListener("unhandledrejection", (e) => {
27
+ h(e.reason) && e.preventDefault();
28
28
  }), window.addEventListener("vite:preloadError", (e) => {
29
- P() && e.preventDefault();
29
+ M() && e.preventDefault();
30
30
  });
31
- const s = E();
32
- s.use(T);
33
- const i = L(A);
34
- i.use(s), i.use(n), i.use(a), i.directive("auth", C), i.config.errorHandler = (e, t, h) => {
35
- v(e) || console.error("[SmartAdmin] 未捕获异常", h, e);
31
+ const s = z();
32
+ s.use(E);
33
+ const i = x(_);
34
+ i.use(s), i.use(l), i.use(a), i.directive("auth", D), i.config.errorHandler = (e, t, T) => {
35
+ h(e) || console.error("[SmartAdmin] 未捕获异常", T, e);
36
36
  }, i.provide(
37
- x,
37
+ y,
38
38
  w({
39
39
  // 表格工具栏密度默认使用紧凑档;已有 storage-key 的用户选择仍按本地缓存优先。
40
40
  density: ((d = r.table) == null ? void 0 : d.density) ?? "compact",
@@ -43,20 +43,22 @@ function te(r = {}) {
43
43
  // 列宽拖拽全站统一开:表头右缘拖动改宽,宽度跟着 storage-key 记忆。库内置默认是 false;
44
44
  // 某列不想让拖(操作列、序号列)在列上写 resizable: false,列上的值永远优先于这里。
45
45
  resizable: ((u = r.table) == null ? void 0 : u.resizable) ?? !0,
46
+ // 空值占位:undefined 不会覆盖库内置的 '—',所以不传时对现有应用零影响。
47
+ emptyText: (p = r.table) == null ? void 0 : p.emptyText,
46
48
  // 当前行(activeRowKey)高亮:指向选中态令牌(强调色淡底,跟强调色与明暗走),不用库默认的主色 9%。
47
49
  // 库用 background-image 叠色、不覆盖行底色,所以半透明的令牌值也不会让固定列透底。
48
50
  activeRowBg: "var(--sel-bg)",
49
51
  // 可选条数不手写,交给 smart-naive-table 3.0 按 fillHeight 选档:没开 [100,500,1000],开了 [100,1000,10000]。
50
52
  // 上限是后端 SmartAdmin:Api:MaxPageSize,默认 10000;应用把它调小的话,要用 table.pageSizes
51
53
  // 把这里的档位也压下去,否则用户选到超限档会被后端回 48001。undefined 不会覆盖内置档位。
52
- pageSizes: (p = r.table) == null ? void 0 : p.pageSizes,
54
+ pageSizes: (b = r.table) == null ? void 0 : b.pageSizes,
53
55
  // 条件构造器的过滤态 → 后端扁平参数(见 utils/tableFilter.ts);有日期区间或改名需求的页面传自己的 :filter-serializer
54
- filterSerializer: ((b = r.table) == null ? void 0 : b.filterSerializer) ?? O,
55
- labels: z(() => {
56
+ filterSerializer: ((g = r.table) == null ? void 0 : g.filterSerializer) ?? j,
57
+ labels: L(() => {
56
58
  const e = a.global.locale.value, t = a.global.t;
57
59
  return {
58
60
  // 底子用 3.0 自带的整套文案(含条件构造器、批量栏等新键),再叠上项目 i18n 里已有的几个键。
59
- ...e.startsWith("zh") ? R : y,
61
+ ...e.startsWith("zh") ? R : A,
60
62
  search: t("common.search"),
61
63
  reset: t("common.reset"),
62
64
  refresh: t("table.refresh"),
@@ -74,16 +76,16 @@ function te(r = {}) {
74
76
  })
75
77
  })
76
78
  );
77
- for (const e of l) (g = e.install) == null || g.call(e, i);
79
+ for (const e of n) (S = e.install) == null || S.call(e, i);
78
80
  return {
79
81
  app: i,
80
- router: n,
82
+ router: l,
81
83
  pinia: s,
82
84
  i18n: a,
83
85
  mount: (e) => (i.mount(e), i)
84
86
  };
85
87
  }
86
88
  export {
87
- te as createSmartAdmin
89
+ re as createSmartAdmin
88
90
  };
89
91
  //# sourceMappingURL=createSmartAdmin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createSmartAdmin.js","sources":["../src/createSmartAdmin.ts"],"sourcesContent":["import { computed, createApp, type App } from 'vue'\nimport { createPinia, type Pinia } from 'pinia'\nimport piniaPluginPersistedstate from 'pinia-plugin-persistedstate'\nimport type { RouteRecordRaw } from 'vue-router'\nimport {\n SMART_TABLE_DEFAULTS,\n createSmartTableDefaults,\n defaultLabels,\n zhCNLabels,\n type FilterSerializer,\n} from 'smart-naive-table'\nimport type { IconifyJSON } from 'smart-naive-icon'\nimport AppRoot from '#/App.vue'\nimport { router } from '#/router'\nimport { i18n, registerLocales, type ExtModule } from '#/locales'\nimport { registerMenuTitles } from '#/locales/menuTitle'\nimport { KERNEL_MENU_TITLES } from '#/locales/kernelMenuTitles'\nimport { registerViews, type ViewLoader } from '#/router/viewRegistry'\nimport { vAuth } from '#/directives/auth'\nimport { setupIcons } from '#/lib/icons'\nimport { reloadOnChunkError, reloadOnce } from '#/lib/chunkReload'\nimport { runtime, type BrandOptions } from '#/lib/runtime'\nimport { useSite } from '#/composables/useSite'\nimport { flatFilterSerializer } from '#/utils/tableFilter'\nimport { trimTrailingSlashes } from '#/utils/url'\n\n/**\n * 一个插件(或应用自身)能往内核里注册的东西。页面、语言包、图标这类文件集合由消费方在自己的代码里\n * 写 import.meta.glob、把结果交进来 —— 内核是预编译的包,自己扫不到消费方的文件。\n */\nexport interface SmartAdminPlugin {\n /** 页面表:`import.meta.glob('./views/**\\/*.vue')`。键取 `/views/` 之后去掉 .vue(如 system/user/index),同名覆盖先注册者。 */\n views?: Record<string, ViewLoader>\n /** 语言包:`import.meta.glob('./locales/ext/*\\/*.ts', { eager: true })`,键尾形如 `<locale>/<命名空间>.ts`,按命名空间深合并。 */\n locales?: Record<string, ExtModule>\n /** 布局壳之外的顶级静态路由(整屏看板、独立打印页等)。 */\n routes?: RouteRecordRaw[]\n /** 菜单标题 → i18n key(存量库菜单标题是中文时用):键以 / 开头按路由 path 登记,其余按标题原文登记。内核种子标题已自带。 */\n menuTitles?: Record<string, string>\n /** 本地 SVG 图标:`import.meta.glob('./assets/svg/*.svg', { query: '?raw', import: 'default', eager: true })`。 */\n icons?: Record<string, string>\n /** 离线图标子集:`smart-admin-icons` 从自己的 src 生成的 JSON(模板里是 npm run gen:icons),启动时同步注册。 */\n iconSets?: IconifyJSON[]\n /** 需要 app 实例的注册动作(registerHeaderTool / registerMenuBadge / 自己的 app.use 等),在 mount 前调用。 */\n install?: (app: App) => void\n}\n\nexport interface SmartAdminOptions extends SmartAdminPlugin {\n /** 插件按顺序注册,后者覆盖前者;应用自身(本对象的 views/locales 等)最后注册,优先级最高。 */\n plugins?: SmartAdminPlugin[]\n /** API 根地址;默认空串 = 同源。跨源时后端还要配 SmartAdmin:Api:Cors:AllowedOrigins。 */\n apiBase?: string\n /** 登录页页脚展示的版本号;默认内核版本。 */\n version?: string\n /** 开发态(登录页预填超管账号、设置抽屉「复制配置」);消费方传 import.meta.env.DEV。 */\n dev?: boolean\n /** 品牌默认值:sys.site.* 配置有值时以配置为准,为空时用这里。 */\n brand?: BrandOptions\n /**\n * SmartTable 全局默认。\n * `filterSerializer`:条件构造器 / 表头过滤的过滤态 → 请求参数。内核默认用 `flatFilterSerializer`\n * (只翻后端真正支持的那一小撮条件,摊平成扁平参数,见 utils/tableFilter.ts)。\n * 应用的后端已经实现了 3.0 默认的 `filters` 协议(`[{ field, logic, conditions }]`)时,传 `defaultFilterSerializer`\n * (从 smart-naive-table 导入)即可保持原样;自定义形状就传自己的函数。\n */\n table?: {\n density?: 'comfortable' | 'compact'\n pageSizes?: number[]\n filterSerializer?: FilterSerializer\n /** 所有数据列默认可拖拽列宽。内核默认 true;设 false 全局关掉,单列用列上的 `resizable` 覆盖。 */\n resizable?: boolean\n }\n}\n\nexport interface SmartAdminApp {\n app: App\n router: typeof router\n pinia: Pinia\n i18n: typeof i18n\n /** 挂载到选择器或元素;返回 Vue app 实例。 */\n mount: (target: string | Element) => App\n}\n\n/**\n * 组装内核应用:写入运行期配置 → 并入插件与应用的页面/文案/路由/图标 → 建 pinia/router/i18n → 返回可挂载的 app。\n * 按 内核内置 < 插件(按数组顺序)< 应用自身 的顺序注册,同 key 后者覆盖前者。结果与后端相同(应用压过内核),\n * 机制相反:后端 TryAdd 是消费方先注册者胜。\n */\nexport function createSmartAdmin(options: SmartAdminOptions = {}): SmartAdminApp {\n // apiBase 写入即生效:各处客户端在下一次调用时按新地址重建(见 api/client.ts 的 followApiBase)\n runtime.apiBase = trimTrailingSlashes(options.apiBase ?? '')\n if (options.version) runtime.version = options.version\n runtime.dev = !!options.dev\n runtime.brand = options.brand ?? {}\n if (options.brand?.title) useSite().site.title = options.brand.title\n\n // 内核种子菜单 / 应用标题的译名表垫在最底层:库里存的是中文标题,不登记的话侧栏在英文下仍是中文。\n registerMenuTitles(KERNEL_MENU_TITLES)\n const layers: SmartAdminPlugin[] = [...(options.plugins ?? []), options]\n const icons: Record<string, string> = {}\n const iconSets: IconifyJSON[] = []\n for (const layer of layers) {\n if (layer.views) registerViews(layer.views)\n if (layer.locales) registerLocales(layer.locales)\n if (layer.menuTitles) registerMenuTitles(layer.menuTitles)\n if (layer.icons) Object.assign(icons, layer.icons)\n if (layer.iconSets) iconSets.push(...layer.iconSets)\n for (const route of layer.routes ?? []) router.addRoute(route)\n }\n setupIcons(icons, iconSets) // 注册离线图标集(ph 子集同步入库)+ 本地 SVG,不预热整集\n\n // 全局兜底:没有这两个监听的话,未捕获异常和发版后旧 chunk 404 都是白屏,控制台之外不留痕迹。\n // 渲染期异常由内容区的 ErrorBoundary 收口,这里管它够不着的两类:游离的 Promise 拒绝与预加载失败。\n window.addEventListener('unhandledrejection', e => {\n if (reloadOnChunkError(e.reason)) e.preventDefault()\n })\n // Vite 预加载新 chunk 失败时派发;能走到这个事件就一定是 chunk 问题,不必再判文案。\n window.addEventListener('vite:preloadError', e => {\n if (reloadOnce()) e.preventDefault()\n })\n\n const pinia = createPinia()\n pinia.use(piniaPluginPersistedstate)\n\n const app = createApp(AppRoot)\n app.use(pinia) // 必须在 router 之前:守卫用到 store\n // 深浅色默认 themeScheme:'auto' → 首访自动跟随系统,用户手选 light/dark 后固定(见 stores/app.ts)。\n app.use(router)\n app.use(i18n)\n app.directive('auth', vAuth)\n app.config.errorHandler = (err, _instance, info) => {\n if (reloadOnChunkError(err)) return\n console.error('[SmartAdmin] 未捕获异常', info, err)\n }\n\n // SmartTable 全局默认:labels 一次注入,各页面不用手传 :labels(切语言即时生效)。\n // 只能在这里注入一次:Vue 的 inject 取最近的 provide、不合并 —— 在 App.vue 或任何祖先组件里\n // 再 provide 一次 SMART_TABLE_DEFAULTS,会把这里的 labels/density 整份挡掉。要加默认值就往下面这个对象里加。\n app.provide(\n SMART_TABLE_DEFAULTS,\n createSmartTableDefaults({\n // 表格工具栏密度默认使用紧凑档;已有 storage-key 的用户选择仍按本地缓存优先。\n density: options.table?.density ?? 'compact',\n // 初始每页条数。它在可注入的 defaults 里(smart-naive-table 3.0 及以上),页面不用各写 :default-page-size。\n defaultPageSize: 100,\n // 列宽拖拽全站统一开:表头右缘拖动改宽,宽度跟着 storage-key 记忆。库内置默认是 false;\n // 某列不想让拖(操作列、序号列)在列上写 resizable: false,列上的值永远优先于这里。\n resizable: options.table?.resizable ?? true,\n // 当前行(activeRowKey)高亮:指向选中态令牌(强调色淡底,跟强调色与明暗走),不用库默认的主色 9%。\n // 库用 background-image 叠色、不覆盖行底色,所以半透明的令牌值也不会让固定列透底。\n activeRowBg: 'var(--sel-bg)',\n // 可选条数不手写,交给 smart-naive-table 3.0 按 fillHeight 选档:没开 [100,500,1000],开了 [100,1000,10000]。\n // 上限是后端 SmartAdmin:Api:MaxPageSize,默认 10000;应用把它调小的话,要用 table.pageSizes\n // 把这里的档位也压下去,否则用户选到超限档会被后端回 48001。undefined 不会覆盖内置档位。\n pageSizes: options.table?.pageSizes,\n // 条件构造器的过滤态 → 后端扁平参数(见 utils/tableFilter.ts);有日期区间或改名需求的页面传自己的 :filter-serializer\n filterSerializer: options.table?.filterSerializer ?? flatFilterSerializer,\n labels: computed(() => {\n const locale = i18n.global.locale.value // 触发 locale 依赖收集\n const t = i18n.global.t\n return {\n // 底子用 3.0 自带的整套文案(含条件构造器、批量栏等新键),再叠上项目 i18n 里已有的几个键。\n ...(locale.startsWith('zh') ? zhCNLabels : defaultLabels),\n search: t('common.search'),\n reset: t('common.reset'),\n refresh: t('table.refresh'),\n density: t('app.density'),\n densityComfortable: t('app.comfortable'),\n densityCompact: t('app.compact'),\n columnSettings: t('table.columnSettings'),\n columnSettingsReset: t('table.columnSettingsReset'),\n fixedLeft: t('table.fixedLeft'),\n fixedRight: t('table.fixedRight'),\n fixedNone: t('table.fixedNone'),\n expand: t('table.expand'),\n collapse: t('table.collapse'),\n }\n }),\n }),\n )\n\n for (const layer of layers) layer.install?.(app)\n\n return {\n app,\n router,\n pinia,\n i18n,\n mount: target => {\n app.mount(target)\n return app\n },\n }\n}\n"],"names":["createSmartAdmin","options","runtime","trimTrailingSlashes","_a","useSite","registerMenuTitles","KERNEL_MENU_TITLES","layers","icons","iconSets","layer","registerViews","registerLocales","route","router","setupIcons","reloadOnChunkError","reloadOnce","pinia","createPinia","piniaPluginPersistedstate","app","createApp","AppRoot","i18n","vAuth","err","_instance","info","SMART_TABLE_DEFAULTS","createSmartTableDefaults","_b","_c","_d","_e","flatFilterSerializer","computed","locale","zhCNLabels","defaultLabels","_f","target"],"mappings":";;;;;;;;;;;;;;;;;AAwFO,SAASA,GAAiBC,IAA6B,IAAmB;;AAE/E,EAAAC,EAAQ,UAAUC,EAAoBF,EAAQ,WAAW,EAAE,GACvDA,EAAQ,YAASC,EAAQ,UAAUD,EAAQ,UAC/CC,EAAQ,MAAM,CAAC,CAACD,EAAQ,KACxBC,EAAQ,QAAQD,EAAQ,SAAS,CAAA,IAC7BG,IAAAH,EAAQ,UAAR,QAAAG,EAAe,UAAOC,EAAA,EAAU,KAAK,QAAQJ,EAAQ,MAAM,QAG/DK,EAAmBC,CAAkB;AACrC,QAAMC,IAA6B,CAAC,GAAIP,EAAQ,WAAW,CAAA,GAAKA,CAAO,GACjEQ,IAAgC,CAAA,GAChCC,IAA0B,CAAA;AAChC,aAAWC,KAASH,GAAQ;AAC1B,IAAIG,EAAM,SAAOC,EAAcD,EAAM,KAAK,GACtCA,EAAM,WAASE,EAAgBF,EAAM,OAAO,GAC5CA,EAAM,cAAYL,EAAmBK,EAAM,UAAU,GACrDA,EAAM,SAAO,OAAO,OAAOF,GAAOE,EAAM,KAAK,GAC7CA,EAAM,YAAUD,EAAS,KAAK,GAAGC,EAAM,QAAQ;AACnD,eAAWG,KAASH,EAAM,UAAU,CAAA,EAAI,CAAAI,EAAO,SAASD,CAAK;AAAA,EAC/D;AACA,EAAAE,EAAWP,GAAOC,CAAQ,GAI1B,OAAO,iBAAiB,sBAAsB,CAAA,MAAK;AACjD,IAAIO,EAAmB,EAAE,MAAM,OAAK,eAAA;AAAA,EACtC,CAAC,GAED,OAAO,iBAAiB,qBAAqB,CAAA,MAAK;AAChD,IAAIC,EAAA,KAAc,EAAE,eAAA;AAAA,EACtB,CAAC;AAED,QAAMC,IAAQC,EAAA;AACd,EAAAD,EAAM,IAAIE,CAAyB;AAEnC,QAAMC,IAAMC,EAAUC,CAAO;AAC7B,EAAAF,EAAI,IAAIH,CAAK,GAEbG,EAAI,IAAIP,CAAM,GACdO,EAAI,IAAIG,CAAI,GACZH,EAAI,UAAU,QAAQI,CAAK,GAC3BJ,EAAI,OAAO,eAAe,CAACK,GAAKC,GAAWC,MAAS;AAClD,IAAIZ,EAAmBU,CAAG,KAC1B,QAAQ,MAAM,sBAAsBE,GAAMF,CAAG;AAAA,EAC/C,GAKAL,EAAI;AAAA,IACFQ;AAAA,IACAC,EAAyB;AAAA;AAAA,MAEvB,WAASC,IAAA/B,EAAQ,UAAR,gBAAA+B,EAAe,YAAW;AAAA;AAAA,MAEnC,iBAAiB;AAAA;AAAA;AAAA,MAGjB,aAAWC,IAAAhC,EAAQ,UAAR,gBAAAgC,EAAe,cAAa;AAAA;AAAA;AAAA,MAGvC,aAAa;AAAA;AAAA;AAAA;AAAA,MAIb,YAAWC,IAAAjC,EAAQ,UAAR,gBAAAiC,EAAe;AAAA;AAAA,MAE1B,oBAAkBC,IAAAlC,EAAQ,UAAR,gBAAAkC,EAAe,qBAAoBC;AAAA,MACrD,QAAQC,EAAS,MAAM;AACrB,cAAMC,IAASb,EAAK,OAAO,OAAO,OAC5B,IAAIA,EAAK,OAAO;AACtB,eAAO;AAAA;AAAA,UAEL,GAAIa,EAAO,WAAW,IAAI,IAAIC,IAAaC;AAAA,UAC3C,QAAQ,EAAE,eAAe;AAAA,UACzB,OAAO,EAAE,cAAc;AAAA,UACvB,SAAS,EAAE,eAAe;AAAA,UAC1B,SAAS,EAAE,aAAa;AAAA,UACxB,oBAAoB,EAAE,iBAAiB;AAAA,UACvC,gBAAgB,EAAE,aAAa;AAAA,UAC/B,gBAAgB,EAAE,sBAAsB;AAAA,UACxC,qBAAqB,EAAE,2BAA2B;AAAA,UAClD,WAAW,EAAE,iBAAiB;AAAA,UAC9B,YAAY,EAAE,kBAAkB;AAAA,UAChC,WAAW,EAAE,iBAAiB;AAAA,UAC9B,QAAQ,EAAE,cAAc;AAAA,UACxB,UAAU,EAAE,gBAAgB;AAAA,QAAA;AAAA,MAEhC,CAAC;AAAA,IAAA,CACF;AAAA,EAAA;AAGH,aAAW7B,KAASH,EAAQ,EAAAiC,IAAA9B,EAAM,YAAN,QAAA8B,EAAA,KAAA9B,GAAgBW;AAE5C,SAAO;AAAA,IACL,KAAAA;AAAA,IACA,QAAAP;AAAA,IACA,OAAAI;AAAA,IACA,MAAAM;AAAA,IACA,OAAO,CAAAiB,OACLpB,EAAI,MAAMoB,CAAM,GACTpB;AAAA,EACT;AAEJ;"}
1
+ {"version":3,"file":"createSmartAdmin.js","sources":["../src/createSmartAdmin.ts"],"sourcesContent":["import { computed, createApp, type App } from 'vue'\nimport { createPinia, type Pinia } from 'pinia'\nimport piniaPluginPersistedstate from 'pinia-plugin-persistedstate'\nimport type { RouteRecordRaw } from 'vue-router'\nimport {\n SMART_TABLE_DEFAULTS,\n createSmartTableDefaults,\n defaultLabels,\n zhCNLabels,\n type FilterSerializer,\n} from 'smart-naive-table'\nimport type { IconifyJSON } from 'smart-naive-icon'\nimport AppRoot from '#/App.vue'\nimport { router } from '#/router'\nimport { i18n, registerLocales, type ExtModule } from '#/locales'\nimport { registerMenuTitles } from '#/locales/menuTitle'\nimport { KERNEL_MENU_TITLES } from '#/locales/kernelMenuTitles'\nimport { registerViews, type ViewLoader } from '#/router/viewRegistry'\nimport { vAuth } from '#/directives/auth'\nimport { setupIcons } from '#/lib/icons'\nimport { reloadOnChunkError, reloadOnce } from '#/lib/chunkReload'\nimport { runtime, type BrandOptions } from '#/lib/runtime'\nimport { useSite } from '#/composables/useSite'\nimport { flatFilterSerializer } from '#/utils/tableFilter'\nimport { trimTrailingSlashes } from '#/utils/url'\n\n/**\n * 一个插件(或应用自身)能往内核里注册的东西。页面、语言包、图标这类文件集合由消费方在自己的代码里\n * 写 import.meta.glob、把结果交进来 —— 内核是预编译的包,自己扫不到消费方的文件。\n */\nexport interface SmartAdminPlugin {\n /** 页面表:`import.meta.glob('./views/**\\/*.vue')`。键取 `/views/` 之后去掉 .vue(如 system/user/index),同名覆盖先注册者。 */\n views?: Record<string, ViewLoader>\n /** 语言包:`import.meta.glob('./locales/ext/*\\/*.ts', { eager: true })`,键尾形如 `<locale>/<命名空间>.ts`,按命名空间深合并。 */\n locales?: Record<string, ExtModule>\n /** 布局壳之外的顶级静态路由(整屏看板、独立打印页等)。 */\n routes?: RouteRecordRaw[]\n /** 菜单标题 → i18n key(存量库菜单标题是中文时用):键以 / 开头按路由 path 登记,其余按标题原文登记。内核种子标题已自带。 */\n menuTitles?: Record<string, string>\n /** 本地 SVG 图标:`import.meta.glob('./assets/svg/*.svg', { query: '?raw', import: 'default', eager: true })`。 */\n icons?: Record<string, string>\n /** 离线图标子集:`smart-admin-icons` 从自己的 src 生成的 JSON(模板里是 npm run gen:icons),启动时同步注册。 */\n iconSets?: IconifyJSON[]\n /** 需要 app 实例的注册动作(registerHeaderTool / registerMenuBadge / 自己的 app.use 等),在 mount 前调用。 */\n install?: (app: App) => void\n}\n\nexport interface SmartAdminOptions extends SmartAdminPlugin {\n /** 插件按顺序注册,后者覆盖前者;应用自身(本对象的 views/locales 等)最后注册,优先级最高。 */\n plugins?: SmartAdminPlugin[]\n /** API 根地址;默认空串 = 同源。跨源时后端还要配 SmartAdmin:Api:Cors:AllowedOrigins。 */\n apiBase?: string\n /** 登录页页脚展示的版本号;默认内核版本。 */\n version?: string\n /** 开发态(登录页预填超管账号、设置抽屉「复制配置」);消费方传 import.meta.env.DEV。 */\n dev?: boolean\n /** 品牌默认值:sys.site.* 配置有值时以配置为准,为空时用这里。 */\n brand?: BrandOptions\n /**\n * SmartTable 全局默认。\n * `filterSerializer`:条件构造器 / 表头过滤的过滤态 → 请求参数。内核默认用 `flatFilterSerializer`\n * (只翻后端真正支持的那一小撮条件,摊平成扁平参数,见 utils/tableFilter.ts)。\n * 应用的后端已经实现了 3.0 默认的 `filters` 协议(`[{ field, logic, conditions }]`)时,传 `defaultFilterSerializer`\n * (从 smart-naive-table 导入)即可保持原样;自定义形状就传自己的函数。\n */\n table?: {\n density?: 'comfortable' | 'compact'\n pageSizes?: number[]\n filterSerializer?: FilterSerializer\n /** 所有数据列默认可拖拽列宽。内核默认 true;设 false 全局关掉,单列用列上的 `resizable` 覆盖。 */\n resizable?: boolean\n /** 值为 null / undefined 时单元格显示的占位。不传沿用库内置的 `—`;传 `''` 就是留空。 */\n emptyText?: string\n }\n}\n\nexport interface SmartAdminApp {\n app: App\n router: typeof router\n pinia: Pinia\n i18n: typeof i18n\n /** 挂载到选择器或元素;返回 Vue app 实例。 */\n mount: (target: string | Element) => App\n}\n\n/**\n * 组装内核应用:写入运行期配置 → 并入插件与应用的页面/文案/路由/图标 → 建 pinia/router/i18n → 返回可挂载的 app。\n * 按 内核内置 < 插件(按数组顺序)< 应用自身 的顺序注册,同 key 后者覆盖前者。结果与后端相同(应用压过内核),\n * 机制相反:后端 TryAdd 是消费方先注册者胜。\n */\nexport function createSmartAdmin(options: SmartAdminOptions = {}): SmartAdminApp {\n // apiBase 写入即生效:各处客户端在下一次调用时按新地址重建(见 api/client.ts 的 followApiBase)\n runtime.apiBase = trimTrailingSlashes(options.apiBase ?? '')\n if (options.version) runtime.version = options.version\n runtime.dev = !!options.dev\n runtime.brand = options.brand ?? {}\n if (options.brand?.title) useSite().site.title = options.brand.title\n\n // 内核种子菜单 / 应用标题的译名表垫在最底层:库里存的是中文标题,不登记的话侧栏在英文下仍是中文。\n registerMenuTitles(KERNEL_MENU_TITLES)\n const layers: SmartAdminPlugin[] = [...(options.plugins ?? []), options]\n const icons: Record<string, string> = {}\n const iconSets: IconifyJSON[] = []\n for (const layer of layers) {\n if (layer.views) registerViews(layer.views)\n if (layer.locales) registerLocales(layer.locales)\n if (layer.menuTitles) registerMenuTitles(layer.menuTitles)\n if (layer.icons) Object.assign(icons, layer.icons)\n if (layer.iconSets) iconSets.push(...layer.iconSets)\n for (const route of layer.routes ?? []) router.addRoute(route)\n }\n setupIcons(icons, iconSets) // 注册离线图标集(ph 子集同步入库)+ 本地 SVG,不预热整集\n\n // 全局兜底:没有这两个监听的话,未捕获异常和发版后旧 chunk 404 都是白屏,控制台之外不留痕迹。\n // 渲染期异常由内容区的 ErrorBoundary 收口,这里管它够不着的两类:游离的 Promise 拒绝与预加载失败。\n window.addEventListener('unhandledrejection', e => {\n if (reloadOnChunkError(e.reason)) e.preventDefault()\n })\n // Vite 预加载新 chunk 失败时派发;能走到这个事件就一定是 chunk 问题,不必再判文案。\n window.addEventListener('vite:preloadError', e => {\n if (reloadOnce()) e.preventDefault()\n })\n\n const pinia = createPinia()\n pinia.use(piniaPluginPersistedstate)\n\n const app = createApp(AppRoot)\n app.use(pinia) // 必须在 router 之前:守卫用到 store\n // 深浅色默认 themeScheme:'auto' → 首访自动跟随系统,用户手选 light/dark 后固定(见 stores/app.ts)。\n app.use(router)\n app.use(i18n)\n app.directive('auth', vAuth)\n app.config.errorHandler = (err, _instance, info) => {\n if (reloadOnChunkError(err)) return\n console.error('[SmartAdmin] 未捕获异常', info, err)\n }\n\n // SmartTable 全局默认:labels 一次注入,各页面不用手传 :labels(切语言即时生效)。\n // 只能在这里注入一次:Vue 的 inject 取最近的 provide、不合并 —— 在 App.vue 或任何祖先组件里\n // 再 provide 一次 SMART_TABLE_DEFAULTS,会把这里的 labels/density 整份挡掉。要加默认值就往下面这个对象里加。\n app.provide(\n SMART_TABLE_DEFAULTS,\n createSmartTableDefaults({\n // 表格工具栏密度默认使用紧凑档;已有 storage-key 的用户选择仍按本地缓存优先。\n density: options.table?.density ?? 'compact',\n // 初始每页条数。它在可注入的 defaults 里(smart-naive-table 3.0 及以上),页面不用各写 :default-page-size。\n defaultPageSize: 100,\n // 列宽拖拽全站统一开:表头右缘拖动改宽,宽度跟着 storage-key 记忆。库内置默认是 false;\n // 某列不想让拖(操作列、序号列)在列上写 resizable: false,列上的值永远优先于这里。\n resizable: options.table?.resizable ?? true,\n // 空值占位:undefined 不会覆盖库内置的 '—',所以不传时对现有应用零影响。\n emptyText: options.table?.emptyText,\n // 当前行(activeRowKey)高亮:指向选中态令牌(强调色淡底,跟强调色与明暗走),不用库默认的主色 9%。\n // 库用 background-image 叠色、不覆盖行底色,所以半透明的令牌值也不会让固定列透底。\n activeRowBg: 'var(--sel-bg)',\n // 可选条数不手写,交给 smart-naive-table 3.0 按 fillHeight 选档:没开 [100,500,1000],开了 [100,1000,10000]。\n // 上限是后端 SmartAdmin:Api:MaxPageSize,默认 10000;应用把它调小的话,要用 table.pageSizes\n // 把这里的档位也压下去,否则用户选到超限档会被后端回 48001。undefined 不会覆盖内置档位。\n pageSizes: options.table?.pageSizes,\n // 条件构造器的过滤态 → 后端扁平参数(见 utils/tableFilter.ts);有日期区间或改名需求的页面传自己的 :filter-serializer\n filterSerializer: options.table?.filterSerializer ?? flatFilterSerializer,\n labels: computed(() => {\n const locale = i18n.global.locale.value // 触发 locale 依赖收集\n const t = i18n.global.t\n return {\n // 底子用 3.0 自带的整套文案(含条件构造器、批量栏等新键),再叠上项目 i18n 里已有的几个键。\n ...(locale.startsWith('zh') ? zhCNLabels : defaultLabels),\n search: t('common.search'),\n reset: t('common.reset'),\n refresh: t('table.refresh'),\n density: t('app.density'),\n densityComfortable: t('app.comfortable'),\n densityCompact: t('app.compact'),\n columnSettings: t('table.columnSettings'),\n columnSettingsReset: t('table.columnSettingsReset'),\n fixedLeft: t('table.fixedLeft'),\n fixedRight: t('table.fixedRight'),\n fixedNone: t('table.fixedNone'),\n expand: t('table.expand'),\n collapse: t('table.collapse'),\n }\n }),\n }),\n )\n\n for (const layer of layers) layer.install?.(app)\n\n return {\n app,\n router,\n pinia,\n i18n,\n mount: target => {\n app.mount(target)\n return app\n },\n }\n}\n"],"names":["createSmartAdmin","options","runtime","trimTrailingSlashes","_a","useSite","registerMenuTitles","KERNEL_MENU_TITLES","layers","icons","iconSets","layer","registerViews","registerLocales","route","router","setupIcons","reloadOnChunkError","reloadOnce","pinia","createPinia","piniaPluginPersistedstate","app","createApp","AppRoot","i18n","vAuth","err","_instance","info","SMART_TABLE_DEFAULTS","createSmartTableDefaults","_b","_c","_d","_e","_f","flatFilterSerializer","computed","locale","zhCNLabels","defaultLabels","_g","target"],"mappings":"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"}
@@ -2,7 +2,7 @@ const e = {
2
2
  /** API 根地址;空串 = 同源(dev 由 Vite 代理,生产由反代或后端托管 dist) */
3
3
  apiBase: "",
4
4
  /** 登录页页脚展示的版本号;默认内核版本,消费方可覆盖为应用版本 */
5
- version: "10.23.1",
5
+ version: "10.24.0",
6
6
  /** 开发态:登录页预填超管账号、设置抽屉显示「复制配置」 */
7
7
  dev: !1,
8
8
  brand: {}
@@ -1,55 +1,55 @@
1
- import { rgba as I, mix as O } from "./mix.js";
1
+ import { rgba as W, mix as V } from "./mix.js";
2
2
  import { deriveAccentTokens as K } from "./accentTokens.js";
3
3
  const o = (c) => getComputedStyle(document.documentElement).getPropertyValue(c).trim();
4
4
  function B(c) {
5
- const b = O(c, "#FFFFFF", 0.12);
6
- return { base: c, hover: b, pressed: O(c, "#000000", 0.12), suppl: b };
5
+ const u = V(c, "#FFFFFF", 0.12);
6
+ return { base: c, hover: u, pressed: V(c, "#000000", 0.12), suppl: u };
7
7
  }
8
8
  function Y(c) {
9
- const { dark: b } = c, Q = K(c.accent, b), { signal: t, acc: e, onAcc: m, hover: k, pressed: V, activeFg: u, linkFg: p, ring: s } = Q, H = B(o("--ok")), F = B(o("--warn")), T = B(o("--err")), f = B(o("--info")), r = o("--text-1"), i = o("--text-2"), l = o("--text-3"), M = o("--text-4"), h = o("--border"), d = o("--separator"), j = o("--hairline"), P = o("--hairline-strong"), D = o("--tooltip-bg"), w = o("--glass-strong"), n = o("--fill"), S = o("--fill-strong"), x = o("--hover"), g = o("--pressed"), C = o("--input"), R = o("--input-disabled"), y = o("--bg-card"), a = o("--bg-elevated"), W = o("--seg-track"), L = o("--seg-thumb"), $ = o("--shadow-1"), A = o("--shadow-2"), E = o("--shadow-3"), q = o("--th-bg"), G = o("--th-bg-hover"), J = o("--td-bg-hover"), v = o("--radius-md"), N = {
10
- borderRadius: v,
11
- color: C,
12
- colorActive: C,
13
- colorDisabled: R,
14
- border: `1px solid ${h}`,
9
+ const { dark: u } = c, j = K(c.accent, u), { signal: t, acc: e, onAcc: g, hover: L, pressed: q, activeFg: h, linkFg: x, ring: p } = j, F = B(o("--ok")), T = B(o("--warn")), f = B(o("--err")), w = B(o("--info")), r = o("--text-1"), i = o("--text-2"), l = o("--text-3"), R = o("--text-4"), v = o("--border"), d = o("--separator"), J = o("--hairline"), y = o("--hairline-strong"), E = o("--tooltip-bg"), A = o("--glass-strong"), n = o("--fill"), P = o("--fill-strong"), C = o("--hover"), m = o("--pressed"), b = o("--input"), $ = o("--input-disabled"), s = o("--bg-card"), a = o("--bg-elevated"), G = o("--seg-track"), N = o("--seg-thumb"), z = o("--shadow-1"), M = o("--shadow-2"), O = o("--shadow-3"), I = o("--th-bg"), S = o("--th-bg-hover"), k = o("--td-bg-hover"), H = o("--radius-md"), Q = {
10
+ borderRadius: H,
11
+ color: b,
12
+ colorActive: b,
13
+ colorDisabled: $,
14
+ border: `1px solid ${v}`,
15
15
  borderHover: `1px solid ${o("--select-border-hover")}`,
16
16
  borderActive: `1px solid ${t}`,
17
17
  borderFocus: `1px solid ${t}`,
18
- boxShadowActive: s,
19
- boxShadowFocus: s
20
- }, z = {
18
+ boxShadowActive: p,
19
+ boxShadowFocus: p
20
+ }, D = {
21
21
  borderRadius: o("--radius-xs"),
22
- boxShadowFocus: s,
22
+ boxShadowFocus: p,
23
23
  checkMarkColor: "#FFFFFF",
24
24
  colorChecked: e,
25
25
  borderChecked: `1px solid ${e}`,
26
26
  colorIndeterminate: e,
27
27
  borderIndeterminate: `1px solid ${e}`,
28
- border: `1px solid ${h}`,
29
- color: C
28
+ border: `1px solid ${v}`,
29
+ color: b
30
30
  };
31
31
  return {
32
32
  common: {
33
33
  primaryColor: e,
34
- primaryColorHover: k,
35
- primaryColorPressed: V,
36
- primaryColorSuppl: k,
37
- successColor: H.base,
38
- successColorHover: H.hover,
39
- successColorPressed: H.pressed,
40
- successColorSuppl: H.suppl,
41
- warningColor: F.base,
42
- warningColorHover: F.hover,
43
- warningColorPressed: F.pressed,
44
- warningColorSuppl: F.suppl,
45
- errorColor: T.base,
46
- errorColorHover: T.hover,
47
- errorColorPressed: T.pressed,
48
- errorColorSuppl: T.suppl,
49
- infoColor: f.base,
50
- infoColorHover: f.hover,
51
- infoColorPressed: f.pressed,
52
- infoColorSuppl: f.suppl,
34
+ primaryColorHover: L,
35
+ primaryColorPressed: q,
36
+ primaryColorSuppl: L,
37
+ successColor: F.base,
38
+ successColorHover: F.hover,
39
+ successColorPressed: F.pressed,
40
+ successColorSuppl: F.suppl,
41
+ warningColor: T.base,
42
+ warningColorHover: T.hover,
43
+ warningColorPressed: T.pressed,
44
+ warningColorSuppl: T.suppl,
45
+ errorColor: f.base,
46
+ errorColorHover: f.hover,
47
+ errorColorPressed: f.pressed,
48
+ errorColorSuppl: f.suppl,
49
+ infoColor: w.base,
50
+ infoColorHover: w.hover,
51
+ infoColorPressed: w.pressed,
52
+ infoColorSuppl: w.suppl,
53
53
  bodyColor: o("--bg-app"),
54
54
  cardColor: o("--bg-card-glass"),
55
55
  tableColor: "transparent",
@@ -60,22 +60,22 @@ function Y(c) {
60
60
  textColor2: i,
61
61
  textColor3: l,
62
62
  placeholderColor: l,
63
- textColorDisabled: M,
64
- borderColor: h,
63
+ textColorDisabled: R,
64
+ borderColor: v,
65
65
  dividerColor: d,
66
66
  // 两者同色会让禁用框和可填框长一个样,操作员分不清哪里能输入,必须走不同令牌。
67
67
  // 这两个 common 变量流向 Input 与 InternalSelection,
68
68
  // 即 NInput / NInputNumber / NSelect / NDatePicker / NCascader 等全部输入类组件。
69
- inputColor: C,
70
- inputColorDisabled: R,
69
+ inputColor: b,
70
+ inputColorDisabled: $,
71
71
  actionColor: n,
72
72
  tableHeaderColor: "transparent",
73
- hoverColor: x,
74
- pressedColor: g,
75
- closeColorHover: x,
76
- closeColorPressed: g,
73
+ hoverColor: C,
74
+ pressedColor: m,
75
+ closeColorHover: C,
76
+ closeColorPressed: m,
77
77
  clearColor: l,
78
- borderRadius: v,
78
+ borderRadius: H,
79
79
  borderRadiusSmall: o("--radius-sm"),
80
80
  fontFamily: o("--font"),
81
81
  fontFamilyMono: o("--font-mono"),
@@ -93,14 +93,14 @@ function Y(c) {
93
93
  heightMedium: "30px",
94
94
  heightLarge: "42px",
95
95
  heightHuge: "46px",
96
- boxShadow1: $,
97
- boxShadow2: A,
98
- boxShadow3: E,
96
+ boxShadow1: z,
97
+ boxShadow2: M,
98
+ boxShadow3: O,
99
99
  cubicBezierEaseInOut: "cubic-bezier(.2, .8, .2, 1)"
100
100
  },
101
101
  Button: {
102
102
  fontWeight: "500",
103
- borderRadiusMedium: v,
103
+ borderRadiusMedium: H,
104
104
  borderRadiusSmall: "7px",
105
105
  borderRadiusLarge: "12px",
106
106
  fontSizeLarge: "15px",
@@ -109,53 +109,53 @@ function Y(c) {
109
109
  rippleDuration: "0s",
110
110
  paddingMedium: "0 12px",
111
111
  paddingSmall: "0 10px",
112
- textColorPrimary: m,
113
- textColorHoverPrimary: m,
114
- textColorPressedPrimary: m,
115
- textColorFocusPrimary: m,
116
- textColorDisabledPrimary: m,
112
+ textColorPrimary: g,
113
+ textColorHoverPrimary: g,
114
+ textColorPressedPrimary: g,
115
+ textColorFocusPrimary: g,
116
+ textColorDisabledPrimary: g,
117
117
  colorSecondary: n,
118
- colorSecondaryHover: S,
119
- colorSecondaryPressed: g,
118
+ colorSecondaryHover: P,
119
+ colorSecondaryPressed: m,
120
120
  // 没写 type 的默认款(库里的「搜索」「更多」)渲染成与 secondary 同款:中性灰底、无描边
121
121
  color: n,
122
- colorHover: S,
123
- colorPressed: g,
122
+ colorHover: P,
123
+ colorPressed: m,
124
124
  colorFocus: n,
125
125
  border: "1px solid transparent",
126
126
  borderHover: "1px solid transparent",
127
127
  borderPressed: "1px solid transparent",
128
128
  borderFocus: `1px solid ${t}`,
129
129
  // 文字 / 行内操作按钮(详情、编辑):浅色 / 深色统一用 linkFg
130
- textColorTextPrimary: p,
131
- textColorTextHoverPrimary: p,
132
- textColorTextPressedPrimary: p,
133
- textColorTextFocusPrimary: p,
134
- textColorGhostPrimary: p,
135
- textColorGhostHoverPrimary: p,
136
- textColorGhostPressedPrimary: p,
137
- textColorGhostFocusPrimary: p,
138
- colorQuaternaryHover: x,
139
- colorQuaternaryPressed: g,
140
- colorTertiaryHover: x,
141
- colorTertiaryPressed: g
130
+ textColorTextPrimary: x,
131
+ textColorTextHoverPrimary: x,
132
+ textColorTextPressedPrimary: x,
133
+ textColorTextFocusPrimary: x,
134
+ textColorGhostPrimary: x,
135
+ textColorGhostHoverPrimary: x,
136
+ textColorGhostPressedPrimary: x,
137
+ textColorGhostFocusPrimary: x,
138
+ colorQuaternaryHover: C,
139
+ colorQuaternaryPressed: m,
140
+ colorTertiaryHover: C,
141
+ colorTertiaryPressed: m
142
142
  },
143
143
  Input: {
144
- borderRadius: v,
145
- color: C,
146
- colorDisabled: R,
147
- colorFocus: C,
148
- border: `1px solid ${h}`,
144
+ borderRadius: H,
145
+ color: b,
146
+ colorDisabled: $,
147
+ colorFocus: b,
148
+ border: `1px solid ${v}`,
149
149
  borderHover: `1px solid ${o("--input-border-hover")}`,
150
150
  borderFocus: `1px solid ${t}`,
151
- boxShadowFocus: s,
151
+ boxShadowFocus: p,
152
152
  heightLarge: "42px",
153
153
  fontSizeLarge: "15px",
154
154
  caretColor: t
155
155
  },
156
156
  Select: {
157
157
  peers: {
158
- InternalSelection: N,
158
+ InternalSelection: Q,
159
159
  InternalSelectMenu: {
160
160
  borderRadius: "12px",
161
161
  optionHeightMedium: "30px",
@@ -164,22 +164,22 @@ function Y(c) {
164
164
  }
165
165
  }
166
166
  },
167
- TreeSelect: { peers: { InternalSelection: N } },
167
+ TreeSelect: { peers: { InternalSelection: Q } },
168
168
  DatePicker: {
169
169
  peers: {
170
170
  Input: {
171
- borderRadius: v,
172
- color: C,
171
+ borderRadius: H,
172
+ color: b,
173
173
  borderFocus: `1px solid ${t}`,
174
- boxShadowFocus: s
174
+ boxShadowFocus: p
175
175
  }
176
176
  }
177
177
  },
178
178
  InputNumber: {
179
- peers: { Input: { color: C, borderFocus: `1px solid ${t}`, boxShadowFocus: s } }
179
+ peers: { Input: { color: b, borderFocus: `1px solid ${t}`, boxShadowFocus: p } }
180
180
  },
181
181
  Card: {
182
- color: y,
182
+ color: s,
183
183
  colorEmbedded: n,
184
184
  borderColor: "transparent",
185
185
  borderRadius: o("--radius-lg"),
@@ -192,14 +192,30 @@ function Y(c) {
192
192
  actionColor: n
193
193
  },
194
194
  DataTable: {
195
- thColor: q,
196
- thColorHover: G,
197
- thColorSorting: G,
195
+ thColor: I,
196
+ thColorHover: S,
197
+ thColorSorting: S,
198
198
  // 内容层不透明:行底取实色卡片色(固定列 sticky 叠在别的列上不会透底),不加斑马纹(tdColorStriped 同色)
199
- tdColor: y,
200
- tdColorHover: J,
201
- tdColorStriped: y,
202
- tdColorSorting: y,
199
+ tdColor: s,
200
+ tdColorHover: k,
201
+ tdColorStriped: s,
202
+ tdColorSorting: s,
203
+ // 弹窗 / 抽屉 / 浮层里的表格(Naive 的 insideModal 命中 .n-modal 与 .n-drawer,insidePopover 命中 .n-popover)改取下面两套变体,默认由半透明的 modalColor / popoverColor(= --bg-elevated)派生;
204
+ // 固定列叠在别的列上,底色有一丝透明就会透出底下滚过的列的字,所以与上面的非 Modal 变体同值,都是实色。
205
+ tdColorModal: s,
206
+ tdColorHoverModal: k,
207
+ tdColorSortingModal: s,
208
+ tdColorStripedModal: s,
209
+ thColorModal: I,
210
+ thColorHoverModal: S,
211
+ thColorSortingModal: S,
212
+ tdColorPopover: s,
213
+ tdColorHoverPopover: k,
214
+ tdColorSortingPopover: s,
215
+ tdColorStripedPopover: s,
216
+ thColorPopover: I,
217
+ thColorHoverPopover: S,
218
+ thColorSortingPopover: S,
203
219
  thTextColor: i,
204
220
  thFontWeight: "600",
205
221
  thIconColor: l,
@@ -212,16 +228,16 @@ function Y(c) {
212
228
  thPaddingSmall: "6px 10px",
213
229
  tdPaddingSmall: "4px 10px",
214
230
  fontSizeSmall: "14px",
215
- peers: { Checkbox: z }
231
+ peers: { Checkbox: D }
216
232
  },
217
233
  Menu: {
218
- borderRadius: v,
234
+ borderRadius: H,
219
235
  itemHeight: "34px",
220
236
  fontSize: "15px",
221
- itemColorHover: x,
222
- itemColorActive: I(t, b ? 0.16 : 0.09),
223
- itemColorActiveHover: I(t, b ? 0.2 : 0.12),
224
- itemColorActiveCollapsed: I(t, b ? 0.16 : 0.09),
237
+ itemColorHover: C,
238
+ itemColorActive: W(t, u ? 0.16 : 0.09),
239
+ itemColorActiveHover: W(t, u ? 0.2 : 0.12),
240
+ itemColorActiveCollapsed: W(t, u ? 0.16 : 0.09),
225
241
  // 侧栏标签用主文字色(macOS 侧栏就是 label 主色,不是次级灰);选中 / 悬停靠底色区分
226
242
  itemTextColor: r,
227
243
  itemTextColorHover: r,
@@ -230,25 +246,25 @@ function Y(c) {
230
246
  itemIconColor: r,
231
247
  itemIconColorHover: r,
232
248
  itemIconColorCollapsed: r,
233
- itemTextColorActive: u,
234
- itemIconColorActive: u,
235
- itemTextColorActiveHover: u,
236
- itemIconColorActiveHover: u,
249
+ itemTextColorActive: h,
250
+ itemIconColorActive: h,
251
+ itemTextColorActiveHover: h,
252
+ itemIconColorActiveHover: h,
237
253
  itemTextColorChildActive: r,
238
254
  itemIconColorChildActive: r,
239
255
  itemTextColorChildActiveHover: r,
240
256
  itemIconColorChildActiveHover: r,
241
257
  arrowColor: l,
242
258
  arrowColorHover: i,
243
- arrowColorActive: u,
244
- arrowColorActiveHover: u,
259
+ arrowColorActive: h,
260
+ arrowColorActiveHover: h,
245
261
  arrowColorChildActive: i,
246
262
  arrowColorChildActiveHover: r,
247
263
  groupTextColor: l
248
264
  },
249
265
  Tabs: {
250
- colorSegment: W,
251
- tabColorSegment: L,
266
+ colorSegment: G,
267
+ tabColorSegment: N,
252
268
  tabBorderRadius: "8px",
253
269
  tabTextColorSegment: i,
254
270
  tabTextColorActiveSegment: r,
@@ -257,7 +273,7 @@ function Y(c) {
257
273
  tabColor: "transparent",
258
274
  tabBorderColor: "transparent",
259
275
  tabTextColorCard: l,
260
- tabTextColorActiveCard: u,
276
+ tabTextColorActiveCard: h,
261
277
  tabTextColorHoverCard: r,
262
278
  tabTextColorActiveLine: r,
263
279
  tabTextColorHoverLine: r,
@@ -265,8 +281,8 @@ function Y(c) {
265
281
  },
266
282
  Radio: {
267
283
  buttonBorderRadius: "8px",
268
- buttonColor: W,
269
- buttonColorActive: L,
284
+ buttonColor: G,
285
+ buttonColorActive: N,
270
286
  buttonBorderColor: "transparent",
271
287
  buttonBorderColorActive: "transparent",
272
288
  buttonBorderColorHover: "transparent",
@@ -275,23 +291,23 @@ function Y(c) {
275
291
  buttonTextColorHover: r,
276
292
  buttonBoxShadow: "none",
277
293
  buttonBoxShadowHover: "none",
278
- buttonBoxShadowFocus: s,
294
+ buttonBoxShadowFocus: p,
279
295
  dotColorActive: e,
280
296
  boxShadowActive: `inset 0 0 0 1px ${e}`,
281
- boxShadowFocus: s
297
+ boxShadowFocus: p
282
298
  },
283
- Checkbox: z,
299
+ Checkbox: D,
284
300
  Tree: {
285
301
  nodeBorderRadius: "8px",
286
- nodeColorHover: x,
287
- nodeColorActive: w,
302
+ nodeColorHover: C,
303
+ nodeColorActive: A,
288
304
  nodeHeight: "30px",
289
- peers: { Checkbox: z }
305
+ peers: { Checkbox: D }
290
306
  },
291
307
  Switch: {
292
308
  railColor: o("--switch-off"),
293
309
  railColorActive: e,
294
- boxShadowFocus: s,
310
+ boxShadowFocus: p,
295
311
  railHeightMedium: "24px",
296
312
  railWidthMedium: "42px",
297
313
  buttonHeightMedium: "20px",
@@ -309,11 +325,11 @@ function Y(c) {
309
325
  color: n,
310
326
  textColor: i,
311
327
  fontWeightStrong: "500",
312
- colorPrimary: w,
328
+ colorPrimary: A,
313
329
  textColorPrimary: r,
314
- borderPrimary: `1px solid ${P}`
330
+ borderPrimary: `1px solid ${y}`
315
331
  },
316
- List: { color: "transparent", colorHover: x, borderColor: d },
332
+ List: { color: "transparent", colorHover: C, borderColor: d },
317
333
  Dialog: {
318
334
  borderRadius: o("--radius-xl"),
319
335
  color: a,
@@ -321,7 +337,7 @@ function Y(c) {
321
337
  titleFontSize: "17px",
322
338
  titleFontWeight: "600"
323
339
  },
324
- Modal: { color: a, boxShadow: E },
340
+ Modal: { color: a, boxShadow: O },
325
341
  Drawer: {
326
342
  color: a,
327
343
  headerPadding: "18px 24px",
@@ -332,13 +348,13 @@ function Y(c) {
332
348
  headerBorderBottom: `1px solid ${d}`,
333
349
  footerBorderTop: `1px solid ${d}`
334
350
  },
335
- Popover: { color: a, borderRadius: o("--radius-lg"), boxShadow: A },
351
+ Popover: { color: a, borderRadius: o("--radius-lg"), boxShadow: M },
336
352
  Dropdown: {
337
353
  color: a,
338
354
  borderRadius: "12px",
339
355
  padding: "5px",
340
356
  optionHeightMedium: "30px",
341
- optionColorHover: x,
357
+ optionColorHover: C,
342
358
  dividerColor: d
343
359
  },
344
360
  // 提示气泡和下拉 / 弹层同一套浮层表面,随亮暗主题走(亮色近白底深字,暗色深蓝底亮字),不做亮暗都黑的特例。
@@ -346,37 +362,37 @@ function Y(c) {
346
362
  // 压过 Tooltip 自带的值,所以同一套要在 peers.Popover 里再写一遍(它在合并链最后,只对 Tooltip 生效)。
347
363
  // 阴影用描边 + 卡片级的轻阴影:气泡很小,弹层那种大范围投影会显得过重。
348
364
  Tooltip: {
349
- color: D,
365
+ color: E,
350
366
  textColor: r,
351
367
  borderRadius: "8px",
352
368
  padding: "5px 9px",
353
- boxShadow: `0 0 0 1px ${P}, ${$}`,
369
+ boxShadow: `0 0 0 1px ${y}, ${z}`,
354
370
  peers: {
355
371
  Popover: {
356
- color: D,
372
+ color: E,
357
373
  textColor: r,
358
374
  borderRadius: "8px",
359
375
  padding: "5px 9px",
360
- boxShadow: `0 0 0 1px ${P}, ${$}`
376
+ boxShadow: `0 0 0 1px ${y}, ${z}`
361
377
  }
362
378
  }
363
379
  },
364
- Message: { borderRadius: "12px", color: a, padding: "10px 16px", boxShadow: A },
365
- Notification: { borderRadius: "16px", color: a, boxShadow: A },
380
+ Message: { borderRadius: "12px", color: a, padding: "10px 16px", boxShadow: M },
381
+ Notification: { borderRadius: "16px", color: a, boxShadow: M },
366
382
  Alert: {
367
383
  borderRadius: "10px",
368
384
  colorInfo: n,
369
- borderInfo: `1px solid ${j}`,
385
+ borderInfo: `1px solid ${J}`,
370
386
  iconColorInfo: i,
371
387
  titleTextColorInfo: r,
372
388
  contentTextColorInfo: i
373
389
  },
374
390
  Pagination: {
375
391
  itemBorderRadius: "8px",
376
- itemColorActive: w,
392
+ itemColorActive: A,
377
393
  itemTextColorActive: r,
378
- itemBorderActive: `1px solid ${P}`,
379
- itemColorActiveHover: w
394
+ itemBorderActive: `1px solid ${y}`,
395
+ itemColorActiveHover: A
380
396
  },
381
397
  Statistic: {
382
398
  valueFontSize: "26px",
@@ -391,30 +407,30 @@ function Y(c) {
391
407
  tdColor: "transparent"
392
408
  },
393
409
  Progress: { railColor: n, fillColor: e },
394
- Breadcrumb: { itemTextColor: l, itemTextColorActive: r, separatorColor: M },
410
+ Breadcrumb: { itemTextColor: l, itemTextColorActive: r, separatorColor: R },
395
411
  Slider: {
396
412
  fillColor: e,
397
413
  fillColorHover: e,
398
- railColor: S,
399
- railColorHover: S,
414
+ railColor: P,
415
+ railColorHover: P,
400
416
  dotBorderActive: `2px solid ${e}`
401
417
  },
402
418
  Steps: {
403
419
  indicatorColorProcess: e,
404
- indicatorTextColorProcess: m,
420
+ indicatorTextColorProcess: g,
405
421
  indicatorBorderColorProcess: e,
406
422
  indicatorColorFinish: "transparent",
407
- indicatorBorderColorFinish: h,
423
+ indicatorBorderColorFinish: v,
408
424
  indicatorTextColorFinish: i,
409
425
  splitorColorFinish: l,
410
426
  splitorColorProcess: d,
411
427
  splitorColorWait: d
412
428
  },
413
- Empty: { textColor: l, iconColor: M },
429
+ Empty: { textColor: l, iconColor: R },
414
430
  Divider: { color: d },
415
- Timeline: { circleBorder: `2px solid ${h}`, titleFontWeight: "500", lineColor: d },
431
+ Timeline: { circleBorder: `2px solid ${v}`, titleFontWeight: "500", lineColor: d },
416
432
  Badge: { color: o("--badge-bg") },
417
- Scrollbar: { color: S, colorHover: h },
433
+ Scrollbar: { color: P, colorHover: v },
418
434
  Code: { textColor: r }
419
435
  };
420
436
  }
@@ -1 +1 @@
1
- {"version":3,"file":"naive-theme.js","sources":["../../src/theme/naive-theme.ts"],"sourcesContent":["import type { GlobalThemeOverrides } from 'naive-ui'\nimport { mix, rgba } from './mix'\nimport { deriveAccentTokens } from './accentTokens'\n\n// 读取当前主题下的 token 值(getComputedStyle 同步反映最新的 data-theme)。\nconst v = (name: string): string =>\n getComputedStyle(document.documentElement).getPropertyValue(name).trim()\n\n/** 语义色 hover/pressed 统一派生(hover 往白提 12%,pressed 往黑压 12%)。主色不在此列——它走 `mix.ts` 的 `derivePrimary`。 */\nfunction semantic(base: string) {\n const hover = mix(base, '#FFFFFF', 0.12)\n return { base, hover, pressed: mix(base, '#000000', 0.12), suppl: hover }\n}\n\n/**\n * tokens.css → Naive UI GlobalThemeOverrides(映射关系见 DESIGN.md 映射表)。\n * 强调色相关的值由 accent 按 `accentTokens.ts` 算;其余颜色 / 度量从当前 CSS 变量读取。\n *\n * 度量(中文界面 14px 偏小,整体比 Naive 默认大一档):正文 15px、默认控件高 30px(小 24、迷你 20)、Large 42px 只留给登录页与触屏窄档。\n * 按钮默认款(没写 type 的 NButton,如表格库里的「搜索」「更多」)渲染成与 secondary 同色同无描边,整站只剩一种次按钮。\n */\nexport function buildThemeOverrides(opts: { dark: boolean; accent: string }): GlobalThemeOverrides {\n const { dark } = opts\n const a = deriveAccentTokens(opts.accent, dark)\n const { signal, acc, onAcc, hover, pressed, activeFg, linkFg, ring } = a\n\n const ok = semantic(v('--ok'))\n const warn = semantic(v('--warn'))\n const err = semantic(v('--err'))\n const info = semantic(v('--info'))\n\n const text1 = v('--text-1')\n const text2 = v('--text-2')\n const text3 = v('--text-3')\n const text4 = v('--text-4')\n const border = v('--border')\n const separator = v('--separator')\n const hairline = v('--hairline')\n const hairlineStrong = v('--hairline-strong')\n const tooltipBg = v('--tooltip-bg')\n const glassStrong = v('--glass-strong')\n const fill = v('--fill')\n const fillStrong = v('--fill-strong')\n const hoverBg = v('--hover')\n const pressedBg = v('--pressed')\n const input = v('--input')\n const inputDisabled = v('--input-disabled')\n const cardSolid = v('--bg-card')\n const elevated = v('--bg-elevated')\n const segTrack = v('--seg-track')\n const segThumb = v('--seg-thumb')\n const shadow1 = v('--shadow-1')\n const shadow2 = v('--shadow-2')\n const shadow3 = v('--shadow-3')\n const thBg = v('--th-bg')\n const thBgHover = v('--th-bg-hover')\n const tdBgHover = v('--td-bg-hover')\n\n const radius = v('--radius-md') // 9\n const selection = {\n borderRadius: radius,\n color: input,\n colorActive: input,\n colorDisabled: inputDisabled,\n border: `1px solid ${border}`,\n borderHover: `1px solid ${v('--select-border-hover')}`,\n borderActive: `1px solid ${signal}`,\n borderFocus: `1px solid ${signal}`,\n boxShadowActive: ring,\n boxShadowFocus: ring,\n }\n const checkbox = {\n borderRadius: v('--radius-xs'),\n boxShadowFocus: ring,\n checkMarkColor: '#FFFFFF',\n colorChecked: acc,\n borderChecked: `1px solid ${acc}`,\n colorIndeterminate: acc,\n borderIndeterminate: `1px solid ${acc}`,\n border: `1px solid ${border}`,\n color: input,\n }\n\n return {\n common: {\n primaryColor: acc,\n primaryColorHover: hover,\n primaryColorPressed: pressed,\n primaryColorSuppl: hover,\n\n successColor: ok.base,\n successColorHover: ok.hover,\n successColorPressed: ok.pressed,\n successColorSuppl: ok.suppl,\n warningColor: warn.base,\n warningColorHover: warn.hover,\n warningColorPressed: warn.pressed,\n warningColorSuppl: warn.suppl,\n errorColor: err.base,\n errorColorHover: err.hover,\n errorColorPressed: err.pressed,\n errorColorSuppl: err.suppl,\n infoColor: info.base,\n infoColorHover: info.hover,\n infoColorPressed: info.pressed,\n infoColorSuppl: info.suppl,\n\n bodyColor: v('--bg-app'),\n cardColor: v('--bg-card-glass'),\n tableColor: 'transparent',\n modalColor: elevated,\n popoverColor: elevated,\n\n textColorBase: text1,\n textColor1: text1,\n textColor2: text2,\n textColor3: text3,\n placeholderColor: text3,\n textColorDisabled: text4,\n\n borderColor: border,\n dividerColor: separator,\n // 两者同色会让禁用框和可填框长一个样,操作员分不清哪里能输入,必须走不同令牌。\n // 这两个 common 变量流向 Input 与 InternalSelection,\n // 即 NInput / NInputNumber / NSelect / NDatePicker / NCascader 等全部输入类组件。\n inputColor: input,\n inputColorDisabled: inputDisabled,\n actionColor: fill,\n tableHeaderColor: 'transparent',\n hoverColor: hoverBg,\n pressedColor: pressedBg,\n closeColorHover: hoverBg,\n closeColorPressed: pressedBg,\n clearColor: text3,\n\n borderRadius: radius,\n borderRadiusSmall: v('--radius-sm'),\n fontFamily: v('--font'),\n fontFamilyMono: v('--font-mono'),\n fontWeightStrong: '600',\n fontSizeMini: '13px',\n fontSizeTiny: '14px',\n fontSizeSmall: '14px',\n fontSizeMedium: '15px',\n fontSizeLarge: '16px',\n fontSizeHuge: '17px',\n fontSize: '15px',\n heightMini: '20px',\n heightTiny: '22px',\n heightSmall: '24px',\n heightMedium: '30px',\n heightLarge: '42px',\n heightHuge: '46px',\n\n boxShadow1: shadow1,\n boxShadow2: shadow2,\n boxShadow3: shadow3,\n cubicBezierEaseInOut: 'cubic-bezier(.2, .8, .2, 1)',\n },\n Button: {\n fontWeight: '500',\n borderRadiusMedium: radius,\n borderRadiusSmall: '7px',\n borderRadiusLarge: '12px',\n fontSizeLarge: '15px',\n // 点击不出扩散波纹:那是 Ant 系的反馈,macOS 的按钮只有按下态的底色变化(colorPressed)。\n // 波纹是定时器切 class + 无 fill-mode 的 CSS 动画,时长归零即彻底不可见,不必逐类型清 rippleColor。\n rippleDuration: '0s',\n paddingMedium: '0 12px',\n paddingSmall: '0 10px',\n textColorPrimary: onAcc,\n textColorHoverPrimary: onAcc,\n textColorPressedPrimary: onAcc,\n textColorFocusPrimary: onAcc,\n textColorDisabledPrimary: onAcc,\n colorSecondary: fill,\n colorSecondaryHover: fillStrong,\n colorSecondaryPressed: pressedBg,\n // 没写 type 的默认款(库里的「搜索」「更多」)渲染成与 secondary 同款:中性灰底、无描边\n color: fill,\n colorHover: fillStrong,\n colorPressed: pressedBg,\n colorFocus: fill,\n border: '1px solid transparent',\n borderHover: '1px solid transparent',\n borderPressed: '1px solid transparent',\n borderFocus: `1px solid ${signal}`,\n // 文字 / 行内操作按钮(详情、编辑):浅色 / 深色统一用 linkFg\n textColorTextPrimary: linkFg,\n textColorTextHoverPrimary: linkFg,\n textColorTextPressedPrimary: linkFg,\n textColorTextFocusPrimary: linkFg,\n textColorGhostPrimary: linkFg,\n textColorGhostHoverPrimary: linkFg,\n textColorGhostPressedPrimary: linkFg,\n textColorGhostFocusPrimary: linkFg,\n colorQuaternaryHover: hoverBg,\n colorQuaternaryPressed: pressedBg,\n colorTertiaryHover: hoverBg,\n colorTertiaryPressed: pressedBg,\n },\n Input: {\n borderRadius: radius,\n color: input,\n colorDisabled: inputDisabled,\n colorFocus: input,\n border: `1px solid ${border}`,\n borderHover: `1px solid ${v('--input-border-hover')}`,\n borderFocus: `1px solid ${signal}`,\n boxShadowFocus: ring,\n heightLarge: '42px',\n fontSizeLarge: '15px',\n caretColor: signal,\n },\n Select: {\n peers: {\n InternalSelection: selection,\n InternalSelectMenu: {\n borderRadius: '12px',\n optionHeightMedium: '30px',\n color: elevated,\n optionCheckColor: signal,\n },\n },\n },\n TreeSelect: { peers: { InternalSelection: selection } },\n DatePicker: {\n peers: {\n Input: {\n borderRadius: radius,\n color: input,\n borderFocus: `1px solid ${signal}`,\n boxShadowFocus: ring,\n },\n },\n },\n InputNumber: {\n peers: { Input: { color: input, borderFocus: `1px solid ${signal}`, boxShadowFocus: ring } },\n },\n Card: {\n color: cardSolid,\n colorEmbedded: fill,\n borderColor: 'transparent',\n borderRadius: v('--radius-lg'),\n titleFontSizeMedium: '15px',\n titleFontSizeSmall: '15px',\n titleFontWeight: '600',\n paddingMedium: '12px 14px 14px',\n paddingSmall: '10px 12px',\n colorModal: elevated,\n actionColor: fill,\n },\n DataTable: {\n thColor: thBg,\n thColorHover: thBgHover,\n thColorSorting: thBgHover,\n // 内容层不透明:行底取实色卡片色(固定列 sticky 叠在别的列上不会透底),不加斑马纹(tdColorStriped 同色)\n tdColor: cardSolid,\n tdColorHover: tdBgHover,\n tdColorStriped: cardSolid,\n tdColorSorting: cardSolid,\n thTextColor: text2,\n thFontWeight: '600',\n thIconColor: text3,\n // 表格线(列竖线 / 外框 / 行线)的标准就是 --separator(亮色 0.16),不换更实的线色:见 DESIGN.md §5「表格线色」\n borderColor: separator,\n borderRadius: '10px',\n thPaddingMedium: '6px 12px',\n tdPaddingMedium: '4px 12px',\n fontSizeMedium: '15px',\n thPaddingSmall: '6px 10px',\n tdPaddingSmall: '4px 10px',\n fontSizeSmall: '14px',\n peers: { Checkbox: checkbox },\n },\n Menu: {\n borderRadius: radius,\n itemHeight: '34px',\n fontSize: '15px',\n itemColorHover: hoverBg,\n itemColorActive: rgba(signal, dark ? 0.16 : 0.09),\n itemColorActiveHover: rgba(signal, dark ? 0.2 : 0.12),\n itemColorActiveCollapsed: rgba(signal, dark ? 0.16 : 0.09),\n // 侧栏标签用主文字色(macOS 侧栏就是 label 主色,不是次级灰);选中 / 悬停靠底色区分\n itemTextColor: text1,\n itemTextColorHover: text1,\n // 侧栏图标与文字同色(每个状态都一致):平时主文字色,选中才跟随强调色;\n // 强调色只出现在选中项(行底色 + 加粗的图标文字),整条侧栏更安静\n itemIconColor: text1,\n itemIconColorHover: text1,\n itemIconColorCollapsed: text1,\n itemTextColorActive: activeFg,\n itemIconColorActive: activeFg,\n itemTextColorActiveHover: activeFg,\n itemIconColorActiveHover: activeFg,\n itemTextColorChildActive: text1,\n itemIconColorChildActive: text1,\n itemTextColorChildActiveHover: text1,\n itemIconColorChildActiveHover: text1,\n arrowColor: text3,\n arrowColorHover: text2,\n arrowColorActive: activeFg,\n arrowColorActiveHover: activeFg,\n arrowColorChildActive: text2,\n arrowColorChildActiveHover: text1,\n groupTextColor: text3,\n },\n Tabs: {\n colorSegment: segTrack,\n tabColorSegment: segThumb,\n tabBorderRadius: '8px',\n tabTextColorSegment: text2,\n tabTextColorActiveSegment: text1,\n tabTextColorHoverSegment: text1,\n tabFontWeightActive: '500',\n tabColor: 'transparent',\n tabBorderColor: 'transparent',\n tabTextColorCard: text3,\n tabTextColorActiveCard: activeFg,\n tabTextColorHoverCard: text1,\n tabTextColorActiveLine: text1,\n tabTextColorHoverLine: text1,\n barColor: acc,\n },\n Radio: {\n buttonBorderRadius: '8px',\n buttonColor: segTrack,\n buttonColorActive: segThumb,\n buttonBorderColor: 'transparent',\n buttonBorderColorActive: 'transparent',\n buttonBorderColorHover: 'transparent',\n buttonTextColor: text2,\n buttonTextColorActive: text1,\n buttonTextColorHover: text1,\n buttonBoxShadow: 'none',\n buttonBoxShadowHover: 'none',\n buttonBoxShadowFocus: ring,\n dotColorActive: acc,\n boxShadowActive: `inset 0 0 0 1px ${acc}`,\n boxShadowFocus: ring,\n },\n Checkbox: checkbox,\n Tree: {\n nodeBorderRadius: '8px',\n nodeColorHover: hoverBg,\n nodeColorActive: glassStrong,\n nodeHeight: '30px',\n peers: { Checkbox: checkbox },\n },\n Switch: {\n railColor: v('--switch-off'),\n railColorActive: acc,\n boxShadowFocus: ring,\n railHeightMedium: '24px',\n railWidthMedium: '42px',\n buttonHeightMedium: '20px',\n buttonWidthMedium: '20px',\n buttonWidthPressedMedium: '26px',\n },\n Tag: {\n heightTiny: '20px',\n heightSmall: '22px',\n heightMedium: '24px',\n fontSizeTiny: '13px',\n fontSizeSmall: '14px',\n fontSizeMedium: '15px',\n borderRadius: v('--radius-sm'),\n color: fill,\n textColor: text2,\n fontWeightStrong: '500',\n colorPrimary: glassStrong,\n textColorPrimary: text1,\n borderPrimary: `1px solid ${hairlineStrong}`,\n },\n List: { color: 'transparent', colorHover: hoverBg, borderColor: separator },\n Dialog: {\n borderRadius: v('--radius-xl'),\n color: elevated,\n padding: '24px 26px 22px',\n titleFontSize: '17px',\n titleFontWeight: '600',\n },\n Modal: { color: elevated, boxShadow: shadow3 },\n Drawer: {\n color: elevated,\n headerPadding: '18px 24px',\n bodyPadding: '20px 24px',\n footerPadding: '14px 24px',\n titleFontSize: '17px',\n titleFontWeight: '600',\n headerBorderBottom: `1px solid ${separator}`,\n footerBorderTop: `1px solid ${separator}`,\n },\n Popover: { color: elevated, borderRadius: v('--radius-lg'), boxShadow: shadow2 },\n Dropdown: {\n color: elevated,\n borderRadius: '12px',\n padding: '5px',\n optionHeightMedium: '30px',\n optionColorHover: hoverBg,\n dividerColor: separator,\n },\n // 提示气泡和下拉 / 弹层同一套浮层表面,随亮暗主题走(亮色近白底深字,暗色深蓝底亮字),不做亮暗都黑的特例。\n // 底色、字色、阴影成套给:Tooltip 底下是 Popover,Naive 合并时全局 `Popover` 覆盖(上面的 elevated 与大阴影)\n // 压过 Tooltip 自带的值,所以同一套要在 peers.Popover 里再写一遍(它在合并链最后,只对 Tooltip 生效)。\n // 阴影用描边 + 卡片级的轻阴影:气泡很小,弹层那种大范围投影会显得过重。\n Tooltip: {\n color: tooltipBg,\n textColor: text1,\n borderRadius: '8px',\n padding: '5px 9px',\n boxShadow: `0 0 0 1px ${hairlineStrong}, ${shadow1}`,\n peers: {\n Popover: {\n color: tooltipBg,\n textColor: text1,\n borderRadius: '8px',\n padding: '5px 9px',\n boxShadow: `0 0 0 1px ${hairlineStrong}, ${shadow1}`,\n },\n },\n },\n Message: { borderRadius: '12px', color: elevated, padding: '10px 16px', boxShadow: shadow2 },\n Notification: { borderRadius: '16px', color: elevated, boxShadow: shadow2 },\n Alert: {\n borderRadius: '10px',\n colorInfo: fill,\n borderInfo: `1px solid ${hairline}`,\n iconColorInfo: text2,\n titleTextColorInfo: text1,\n contentTextColorInfo: text2,\n },\n Pagination: {\n itemBorderRadius: '8px',\n itemColorActive: glassStrong,\n itemTextColorActive: text1,\n itemBorderActive: `1px solid ${hairlineStrong}`,\n itemColorActiveHover: glassStrong,\n },\n Statistic: {\n valueFontSize: '26px',\n valueFontWeight: '500',\n labelFontSize: '13px',\n labelTextColor: text2,\n },\n Descriptions: {\n thColor: fill,\n borderColor: separator,\n thTextColor: text3,\n tdColor: 'transparent',\n },\n Progress: { railColor: fill, fillColor: acc },\n Breadcrumb: { itemTextColor: text3, itemTextColorActive: text1, separatorColor: text4 },\n Slider: {\n fillColor: acc,\n fillColorHover: acc,\n railColor: fillStrong,\n railColorHover: fillStrong,\n dotBorderActive: `2px solid ${acc}`,\n },\n Steps: {\n indicatorColorProcess: acc,\n indicatorTextColorProcess: onAcc,\n indicatorBorderColorProcess: acc,\n indicatorColorFinish: 'transparent',\n indicatorBorderColorFinish: border,\n indicatorTextColorFinish: text2,\n splitorColorFinish: text3,\n splitorColorProcess: separator,\n splitorColorWait: separator,\n },\n Empty: { textColor: text3, iconColor: text4 },\n Divider: { color: separator },\n Timeline: { circleBorder: `2px solid ${border}`, titleFontWeight: '500', lineColor: separator },\n Badge: { color: v('--badge-bg') },\n Scrollbar: { color: fillStrong, colorHover: border },\n Code: { textColor: text1 },\n }\n}\n"],"names":["v","name","semantic","base","hover","mix","buildThemeOverrides","opts","dark","a","deriveAccentTokens","signal","acc","onAcc","pressed","activeFg","linkFg","ring","ok","warn","err","info","text1","text2","text3","text4","border","separator","hairline","hairlineStrong","tooltipBg","glassStrong","fill","fillStrong","hoverBg","pressedBg","input","inputDisabled","cardSolid","elevated","segTrack","segThumb","shadow1","shadow2","shadow3","thBg","thBgHover","tdBgHover","radius","selection","checkbox","rgba"],"mappings":"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"}
1
+ {"version":3,"file":"naive-theme.js","sources":["../../src/theme/naive-theme.ts"],"sourcesContent":["import type { GlobalThemeOverrides } from 'naive-ui'\nimport { mix, rgba } from './mix'\nimport { deriveAccentTokens } from './accentTokens'\n\n// 读取当前主题下的 token 值(getComputedStyle 同步反映最新的 data-theme)。\nconst v = (name: string): string =>\n getComputedStyle(document.documentElement).getPropertyValue(name).trim()\n\n/** 语义色 hover/pressed 统一派生(hover 往白提 12%,pressed 往黑压 12%)。主色不在此列——它走 `mix.ts` 的 `derivePrimary`。 */\nfunction semantic(base: string) {\n const hover = mix(base, '#FFFFFF', 0.12)\n return { base, hover, pressed: mix(base, '#000000', 0.12), suppl: hover }\n}\n\n/**\n * tokens.css → Naive UI GlobalThemeOverrides(映射关系见 DESIGN.md 映射表)。\n * 强调色相关的值由 accent 按 `accentTokens.ts` 算;其余颜色 / 度量从当前 CSS 变量读取。\n *\n * 度量(中文界面 14px 偏小,整体比 Naive 默认大一档):正文 15px、默认控件高 30px(小 24、迷你 20)、Large 42px 只留给登录页与触屏窄档。\n * 按钮默认款(没写 type 的 NButton,如表格库里的「搜索」「更多」)渲染成与 secondary 同色同无描边,整站只剩一种次按钮。\n */\nexport function buildThemeOverrides(opts: { dark: boolean; accent: string }): GlobalThemeOverrides {\n const { dark } = opts\n const a = deriveAccentTokens(opts.accent, dark)\n const { signal, acc, onAcc, hover, pressed, activeFg, linkFg, ring } = a\n\n const ok = semantic(v('--ok'))\n const warn = semantic(v('--warn'))\n const err = semantic(v('--err'))\n const info = semantic(v('--info'))\n\n const text1 = v('--text-1')\n const text2 = v('--text-2')\n const text3 = v('--text-3')\n const text4 = v('--text-4')\n const border = v('--border')\n const separator = v('--separator')\n const hairline = v('--hairline')\n const hairlineStrong = v('--hairline-strong')\n const tooltipBg = v('--tooltip-bg')\n const glassStrong = v('--glass-strong')\n const fill = v('--fill')\n const fillStrong = v('--fill-strong')\n const hoverBg = v('--hover')\n const pressedBg = v('--pressed')\n const input = v('--input')\n const inputDisabled = v('--input-disabled')\n const cardSolid = v('--bg-card')\n const elevated = v('--bg-elevated')\n const segTrack = v('--seg-track')\n const segThumb = v('--seg-thumb')\n const shadow1 = v('--shadow-1')\n const shadow2 = v('--shadow-2')\n const shadow3 = v('--shadow-3')\n const thBg = v('--th-bg')\n const thBgHover = v('--th-bg-hover')\n const tdBgHover = v('--td-bg-hover')\n\n const radius = v('--radius-md') // 9\n const selection = {\n borderRadius: radius,\n color: input,\n colorActive: input,\n colorDisabled: inputDisabled,\n border: `1px solid ${border}`,\n borderHover: `1px solid ${v('--select-border-hover')}`,\n borderActive: `1px solid ${signal}`,\n borderFocus: `1px solid ${signal}`,\n boxShadowActive: ring,\n boxShadowFocus: ring,\n }\n const checkbox = {\n borderRadius: v('--radius-xs'),\n boxShadowFocus: ring,\n checkMarkColor: '#FFFFFF',\n colorChecked: acc,\n borderChecked: `1px solid ${acc}`,\n colorIndeterminate: acc,\n borderIndeterminate: `1px solid ${acc}`,\n border: `1px solid ${border}`,\n color: input,\n }\n\n return {\n common: {\n primaryColor: acc,\n primaryColorHover: hover,\n primaryColorPressed: pressed,\n primaryColorSuppl: hover,\n\n successColor: ok.base,\n successColorHover: ok.hover,\n successColorPressed: ok.pressed,\n successColorSuppl: ok.suppl,\n warningColor: warn.base,\n warningColorHover: warn.hover,\n warningColorPressed: warn.pressed,\n warningColorSuppl: warn.suppl,\n errorColor: err.base,\n errorColorHover: err.hover,\n errorColorPressed: err.pressed,\n errorColorSuppl: err.suppl,\n infoColor: info.base,\n infoColorHover: info.hover,\n infoColorPressed: info.pressed,\n infoColorSuppl: info.suppl,\n\n bodyColor: v('--bg-app'),\n cardColor: v('--bg-card-glass'),\n tableColor: 'transparent',\n modalColor: elevated,\n popoverColor: elevated,\n\n textColorBase: text1,\n textColor1: text1,\n textColor2: text2,\n textColor3: text3,\n placeholderColor: text3,\n textColorDisabled: text4,\n\n borderColor: border,\n dividerColor: separator,\n // 两者同色会让禁用框和可填框长一个样,操作员分不清哪里能输入,必须走不同令牌。\n // 这两个 common 变量流向 Input 与 InternalSelection,\n // 即 NInput / NInputNumber / NSelect / NDatePicker / NCascader 等全部输入类组件。\n inputColor: input,\n inputColorDisabled: inputDisabled,\n actionColor: fill,\n tableHeaderColor: 'transparent',\n hoverColor: hoverBg,\n pressedColor: pressedBg,\n closeColorHover: hoverBg,\n closeColorPressed: pressedBg,\n clearColor: text3,\n\n borderRadius: radius,\n borderRadiusSmall: v('--radius-sm'),\n fontFamily: v('--font'),\n fontFamilyMono: v('--font-mono'),\n fontWeightStrong: '600',\n fontSizeMini: '13px',\n fontSizeTiny: '14px',\n fontSizeSmall: '14px',\n fontSizeMedium: '15px',\n fontSizeLarge: '16px',\n fontSizeHuge: '17px',\n fontSize: '15px',\n heightMini: '20px',\n heightTiny: '22px',\n heightSmall: '24px',\n heightMedium: '30px',\n heightLarge: '42px',\n heightHuge: '46px',\n\n boxShadow1: shadow1,\n boxShadow2: shadow2,\n boxShadow3: shadow3,\n cubicBezierEaseInOut: 'cubic-bezier(.2, .8, .2, 1)',\n },\n Button: {\n fontWeight: '500',\n borderRadiusMedium: radius,\n borderRadiusSmall: '7px',\n borderRadiusLarge: '12px',\n fontSizeLarge: '15px',\n // 点击不出扩散波纹:那是 Ant 系的反馈,macOS 的按钮只有按下态的底色变化(colorPressed)。\n // 波纹是定时器切 class + 无 fill-mode 的 CSS 动画,时长归零即彻底不可见,不必逐类型清 rippleColor。\n rippleDuration: '0s',\n paddingMedium: '0 12px',\n paddingSmall: '0 10px',\n textColorPrimary: onAcc,\n textColorHoverPrimary: onAcc,\n textColorPressedPrimary: onAcc,\n textColorFocusPrimary: onAcc,\n textColorDisabledPrimary: onAcc,\n colorSecondary: fill,\n colorSecondaryHover: fillStrong,\n colorSecondaryPressed: pressedBg,\n // 没写 type 的默认款(库里的「搜索」「更多」)渲染成与 secondary 同款:中性灰底、无描边\n color: fill,\n colorHover: fillStrong,\n colorPressed: pressedBg,\n colorFocus: fill,\n border: '1px solid transparent',\n borderHover: '1px solid transparent',\n borderPressed: '1px solid transparent',\n borderFocus: `1px solid ${signal}`,\n // 文字 / 行内操作按钮(详情、编辑):浅色 / 深色统一用 linkFg\n textColorTextPrimary: linkFg,\n textColorTextHoverPrimary: linkFg,\n textColorTextPressedPrimary: linkFg,\n textColorTextFocusPrimary: linkFg,\n textColorGhostPrimary: linkFg,\n textColorGhostHoverPrimary: linkFg,\n textColorGhostPressedPrimary: linkFg,\n textColorGhostFocusPrimary: linkFg,\n colorQuaternaryHover: hoverBg,\n colorQuaternaryPressed: pressedBg,\n colorTertiaryHover: hoverBg,\n colorTertiaryPressed: pressedBg,\n },\n Input: {\n borderRadius: radius,\n color: input,\n colorDisabled: inputDisabled,\n colorFocus: input,\n border: `1px solid ${border}`,\n borderHover: `1px solid ${v('--input-border-hover')}`,\n borderFocus: `1px solid ${signal}`,\n boxShadowFocus: ring,\n heightLarge: '42px',\n fontSizeLarge: '15px',\n caretColor: signal,\n },\n Select: {\n peers: {\n InternalSelection: selection,\n InternalSelectMenu: {\n borderRadius: '12px',\n optionHeightMedium: '30px',\n color: elevated,\n optionCheckColor: signal,\n },\n },\n },\n TreeSelect: { peers: { InternalSelection: selection } },\n DatePicker: {\n peers: {\n Input: {\n borderRadius: radius,\n color: input,\n borderFocus: `1px solid ${signal}`,\n boxShadowFocus: ring,\n },\n },\n },\n InputNumber: {\n peers: { Input: { color: input, borderFocus: `1px solid ${signal}`, boxShadowFocus: ring } },\n },\n Card: {\n color: cardSolid,\n colorEmbedded: fill,\n borderColor: 'transparent',\n borderRadius: v('--radius-lg'),\n titleFontSizeMedium: '15px',\n titleFontSizeSmall: '15px',\n titleFontWeight: '600',\n paddingMedium: '12px 14px 14px',\n paddingSmall: '10px 12px',\n colorModal: elevated,\n actionColor: fill,\n },\n DataTable: {\n thColor: thBg,\n thColorHover: thBgHover,\n thColorSorting: thBgHover,\n // 内容层不透明:行底取实色卡片色(固定列 sticky 叠在别的列上不会透底),不加斑马纹(tdColorStriped 同色)\n tdColor: cardSolid,\n tdColorHover: tdBgHover,\n tdColorStriped: cardSolid,\n tdColorSorting: cardSolid,\n // 弹窗 / 抽屉 / 浮层里的表格(Naive 的 insideModal 命中 .n-modal 与 .n-drawer,insidePopover 命中 .n-popover)改取下面两套变体,默认由半透明的 modalColor / popoverColor(= --bg-elevated)派生;\n // 固定列叠在别的列上,底色有一丝透明就会透出底下滚过的列的字,所以与上面的非 Modal 变体同值,都是实色。\n tdColorModal: cardSolid,\n tdColorHoverModal: tdBgHover,\n tdColorSortingModal: cardSolid,\n tdColorStripedModal: cardSolid,\n thColorModal: thBg,\n thColorHoverModal: thBgHover,\n thColorSortingModal: thBgHover,\n tdColorPopover: cardSolid,\n tdColorHoverPopover: tdBgHover,\n tdColorSortingPopover: cardSolid,\n tdColorStripedPopover: cardSolid,\n thColorPopover: thBg,\n thColorHoverPopover: thBgHover,\n thColorSortingPopover: thBgHover,\n thTextColor: text2,\n thFontWeight: '600',\n thIconColor: text3,\n // 表格线(列竖线 / 外框 / 行线)的标准就是 --separator(亮色 0.16),不换更实的线色:见 DESIGN.md §5「表格线色」\n borderColor: separator,\n borderRadius: '10px',\n thPaddingMedium: '6px 12px',\n tdPaddingMedium: '4px 12px',\n fontSizeMedium: '15px',\n thPaddingSmall: '6px 10px',\n tdPaddingSmall: '4px 10px',\n fontSizeSmall: '14px',\n peers: { Checkbox: checkbox },\n },\n Menu: {\n borderRadius: radius,\n itemHeight: '34px',\n fontSize: '15px',\n itemColorHover: hoverBg,\n itemColorActive: rgba(signal, dark ? 0.16 : 0.09),\n itemColorActiveHover: rgba(signal, dark ? 0.2 : 0.12),\n itemColorActiveCollapsed: rgba(signal, dark ? 0.16 : 0.09),\n // 侧栏标签用主文字色(macOS 侧栏就是 label 主色,不是次级灰);选中 / 悬停靠底色区分\n itemTextColor: text1,\n itemTextColorHover: text1,\n // 侧栏图标与文字同色(每个状态都一致):平时主文字色,选中才跟随强调色;\n // 强调色只出现在选中项(行底色 + 加粗的图标文字),整条侧栏更安静\n itemIconColor: text1,\n itemIconColorHover: text1,\n itemIconColorCollapsed: text1,\n itemTextColorActive: activeFg,\n itemIconColorActive: activeFg,\n itemTextColorActiveHover: activeFg,\n itemIconColorActiveHover: activeFg,\n itemTextColorChildActive: text1,\n itemIconColorChildActive: text1,\n itemTextColorChildActiveHover: text1,\n itemIconColorChildActiveHover: text1,\n arrowColor: text3,\n arrowColorHover: text2,\n arrowColorActive: activeFg,\n arrowColorActiveHover: activeFg,\n arrowColorChildActive: text2,\n arrowColorChildActiveHover: text1,\n groupTextColor: text3,\n },\n Tabs: {\n colorSegment: segTrack,\n tabColorSegment: segThumb,\n tabBorderRadius: '8px',\n tabTextColorSegment: text2,\n tabTextColorActiveSegment: text1,\n tabTextColorHoverSegment: text1,\n tabFontWeightActive: '500',\n tabColor: 'transparent',\n tabBorderColor: 'transparent',\n tabTextColorCard: text3,\n tabTextColorActiveCard: activeFg,\n tabTextColorHoverCard: text1,\n tabTextColorActiveLine: text1,\n tabTextColorHoverLine: text1,\n barColor: acc,\n },\n Radio: {\n buttonBorderRadius: '8px',\n buttonColor: segTrack,\n buttonColorActive: segThumb,\n buttonBorderColor: 'transparent',\n buttonBorderColorActive: 'transparent',\n buttonBorderColorHover: 'transparent',\n buttonTextColor: text2,\n buttonTextColorActive: text1,\n buttonTextColorHover: text1,\n buttonBoxShadow: 'none',\n buttonBoxShadowHover: 'none',\n buttonBoxShadowFocus: ring,\n dotColorActive: acc,\n boxShadowActive: `inset 0 0 0 1px ${acc}`,\n boxShadowFocus: ring,\n },\n Checkbox: checkbox,\n Tree: {\n nodeBorderRadius: '8px',\n nodeColorHover: hoverBg,\n nodeColorActive: glassStrong,\n nodeHeight: '30px',\n peers: { Checkbox: checkbox },\n },\n Switch: {\n railColor: v('--switch-off'),\n railColorActive: acc,\n boxShadowFocus: ring,\n railHeightMedium: '24px',\n railWidthMedium: '42px',\n buttonHeightMedium: '20px',\n buttonWidthMedium: '20px',\n buttonWidthPressedMedium: '26px',\n },\n Tag: {\n heightTiny: '20px',\n heightSmall: '22px',\n heightMedium: '24px',\n fontSizeTiny: '13px',\n fontSizeSmall: '14px',\n fontSizeMedium: '15px',\n borderRadius: v('--radius-sm'),\n color: fill,\n textColor: text2,\n fontWeightStrong: '500',\n colorPrimary: glassStrong,\n textColorPrimary: text1,\n borderPrimary: `1px solid ${hairlineStrong}`,\n },\n List: { color: 'transparent', colorHover: hoverBg, borderColor: separator },\n Dialog: {\n borderRadius: v('--radius-xl'),\n color: elevated,\n padding: '24px 26px 22px',\n titleFontSize: '17px',\n titleFontWeight: '600',\n },\n Modal: { color: elevated, boxShadow: shadow3 },\n Drawer: {\n color: elevated,\n headerPadding: '18px 24px',\n bodyPadding: '20px 24px',\n footerPadding: '14px 24px',\n titleFontSize: '17px',\n titleFontWeight: '600',\n headerBorderBottom: `1px solid ${separator}`,\n footerBorderTop: `1px solid ${separator}`,\n },\n Popover: { color: elevated, borderRadius: v('--radius-lg'), boxShadow: shadow2 },\n Dropdown: {\n color: elevated,\n borderRadius: '12px',\n padding: '5px',\n optionHeightMedium: '30px',\n optionColorHover: hoverBg,\n dividerColor: separator,\n },\n // 提示气泡和下拉 / 弹层同一套浮层表面,随亮暗主题走(亮色近白底深字,暗色深蓝底亮字),不做亮暗都黑的特例。\n // 底色、字色、阴影成套给:Tooltip 底下是 Popover,Naive 合并时全局 `Popover` 覆盖(上面的 elevated 与大阴影)\n // 压过 Tooltip 自带的值,所以同一套要在 peers.Popover 里再写一遍(它在合并链最后,只对 Tooltip 生效)。\n // 阴影用描边 + 卡片级的轻阴影:气泡很小,弹层那种大范围投影会显得过重。\n Tooltip: {\n color: tooltipBg,\n textColor: text1,\n borderRadius: '8px',\n padding: '5px 9px',\n boxShadow: `0 0 0 1px ${hairlineStrong}, ${shadow1}`,\n peers: {\n Popover: {\n color: tooltipBg,\n textColor: text1,\n borderRadius: '8px',\n padding: '5px 9px',\n boxShadow: `0 0 0 1px ${hairlineStrong}, ${shadow1}`,\n },\n },\n },\n Message: { borderRadius: '12px', color: elevated, padding: '10px 16px', boxShadow: shadow2 },\n Notification: { borderRadius: '16px', color: elevated, boxShadow: shadow2 },\n Alert: {\n borderRadius: '10px',\n colorInfo: fill,\n borderInfo: `1px solid ${hairline}`,\n iconColorInfo: text2,\n titleTextColorInfo: text1,\n contentTextColorInfo: text2,\n },\n Pagination: {\n itemBorderRadius: '8px',\n itemColorActive: glassStrong,\n itemTextColorActive: text1,\n itemBorderActive: `1px solid ${hairlineStrong}`,\n itemColorActiveHover: glassStrong,\n },\n Statistic: {\n valueFontSize: '26px',\n valueFontWeight: '500',\n labelFontSize: '13px',\n labelTextColor: text2,\n },\n Descriptions: {\n thColor: fill,\n borderColor: separator,\n thTextColor: text3,\n tdColor: 'transparent',\n },\n Progress: { railColor: fill, fillColor: acc },\n Breadcrumb: { itemTextColor: text3, itemTextColorActive: text1, separatorColor: text4 },\n Slider: {\n fillColor: acc,\n fillColorHover: acc,\n railColor: fillStrong,\n railColorHover: fillStrong,\n dotBorderActive: `2px solid ${acc}`,\n },\n Steps: {\n indicatorColorProcess: acc,\n indicatorTextColorProcess: onAcc,\n indicatorBorderColorProcess: acc,\n indicatorColorFinish: 'transparent',\n indicatorBorderColorFinish: border,\n indicatorTextColorFinish: text2,\n splitorColorFinish: text3,\n splitorColorProcess: separator,\n splitorColorWait: separator,\n },\n Empty: { textColor: text3, iconColor: text4 },\n Divider: { color: separator },\n Timeline: { circleBorder: `2px solid ${border}`, titleFontWeight: '500', lineColor: separator },\n Badge: { color: v('--badge-bg') },\n Scrollbar: { color: fillStrong, colorHover: border },\n Code: { textColor: text1 },\n }\n}\n"],"names":["v","name","semantic","base","hover","mix","buildThemeOverrides","opts","dark","a","deriveAccentTokens","signal","acc","onAcc","pressed","activeFg","linkFg","ring","ok","warn","err","info","text1","text2","text3","text4","border","separator","hairline","hairlineStrong","tooltipBg","glassStrong","fill","fillStrong","hoverBg","pressedBg","input","inputDisabled","cardSolid","elevated","segTrack","segThumb","shadow1","shadow2","shadow3","thBg","thBgHover","tdBgHover","radius","selection","checkbox","rgba"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smart-admin-web",
3
- "version": "10.23.1",
3
+ "version": "10.24.0",
4
4
  "description": "SmartAdmin 前端内核:布局、路由、鉴权、内置系统页与共享组件,配合 SmartAdmin NuGet 包使用",
5
5
  "keywords": [
6
6
  "smartadmin",
@@ -59,7 +59,7 @@
59
59
  "naive-ui": "^2.45.3",
60
60
  "pinia": "^4.0.3",
61
61
  "smart-naive-icon": "^2.0.0",
62
- "smart-naive-table": "^3.2.2",
62
+ "smart-naive-table": "^3.2.4",
63
63
  "vue": "^3.5.42",
64
64
  "vue-i18n": "^11.4.10",
65
65
  "vue-router": "^4.5.0"
@@ -88,7 +88,7 @@
88
88
  "openapi-typescript": "^7.6.1",
89
89
  "pinia": "^4.0.3",
90
90
  "smart-naive-icon": "^2.0.0",
91
- "smart-naive-table": "^3.2.2",
91
+ "smart-naive-table": "^3.2.4",
92
92
  "typescript": "^5.7.3",
93
93
  "vite": "^6.0.11",
94
94
  "vite-plugin-dts": "^5.1.0",