feat: 新增底部Dock测量面板与回调联动

This commit is contained in:
yuding
2026-03-30 10:53:39 +08:00
parent c11140f967
commit 2574a11284
42 changed files with 18388 additions and 11404 deletions

View File

@@ -0,0 +1,335 @@
.measure-dock-panel {
width: fit-content;
max-width: 100%;
padding: 0;
border-radius: 8px;
border: none;
background: color-mix(in srgb, var(--bim-bg-elevated, #e8ecf2) 92%, #ffffff 8%);
box-sizing: border-box;
color: var(--bim-text-secondary, #475569);
font-size: 13px;
line-height: 1.5;
}
.measure-dock-panel-main {
display: block;
}
.measure-dock-panel-settings {
display: none;
flex-direction: column;
gap: 6px;
min-height: 74px;
box-sizing: border-box;
}
.measure-dock-settings-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.measure-dock-settings-label {
color: var(--bim-text-secondary, #64748b);
font-size: 12px;
}
.measure-dock-settings-select {
width: 88px;
height: 24px;
border-radius: 6px;
border: 1px solid rgba(148, 163, 184, 0.36);
background: color-mix(in srgb, var(--bim-bg-inset, #edf1f6) 90%, #ffffff 10%);
color: var(--bim-text-primary, #0f172a);
font-size: 12px;
padding: 0 6px;
box-sizing: border-box;
}
.measure-dock-settings-actions {
display: flex;
justify-content: flex-end;
gap: 8px;
}
.measure-dock-settings-btn {
height: 24px;
min-width: 52px;
border-radius: 6px;
border: 1px solid rgba(148, 163, 184, 0.36);
background: color-mix(in srgb, var(--bim-bg-inset, #edf1f6) 90%, #ffffff 10%);
color: var(--bim-text-secondary, #64748b);
font-size: 12px;
line-height: 1;
cursor: pointer;
}
.measure-dock-settings-btn.is-save {
border-color: color-mix(in srgb, var(--bim-primary, #4f88ff) 46%, transparent 54%);
color: color-mix(in srgb, var(--bim-primary, #4f88ff) 78%, #6f9dff 22%);
}
.measure-dock-panel-top {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
}
.measure-dock-clearheight-options {
display: none;
flex-direction: column;
gap: 8px;
margin-bottom: 10px;
padding: 8px;
border-radius: 8px;
border: 1px solid rgba(148, 163, 184, 0.28);
background: color-mix(in srgb, var(--bim-bg-inset, #edf1f6) 90%, #ffffff 10%);
}
.measure-dock-clearheight-options.is-visible {
display: flex;
}
.measure-dock-clearheight-group {
display: flex;
align-items: center;
gap: 8px;
}
.measure-dock-clearheight-label {
min-width: 60px;
color: var(--bim-text-secondary, #64748b);
font-size: 12px;
}
.measure-dock-clearheight-buttons {
display: flex;
gap: 8px;
}
.measure-dock-clearheight-btn {
height: 28px;
padding: 0 10px;
border-radius: 6px;
border: 1px solid rgba(148, 163, 184, 0.36);
background: color-mix(in srgb, var(--bim-bg-elevated, #f8fafc) 88%, #ffffff 12%);
color: var(--bim-text-secondary, #64748b);
font-size: 12px;
line-height: 1;
cursor: pointer;
transition: all 0.15s ease;
}
.measure-dock-clearheight-btn:hover {
border-color: rgba(148, 163, 184, 0.56);
}
.measure-dock-clearheight-btn.is-active {
border-color: color-mix(in srgb, var(--bim-primary, #4f88ff) 70%, #9db9ff 30%);
background: color-mix(in srgb, var(--bim-primary-subtle, rgba(96, 140, 255, 0.18)) 72%, #ffffff 28%);
color: color-mix(in srgb, var(--bim-primary, #4f88ff) 78%, #6f9dff 22%);
}
.measure-dock-panel-mode-zone {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 10px;
}
.measure-dock-panel-mode-row {
display: grid;
grid-template-columns: repeat(5, 32px);
gap: 10px;
}
.measure-dock-panel-mode-row-secondary {
display: none;
}
.measure-dock-panel-mode-btn {
width: 32px;
height: 32px;
border-radius: 8px;
border: 1px solid rgba(148, 163, 184, 0.28);
background: color-mix(in srgb, var(--bim-bg-inset, #edf1f6) 92%, #ffffff 8%);
color: color-mix(in srgb, var(--bim-text-secondary, #64748b) 94%, #475569 6%);
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0;
box-sizing: border-box;
cursor: pointer;
transition: all 0.15s ease;
}
.measure-dock-panel-mode-icon {
width: 20px;
height: 20px;
display: inline-flex;
align-items: center;
justify-content: center;
}
.measure-dock-panel-mode-icon svg {
width: 100%;
height: 100%;
fill: currentColor;
}
.measure-dock-panel-mode-btn:hover {
border-color: rgba(148, 163, 184, 0.5);
background: color-mix(in srgb, var(--bim-component-bg-hover, #dce5f2) 64%, #ffffff 36%);
}
.measure-dock-panel-mode-btn.is-active {
border-color: color-mix(in srgb, var(--bim-primary, #4f88ff) 70%, #9db9ff 30%);
background: color-mix(in srgb, var(--bim-primary-subtle, rgba(96, 140, 255, 0.18)) 72%, #ffffff 28%);
color: color-mix(in srgb, var(--bim-primary, #4f88ff) 78%, #6f9dff 22%);
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--bim-primary, #4f88ff) 35%, transparent 65%);
}
.measure-dock-panel-actions {
flex: 0 0 auto;
display: flex;
flex-direction: row;
gap: 10px;
align-items: center;
}
.measure-dock-panel-action-btn {
width: 32px;
height: 32px;
border-radius: 6px;
border: 1px solid rgba(148, 163, 184, 0.22);
background: color-mix(in srgb, var(--bim-bg-inset, #edf1f6) 92%, #ffffff 8%);
color: var(--bim-text-secondary, #475569);
padding: 0;
box-sizing: border-box;
display: inline-flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.15s ease;
}
.measure-dock-panel-action-btn:hover {
border-color: rgba(148, 163, 184, 0.5);
color: var(--bim-text-primary, #0f172a);
}
.measure-dock-panel-action-btn svg {
width: 18px;
height: 18px;
fill: currentColor;
}
.measure-dock-panel-action-expand {
width: 16px;
height: 32px;
}
.measure-dock-panel-action-expand.is-expanded {
height: 74px;
}
.measure-dock-panel-action-expand.is-collapsed {
height: 32px;
}
.measure-dock-panel-action-clear {
background: color-mix(in srgb, var(--bim-danger, #ef4444) 16%, #ffffff 84%);
border-color: color-mix(in srgb, var(--bim-danger, #ef4444) 26%, transparent 74%);
color: var(--bim-danger, #ef4444);
}
.measure-dock-panel-action-clear:hover {
border-color: color-mix(in srgb, var(--bim-danger, #ef4444) 40%, transparent 60%);
color: var(--bim-danger, #ef4444);
}
.measure-dock-panel-action-settings {
color: color-mix(in srgb, var(--bim-text-primary, #0f172a) 86%, #000 14%);
}
.measure-dock-panel-mode-row .measure-dock-panel-action-btn {
border-radius: 8px;
}
.measure-dock-panel-action-expand svg {
transition: transform 0.15s ease;
}
.measure-dock-panel-action-expand.is-expanded svg {
transform: rotate(180deg);
}
.measure-dock-panel [data-tooltip] {
position: relative;
}
.measure-dock-panel [data-tooltip]::after {
content: attr(data-tooltip);
position: absolute;
left: 50%;
bottom: calc(100% + 6px);
transform: translateX(-50%);
padding: 4px 8px;
border-radius: 6px;
background: rgba(15, 23, 42, 0.92);
color: #f8fafc;
font-size: 12px;
line-height: 1.2;
white-space: nowrap;
pointer-events: none;
opacity: 0;
visibility: hidden;
z-index: 8;
transition: opacity 60ms ease;
}
.measure-dock-panel [data-tooltip]:hover::after,
.measure-dock-panel [data-tooltip]:focus-visible::after {
opacity: 1;
visibility: visible;
}
@media (max-width: 720px) {
.measure-dock-panel-top {
flex-direction: column;
}
.measure-dock-clearheight-group {
flex-direction: column;
align-items: flex-start;
gap: 6px;
}
.measure-dock-panel-actions {
width: 100%;
flex-direction: row;
justify-content: flex-end;
}
.measure-dock-panel-action-btn {
width: 32px;
height: 32px;
}
.measure-dock-panel-mode-btn {
width: 32px;
height: 32px;
}
.measure-dock-panel-action-expand {
width: 16px;
height: 32px;
}
.measure-dock-panel-action-expand.is-expanded {
height: 74px;
}
}