Improve machine manager engineering workbench

This commit is contained in:
2026-09-21 12:54:56 +08:00
parent a2c6dd1c01
commit a7233bc8e4
18 changed files with 388 additions and 57 deletions

View File

@@ -415,3 +415,98 @@ output { font: 12px ui-monospace, monospace; text-align: right; }
.machine-manager-calibration { grid-template-columns: 1fr; }
.machine-motion-test > div { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
/* Machine manager workbench: a stable viewport with independently scrolling panels. */
.machine-manager-dialog { width: min(1440px, calc(100vw - 24px)); height: min(940px, calc(100dvh - 24px)); }
.machine-manager-dialog > .machine-dialog-body { flex: 1; min-height: 0; padding: 10px; overflow: hidden; }
.machine-manager-workbench { height: 100%; display: flex; flex-direction: column; gap: 8px; min-height: 0; }
.machine-manager-toolbar { margin: 0; flex: 0 0 auto; }
.machine-manager-toolbar button, .machine-preview-tools button, .machine-tree-tools button, .machine-editor-tabs button, .machine-axis-overview button { border: 1px solid #9babad; background: #fff; padding: 6px 10px; border-radius: 4px; min-height: 32px; cursor: pointer; }
.machine-manager-dialog button:disabled { opacity: .48; cursor: not-allowed; }
.machine-manager-dialog input, .machine-manager-dialog select { background: #fff; border: 1px solid #9babad; border-radius: 3px; padding: 4px 6px; color: #203b3f; }
.machine-manager-dialog input:focus-visible, .machine-manager-dialog select:focus-visible { outline: 2px solid #2b858a; outline-offset: 1px; }
.machine-manager-dialog input:disabled, .machine-manager-dialog select:disabled { background: #e7edec; color: #596d6f; }
.machine-save-state { margin-left: auto; padding: 5px 9px; border-radius: 20px; background: #dbeae7; font-size: 12px; }
.machine-axis-overview { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; flex: 0 0 auto; }
.machine-axis-overview button { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 7px; text-align: left; align-items: center; }
.machine-axis-overview button.bound { border-color: #74a7a0; background: #e4f1ed; }
.machine-axis-overview button.missing { border-style: dashed; color: #71511e; background: #fff9ec; }
.machine-axis-overview strong { font-size: 17px; }
.machine-axis-overview span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 11px; }
.machine-axis-overview small { font: 11px ui-monospace, monospace; }
.machine-manager-layout { flex: 1; min-height: 0; grid-template-columns: minmax(0, 1.25fr) minmax(370px, 1fr); gap: 10px; overflow: hidden; }
.machine-preview-area { position: relative; display: flex; flex-direction: column; min-height: 0; min-width: 0; border: 1px solid #52666a; border-radius: 5px; overflow: hidden; background: #263438; }
.machine-preview-tools { display: flex; align-items: center; gap: 5px; flex: 0 0 auto; padding: 6px; background: #e3eceb; flex-wrap: wrap; }
.machine-preview-tools small { margin-left: auto; font-size: 11px; }
.machine-manager-preview-shell { flex: 1; min-height: 0; }
.machine-manager-preview { position: absolute; inset: 0; min-height: 0; height: 100%; border: 0; }
.machine-preview-hint { flex: 0 0 auto; color: #d1e2df; font-size: 11px; margin: 0; padding: 6px 10px; }
.machine-preview-empty { position: absolute; inset: 48px 16px 40px; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: 12px; color: #e3eeeb; pointer-events: none; }
.machine-preview-empty strong { font-size: 18px; }
.machine-preview-empty button { pointer-events: auto; background: #e3f3ef; border: 1px solid #90bbb3; border-radius: 5px; padding: 9px 18px; color: #254c4e; }
.machine-preview-empty p { margin: 0; line-height: 1.7; }
.machine-manager-editor { display: flex; flex-direction: column; min-width: 0; min-height: 0; overflow: hidden; gap: 8px; }
.machine-editor-tabs { display: flex; gap: 4px; flex: 0 0 auto; }
.machine-editor-tabs button { flex: 1; white-space: nowrap; }
.machine-editor-tabs [aria-selected="true"] { background: #27585d; color: #fff; border-color: #27585d; }
.machine-manager-dialog [hidden] { display: none !important; }
.machine-structure-panel { display: grid; grid-template-rows: minmax(125px, .9fr) minmax(190px, 1.1fr); gap: 8px; min-height: 0; flex: 1; }
.machine-part-list { display: flex; flex-direction: column; overflow: hidden; border-radius: 4px; }
.machine-part-list > header { display: flex; justify-content: space-between; gap: 8px; }
.machine-part-list > header span { color: #617576; font-size: 11px; }
.machine-part-list > .machine-tree { flex: 1; min-height: 0; overflow: auto; }
.machine-tree-tools { display: flex; gap: 4px; margin-bottom: 6px; }
.machine-tree-tools input { width: 100%; min-width: 0; }
.machine-tree-tools button { white-space: nowrap; padding: 3px 7px; }
.machine-tree .machine-tree-row button { min-height: 28px; }
.machine-tree [data-axis-control="machine-tree-node"] { grid-template-columns: minmax(90px, 1fr) auto; }
.machine-tree [data-axis-control="machine-tree-node"] small { display: none; }
.machine-tree [data-axis-control="machine-tree-node"]:focus-visible { outline: 2px solid #2b858a; outline-offset: -2px; }
.machine-part-editor { border-radius: 4px; }
.machine-part-editor > header h3 { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.machine-part-editor > header h3 small { display: block; color: #627777; font-size: 11px; font-weight: 400; margin-top: 3px; }
.machine-part-editor > header button { white-space: nowrap; font-size: 11px; border: 1px solid #d3aba1; border-radius: 3px; padding: 4px 6px; }
.machine-part-editor > label { grid-template-columns: 120px minmax(0, 1fr); }
.machine-origin-details { margin: 8px 0; }
.machine-origin-details summary { cursor: pointer; color: #36595c; padding: 4px 0; }
.machine-parent-note { margin: 8px 0; color: #627777; font-size: 11px; }
.machine-selection-empty { align-self: start; padding: 14px; color: #627777; }
.machine-number-field { display: block; min-width: 0; }
.machine-number-field input { width: 100%; min-width: 0; height: 30px; font: 12px ui-monospace, monospace; }
.machine-manager-dialog input[aria-invalid="true"] { border: 2px solid #ad4538; background: #fff0ec; }
.machine-field-error { display: block; color: #9c3024; font-size: 11px; }
.machine-manager-editor > .machine-motion-test, .machine-manager-editor > .machine-manager-calibration { flex: 1; min-height: 0; overflow: auto; margin: 0; padding: 12px; border-radius: 4px; }
.machine-motion-test > label { display: flex; align-items: center; }
.machine-motion-test > label > input { width: auto; }
.machine-motion-test > div { grid-template-columns: 1fr; gap: 12px; }
.machine-motion-test > div > label { grid-template-columns: 22px minmax(80px, 1fr) 35px; }
.machine-motion-test details { margin-top: 16px; color: #536467; font-size: 11px; }
.machine-motion-test p { line-height: 1.7; color: #536467; }
.machine-manager-editor > .machine-manager-calibration { display: block; }
.machine-manager-calibration .machine-vector { border: 1px solid #b7c9c5; border-radius: 4px; padding: 10px; margin: 12px 0; }
.machine-manager-calibration .machine-vector label { grid-template-columns: 18px minmax(60px, 1fr); flex: 1 1 105px; }
.machine-validation { flex: 0 0 auto; padding: 7px 10px; border-radius: 4px; font-size: 12px; line-height: 1.5; }
.machine-validation.ready { background: #e1efe7; color: #285d42; }
.machine-validation.needs-attention { background: #fff2d9; color: #74501e; }
.machine-validation button { margin-left: 10px; text-decoration: underline; }
.machine-manager-footer { flex: 0 0 auto; margin: 0; gap: 6px; }
.machine-manager-footer > button { padding: 6px 10px; border: 1px solid #8aa3a4; border-radius: 4px; background: #fff; }
.machine-manager-footer > button:first-child { background: #27585d; color: #fff; }
.machine-manager-footer output { margin: 0; font-size: 11px; color: #536467; flex-basis: 280px; }
@media (max-width: 850px) {
.machine-manager-layout { grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(160px, .65fr) minmax(240px, 1fr); overflow: auto; }
.machine-axis-overview button { grid-template-columns: auto 1fr; padding: 4px 6px; }
.machine-axis-overview small { display: none; }
.machine-axis-overview span { font-size: 10px; }
.machine-save-state { margin-left: 0; }
.machine-preview-tools small { display: none; }
.machine-preview-hint { display: none; }
}
@media (max-height: 600px) and (min-width: 851px) {
.machine-structure-panel { grid-template-rows: minmax(85px, .6fr) minmax(100px, 1fr); }
.machine-manager-dialog { height: calc(100dvh - 16px); }
.machine-manager-workbench { gap: 4px; }
}
.machine-joint-step { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; margin: 8px 0; }
.machine-joint-step > label { display: flex; align-items: center; gap: 6px; }
.machine-joint-step button { padding: 5px 9px; border: 1px solid #9babad; border-radius: 3px; background: #fff; }