@done-coding/admin-core 0.29.0 → 0.29.1-alpha.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.
Files changed (86) hide show
  1. package/es/bridge/layout.mjs +31 -2
  2. package/es/components/app-layout/AppAside.vue.mjs +1 -1
  3. package/es/components/app-layout/AppCollapseToggle.vue.mjs +1 -1
  4. package/es/components/app-layout/AppFooter.vue.mjs +1 -1
  5. package/es/components/app-layout/AppHeader.vue.mjs +1 -1
  6. package/es/components/app-layout/AppHeader.vue2.mjs +1 -1
  7. package/es/components/app-layout/AppSidebar.vue.mjs +1 -1
  8. package/es/components/app-layout/AppSidebar.vue2.mjs +60 -34
  9. package/es/components/data-view/DataGridView.vue.mjs +1 -1
  10. package/es/components/data-view/DataGridView.vue2.mjs +30 -6
  11. package/es/components/data-view/DataListView.vue.mjs +1 -1
  12. package/es/components/data-view/DataListView.vue2.mjs +38 -14
  13. package/es/components/data-view/DataListViewItem.vue.mjs +1 -1
  14. package/es/components/data-view/DataListViewItem.vue2.mjs +23 -4
  15. package/es/components/data-view/InfiniteListView.vue.mjs +1 -1
  16. package/es/components/data-view/InfiniteListView.vue2.mjs +9 -3
  17. package/es/components/data-view/use-grid-layout.mjs +46 -0
  18. package/es/components/data-view/use-masonry.mjs +65 -0
  19. package/es/components/display/BadgeMark.vue.mjs +1 -1
  20. package/es/components/display/BadgeMark.vue2.mjs +11 -3
  21. package/es/components/display/HeightProvider.vue.mjs +17 -3
  22. package/es/components/display/use-badge.mjs +22 -13
  23. package/es/components/form/use-upload-state.mjs +33 -11
  24. package/es/components/page-layout/AppPageDetail.vue.mjs +1 -1
  25. package/es/components/page-layout/AppPageDetail.vue2.mjs +12 -2
  26. package/es/components/page-layout/AppPageListDetailLayout.vue.mjs +11 -4
  27. package/es/components/page-layout/AppPageListDetailSheet.vue.mjs +8 -1
  28. package/es/components/page-layout/AppPageListDetailSplit.vue.mjs +1 -1
  29. package/es/components/page-layout/AppPageListDetailSplit.vue2.mjs +8 -1
  30. package/es/components/table/TableMain.vue.mjs +1 -1
  31. package/es/components/table/TableMain.vue2.mjs +8 -5
  32. package/es/components/view-layout/ViewLayout.vue.mjs +1 -1
  33. package/es/components/view-layout/ViewLayout.vue2.mjs +68 -20
  34. package/es/hooks/use-surface.mjs +4 -1
  35. package/es/hooks/use-theme-apply.mjs +78 -0
  36. package/es/index.mjs +118 -120
  37. package/es/store/app.mjs +25 -0
  38. package/es/style.css +120 -95
  39. package/package.json +2 -2
  40. package/src/bridge/docs/README.md +31 -0
  41. package/src/components/app-layout/docs/README-AppAside.md +11 -0
  42. package/src/components/app-layout/docs/README-AppFooter.md +11 -1
  43. package/src/components/app-layout/docs/README-AppHeader.md +16 -0
  44. package/src/components/app-layout/docs/README-AppSidebar.md +18 -0
  45. package/src/components/data-view/README.md +2 -1
  46. package/src/components/data-view/docs/README-DataGridView.md +21 -1
  47. package/src/components/data-view/docs/README-DataListView.md +65 -3
  48. package/src/components/data-view/docs/README-InfiniteListView.md +17 -0
  49. package/src/components/display/README.md +1 -1
  50. package/src/components/display/docs/README-BadgeMark.md +52 -10
  51. package/src/components/display/docs/README-HeightProvider.md +14 -8
  52. package/src/components/form/docs/README-FormUpload.md +79 -0
  53. package/src/components/form/docs/README-FormUploadImage.md +19 -0
  54. package/src/components/form/docs/README-FormUploadVideo.md +19 -0
  55. package/src/components/page-layout/README.md +15 -0
  56. package/src/components/page-layout/docs/README-AppPageDetail.md +3 -0
  57. package/src/components/page-layout/docs/README-AppPageListDetailLayout.md +33 -0
  58. package/src/components/table/docs/README-TableMain.md +17 -0
  59. package/src/components/view-layout/README.md +2 -2
  60. package/src/components/view-layout/docs/README-ViewLayout.md +97 -6
  61. package/types/bridge/badge.d.ts +3 -1
  62. package/types/bridge/layout.d.ts +42 -5
  63. package/types/components/app-layout/AppSidebar.vue.d.ts +286 -2
  64. package/types/components/app-layout/types.d.ts +1 -1
  65. package/types/components/data-view/DataListViewItem.vue.d.ts +12 -7
  66. package/types/components/data-view/types.d.ts +76 -0
  67. package/types/components/data-view/use-grid-layout.d.ts +42 -0
  68. package/types/components/data-view/use-masonry.d.ts +44 -0
  69. package/types/components/display/BadgeMark.vue.d.ts +5 -5
  70. package/types/components/display/HeightProvider.vue.d.ts +1 -0
  71. package/types/components/display/use-badge.d.ts +6 -0
  72. package/types/components/page-layout/AppPageDetail.vue.d.ts +18 -0
  73. package/types/components/page-layout/AppPageListDetailLayout.vue.d.ts +20 -0
  74. package/types/components/page-layout/AppPageListDetailSheet.vue.d.ts +4 -0
  75. package/types/components/page-layout/AppPageListDetailSplit.vue.d.ts +4 -0
  76. package/types/components/table/types.d.ts +8 -0
  77. package/types/components/view-layout/ViewLayout.vue.d.ts +30 -0
  78. package/types/components/view-layout/types.d.ts +12 -0
  79. package/types/hooks/use-surface.d.ts +11 -0
  80. package/types/index.d.ts +0 -1
  81. package/types/injectInfo.json.d.ts +1 -1
  82. package/es/components/icon/IconHammer.vue.mjs +0 -26
  83. package/es/components/icon/IconHammer.vue2.mjs +0 -4
  84. package/src/components/icon/README.md +0 -38
  85. package/types/components/icon/IconHammer.vue.d.ts +0 -2
  86. package/types/components/icon/index.d.ts +0 -7
@@ -219,6 +219,84 @@ const EP_STRUCTURAL_CSS = [
219
219
  ":root:not(.dark) .el-date-editor:not(.is-disabled) .el-range-input::placeholder,",
220
220
  ":root:not(.dark) .el-select__placeholder.is-transparent {",
221
221
  " color: color-mix(in srgb, var(--el-text-color-regular) 60%, var(--el-text-color-secondary));",
222
+ "}",
223
+ // 徽标**镂空**(gyycky,甲方 2026-09-17:「badge 使用镂空,而不是当前的纯色背景 + 白字」)。
224
+ // 🔴 落点 [MUST] 在此、[MUST NOT] 在 BadgeMark.vue 写 scoped —— 角标由 ElBadge 渲染在
225
+ // 它自己的 DOM 上(`.el-badge__content`),scoped 选择器打不中。
226
+ //
227
+ // 三件事:底从语义色实心 → **面色**([MUST NOT] 用纯透明:角标叠在宿主内容上,
228
+ // 全透会透出下面的字)· 边框 **1px 语义色** · 文字 / 图标 → **语义色**(图标走
229
+ // currentColor,随之变线条)。
230
+ //
231
+ // 🔴 **[MUST] 逐档写,[MUST NOT] 想着「引 --el-badge-bg-color 一条规则covers全档」**:
232
+ // 实测那个变量**不按档赋值** —— EP 只在基类里用它(恒 danger 红),per-type 色是
233
+ // `.el-badge__content--<type>{background-color: var(--el-color-<type>)}` 五条独立规则给的。
234
+ // 曾按「一条覆盖全档」写过,CDP 实测八档全渲染成 danger 红当场证伪。
235
+ // 五档即 EP 语义色全集:无 type 修饰符的基类 = danger(count 默认档),custom 的 `type`
236
+ // 也只收这五档 ⇒ 五条 + 基类一条 = 全覆盖,不存在漏档。
237
+ ".el-badge__content {",
238
+ " background-color: var(--dc-core-surface, var(--el-bg-color));",
239
+ " color: var(--el-color-danger);",
240
+ " border: 1px solid var(--el-color-danger);",
241
+ "}",
242
+ ".el-badge__content--primary {",
243
+ " background-color: var(--dc-core-surface, var(--el-bg-color));",
244
+ " color: var(--el-color-primary);",
245
+ " border-color: var(--el-color-primary);",
246
+ "}",
247
+ ".el-badge__content--success {",
248
+ " background-color: var(--dc-core-surface, var(--el-bg-color));",
249
+ " color: var(--el-color-success);",
250
+ " border-color: var(--el-color-success);",
251
+ "}",
252
+ ".el-badge__content--warning {",
253
+ " background-color: var(--dc-core-surface, var(--el-bg-color));",
254
+ " color: var(--el-color-warning);",
255
+ " border-color: var(--el-color-warning);",
256
+ "}",
257
+ ".el-badge__content--danger {",
258
+ " background-color: var(--dc-core-surface, var(--el-bg-color));",
259
+ " color: var(--el-color-danger);",
260
+ " border-color: var(--el-color-danger);",
261
+ "}",
262
+ ".el-badge__content--info {",
263
+ " background-color: var(--dc-core-surface, var(--el-bg-color));",
264
+ " color: var(--el-color-info);",
265
+ " border-color: var(--el-color-info);",
266
+ "}",
267
+ // 亮色下把**字色**压深一档(描边仍取 base,镂空的轮廓才读得出语义色相)。
268
+ // 🔴 依据是 CDP 实测的 WCAG 对比度,[MUST NOT] 只看顺眼:
269
+ //
270
+ // | 档 | 亮色 base | 亮色 dark-2 | 暗色 base |
271
+ // | --- | --- | --- | --- |
272
+ // | primary | 2.78 | **4.20** | 6.63 |
273
+ // | success | 2.24 | **3.45** | 8.21 |
274
+ // | warning | 2.19 | **3.35** | 8.42 |
275
+ // | danger | 2.90 | **4.36** | 6.35 |
276
+ // | info | 3.08 | **4.56** | 5.98 |
277
+ //
278
+ // ⇒ **暗色 base 已 5.98–8.42,[MUST NOT] 跟着压深**(深底上再压只会更糊),故只打亮色。
279
+ // ⚠️ 亮色压深后 3.35–4.56 **仍未普遍达到小字 4.5:1** —— 但那是 EP 语义色板在白底上的
280
+ // 固有天花板(要达标得换色相、即放弃 EP 语义色);且**改造前的实心底白字是同一组数字**
281
+ // (对比度对称:白字压在 success 上同样是 2.24)⇒ 镂空 + 压深是**净改善约 1.2 倍**,
282
+ // 不是新引入的缺陷。徽标是补充性指示器,图标档的完整语义另由悬浮气泡承载。
283
+ ":root:not(.dark) .el-badge__content {",
284
+ " color: var(--el-color-danger-dark-2);",
285
+ "}",
286
+ ":root:not(.dark) .el-badge__content--primary {",
287
+ " color: var(--el-color-primary-dark-2);",
288
+ "}",
289
+ ":root:not(.dark) .el-badge__content--success {",
290
+ " color: var(--el-color-success-dark-2);",
291
+ "}",
292
+ ":root:not(.dark) .el-badge__content--warning {",
293
+ " color: var(--el-color-warning-dark-2);",
294
+ "}",
295
+ ":root:not(.dark) .el-badge__content--danger {",
296
+ " color: var(--el-color-danger-dark-2);",
297
+ "}",
298
+ ":root:not(.dark) .el-badge__content--info {",
299
+ " color: var(--el-color-info-dark-2);",
222
300
  "}"
223
301
  ].join("\n");
224
302
  const EP_BRIDGE_CSS = [
package/es/index.mjs CHANGED
@@ -14,81 +14,80 @@ import { default as default15 } from "./components/form/FormSubmitBtn.vue.mjs";
14
14
  import { default as default16 } from "./components/form/FormTree.vue.mjs";
15
15
  import { default as default17 } from "./components/form/FormVerifyCode.vue.mjs";
16
16
  import { default as default18 } from "./components/display/HeightProvider.vue.mjs";
17
- import { default as default19 } from "./components/icon/IconHammer.vue.mjs";
18
- import { default as default20 } from "./components/modal/ImagePreviewTrigger.vue.mjs";
19
- import { default as default21 } from "./components/menu/MenuItemSub.vue.mjs";
20
- import { default as default22 } from "./components/menu/MenuTree.vue.mjs";
21
- import { default as default23 } from "./components/modal/ModalImagePreview.vue.mjs";
22
- import { default as default24 } from "./components/modal/ModalPorter.vue.mjs";
23
- import { default as default25 } from "./components/modal/ModalShelf.vue.mjs";
24
- import { default as default26 } from "./components/panel/PanelItemNestPanel.vue.mjs";
25
- import { default as default27 } from "./components/misc/SelectModule.vue.mjs";
26
- import { default as default28 } from "./components/display/ShadowClone.vue.mjs";
27
- import { default as default29 } from "./components/slot-layout/SlotLayoutTemplate.vue.mjs";
28
- import { default as default30 } from "./components/table/TableEmpty.vue.mjs";
29
- import { default as default31 } from "./components/display/TabsMain.vue.mjs";
30
- import { default as default32 } from "./components/misc/TriggerAutoImport.vue.mjs";
31
- import { default as default33 } from "./components/display/WatchSize.vue.mjs";
17
+ import { default as default19 } from "./components/modal/ImagePreviewTrigger.vue.mjs";
18
+ import { default as default20 } from "./components/menu/MenuItemSub.vue.mjs";
19
+ import { default as default21 } from "./components/menu/MenuTree.vue.mjs";
20
+ import { default as default22 } from "./components/modal/ModalImagePreview.vue.mjs";
21
+ import { default as default23 } from "./components/modal/ModalPorter.vue.mjs";
22
+ import { default as default24 } from "./components/modal/ModalShelf.vue.mjs";
23
+ import { default as default25 } from "./components/panel/PanelItemNestPanel.vue.mjs";
24
+ import { default as default26 } from "./components/misc/SelectModule.vue.mjs";
25
+ import { default as default27 } from "./components/display/ShadowClone.vue.mjs";
26
+ import { default as default28 } from "./components/slot-layout/SlotLayoutTemplate.vue.mjs";
27
+ import { default as default29 } from "./components/table/TableEmpty.vue.mjs";
28
+ import { default as default30 } from "./components/display/TabsMain.vue.mjs";
29
+ import { default as default31 } from "./components/misc/TriggerAutoImport.vue.mjs";
30
+ import { default as default32 } from "./components/display/WatchSize.vue.mjs";
32
31
  import { APP_API_LIST_MODEL_KEY_CONFIG } from "./config/list-model.mjs";
33
32
  import { APP_GLOBAL_IMAGE_PREVIEW_KEY, APP_GLOBAL_VIDEO_PREVIEW_KEY, GLOBAL_MODAL_REMOTE_KEY } from "./components/modal/modal-global-keys.mjs";
34
33
  import { APP_LAYOUT_APP_STORE_KEY, APP_LAYOUT_BRIDGE_KEY, APP_LAYOUT_USER_STORE_KEY, APP_PAGE_CONTENT_INSET, APP_PAGE_LIST_DETAIL_CONTEXT, BODY_CONTENT_VIEWPORT_HEIGHT, BODY_CONTENT_VIEWPORT_INSET, BODY_CONTENT_VIEWPORT_RECT, CORE_BRIDGE_KEY, FORM_NEST_REGISTRY_KEY, FORM_VALIDATE_ERROR_KEYS, NEST_LAYOUT_SCALE_KEY, SCOPE_VIEWPORT_MAX_HEIGHT, TABS_MAIN_VISUAL_LEVEL, getModalShelfInjectionKey } from "./inject/key.mjs";
35
34
  import { APP_PAGE_LIST_LAYOUT_RECOMMENDED } from "./components/app-layout/app-page-recommended.mjs";
36
35
  import { APP_PAGE_SLOT_Z_INDEX, computeAppPageContentInset, computeAppPageReducedViewportHeight, computeAppPageReducedViewportWidth, computeAppPageSlotShimStyles, computeAppPageSlotStyles } from "./components/app-layout/app-page-geometry.mjs";
37
- import { default as default34 } from "./components/display/ActionConfirm.vue.mjs";
38
- import { default as default35 } from "./components/app-layout/AppAside.vue.mjs";
39
- import { default as default36 } from "./components/app-layout/AppBody.vue.mjs";
40
- import { default as default37 } from "./components/app-layout/AppBreadcrumb.vue.mjs";
41
- import { default as default38 } from "./components/app-layout/AppFooter.vue.mjs";
42
- import { default as default39 } from "./components/app-layout/AppHeader.vue.mjs";
43
- import { default as default40 } from "./components/app-layout/AppLayout.vue.mjs";
44
- import { default as default41 } from "./components/app-layout/AppPage.vue.mjs";
45
- import { default as default42 } from "./components/page-layout/AppPageDetail.vue.mjs";
46
- import { default as default43 } from "./components/app-layout/AppSidebar.vue.mjs";
47
- import { default as default44 } from "./components/app-layout/AppTheme.vue.mjs";
48
- import { default as default45 } from "./components/misc/AutoRefresh.vue.mjs";
49
- import { default as default46 } from "./components/misc/AutoRefreshGroup.vue.mjs";
36
+ import { default as default33 } from "./components/display/ActionConfirm.vue.mjs";
37
+ import { default as default34 } from "./components/app-layout/AppAside.vue.mjs";
38
+ import { default as default35 } from "./components/app-layout/AppBody.vue.mjs";
39
+ import { default as default36 } from "./components/app-layout/AppBreadcrumb.vue.mjs";
40
+ import { default as default37 } from "./components/app-layout/AppFooter.vue.mjs";
41
+ import { default as default38 } from "./components/app-layout/AppHeader.vue.mjs";
42
+ import { default as default39 } from "./components/app-layout/AppLayout.vue.mjs";
43
+ import { default as default40 } from "./components/app-layout/AppPage.vue.mjs";
44
+ import { default as default41 } from "./components/page-layout/AppPageDetail.vue.mjs";
45
+ import { default as default42 } from "./components/app-layout/AppSidebar.vue.mjs";
46
+ import { default as default43 } from "./components/app-layout/AppTheme.vue.mjs";
47
+ import { default as default44 } from "./components/misc/AutoRefresh.vue.mjs";
48
+ import { default as default45 } from "./components/misc/AutoRefreshGroup.vue.mjs";
50
49
  import { BADGE_HOST_ATTR, BADGE_KEY_ATTR } from "./config/badge-attr.mjs";
51
50
  import { BADGE_MASK_KINDS } from "./bridge/badge.mjs";
52
- import { default as default47 } from "./components/display/BadgeMark.vue.mjs";
51
+ import { default as default46 } from "./components/display/BadgeMark.vue.mjs";
53
52
  import { COLLAPSED_CLASS, swiftFormItemDivider, swiftFormItemGroup } from "./components/form/group.mjs";
54
53
  import { CORE_VIEWPORT_DECOR_ZINDEX_ABOVE, CORE_VIEWPORT_DECOR_ZINDEX_BELOW } from "./components/app-layout/viewport.mjs";
55
- import { default as default48, default as default49 } from "./components/modal/ModalConfirm.vue.mjs";
54
+ import { default as default47, default as default48 } from "./components/modal/ModalConfirm.vue.mjs";
56
55
  import { DC_SLOT_ATTR, SlotRegion, parseSlotRegion } from "./config/slot-region.mjs";
57
- import { default as default50 } from "./components/data-view/DataGridView.vue.mjs";
58
- import { default as default51 } from "./components/display/DragFloat.vue.mjs";
56
+ import { default as default49 } from "./components/data-view/DataGridView.vue.mjs";
57
+ import { default as default50 } from "./components/display/DragFloat.vue.mjs";
59
58
  import { EXPORT_MAX_LIMIT, OPERATE_COLUMN_PROP, exportCSV, pickExportColumns } from "./utils/export.mjs";
60
59
  import { FORM_CONFIG_SELECT_ALL_VALUE, getConfirmPasswordRule, passwordRule, setFormComponentType } from "./helpers/form.mjs";
61
60
  import { FORM_ITEM_CHANGE_LOADING, NEST_LAYOUT_TIERS, ceilToTier, checkFormItemIsIgnore, generateFormData, getBlurSubmit, getChangeSubmit, getDatePickerShortcuts, getEnterSubmit, getPlaceholder, getVModelSugar, parseFormData, patchFormData, resolveFormLayout, resolveLayoutSpan, setInputComponent, setSelectComponent, stringifyFormData, swiftFormItemConfig } from "./components/form/utils.mjs";
62
- import { default as default52 } from "./components/form/FormActiveFilter.vue.mjs";
63
- import { default as default53 } from "./components/form/FormItemNestForm.vue.mjs";
64
- import { default as default54 } from "./components/form/FormItemNestFormList.vue.mjs";
65
- import { default as default55 } from "./components/form/FormMain.vue.mjs";
66
- import { default as default56 } from "./components/form/FormSearch.vue.mjs";
67
- import { default as default57 } from "./components/form/FormShadowCloneDispatch.vue.mjs";
68
- import { default as default58 } from "./components/form/FormSortSwitch.vue.mjs";
69
- import { default as default59 } from "./components/form/FormSortSwitchGroup.vue.mjs";
70
- import { default as default60 } from "./components/form/FormSubmitPanel.vue.mjs";
71
- import { default as default61 } from "./components/form/FormUpload.vue.mjs";
72
- import { default as default62 } from "./components/form/FormUploadAudio.vue.mjs";
73
- import { default as default63 } from "./components/form/FormUploadImage.vue.mjs";
74
- import { default as default64 } from "./components/form/FormUploadVideo.vue.mjs";
75
- import { default as default65 } from "./components/form/FormVerifyImage.vue.mjs";
61
+ import { default as default51 } from "./components/form/FormActiveFilter.vue.mjs";
62
+ import { default as default52 } from "./components/form/FormItemNestForm.vue.mjs";
63
+ import { default as default53 } from "./components/form/FormItemNestFormList.vue.mjs";
64
+ import { default as default54 } from "./components/form/FormMain.vue.mjs";
65
+ import { default as default55 } from "./components/form/FormSearch.vue.mjs";
66
+ import { default as default56 } from "./components/form/FormShadowCloneDispatch.vue.mjs";
67
+ import { default as default57 } from "./components/form/FormSortSwitch.vue.mjs";
68
+ import { default as default58 } from "./components/form/FormSortSwitchGroup.vue.mjs";
69
+ import { default as default59 } from "./components/form/FormSubmitPanel.vue.mjs";
70
+ import { default as default60 } from "./components/form/FormUpload.vue.mjs";
71
+ import { default as default61 } from "./components/form/FormUploadAudio.vue.mjs";
72
+ import { default as default62 } from "./components/form/FormUploadImage.vue.mjs";
73
+ import { default as default63 } from "./components/form/FormUploadVideo.vue.mjs";
74
+ import { default as default64 } from "./components/form/FormVerifyImage.vue.mjs";
76
75
  import { GAP_SCALE_RUNG, gapScaleBase, gapScaleValue } from "./utils/gap-scale.mjs";
77
- import { default as default66 } from "./components/data-view/InfiniteListView.vue.mjs";
78
- import { default as default67, default as default68 } from "./components/list-layout/ListLayout.vue.mjs";
79
- import { default as default69 } from "./components/modal/ModalVideoPreview.vue.mjs";
80
- import { default as default70 } from "./components/panel/PanelEditSwitch.vue.mjs";
81
- import { default as default71 } from "./components/panel/PanelItem.vue.mjs";
82
- import { default as default72 } from "./components/panel/PanelItemNestForm.vue.mjs";
83
- import { default as default73 } from "./components/panel/PanelMain.vue.mjs";
76
+ import { default as default65 } from "./components/data-view/InfiniteListView.vue.mjs";
77
+ import { default as default66, default as default67 } from "./components/list-layout/ListLayout.vue.mjs";
78
+ import { default as default68 } from "./components/modal/ModalVideoPreview.vue.mjs";
79
+ import { default as default69 } from "./components/panel/PanelEditSwitch.vue.mjs";
80
+ import { default as default70 } from "./components/panel/PanelItem.vue.mjs";
81
+ import { default as default71 } from "./components/panel/PanelItemNestForm.vue.mjs";
82
+ import { default as default72 } from "./components/panel/PanelMain.vue.mjs";
84
83
  import { ROUTE_MODULE_LEVEL, TabsMainReplaceQueryKey } from "./config/route.mjs";
85
- import { default as default74 } from "./components/slot-layout/SlotLayoutFlowAside.vue.mjs";
84
+ import { default as default73 } from "./components/slot-layout/SlotLayoutFlowAside.vue.mjs";
86
85
  import { TABLE_COLUMN_KEY_OPERATE, TABLE_COLUMN_KEY_SELECTION } from "./components/table/constants.mjs";
87
- import { default as default75 } from "./components/table/TableMain.vue.mjs";
88
- import { default as default76 } from "./components/table/TableSkeleton.vue.mjs";
89
- import { default as default77 } from "./components/table/TableToolbar.vue.mjs";
90
- import { default as default78 } from "./components/modal/VideoPreviewTrigger.vue.mjs";
91
- import { default as default79 } from "./components/view-layout/ViewLayout.vue.mjs";
86
+ import { default as default74 } from "./components/table/TableMain.vue.mjs";
87
+ import { default as default75 } from "./components/table/TableSkeleton.vue.mjs";
88
+ import { default as default76 } from "./components/table/TableToolbar.vue.mjs";
89
+ import { default as default77 } from "./components/modal/VideoPreviewTrigger.vue.mjs";
90
+ import { default as default78 } from "./components/view-layout/ViewLayout.vue.mjs";
92
91
  import { buildRhythmCss, useCoreThemeApply } from "./hooks/use-theme-apply.mjs";
93
92
  import { checkLogin } from "./router/guard/login.mjs";
94
93
  import { checkPermission } from "./router/guard/permission.mjs";
@@ -137,110 +136,109 @@ export {
137
136
  APP_PAGE_SLOT_Z_INDEX,
138
137
  default2 as ActionBtn,
139
138
  default3 as ActionBtnGroup,
140
- default34 as ActionConfirm,
141
- default35 as AppAside,
142
- default36 as AppBody,
143
- default37 as AppBreadcrumb,
144
- default38 as AppFooter,
145
- default39 as AppHeader,
146
- default40 as AppLayout,
147
- default41 as AppPage,
148
- default42 as AppPageDetail,
139
+ default33 as ActionConfirm,
140
+ default34 as AppAside,
141
+ default35 as AppBody,
142
+ default36 as AppBreadcrumb,
143
+ default37 as AppFooter,
144
+ default38 as AppHeader,
145
+ default39 as AppLayout,
146
+ default40 as AppPage,
147
+ default41 as AppPageDetail,
149
148
  default4 as AppPageListDetailLayout,
150
- default43 as AppSidebar,
151
- default44 as AppTheme,
152
- default45 as AutoRefresh,
153
- default46 as AutoRefreshGroup,
149
+ default42 as AppSidebar,
150
+ default43 as AppTheme,
151
+ default44 as AutoRefresh,
152
+ default45 as AutoRefreshGroup,
154
153
  BADGE_HOST_ATTR,
155
154
  BADGE_KEY_ATTR,
156
155
  BADGE_MASK_KINDS,
157
156
  BODY_CONTENT_VIEWPORT_HEIGHT,
158
157
  BODY_CONTENT_VIEWPORT_INSET,
159
158
  BODY_CONTENT_VIEWPORT_RECT,
160
- default47 as BadgeMark,
159
+ default46 as BadgeMark,
161
160
  default5 as BooleanTag,
162
161
  COLLAPSED_CLASS,
163
162
  CORE_BRIDGE_KEY,
164
163
  CORE_VIEWPORT_DECOR_ZINDEX_ABOVE,
165
164
  CORE_VIEWPORT_DECOR_ZINDEX_BELOW,
166
- default48 as ConfirmModal,
165
+ default47 as ConfirmModal,
167
166
  DC_SLOT_ATTR,
168
- default50 as DataGridView,
167
+ default49 as DataGridView,
169
168
  default6 as DetailModal,
170
- default51 as DragFloat,
169
+ default50 as DragFloat,
171
170
  EXPORT_MAX_LIMIT,
172
171
  FORM_CONFIG_SELECT_ALL_VALUE,
173
172
  FORM_ITEM_CHANGE_LOADING,
174
173
  FORM_NEST_REGISTRY_KEY,
175
174
  FORM_VALIDATE_ERROR_KEYS,
176
- default52 as FormActiveFilter,
175
+ default51 as FormActiveFilter,
177
176
  default8 as FormInput,
178
177
  default9 as FormInputShadowClone,
179
- default53 as FormItemNestForm,
180
- default54 as FormItemNestFormList,
181
- default55 as FormMain,
178
+ default52 as FormItemNestForm,
179
+ default53 as FormItemNestFormList,
180
+ default54 as FormMain,
182
181
  default10 as FormModal,
183
182
  default12 as FormRadioGroup,
184
- default56 as FormSearch,
183
+ default55 as FormSearch,
185
184
  default13 as FormSelect,
186
185
  default14 as FormSelectShadowClone,
187
- default57 as FormShadowCloneDispatch,
188
- default58 as FormSortSwitch,
189
- default59 as FormSortSwitchGroup,
186
+ default56 as FormShadowCloneDispatch,
187
+ default57 as FormSortSwitch,
188
+ default58 as FormSortSwitchGroup,
190
189
  default15 as FormSubmitBtn,
191
- default60 as FormSubmitPanel,
190
+ default59 as FormSubmitPanel,
192
191
  default16 as FormTree,
193
- default61 as FormUpload,
194
- default62 as FormUploadAudio,
195
- default63 as FormUploadImage,
196
- default64 as FormUploadVideo,
192
+ default60 as FormUpload,
193
+ default61 as FormUploadAudio,
194
+ default62 as FormUploadImage,
195
+ default63 as FormUploadVideo,
197
196
  default17 as FormVerifyCode,
198
- default65 as FormVerifyImage,
197
+ default64 as FormVerifyImage,
199
198
  GAP_SCALE_RUNG,
200
199
  GLOBAL_MODAL_REMOTE_KEY,
201
200
  default18 as HeightProvider,
202
- default19 as IconHammer,
203
- default20 as ImagePreviewTrigger,
204
- default66 as InfiniteListView,
205
- default67 as ListLayout,
206
- default68 as ListPage,
207
- default21 as MenuItemSub,
208
- default22 as MenuTree,
209
- default49 as ModalConfirm,
201
+ default19 as ImagePreviewTrigger,
202
+ default65 as InfiniteListView,
203
+ default66 as ListLayout,
204
+ default67 as ListPage,
205
+ default20 as MenuItemSub,
206
+ default21 as MenuTree,
207
+ default48 as ModalConfirm,
210
208
  default7 as ModalDetail,
211
209
  default11 as ModalForm,
212
- default23 as ModalImagePreview,
213
- default24 as ModalPorter,
214
- default25 as ModalShelf,
215
- default69 as ModalVideoPreview,
210
+ default22 as ModalImagePreview,
211
+ default23 as ModalPorter,
212
+ default24 as ModalShelf,
213
+ default68 as ModalVideoPreview,
216
214
  NEST_LAYOUT_SCALE_KEY,
217
215
  NEST_LAYOUT_TIERS,
218
216
  OPERATE_COLUMN_PROP,
219
- default70 as PanelEditSwitch,
220
- default71 as PanelItem,
221
- default72 as PanelItemNestForm,
222
- default26 as PanelItemNestPanel,
223
- default73 as PanelMain,
217
+ default69 as PanelEditSwitch,
218
+ default70 as PanelItem,
219
+ default71 as PanelItemNestForm,
220
+ default25 as PanelItemNestPanel,
221
+ default72 as PanelMain,
224
222
  ROUTE_MODULE_LEVEL,
225
223
  SCOPE_VIEWPORT_MAX_HEIGHT,
226
- default27 as SelectModule,
227
- default28 as ShadowClone,
228
- default74 as SlotLayoutFlowAside,
229
- default29 as SlotLayoutTemplate,
224
+ default26 as SelectModule,
225
+ default27 as ShadowClone,
226
+ default73 as SlotLayoutFlowAside,
227
+ default28 as SlotLayoutTemplate,
230
228
  SlotRegion,
231
229
  TABLE_COLUMN_KEY_OPERATE,
232
230
  TABLE_COLUMN_KEY_SELECTION,
233
231
  TABS_MAIN_VISUAL_LEVEL,
234
- default30 as TableEmpty,
235
- default75 as TableMain,
236
- default76 as TableSkeleton,
237
- default77 as TableToolbar,
238
- default31 as TabsMain,
232
+ default29 as TableEmpty,
233
+ default74 as TableMain,
234
+ default75 as TableSkeleton,
235
+ default76 as TableToolbar,
236
+ default30 as TabsMain,
239
237
  TabsMainReplaceQueryKey,
240
- default32 as TriggerAutoImport,
241
- default78 as VideoPreviewTrigger,
242
- default79 as ViewLayout,
243
- default33 as WatchSize,
238
+ default31 as TriggerAutoImport,
239
+ default77 as VideoPreviewTrigger,
240
+ default78 as ViewLayout,
241
+ default32 as WatchSize,
244
242
  buildRhythmCss,
245
243
  ceilToTier,
246
244
  checkFormItemIsIgnore,
package/es/store/app.mjs CHANGED
@@ -2,6 +2,7 @@ import { defineStore } from "pinia";
2
2
  import { useRoute } from "vue-router";
3
3
  import { computed, ref } from "vue";
4
4
  import { gapScaleValue } from "../utils/gap-scale.mjs";
5
+ const LAYOUT_CHROME_RADIUS = "var(--dc-core-radius, var(--el-border-radius-base))";
5
6
  function createAppStore(deps) {
6
7
  const { bridge } = deps;
7
8
  const storeSetup = () => {
@@ -98,8 +99,20 @@ function createAppStore(deps) {
98
99
  const headerStyle = computed(() => {
99
100
  const cfg = bridge.APP_LAYOUT_HEADER_CONFIG;
100
101
  return {
102
+ // 🔴 面貌默认值(圆角 + 横向内呼吸)[MUST] 写在 `...cfg.style` **之前**:
103
+ // 它们是**默认**不是**引擎托管** —— 消费方经 style 逃生舱传同名键要能整体压过
104
+ // (既有单测「style 逃生舱:装饰键生效」即钉这条)。
105
+ // 🔴 且 [MUST] 与 `background` **同源**(都在这份 inline style 里):一半 inline
106
+ // 一半 scoped CSS 会让消费方覆盖时只改得动一半(hehvwt)。
107
+ borderRadius: LAYOUT_CHROME_RADIUS,
108
+ // 横向内呼吸取间距阶梯**模块档**(×1,默认 8px),取代原先写死在
109
+ // `.app-header-shim` 的 `0 20px`;随 gap 基数 + 密度档缩放。
110
+ padding: `0 ${gpx.value}`,
101
111
  ...cfg.style,
102
112
  position: "fixed",
113
+ // 引擎托管:横向 padding 恒收在盒内。core 是发布包,[MUST NOT] 指望消费方
114
+ // 有 `* { box-sizing: border-box }` 的全局 reset。
115
+ boxSizing: "border-box",
103
116
  // 通栏悬浮:三外边各让外缝 gap(底边朝内容,由下方模块 top 让内缝)。
104
117
  top: `calc(${viewportPadding.value.top} + ${gpx.value})`,
105
118
  left: `calc(${viewportPadding.value.left} + ${gpx.value})`,
@@ -118,7 +131,11 @@ function createAppStore(deps) {
118
131
  const footerStyle = computed(() => {
119
132
  const cfg = bridge.APP_LAYOUT_FOOTER_CONFIG;
120
133
  return {
134
+ // 面貌默认值与 header 同口径同位置(对称积木,[MUST] 一起改)——见 headerStyle 注释。
135
+ borderRadius: LAYOUT_CHROME_RADIUS,
136
+ padding: `0 ${gpx.value}`,
121
137
  ...cfg.style,
138
+ boxSizing: "border-box",
122
139
  height: `${showFooter.value ? footerHeight.value : 0}px`,
123
140
  // footer 在 body 流内:marginTop 与内容 shim 隔内缝;底边悬浮由 body paddingBottom 承担。
124
141
  // 用 hasFooter:footer 收起到 0 高时不留死内缝 gap(对称 hasHeader)。
@@ -130,6 +147,11 @@ function createAppStore(deps) {
130
147
  const sidebarStyle = computed(() => {
131
148
  const cfg = bridge.APP_LAYOUT_SIDEBAR_CONFIG;
132
149
  return {
150
+ // 圆角与 background 同源(见 headerStyle 注释);默认值在展开前,逃生舱可整体覆盖。
151
+ // 🔴 **不给横向 padding**:侧栏里装的是菜单树,`.el-menu-item` 自带
152
+ // `padding: 0 var(--el-menu-base-level-padding)`(默认 20px),外层再让一份就是双份、
153
+ // 且折叠成图标栏时会把图标挤离中线。[MUST NOT] 为「四区补齐」想当然加上(hehvwt)。
154
+ borderRadius: LAYOUT_CHROME_RADIUS,
133
155
  ...cfg.style,
134
156
  position: "fixed",
135
157
  width: `${showSidebar.value ? sidebarWidth.value : 0}px`,
@@ -145,6 +167,9 @@ function createAppStore(deps) {
145
167
  const asideStyle = computed(() => {
146
168
  const cfg = bridge.APP_LAYOUT_ASIDE_CONFIG;
147
169
  return {
170
+ // 与 sidebar 同口径(对称积木):圆角随主题、无横向 padding
171
+ // (内容由消费方经默认插槽自填,呼吸归内容自己,core 代让会与之叠成双份)。
172
+ borderRadius: LAYOUT_CHROME_RADIUS,
148
173
  ...cfg.style,
149
174
  position: "fixed",
150
175
  // 折叠双表达:外层宽收 0(收回空间)+ AppAside shim 绕 Y 轴翻转(视觉)。