Complete XYZAC LinuxCNC WASM parity and smooth 3D preview
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; }
|
||||
html, body, #root { min-height: 100%; margin: 0; }
|
||||
html, body, #root { min-height: 100%; margin: 0; overflow-x: hidden; }
|
||||
body { min-width: 320px; background: #cfcfcf; color: var(--ink); }
|
||||
button, input, select, textarea { font: inherit; }
|
||||
button { color: inherit; }
|
||||
@@ -31,7 +31,7 @@ button { color: inherit; }
|
||||
.connection-state.ready, .connection-state.running { color: #185c1d; }
|
||||
.connection-state.error, .connection-state.blocked { color: #8b1010; background: #f3d2d2; }
|
||||
|
||||
.axis-menubar { display: flex; align-items: stretch; min-height: 27px; padding-left: 3px; border-bottom: 1px solid #888; background: #d3d3d3; }
|
||||
.axis-menubar { display: flex; align-items: stretch; min-width: 0; min-height: 27px; padding-left: 3px; overflow-x: auto; border-bottom: 1px solid #888; background: #d3d3d3; }
|
||||
.axis-menu-item { position: relative; }
|
||||
.axis-menu-item summary { padding: 5px 10px; cursor: pointer; list-style: none; user-select: none; }
|
||||
.axis-menu-item summary::-webkit-details-marker { display: none; }
|
||||
@@ -41,7 +41,7 @@ button { color: inherit; }
|
||||
.axis-menu-popup button:hover, .axis-menu-popup button:focus-visible { outline: 1px solid var(--focus); background: #c8d7e8; }
|
||||
.axis-menu-popup kbd { margin-left: 22px; color: #555; font: 11px ui-monospace, monospace; }
|
||||
|
||||
.axis-toolbar { display: flex; align-items: center; min-height: 35px; padding: 3px 5px; overflow-x: auto; border-bottom: 1px solid #8a8a8a; background: #d9d9d9; }
|
||||
.axis-toolbar { display: flex; align-items: center; width: 100%; min-width: 0; min-height: 35px; padding: 3px 5px; overflow-x: auto; border-bottom: 1px solid #8a8a8a; background: #d9d9d9; }
|
||||
.axis-tool-button { display: inline-grid; width: 29px; height: 29px; flex: 0 0 29px; place-items: center; padding: 2px; border: 1px solid transparent; border-radius: 2px; background: transparent; cursor: pointer; }
|
||||
.axis-tool-button img { width: 24px; height: 24px; object-fit: contain; pointer-events: none; }
|
||||
.axis-tool-button:hover, .axis-tool-button:focus-visible { border-color: #6a8db6; background: #c8d7e8; outline: none; }
|
||||
@@ -50,14 +50,60 @@ button { color: inherit; }
|
||||
.axis-tool-button:disabled { cursor: not-allowed; opacity: .48; }
|
||||
.axis-toolbar-separator { width: 1px; height: 26px; flex: 0 0 1px; margin: 0 5px; border-left: 1px solid #969696; border-right: 1px solid #eee; }
|
||||
|
||||
.axis-case-strip { display: flex; align-items: center; gap: 7px; min-height: 34px; padding: 4px 8px; border-bottom: 1px solid #999; background: #c7c7c7; }
|
||||
.axis-case-strip label { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; }
|
||||
.axis-case-strip select { max-width: min(420px, 46vw); min-height: 24px; border: 1px solid var(--border-dark); background: white; }
|
||||
.axis-case-strip { display: flex; align-items: center; width: 100%; min-width: 0; gap: 7px; min-height: 34px; padding: 4px 8px; border-bottom: 1px solid #999; background: #c7c7c7; }
|
||||
.axis-case-strip label { display: inline-flex; align-items: center; min-width: 0; flex: 0 0 auto; gap: 5px; font-size: 12px; }
|
||||
.axis-case-strip select { width: min(420px, 46vw); max-width: 100%; min-height: 24px; border: 1px solid var(--border-dark); background: white; }
|
||||
.axis-case-strip > .axis-text-button { min-width: 68px; white-space: nowrap; }
|
||||
.case-status, .command-status { overflow: hidden; color: #4d4d4d; font: 11px ui-monospace, monospace; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.case-status { min-width: 0; flex: 1 1 auto; }
|
||||
.command-status { margin-left: auto; }
|
||||
|
||||
.machine-sequence { display: flex; align-items: center; gap: 12px; min-width: 0; padding: 6px 9px; border-bottom: 1px solid #858585; background: #cfcfcf; }
|
||||
.machine-sequence-heading { display: grid; gap: 2px; min-width: 148px; }
|
||||
.machine-sequence-heading strong { font-size: 12px; }
|
||||
.machine-sequence-heading span { color: #555; font: 10px ui-monospace, monospace; }
|
||||
.machine-sequence-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; min-width: 0; }
|
||||
.machine-sequence-actions .axis-text-button { min-height: 28px; }
|
||||
.machine-sequence-actions .axis-text-button:first-child { border-color: #9b4a4a; }
|
||||
|
||||
.xyzac-control-band { display: grid; grid-template-columns: minmax(330px, .8fr) minmax(470px, 1.5fr); gap: 12px; padding: 7px 10px; border-bottom: 1px solid #858585; background: #d5d5d5; }
|
||||
.xyzac-kinematics, .xyzac-manual-summary { min-width: 0; }
|
||||
.xyzac-section-title { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 5px; font-size: 11px; }
|
||||
.xyzac-section-title strong { font-size: 12px; }
|
||||
.xyzac-section-title span { overflow: hidden; color: #555; font: 10px ui-monospace, monospace; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.xyzac-segments { display: grid; grid-template-columns: repeat(3, minmax(86px, 1fr)); min-height: 38px; }
|
||||
.xyzac-segments button { display: grid; place-content: center; min-width: 0; min-height: 38px; padding: 3px 7px; border: 1px solid #777; border-right-width: 0; border-radius: 0; background: #ededed; cursor: pointer; }
|
||||
.xyzac-segments button:first-child { border-radius: 3px 0 0 3px; }
|
||||
.xyzac-segments button:last-child { border-right-width: 1px; border-radius: 0 3px 3px 0; }
|
||||
.xyzac-segments button.active { color: #fff; background: #315f8b; box-shadow: inset 0 0 0 1px #173b5e; }
|
||||
.xyzac-segments button:disabled { color: #777; cursor: not-allowed; background: #c9c9c9; }
|
||||
.xyzac-segments button span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.xyzac-segments button small { font: 9px ui-monospace, monospace; }
|
||||
.xyzac-clear { min-height: 24px; margin-top: 5px; padding: 2px 9px; border: 1px solid #858585; border-radius: 2px; background: #eee; cursor: pointer; }
|
||||
.xyzac-position-grid { display: grid; grid-template-columns: repeat(5, minmax(74px, 1fr)); border: 1px solid #909090; background: #f4f4f4; }
|
||||
.xyzac-position-grid > div { display: grid; grid-template-columns: 18px 1fr; align-items: baseline; min-width: 0; padding: 4px 6px; border-right: 1px solid #aaa; }
|
||||
.xyzac-position-grid > div:last-child { border-right: 0; }
|
||||
.xyzac-position-grid b { grid-row: span 2; font-size: 12px; }
|
||||
.xyzac-position-grid output { overflow: hidden; font-size: 13px; text-overflow: ellipsis; }
|
||||
.xyzac-position-grid small { overflow: hidden; color: #666; font: 9px ui-monospace, monospace; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.xyzac-offset-row { display: flex; gap: 12px; margin-top: 5px; color: #555; font: 10px ui-monospace, monospace; }
|
||||
.xyzac-program { display: contents; }
|
||||
.xyzac-program > header { display: flex; align-items: center; gap: 14px; min-height: 25px; margin: 0 5px; padding: 3px 8px; border: 1px solid #888; border-bottom: 0; background: #d4d4d4; font-size: 11px; }
|
||||
.xyzac-program > header code { margin-left: auto; color: #4d4d4d; }
|
||||
.xyzac-diagnostics { display: grid; gap: 8px; padding: 10px; border-top: 1px solid #aaa; background: #ededed; font-size: 11px; }
|
||||
.xyzac-diagnostics h3 { margin: 0 0 3px; font-size: 11px; }
|
||||
.xyzac-diagnostic-summary, .xyzac-diagnostic-row, .xyzac-error { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
|
||||
.xyzac-diagnostic-summary code, .xyzac-diagnostic-row span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.xyzac-diagnostic-row code { min-width: 128px; }
|
||||
.xyzac-error { padding: 5px; color: #7b1111; border: 1px solid #bd8585; background: #f7dddd; }
|
||||
|
||||
.axis-top-pane { display: grid; grid-template-columns: minmax(360px, .48fr) minmax(430px, 1fr); height: clamp(360px, calc(100vh - 415px), 680px); min-height: 360px; flex: 0 0 auto; padding: 5px; gap: 5px; }
|
||||
.axis-notebook { min-width: 0; display: flex; flex-direction: column; border: 1px solid var(--border-dark); background: var(--face-light); }
|
||||
.axis-notebook { min-width: 0; min-height: 0; display: flex; flex-direction: column; border: 1px solid var(--border-dark); background: var(--face-light); }
|
||||
.axis-notebook > [role="tabpanel"] { min-width: 0; min-height: 0; flex: 1; overflow: auto; }
|
||||
.axis-notebook > [role="tabpanel"] > .manual-control,
|
||||
.axis-notebook > [role="tabpanel"] > .mdi-control,
|
||||
.axis-notebook > [role="tabpanel"] > .dro-view,
|
||||
.axis-notebook > [role="tabpanel"] > .axis-preview { height: 100%; min-height: 0; }
|
||||
.notebook-tabs { display: flex; align-items: end; min-height: 29px; padding: 3px 3px 0; border-bottom: 1px solid #777; background: #c5c5c5; }
|
||||
.notebook-tabs button { min-height: 26px; padding: 4px 12px; border: 1px solid transparent; border-bottom: 0; background: transparent; cursor: pointer; }
|
||||
.notebook-tabs button.active { margin-bottom: -1px; border-color: #777; background: var(--face-light); font-weight: 700; }
|
||||
@@ -104,6 +150,10 @@ output { font: 12px ui-monospace, monospace; text-align: right; }
|
||||
.three-viewer { position: relative; width: 100%; height: 100%; min-height: 0; flex: 1; overflow: hidden; border: 1px solid #303030; background: #000; }
|
||||
.three-viewer canvas { display: block; width: 100%; height: 100%; }
|
||||
.axis-preview-hud { position: absolute; z-index: 1; top: 11px; left: 34px; margin: 0; color: #f2f2f2; font: 12px/1.45 ui-monospace, monospace; white-space: pre; pointer-events: none; text-shadow: 0 1px #000; }
|
||||
.xyzac-view-controller { position: absolute; z-index: 2; top: 8px; right: 8px; display: grid; grid-template-columns: repeat(2, 27px); gap: 3px; padding: 4px; border: 1px solid #68747c; background: rgba(12, 18, 22, .88); box-shadow: 0 1px 4px #0008; }
|
||||
.xyzac-view-controller button { width: 27px; height: 25px; padding: 0; border: 1px solid #93a1a8; background: #e6ebed; color: #182126; font: 700 14px/1 ui-monospace, monospace; cursor: pointer; }
|
||||
.xyzac-view-controller button:hover, .xyzac-view-controller button:focus-visible { background: #fff; outline: 2px solid #e7b84b; outline-offset: 1px; }
|
||||
.xyzac-controller-divider { width: 100%; height: 1px; grid-column: 1 / -1; background: #68747c; }
|
||||
.dro-view { background: #ececec; }
|
||||
.dro-mode-row, .dro-column-headings, .dro-row { display: grid; grid-template-columns: 42px repeat(3, minmax(100px, 1fr)); align-items: center; gap: 9px; }
|
||||
.dro-mode-row { padding: 5px 6px; border-bottom: 1px solid #888; color: #555; font-size: 11px; }
|
||||
@@ -141,16 +191,17 @@ output { font: 12px ui-monospace, monospace; text-align: right; }
|
||||
.visually-hidden-file-input { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
|
||||
.axis-layer-controls { display: flex; flex-wrap: wrap; gap: 8px 12px; margin-top: 4px; color: #4d4d4d; font-size: 11px; }
|
||||
.axis-layer-controls input { margin: 0; }
|
||||
.axis-info-bar { display: flex; align-items: stretch; min-height: 27px; margin-top: auto; border-top: 1px solid #777; background: #c4c4c4; }
|
||||
.axis-info-bar > span { display: flex; align-items: center; min-height: 25px; padding: 2px 9px; border-right: 1px solid #999; font: 12px ui-monospace, monospace; }
|
||||
.axis-info-bar { display: flex; align-items: stretch; width: 100%; min-width: 0; min-height: 27px; margin-top: auto; border-top: 1px solid #777; background: #c4c4c4; }
|
||||
.axis-info-bar > span { display: flex; align-items: center; min-width: 0; min-height: 25px; padding: 2px 9px; overflow: hidden; border-right: 1px solid #999; font: 12px ui-monospace, monospace; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.task-state { min-width: 92px; background: #ececec; font-weight: 700 !important; }
|
||||
.task-state.running { color: #145d1c; }
|
||||
.task-state.blocked, .task-state.error { color: #9b111e; background: #f2d6d6; }
|
||||
.tool-state { flex: 1; }
|
||||
.tool-state { min-width: 0; flex: 1; }
|
||||
.position-state { min-width: 230px; }
|
||||
.footer-status { min-width: 180px; color: #505050; }
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.xyzac-control-band { grid-template-columns: 1fr; }
|
||||
.axis-top-pane { grid-template-columns: 1fr; height: auto; min-height: 0; flex: 0 0 auto; }
|
||||
.axis-notebook { min-height: 330px; }
|
||||
.axis-preview { min-height: 320px; }
|
||||
@@ -163,6 +214,15 @@ output { font: 12px ui-monospace, monospace; text-align: right; }
|
||||
.axis-case-strip { flex-wrap: wrap; }
|
||||
.axis-case-strip select { max-width: 62vw; }
|
||||
.command-status { margin-left: 0; width: 100%; }
|
||||
.machine-sequence { align-items: flex-start; flex-direction: column; gap: 5px; }
|
||||
.machine-sequence-heading { min-width: 0; }
|
||||
.xyzac-control-band { padding: 6px; }
|
||||
.xyzac-position-grid { grid-template-columns: repeat(5, minmax(54px, 1fr)); }
|
||||
.xyzac-position-grid > div { grid-template-columns: 14px 1fr; padding: 3px; }
|
||||
.xyzac-position-grid output { font-size: 10px; }
|
||||
.xyzac-offset-row { flex-wrap: wrap; gap: 4px 9px; }
|
||||
.xyzac-program > header { flex-wrap: wrap; gap: 4px 10px; }
|
||||
.xyzac-program > header code { width: 100%; margin-left: 0; }
|
||||
.manual-grid, .manual-sliders, .axis-slider { grid-template-columns: 1fr; }
|
||||
.manual-axis-block, .manual-coolant-block { grid-row: auto; grid-column: auto; }
|
||||
.dro-mode-row, .dro-column-headings, .dro-row { grid-template-columns: 27px repeat(3, minmax(0, 1fr)); gap: 4px; }
|
||||
|
||||
Reference in New Issue
Block a user