Merge branch 'rel-next'
This commit is contained in:
commit
c2eca07ed2
170 changed files with 36860 additions and 2409 deletions
|
|
@ -18,6 +18,20 @@
|
|||
font-family: sans-serif;
|
||||
font-weight: bold;
|
||||
}
|
||||
#progress {
|
||||
margin-top: 20px;
|
||||
width: 300px;
|
||||
height: 20px;
|
||||
border: 1px solid black;
|
||||
border-radius: 10px;
|
||||
background-color: white;
|
||||
overflow: hidden;
|
||||
}
|
||||
#bar {
|
||||
background-color: #555;
|
||||
height: 20px;
|
||||
width: 0%;
|
||||
}
|
||||
</style>
|
||||
<script type="module">
|
||||
import { version } from '/lib/moto/license.js';
|
||||
|
|
@ -49,10 +63,19 @@
|
|||
version: map.version || version
|
||||
});
|
||||
|
||||
const bar = document.getElementById('bar');
|
||||
|
||||
navigator.serviceWorker.addEventListener('message', e => {
|
||||
console.log('[SM]', e.data);
|
||||
setTimeout(() => {
|
||||
if (map.mesh) {
|
||||
let { data } = e;
|
||||
if (data.progress) {
|
||||
bar.style.width = `${(data.progress * 100)|0}%`;
|
||||
return;
|
||||
} else {
|
||||
console.log('[SM]', data);
|
||||
}
|
||||
setTimeout(() => {
|
||||
bar.style.width = `100%`;
|
||||
if (map.mesh) {
|
||||
location.replace('/mesh/index.html');
|
||||
} else {
|
||||
location.replace('/kiri/index.html');
|
||||
|
|
@ -63,6 +86,11 @@
|
|||
</script>
|
||||
</head>
|
||||
|
||||
<body>Booting Grid.Space</body>
|
||||
<body>
|
||||
<div>Installing Grid.Space</div>
|
||||
<div id="progress">
|
||||
<div id="bar"></div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -43,7 +43,7 @@ self.addEventListener('message', e => {
|
|||
async function _install(e) {
|
||||
log('install');
|
||||
if (e.addRoutes) {
|
||||
for (let pre of ["font","mesh","kiri","lib","wasm"]) {
|
||||
for (let pre of ["font","mesh","kiri","void","lib","wasm"]) {
|
||||
e.addRoutes({
|
||||
condition: { urlPattern: new URLPattern({ pathname: `/${pre}/.*` }) },
|
||||
source: { cacheName: CACHE_VERSION }
|
||||
|
|
@ -193,8 +193,10 @@ async function preloadBundle() {
|
|||
const res = await fetch(BUNDLE_URL, { cache: 'no-store' });
|
||||
const buf = await res.arrayBuffer();
|
||||
const files = await unpackBundle(buf);
|
||||
const total = Object.keys(files).length;
|
||||
await Promise.all(
|
||||
Object.entries(files).map(([path, blob]) => {
|
||||
broadcast({ progress: loaded/total });
|
||||
const ext = path.split('.').pop();
|
||||
const type =
|
||||
ext === 'html' ? 'text/html' :
|
||||
|
|
|
|||
BIN
web/icon/kirimoto.png
Normal file
BIN
web/icon/kirimoto.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 90 KiB |
BIN
web/icon/kirimoto2.png
Normal file
BIN
web/icon/kirimoto2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 96 KiB |
BIN
web/icon/meshtool.png
Normal file
BIN
web/icon/meshtool.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 278 KiB |
BIN
web/icon/voidform.png
Normal file
BIN
web/icon/voidform.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 91 KiB |
|
|
@ -31,12 +31,17 @@
|
|||
margin-right: 1rem;
|
||||
}
|
||||
#jcode, #gcode {
|
||||
width: 400px;
|
||||
height: 400px;
|
||||
margin: 5px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #aaa;
|
||||
}
|
||||
#jcode {
|
||||
width: 500px;
|
||||
}
|
||||
#gcode {
|
||||
width: 300px;
|
||||
}
|
||||
#jcode, #gcode {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
|
|
|||
1046
web/kiri/index.css
1046
web/kiri/index.css
File diff suppressed because it is too large
Load diff
|
|
@ -1,5 +1,5 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="en" data-app="kiri">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Stewart Allen">
|
||||
|
|
@ -14,355 +14,58 @@
|
|||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||||
<meta http-equiv="origin-trial" content="AobHyD9RXtmfFOTcY506ANNJjG8lYuuvQ3/C7YJvprSP6Kk2pjKIBSKAUbUh64Nx6aCZaqlZ+7sSSswiIFHflgYAAAB0eyJvcmlnaW4iOiJodHRwczovL2dyaWQuc3BhY2U6NDQzIiwiZmVhdHVyZSI6IlVucmVzdHJpY3RlZFNoYXJlZEFycmF5QnVmZmVyIiwiZXhwaXJ5IjoxNzY5NDcyMDAwLCJpc1N1YmRvbWFpbiI6dHJ1ZX0=">
|
||||
<meta http-equiv="origin-trial" content="AvttY0bfMDdg4vBwjn5k4Yv/+OmqjNj4bTRvCgBpP7hkI6base2DxEViSebcOyglERiFV7g0DaVmI+yv79ftDw8AAAB0eyJvcmlnaW4iOiJodHRwczovL2dyaWQuc3BhY2U6NDQzIiwiZmVhdHVyZSI6IlVucmVzdHJpY3RlZFNoYXJlZEFycmF5QnVmZmVyIiwiZXhwaXJ5IjoxNzc5MTQ4ODAwLCJpc1N1YmRvbWFpbiI6dHJ1ZX0=">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
|
||||
<title>Kiri:Moto</title>
|
||||
<link rel="icon" href="favicon.ico">
|
||||
<link rel="apple-touch-icon" href="favicon-mobile.png">
|
||||
<script>
|
||||
const isDark = localStorage['kiri-dark'] === 'true';
|
||||
function setDarkLight(isDark) {
|
||||
const dde = document.documentElement;
|
||||
dde.setAttribute('data-theme', isDark ? 'dark' : 'light');
|
||||
dde.style.background = isDark ? '#000000' : '#ffffff';
|
||||
}
|
||||
setDarkLight(isDark);
|
||||
</script>
|
||||
<link rel="icon" href="/icon/kirimoto.png">
|
||||
<link rel="apple-touch-icon" href="/icon/kirimoto.png">
|
||||
<link rel="stylesheet" type="text/css" href="/moto/palette.css">
|
||||
<link rel="stylesheet" type="text/css" href="/moto/theme.css">
|
||||
<link rel="stylesheet" type="text/css" href="/moto/menubar.css">
|
||||
<link rel="stylesheet" type="text/css" href="index.css">
|
||||
<link href="manifest.json" rel="manifest">
|
||||
<link href="../font/css/all.min.css" rel="stylesheet">
|
||||
<link href="/font/css/all.min.css" rel="stylesheet">
|
||||
<!-- <script type="module" src="/lib/kiri/run/worker.js"></script> -->
|
||||
<!-- <script type="module" src="/lib/kiri/run/minion.js"></script> -->
|
||||
<script src="../lib/ext/tween.js"></script>
|
||||
<script src="../font/js/all.min.js" crossorigin="anonymous" defer></script>
|
||||
<script src="../lib/main/kiri.js" type="module"></script>
|
||||
<script src="/lib/ext/tween.js"></script>
|
||||
<script src="/font/js/all.min.js" crossorigin="anonymous" defer></script>
|
||||
<script src="/lib/main/kiri.js" type="module"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app" class="f-col">
|
||||
<!-- hide page contents and provide loading message during initialization -->
|
||||
<div id="curtain" class="j-center a-center"><img id="loading">Kiri:Moto is Loading</div>
|
||||
|
||||
<!-- when running iframed, provide a separator between the menu bar and enclosing page -->
|
||||
<div id="top-sep"></div>
|
||||
|
||||
<!-- top menu bar -->
|
||||
<div id="top" class="f-row">
|
||||
<div class="f-row top-menu">
|
||||
<span id="view-arrange">
|
||||
<span><i class="fas fa-shapes"></i></span>
|
||||
<label lk="arrange">arrange</label>
|
||||
</span>
|
||||
<span id="act-slice">
|
||||
<span><i class="fas fa-bars"></i></span>
|
||||
<label id="label-slice" title="generate layer slices" lk="slice">preview</label>
|
||||
</span>
|
||||
<span id="act-preview">
|
||||
<span><i class="fas fa-layer-group"></i></span>
|
||||
<label id="label-preview" title="show routing and paths" lk="preview">preview</label>
|
||||
</span>
|
||||
<span id="act-animate">
|
||||
<span><i class="fas fa-film"></i></span>
|
||||
<label id="label-animate" title="render routing on a mesh" lk="animate">animate</label>
|
||||
</span>
|
||||
<span id="act-export">
|
||||
<span><i class="fas fa-file-download"></i></span>
|
||||
<label id="label-export" title="generate gcode" lk="export">export</label>
|
||||
</span>
|
||||
</div>
|
||||
<div class="grow"></div>
|
||||
<div id="app-name" class="f-col a-center top-menu">
|
||||
<span class="grow">
|
||||
<span id="app-name-text" class="km-font">Kiri:Moto</span>
|
||||
<div id="app-name-pop" class="top-menu-drop top-menu-center">
|
||||
<div class="content">
|
||||
<div>
|
||||
<label id="app-info">version</label>
|
||||
</div>
|
||||
<hr width="100%">
|
||||
<div>
|
||||
<label id="app-mesh">mesh edit</label>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="install">
|
||||
<label lk="install">install</label>
|
||||
</div>
|
||||
<div id="uninstall" class="hide">
|
||||
<label lk="uninstall">uninstall</label>
|
||||
</div>
|
||||
<div id="app-quit" class="hide">
|
||||
<label lk="quit">quit</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
<div id="doit" class="f-row a-center">
|
||||
<button id="undo"><i class="fas fa-undo-alt"></i></button>
|
||||
<button id="redo"><i class="fas fa-redo-alt"></i></button>
|
||||
</div>
|
||||
<div class="grow"></div>
|
||||
<div class="f-row top-menu">
|
||||
<span>
|
||||
<i class="fas fa-folder"></i>
|
||||
<label lk="fe_menu">files</label>
|
||||
<div class="top-menu-drop top-menu-right">
|
||||
<div class="content">
|
||||
<div id="file-new">
|
||||
<label lk="new">new</label>
|
||||
<span><i class="fas fa-file"></i></span>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="file-recent">
|
||||
<label lk="recent">recent</label>
|
||||
<span><i class="fas fa-list"></i></span>
|
||||
</div>
|
||||
<div id="file-import">
|
||||
<label lk="import">import</label>
|
||||
<span><i class="fas fa-file-upload"></i></span>
|
||||
<!-- required file input loaders -->
|
||||
<input id="load-file" type="file" name="loadme" style="display:none" accept=".km,.kmz,.stl,.obj,.svg,.png,.jpg,.jpeg,.gcode,.nc"></input>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="app-export">
|
||||
<label lk="export">export</label>
|
||||
<span><i class="fas fa-download"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<span>
|
||||
<i class="fas fa-eye"></i>
|
||||
<label lk="vu_menu">view</label>
|
||||
<div class="top-menu-drop top-menu-right">
|
||||
<div class="content">
|
||||
<div id="view-fit">
|
||||
<label lk="contents">contents</label>
|
||||
<span><i class="fas fa-expand"></i></span>
|
||||
</div>
|
||||
<div id="view-home">
|
||||
<label lk="home">home</label>
|
||||
<span><i class="fas fa-home"></i></span>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="view-top">
|
||||
<label lk="top">top</label>
|
||||
<span><i class="fas fa-square"></i></span>
|
||||
</div>
|
||||
<div id="view-front">
|
||||
<label lk="front">top</label>
|
||||
<span><i class="fas fa-square"></i></span>
|
||||
</div>
|
||||
<div id="view-back">
|
||||
<label lk="back">top</label>
|
||||
<span><i class="fas fa-square"></i></span>
|
||||
</div>
|
||||
<div id="view-left">
|
||||
<label lk="left">top</label>
|
||||
<span><i class="fas fa-square"></i></span>
|
||||
</div>
|
||||
<div id="view-right">
|
||||
<label lk="right">top</label>
|
||||
<span><i class="fas fa-square"></i></span>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="app-xpnd">
|
||||
<label lk="fullscreen">fullscreen</label>
|
||||
<span><i class="fas fa-maximize"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<span>
|
||||
<i class="fas fa-code-branch"></i>
|
||||
<label lk="mo_menu">mode</label>
|
||||
<div class="top-menu-drop top-menu-right">
|
||||
<div class="content">
|
||||
<div id="mode-fdm">
|
||||
<label title="3D Additive Printing Processes">FDM</label>
|
||||
<span><i class="fas fa-layer-group"></i></span>
|
||||
</div>
|
||||
<div id="mode-cam">
|
||||
<label title="CNC Mills and Subtractive Processes">CNC</label>
|
||||
<span><i class="fas fa-bore-hole"></i></span>
|
||||
</div>
|
||||
<div id="mode-sla">
|
||||
<label title="mSLA Resin Printing">SLA</label>
|
||||
<span><i class="fas fa-cube"></i></span>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="mode-laser">
|
||||
<label title="Laser Cutting and Engraving">Laser</label>
|
||||
<span><i class="fas fa-bolt"></i></span>
|
||||
</div>
|
||||
<div id="mode-wjet">
|
||||
<label title="WaterJet Cutting">Water</label>
|
||||
<span><i class="fas fa-location-pin"></i></span>
|
||||
</div>
|
||||
<div id="mode-wedm">
|
||||
<label title="Wire EDM Cutting">Wire</label>
|
||||
<span><i class="fas fa-ellipsis-vertical"></i></span>
|
||||
</div>
|
||||
<div id="mode-drag">
|
||||
<label title="Drag Knife Cutting">Drag</label>
|
||||
<span><i class="fas fa-caret-left"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<span>
|
||||
<i class="fas fa-cog"></i>
|
||||
<label lk="su_menu">setup</label>
|
||||
<div class="top-menu-drop top-menu-right">
|
||||
<div class="content">
|
||||
<div id="set-device">
|
||||
<label lk="machines">machines</label>
|
||||
<span><i class="fas fa-cube"></i></span>
|
||||
</div>
|
||||
<div id="set-profs">
|
||||
<label lk="profs">profiles</label>
|
||||
<span><i class="fas fa-sliders-h"></i></span>
|
||||
</div>
|
||||
<div id="set-tools">
|
||||
<label lk="tools">tools</label>
|
||||
<span><i class="fas fa-tools"></i></span>
|
||||
</div>
|
||||
<div id="set-prefs">
|
||||
<label lk="prefs">prefs</label>
|
||||
<span><i class="fa-solid fa-square-check"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<span>
|
||||
<i class="fas fa-question-circle"></i>
|
||||
<label lk="info">info</label>
|
||||
<div class="top-menu-drop top-menu-right">
|
||||
<div class="content">
|
||||
<div id="app-help">
|
||||
<label lk="help">help</label>
|
||||
</div>
|
||||
<div id="app-don8">
|
||||
<label lk="donate">donate</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<span>
|
||||
<i class="fas fa-language"></i>
|
||||
<div class="top-menu-drop top-menu-right">
|
||||
<div class="content">
|
||||
<div><label id="lset-zh">简体中文</label></div>
|
||||
<div><label id="lset-da">dansk</label></div>
|
||||
<div><label id="lset-de">deutsch</label></div>
|
||||
<div><label id="lset-en">english</label></div>
|
||||
<div><label id="lset-es">español</label></div>
|
||||
<div><label id="lset-fr">français</label></div>
|
||||
<div><label id="lset-pl" class="nocap">polski</label></div>
|
||||
<div><label id="lset-pt">português</label></div>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<div id="menubar" class="f-row"></div>
|
||||
|
||||
<!-- modal progress overlay -->
|
||||
<div id="progress-overlay" class="hide">
|
||||
<div id="progress-indicator">
|
||||
<div id="progress-ring"></div>
|
||||
<div id="progress-pct"></div>
|
||||
<div id="progtxt"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- line betwwen menu bar and main application windows -->
|
||||
<div id="progress"><div id="progbar"></div><div id="progtxt">loading</div></div>
|
||||
|
||||
<!-- toolbar with mesh and rendering options -->
|
||||
<div>
|
||||
<div id="render-tools">
|
||||
<span id="tool-nozzle"><i class="fas fa-location-pin" title="extruder"></i>
|
||||
<div id="ft-nozzle" class="f-col pop"></div>
|
||||
</span>
|
||||
<span id="tool-rotate"><i class="fas fa-rotate-right" title="rotate selection"></i>
|
||||
<div id="ft-rotate" class="grid pop">
|
||||
<div id="rot_x_lt"><i class="fas fa-chevron-left"></i></div>
|
||||
<label>X</label>
|
||||
<div id="rot_x_gt"><i class="fas fa-chevron-right"></i></div>
|
||||
<input id="rot_x" class="value center" size="6" value="90">
|
||||
<div id="rot_y_lt"><i class="fas fa-chevron-left"></i></div>
|
||||
<label>Y</label>
|
||||
<div id="rot_y_gt"><i class="fas fa-chevron-right"></i></div>
|
||||
<input id="rot_y" class="value center" size="6" value="90">
|
||||
<div id="rot_z_lt"><i class="fas fa-chevron-left"></i></div>
|
||||
<label>Z</label>
|
||||
<div id="rot_z_gt"><i class="fas fa-chevron-right"></i></div>
|
||||
<input id="rot_z" class="value center" size="6" value="90">
|
||||
<div class="buttons f-row">
|
||||
<button id="unrotate" class="grow" lk="reset">reset</button>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<span id="tool-scale"><i class="fas fa-expand" title="scale or resize selection"></i>
|
||||
<div id="ft-scale" class="grid pop">
|
||||
<div><label>X</label><input id="lock_x" type="checkbox" checked></div>
|
||||
<div><label>Y</label><input id="lock_y" type="checkbox" checked></div>
|
||||
<div><label>Z</label><input id="lock_z" type="checkbox" checked></div>
|
||||
<label id="lab-axis" lk="axis">axis</label>
|
||||
<input id="size_x" size="8" class="value">
|
||||
<input id="size_y" size="8" class="value">
|
||||
<input id="size_z" size="8" class="value">
|
||||
<label id="lab-size" lk="size">size</label>
|
||||
<input id="scale_x" size="8" class="value" value="1">
|
||||
<input id="scale_y" size="8" class="value" value="1">
|
||||
<input id="scale_z" size="8" class="value" value="1">
|
||||
<label id="lab-scale" lk="scale">scale</label>
|
||||
<div class="buttons f-row">
|
||||
<button id="scale-reset" class="grow j-center">reset</button>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<span id="tool-mesh"><i class="fas fa-dice-d20"></i>
|
||||
<div id="ft-mesh" class="grow f-col pop">
|
||||
<div id="ft-mesh-btn">
|
||||
<div><button id="mesh-merge" lk="rc_merg">Merge</button></div>
|
||||
<div><button id="mesh-split" lk="rc_splt">Isolate Bodies</button></div>
|
||||
<div><button id="mesh-export-obj" lk="rc_xobj">export OBJ</button></div>
|
||||
<div><button id="mesh-export-stl" lk="rc_xstl">export STL</button></div>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<span id="context-mirror" xlk="rc_mirr">
|
||||
<i class="fas fa-arrows-left-right-to-line"></i>
|
||||
<div class="pop">mirror selection</div>
|
||||
</span>
|
||||
<span id="context-duplicate" xlk="rc_dupl">
|
||||
<i class="fas fa-copy"></i>
|
||||
<div class="pop">duplicate selection</div>
|
||||
</span>
|
||||
<span id="context-layflat" xlk="rc_lafl">
|
||||
<i class="fas fa-arrows-down-to-line"></i>
|
||||
<div class="pop">choose a face to place<br>on the work surface</div>
|
||||
</span>
|
||||
<span id="context-lefty" xlk="rc_lafl">
|
||||
<i class="fas fa-arrows-down-to-line rot90"></i>
|
||||
<div class="pop">choose a face to align<br>to the y axis</div>
|
||||
</span>
|
||||
<span id="context-setfocus" xlk="rc_focs">
|
||||
<i class="fas fa-eye"></i>
|
||||
<div class="pop">choose focal point<br>camera orbit center</div>
|
||||
</span>
|
||||
<span id="context-contents" xlk="rc_focs">
|
||||
<i class="fas fa-arrows-to-circle"></i>
|
||||
<div class="pop">fit workspace contents</div>
|
||||
</span>
|
||||
<span id="render-solid" class="j-center">
|
||||
<i class="fas fa-square"></i>
|
||||
<div class="pop">render objects solid</div>
|
||||
</span>
|
||||
<span id="render-wire" class="j-center">
|
||||
<i class="fas fa-border-all"></i>
|
||||
<div class="pop">render objects wireframe</div>
|
||||
</span>
|
||||
<span id="render-ghost" class="a-center">
|
||||
<i class="fas fa-border-none"></i>
|
||||
<div class="pop">render objects transparent</div>
|
||||
</span>
|
||||
<span id="render-edges" class="a-center">
|
||||
<i class="fa-regular fa-square"></i>
|
||||
<div class="pop">trace edges</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mode-tools"></div>
|
||||
|
||||
<div id="mid" class="grow f-row">
|
||||
|
||||
<!-- left settings menu -->
|
||||
<div id="panel-left" class="f-col j-left">
|
||||
<!-- <div class="line-sep2"></div> -->
|
||||
<div id="slide-show"><span><i class="fa-solid fa-arrow-right"></i></span></div>
|
||||
<div class="f-col grow settings">
|
||||
<div id="panel-slide" class="f-col settings">
|
||||
<div id="all-devpro" class="set2-group"></div>
|
||||
<!-- FDM -->
|
||||
<div id="fdm-layers" class="set2-group mode-fdm"></div>
|
||||
<div id="fdm-walls" class="set2-group mode-fdm"></div>
|
||||
|
|
@ -373,30 +76,28 @@
|
|||
<div id="fdm-base" class="set2-group mode-fdm"></div>
|
||||
<div id="fdm-support" class="set2-group mode-fdm"></div>
|
||||
<div id="fdm-output" class="set2-group mode-fdm"></div>
|
||||
<div id="fdm-expert" class="set2-group mode-fdm"></div>
|
||||
<div id="fdm-expert" class="set2-group mode-fdm bottom"></div>
|
||||
<!-- CAM -->
|
||||
<div id="cam-tabs" class="set2-group mode-cam"></div>
|
||||
<div id="cam-stock" class="set2-group mode-cam"></div>
|
||||
<div id="cam-limits" class="set2-group mode-cam"></div>
|
||||
<div id="cam-output" class="set2-group mode-cam"></div>
|
||||
<div id="cam-origin" class="set2-group mode-cam"></div>
|
||||
<div id="cam-expert" class="set2-group mode-cam"></div>
|
||||
<div id="cam-expert" class="set2-group mode-cam bottom"></div>
|
||||
<!-- LASER / 2D Cut Tools -->
|
||||
<div id="lzr-slice" class="set2-group mode-laser"></div>
|
||||
<div id="lzr-surface" class="set2-group mode-laser"></div>
|
||||
<div id="lzr-knife" class="set2-group mode-laser"></div>
|
||||
<div id="lzr-layout" class="set2-group mode-laser"></div>
|
||||
<div id="lzr-output" class="set2-group mode-laser"></div>
|
||||
<div id="lzr-output" class="set2-group mode-laser bottom"></div>
|
||||
<!-- SLA -->
|
||||
<div id="sla-slice" class="set2-group mode-sla"></div>
|
||||
<div id="sla-layers" class="set2-group mode-sla"></div>
|
||||
<div id="sla-base" class="set2-group mode-sla"></div>
|
||||
<div id="sla-fill" class="set2-group mode-sla"></div>
|
||||
<div id="sla-support" class="set2-group mode-sla"></div>
|
||||
<div id="sla-output" class="set2-group mode-sla"></div>
|
||||
<div id="sla-output" class="set2-group mode-sla bottom"></div>
|
||||
</div>
|
||||
<div class="line-sep2"></div>
|
||||
<div class="chonk"></div>
|
||||
</div>
|
||||
|
||||
<!-- main workspace -->
|
||||
|
|
@ -422,7 +123,6 @@
|
|||
</div>
|
||||
<!-- CAM animation controls and readout -->
|
||||
<div id="layer-animate" class="f-col a-center set2-group hide"></div>
|
||||
<!-- <div id="layer-toolpos" class="f-row a-center hide"></div> -->
|
||||
</div>
|
||||
|
||||
<!-- allows right tray to slide/hide but still show speeds menu -->
|
||||
|
|
@ -432,21 +132,17 @@
|
|||
</div>
|
||||
<!-- vertical separation between workspace and right tray -->
|
||||
<div id="panel-right" class="f-col j-start settings">
|
||||
<div id="mode-info">
|
||||
<div><label lk="mi_devi">Device</label><span id="mode-device"></span></div>
|
||||
<div><label lk="mi_prof">Profile</label><span id="mode-profile"></span></div>
|
||||
</div>
|
||||
<div class="set2-group f-col">
|
||||
<details open>
|
||||
<summary class="set-header"><a>objects</a></summary>
|
||||
<div id="ws-widgets" class="f-col"></div>
|
||||
</details>
|
||||
</div>
|
||||
<div class="set2-group f-col mode-fdm">
|
||||
<div class="set2-group f-col mode-fdm bottom">
|
||||
<div class="set-header"><a>ranges</a></div>
|
||||
<div id="fdm-ranges" class="f-col"></div>
|
||||
</div>
|
||||
<div class="set2-group f-col mode-cam">
|
||||
<div class="set2-group f-col mode-cam bottom">
|
||||
<details open>
|
||||
<summary class="set-header mode-cam"><a>operation list</a></summary>
|
||||
<div id="camops" class="f-col a-stretch grow">
|
||||
|
|
@ -478,9 +174,6 @@
|
|||
</div>
|
||||
</details>
|
||||
</div>
|
||||
<div class="grow"></div>
|
||||
<div class="line-sep2"></div>
|
||||
<div class="chonk"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -65,6 +65,18 @@ self.lang['da-dk'] = {
|
|||
view: "vis", // left view pop menu
|
||||
wire: "tråd", // left render pop menu
|
||||
volume: "volumen", // device build area
|
||||
al_menu: "juster",
|
||||
re_menu: "render",
|
||||
sx_menu: "markering",
|
||||
ed_menu: "rediger",
|
||||
face_left: "venstre side",
|
||||
re_edgs: "skift kanter",
|
||||
al_menu: "juster",
|
||||
re_menu: "render",
|
||||
sx_menu: "markering",
|
||||
ed_menu: "rediger",
|
||||
face_left: "venstre side",
|
||||
re_edgs: "skift kanter",
|
||||
|
||||
acct_xpo: ["lav en sikkerhedskopi af din enhed","og enhedsprofiler med mulighed for at","medtage arbejdsområdeobjekter og positioner"],
|
||||
|
||||
|
|
@ -80,8 +92,8 @@ self.lang['da-dk'] = {
|
|||
rc_xobj: "eksporter OBJ",
|
||||
rc_xstl: "eksporter STL",
|
||||
sb_info: ["print hastighed","i mm/s"],
|
||||
rc_merg: "flet objekt meshes",
|
||||
rc_splt: "isoler legemer",
|
||||
rc_merg: "flet objekter",
|
||||
rc_splt: "isoler objekter",
|
||||
|
||||
// DEVICE MENU and related dialogs
|
||||
dm_sldt: "vælg en enhedstype",
|
||||
|
|
@ -712,6 +724,10 @@ self.lang['da-dk'] = {
|
|||
ct_nabl_s: "auto",
|
||||
ct_nabl_l: ["auto generer radiale tapper","projekteret fra del center","ved brug af antal og vinkel forskydning"],
|
||||
|
||||
// CNC AREA OP
|
||||
ca_fini_s: "efterbehandlings snit",
|
||||
ca_fini_l: "skærebane der følger konturen af den endelige del. tillader præcis step over ved rydning af større område.",
|
||||
|
||||
// OUTPUT
|
||||
ou_menu: "output",
|
||||
|
||||
|
|
|
|||
|
|
@ -66,6 +66,18 @@ self.lang['de-de'] = {
|
|||
view: "Ansicht", // left view pop menu
|
||||
wire: "Drahtansicht", // left render pop menu
|
||||
volume: "Volumen", // device build area
|
||||
al_menu: "ausrichten",
|
||||
re_menu: "rendern",
|
||||
sx_menu: "auswahl",
|
||||
ed_menu: "Bearbeiten",
|
||||
face_left: "linke seite",
|
||||
re_edgs: "kanten umschalten",
|
||||
al_menu: "ausrichten",
|
||||
re_menu: "rendern",
|
||||
sx_menu: "auswahl",
|
||||
ed_menu: "Bearbeiten",
|
||||
face_left: "linke seite",
|
||||
re_edgs: "kanten umschalten",
|
||||
|
||||
acct_xpo: ["Lege ein Backup Deiner Geräte","und Geräte-Profile an, mit der","Option, den Arbeitsbereich und","mit Objekten und Anordnung zu speichern"],
|
||||
|
||||
|
|
@ -81,8 +93,8 @@ self.lang['de-de'] = {
|
|||
rc_xobj: "Als OBJ exportieren",
|
||||
rc_xstl: "Als STL exportieren",
|
||||
sb_info: ["Druckgeschwindigkeit","in mm/s"],
|
||||
rc_merg: "Objekt-Meshes zusammenführen",
|
||||
rc_splt: "Körper isolieren",
|
||||
rc_merg: "Objekte zusammenführen",
|
||||
rc_splt: "Objekte isolieren",
|
||||
|
||||
// DEVICE MENU and related dialogs
|
||||
dm_sldt: "Wähle einen Geräte-Typ aus",
|
||||
|
|
@ -713,6 +725,10 @@ self.lang['de-de'] = {
|
|||
ct_nabl_s: "Auto",
|
||||
ct_nabl_l: ["Radiale Haltestege automatisch generieren","projiziert von Teil-Mitte","mit Anzahl und Winkel-Offset"],
|
||||
|
||||
// CNC AREA OP
|
||||
ca_fini_s: "Schlichtwerkzeugweg",
|
||||
ca_fini_l: "Schneidpfad, der der Kontur des Endteils folgt. ermöglicht präzisen Vorschub beim Räumen größerer Bereiche.",
|
||||
|
||||
// OUTPUT
|
||||
ou_menu: "Ausgabe",
|
||||
|
||||
|
|
|
|||
|
|
@ -67,6 +67,18 @@ self.lang['en-us'] = {
|
|||
view: "view", // left view pop menu
|
||||
wire: "wire", // left render pop menu
|
||||
volume: "volume", // device build area
|
||||
al_menu: "align",
|
||||
re_menu: "render",
|
||||
sx_menu: "selection",
|
||||
ed_menu: "edit",
|
||||
face_left: "face left",
|
||||
re_edgs: "toggle edges",
|
||||
al_menu: "align",
|
||||
re_menu: "render",
|
||||
sx_menu: "selection",
|
||||
ed_menu: "edit",
|
||||
face_left: "face left",
|
||||
re_edgs: "toggle edges",
|
||||
|
||||
acct_xpo: ["make a backup of your device","and device profiles with the","option to include workspace","objects and positions"],
|
||||
|
||||
|
|
@ -82,8 +94,8 @@ self.lang['en-us'] = {
|
|||
rc_xobj: "export OBJ",
|
||||
rc_xstl: "export STL",
|
||||
sb_info: ["print speed","in mm/s"],
|
||||
rc_merg: "merge object meshes",
|
||||
rc_splt: "isolate bodies",
|
||||
rc_merg: "merge objects",
|
||||
rc_splt: "isolate objects",
|
||||
|
||||
// DEVICE MENU and related dialogs
|
||||
dm_sldt: "select a device type",
|
||||
|
|
@ -472,7 +484,7 @@ self.lang['en-us'] = {
|
|||
sp_offs_s: "part offset",
|
||||
sp_offs_l: ["offset from part","in millimeters"],
|
||||
sp_gaps_s: "layer gap",
|
||||
sp_gaps_l: ["number of layers","offset from part"],
|
||||
sp_gaps_l: ["add a layer gap between support and part"],
|
||||
sp_span_s: "max span",
|
||||
sp_span_l: ["unsupported span that causes","a new support to be generated","in millimeters"],
|
||||
sp_angl_s: "angle",
|
||||
|
|
@ -504,6 +516,8 @@ self.lang['en-us'] = {
|
|||
cc_thru_l: ["allow trace depth to extend thru","the bottom of the selected area","use with negative Z bottom"],
|
||||
cc_offd_s: "offset",
|
||||
cc_offd_l: ["overrides default offset distance (which is the tool radius) when set to any value but zero"],
|
||||
cc_offz_s: "offset z",
|
||||
cc_offz_l: ["shift add or subtract Z values by this amount","in workspace units"],
|
||||
cc_feed_s: "feed rate",
|
||||
cc_feed_l: ["max cutting speed in","workspace units / minute"],
|
||||
cc_plng_s: "plunge rate",
|
||||
|
|
@ -549,6 +563,8 @@ self.lang['en-us'] = {
|
|||
co_menu: "outline",
|
||||
co_merg_s: "merge overlap",
|
||||
co_merg_l: ["merge overlapping lines to prevent overcutting into adjacent solids"],
|
||||
co_igno_s: "ignore part",
|
||||
co_igno_l: ["do not constrain cutting areas","to part boundaries. this allows","using the part as negative space"],
|
||||
co_dogb_s: "dogbones",
|
||||
co_dogb_l: ["insert dogbone cuts","into inside corners"],
|
||||
co_dogr_s: "reverse bones",
|
||||
|
|
@ -724,6 +740,8 @@ self.lang['en-us'] = {
|
|||
ca_sang_l: "crossing angle on the XY plane for contour lines",
|
||||
ca_wall_s: "walls",
|
||||
ca_wall_l: ["perform a single pass along vertical faces. leave interior spaces. similar to outline operation"],
|
||||
ca_fini_s: "finish cut",
|
||||
ca_fini_l: "cutting path that follows the contour of the final part. allows for precise step over when clearing a larger area.",
|
||||
|
||||
// OUTPUT
|
||||
ou_menu: "output",
|
||||
|
|
|
|||
|
|
@ -66,6 +66,18 @@ self.lang['es-es'] = {
|
|||
view: "vista", // left view pop menu
|
||||
wire: "alambre", // left render pop menu
|
||||
volume: "volumen", // device build area
|
||||
al_menu: "alinear",
|
||||
re_menu: "renderizar",
|
||||
sx_menu: "selección",
|
||||
ed_menu: "editar",
|
||||
face_left: "cara izquierda",
|
||||
re_edgs: "alternar bordes",
|
||||
al_menu: "alinear",
|
||||
re_menu: "renderizar",
|
||||
sx_menu: "selección",
|
||||
ed_menu: "editar",
|
||||
face_left: "cara izquierda",
|
||||
re_edgs: "alternar bordes",
|
||||
|
||||
acct_xpo: ["hace una copia de seguridad de su dispositivo","y perfiles de dispositivo con la ","opción de incluir espacio de trabajo","objetos y posiciones"],
|
||||
|
||||
|
|
@ -81,8 +93,8 @@ self.lang['es-es'] = {
|
|||
rc_xobj: "exportar OBJ",
|
||||
rc_xstl: "exportar STL",
|
||||
sb_info: ["velocidad de impresión","en mm/s"],
|
||||
rc_merg: "fusionar mallas de objeto",
|
||||
rc_splt: "aislar cuerpos",
|
||||
rc_merg: "fusionar objetos",
|
||||
rc_splt: "aislar objetos",
|
||||
|
||||
// DEVICE MENU and related dialogs
|
||||
dm_sldt: "seleccionar un tipo de dispositivo",
|
||||
|
|
@ -713,6 +725,10 @@ self.lang['es-es'] = {
|
|||
ct_nabl_s: "automático",
|
||||
ct_nabl_l: ["generar automáticamente pestañas radiales","proyectadas desde el centro de la pieza","usando cantidad y desplazamiento de ángulo"],
|
||||
|
||||
// CNC AREA OP
|
||||
ca_fini_s: "corte de acabado",
|
||||
ca_fini_l: "trayectoria de corte que sigue el contorno de la pieza final. permite un paso preciso al limpiar un área más grande.",
|
||||
|
||||
// OUTPUT
|
||||
ou_menu: "salida",
|
||||
|
||||
|
|
|
|||
|
|
@ -66,6 +66,18 @@ self.lang['fr-fr'] = {
|
|||
view: "vue", // left view pop menu
|
||||
wire: "filaire", // left render pop menu
|
||||
volume: "volume", // device build area
|
||||
al_menu: "aligner",
|
||||
re_menu: "rendu",
|
||||
sx_menu: "sélection",
|
||||
ed_menu: "éditer",
|
||||
face_left: "face gauche",
|
||||
re_edgs: "basculer arêtes",
|
||||
al_menu: "aligner",
|
||||
re_menu: "rendu",
|
||||
sx_menu: "sélection",
|
||||
ed_menu: "éditer",
|
||||
face_left: "face gauche",
|
||||
re_edgs: "basculer arêtes",
|
||||
|
||||
acct_xpo: ["faites une sauvegarde de votre appareil","et des profils d'appareil avec","l'option d'inclure les objets","de l'espace de travail et les positions"],
|
||||
|
||||
|
|
@ -81,8 +93,8 @@ self.lang['fr-fr'] = {
|
|||
rc_xobj: "exporter OBJ",
|
||||
rc_xstl: "exporter STL",
|
||||
sb_info: ["vitesse d'impression","en mm/s"],
|
||||
rc_merg: "fusionner les maillages d'objets",
|
||||
rc_splt: "isoler les corps",
|
||||
rc_merg: "fusionner les objets",
|
||||
rc_splt: "isoler les objets",
|
||||
|
||||
// DEVICE MENU and related dialogs
|
||||
dm_sldt: "sélectionner un type d'appareil",
|
||||
|
|
@ -713,6 +725,10 @@ self.lang['fr-fr'] = {
|
|||
ct_nabl_s: "auto",
|
||||
ct_nabl_l: ["générer automatiquement des pattes radiales","projetées depuis le centre de la pièce","en utilisant le nombre et le décalage d'angle"],
|
||||
|
||||
// CNC AREA OP
|
||||
ca_fini_s: "coupe de finition",
|
||||
ca_fini_l: "chemin de coupe qui suit le contour de la pièce finale. permet un pas précis lors du dégagement d'une zone plus large.",
|
||||
|
||||
// OUTPUT
|
||||
ou_menu: "sortie",
|
||||
|
||||
|
|
|
|||
|
|
@ -65,6 +65,18 @@ self.lang['pl-pl'] = {
|
|||
view: "widok", // left view pop menu
|
||||
wire: "szkielet", // left render pop menu
|
||||
volume: "objętość", // device build area
|
||||
al_menu: "wyrównaj",
|
||||
re_menu: "renderuj",
|
||||
sx_menu: "zaznaczenie",
|
||||
ed_menu: "edytuj",
|
||||
face_left: "lewa ściana",
|
||||
re_edgs: "przełącz krawędzie",
|
||||
al_menu: "wyrównaj",
|
||||
re_menu: "renderuj",
|
||||
sx_menu: "zaznaczenie",
|
||||
ed_menu: "edytuj",
|
||||
face_left: "lewa ściana",
|
||||
re_edgs: "przełącz krawędzie",
|
||||
|
||||
acct_xpo: ["zrób kopię zapasową urządzenia","i profilów urządzenia z","opcją dołączenia obiektów","w przestrzeni roboczej i ich pozycji"],
|
||||
|
||||
|
|
@ -80,8 +92,8 @@ self.lang['pl-pl'] = {
|
|||
rc_xobj: "eksportuj OBJ",
|
||||
rc_xstl: "eksportuj STL",
|
||||
sb_info: ["prędkość druku","w mm/s"],
|
||||
rc_merg: "połącz siatki obiektu",
|
||||
rc_splt: "wyizoluj bryły",
|
||||
rc_merg: "połącz obiekty",
|
||||
rc_splt: "wyizoluj obiekty",
|
||||
|
||||
// DEVICE MENU and related dialogs
|
||||
dm_sldt: "wybierz typ urządzenia",
|
||||
|
|
@ -712,6 +724,10 @@ self.lang['pl-pl'] = {
|
|||
ct_nabl_s: "auto",
|
||||
ct_nabl_l: ["automatycznie generuj wypustki promieniowe","rzutowane od środka części","używając liczby i przesunięcia kąta"],
|
||||
|
||||
// CNC AREA OP
|
||||
ca_fini_s: "cięcie wykończeniowe",
|
||||
ca_fini_l: "ścieżka cięcia podążająca za konturem ostatecznej części. pozwala na precyzyjny krok przy usuwaniu większego obszaru.",
|
||||
|
||||
// OUTPUT
|
||||
ou_menu: "wyjście",
|
||||
|
||||
|
|
|
|||
|
|
@ -66,6 +66,18 @@ self.lang['pt-pt'] = {
|
|||
view: "visualizar", // left view pop menu
|
||||
wire: "aramado", // left render pop menu
|
||||
volume: "volume", // device build area
|
||||
al_menu: "alinhar",
|
||||
re_menu: "renderizar",
|
||||
sx_menu: "seleção",
|
||||
ed_menu: "editar",
|
||||
face_left: "face esquerda",
|
||||
re_edgs: "alternar arestas",
|
||||
al_menu: "alinhar",
|
||||
re_menu: "renderizar",
|
||||
sx_menu: "seleção",
|
||||
ed_menu: "editar",
|
||||
face_left: "face esquerda",
|
||||
re_edgs: "alternar arestas",
|
||||
|
||||
acct_xpo: ["faça uma cópia de segurança do seu dispositivo","e perfis de dispositivo com a opção","de incluir objectos e posições","do espaço de trabalho"],
|
||||
|
||||
|
|
@ -81,8 +93,8 @@ self.lang['pt-pt'] = {
|
|||
rc_xobj: "exportar OBJ",
|
||||
rc_xstl: "exportar STL",
|
||||
sb_info: ["velocidade de impressão","em mm/s"],
|
||||
rc_merg: "fundir malhas de objecto",
|
||||
rc_splt: "isolar corpos",
|
||||
rc_merg: "fundir objectos",
|
||||
rc_splt: "isolar objectos",
|
||||
|
||||
// DEVICE MENU and related dialogs
|
||||
dm_sldt: "seleccione um tipo de dispositivo",
|
||||
|
|
@ -713,6 +725,10 @@ self.lang['pt-pt'] = {
|
|||
ct_nabl_s: "automático",
|
||||
ct_nabl_l: ["gerar automaticamente abas radiais","projectadas do centro da peça","usando número e desvio de ângulo"],
|
||||
|
||||
// CNC AREA OP
|
||||
ca_fini_s: "corte de acabamento",
|
||||
ca_fini_l: "caminho de corte que segue o contorno da peça final. permite passo preciso ao limpar uma área maior.",
|
||||
|
||||
// OUTPUT
|
||||
ou_menu: "saída",
|
||||
|
||||
|
|
|
|||
|
|
@ -65,6 +65,12 @@ self.lang['zh'] = {
|
|||
view: "视图", // 左侧视图弹出菜单
|
||||
wire: "线框", // 左侧渲染弹出菜单
|
||||
volume: "体积", // 设备构建区域
|
||||
al_menu: "对齐",
|
||||
re_menu: "渲染",
|
||||
sx_menu: "选择",
|
||||
ed_menu: "编辑",
|
||||
face_left: "面朝左",
|
||||
re_edgs: "切换边线",
|
||||
|
||||
acct_xpo: ["备份您的设备及","设备配置文件,","可选择包括工作区、","对象及位置"],
|
||||
|
||||
|
|
@ -80,8 +86,8 @@ self.lang['zh'] = {
|
|||
rc_xobj: "导出OBJ",
|
||||
rc_xstl: "导出STL",
|
||||
sb_info: ["打印速度","单位:毫米/秒"],
|
||||
rc_merg: "合并对象网格",
|
||||
rc_splt: "分离实体",
|
||||
rc_merg: "合并对象",
|
||||
rc_splt: "分离对象",
|
||||
|
||||
// 设备菜单及相关对话框
|
||||
dm_sldt: "选择设备类型",
|
||||
|
|
@ -712,6 +718,10 @@ self.lang['zh'] = {
|
|||
ct_nabl_s: "自动",
|
||||
ct_nabl_l: ["自动生成径向连接片","从零件中心投影","使用数量和角度偏移"],
|
||||
|
||||
// 数控区域操作
|
||||
ca_fini_s: "精加工切削",
|
||||
ca_fini_l: "遵循最终零件轮廓的切削路径。允许在清理较大区域时精确步进。",
|
||||
|
||||
// 输出
|
||||
ou_menu: "输出",
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "Kiri:Moto 4.6.0",
|
||||
"name": "Kiri:Moto 4.7.0",
|
||||
"short_name": "Kiri:Moto",
|
||||
"description": "Slicer for 3D printers, CNC mills, laser cutters and more",
|
||||
"start_url": "/boot/index.html",
|
||||
|
|
@ -9,7 +9,6 @@
|
|||
"background_color": "#ffffff",
|
||||
"orientation": "landscape-primary",
|
||||
"icons": [
|
||||
{ "src": "./logo-cube-512.png", "type": "image/png", "sizes": "512x512" },
|
||||
{ "src": "./logo-cube-144.png", "type": "image/png", "sizes": "144x144" }
|
||||
{ "src": "/icon/kirimoto.png", "type": "image/png", "sizes": "512x512" }
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
:root {
|
||||
--accent: #5a9fd4;
|
||||
--menu-blue: #0079ff;
|
||||
--menu-back: rgba(255,255,255,0.55);
|
||||
--dark-menu-back: rgba(80,80,80,0.75);
|
||||
--border: #888;
|
||||
--dark-border: #888;
|
||||
--selected: rgba(0,255,0,0.5);
|
||||
--selected-hover: rgba(0,255,0,0.8);
|
||||
--menu-back: rgba(60,60,60,0.75);
|
||||
--border: #444;
|
||||
--selected: rgba(90,159,212,0.5);
|
||||
--selected-hover: rgba(90,159,212,1);
|
||||
}
|
||||
|
||||
@font-face {
|
||||
|
|
@ -54,12 +53,18 @@ input {
|
|||
font-family: sans-serif;
|
||||
font-weight: normal;
|
||||
font-size: larger;
|
||||
background: #0f1116;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
#app.booting #top,
|
||||
#app.booting #app-body {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
#app-body {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
|
@ -75,8 +80,13 @@ input {
|
|||
right: 0;
|
||||
bottom: 0;
|
||||
position: fixed;
|
||||
background-color: #fff;
|
||||
background: radial-gradient(circle at 50% 40%, #1a2436 0%, #0f1116 60%, #0a0c11 100%);
|
||||
color: #d7deea;
|
||||
font-family: 'Russo One', sans-serif;
|
||||
font-size: 16px;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
text-shadow: 0 1px 2px rgba(0,0,0,0.35);
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
|
@ -84,6 +94,7 @@ input {
|
|||
#container {
|
||||
z-index: 1;
|
||||
position: fixed;
|
||||
background: #0f1116;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
|
@ -94,14 +105,9 @@ input {
|
|||
overflow: hidden;
|
||||
}
|
||||
|
||||
.dark #top {
|
||||
color: #eee;
|
||||
background-color: var(--dark-menu-back);
|
||||
}
|
||||
|
||||
#top {
|
||||
z-index: 50;
|
||||
color: #000;
|
||||
color: #eee;
|
||||
font-size: 14px;
|
||||
flex-direction: row;
|
||||
background-color: var(--menu-back);
|
||||
|
|
@ -126,6 +132,10 @@ input {
|
|||
margin-bottom: -14px !important;
|
||||
}
|
||||
|
||||
#modal button {
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 2px 3px 2px 3px;
|
||||
border: 1px solid rgba(150,150,150,0.5);
|
||||
|
|
@ -134,12 +144,8 @@ button {
|
|||
outline: none;
|
||||
}
|
||||
|
||||
.dark button:hover {
|
||||
background-color: rgba(220,220,220,1);
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: rgba(210,210,210,1);
|
||||
background-color: rgba(220,220,220,1);
|
||||
}
|
||||
|
||||
/** misc ui **/
|
||||
|
|
@ -168,47 +174,85 @@ button:hover {
|
|||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.menu, #top-right > div {
|
||||
.title {
|
||||
cursor: default;
|
||||
align-self: stretch;
|
||||
align-items: center;
|
||||
margin: 4px 0 4px 0;
|
||||
padding: 4px 12px 4px 12px;
|
||||
border-radius: 0;
|
||||
user-select: none;
|
||||
font-weight: bold;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.menubar-separator {
|
||||
align-self: stretch;
|
||||
align-items: center;
|
||||
background: rgba(255,255,255,0.2);
|
||||
margin: 5px;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
.toolbar-separator {
|
||||
align-self: stretch;
|
||||
align-items: center;
|
||||
background: rgba(255,255,255,0.2);
|
||||
margin: 2px;
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
.menu, #top-doc-name, #top-mode-label {
|
||||
cursor: default;
|
||||
align-self: stretch;
|
||||
align-items: center;
|
||||
padding: 8px 12px 8px 12px;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 6px;
|
||||
user-select: none;
|
||||
margin: 2px;
|
||||
}
|
||||
|
||||
.dark .menu hr {
|
||||
.menu hr {
|
||||
border-top: 0.5px solid rgba(255,255,255,0.5);
|
||||
}
|
||||
|
||||
.menu:hover, .menu-items > div:hover, .tools i:hover {
|
||||
background-color: var(--menu-blue);
|
||||
border: 1px solid var(--accent);
|
||||
background-color: rgba(0,0,0,0.5);
|
||||
}
|
||||
|
||||
.menu:hover .menu-items {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.dark .menu-items {
|
||||
background: #666;
|
||||
border: 1px solid #999;
|
||||
}
|
||||
|
||||
.menu-items {
|
||||
display: none;
|
||||
position: absolute;
|
||||
flex-direction: column;
|
||||
border: 1px solid #bbb;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 6px;
|
||||
background: #eee;
|
||||
background: var(--menu-back);
|
||||
padding: 4px;
|
||||
top: 100%;
|
||||
top: calc(100% + 3px);
|
||||
left: 0;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
/* invisible bridge between menu label and pop menu */
|
||||
.menu-items::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: -20px;
|
||||
left: -10px;
|
||||
right: -10px;
|
||||
height: calc(100% + 20px);
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.menu-items > div {
|
||||
gap: 15px;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 6px;
|
||||
padding: 4px 8px 4px 8px;
|
||||
}
|
||||
|
|
@ -221,39 +265,6 @@ button:hover {
|
|||
display: flex;
|
||||
}
|
||||
|
||||
#mode-label {
|
||||
display: none;
|
||||
position: absolute;
|
||||
text-transform: capitalize;
|
||||
padding: 2px 4px 2px 4px;
|
||||
background-color: rgba(0,200,0,0.35);
|
||||
border: 1px solid rgba(0,0,0,0.25);
|
||||
border-radius: 3px;
|
||||
transform: translateX(-50%);
|
||||
top: calc(100% + 2px);
|
||||
left: 50%;
|
||||
}
|
||||
|
||||
#mode-label:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -10px; /* Adjust to position the caret above the menu */
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
border-width: 5px;
|
||||
border-style: solid;
|
||||
border-color: transparent transparent #777 transparent;
|
||||
}
|
||||
|
||||
.dark #mode-label:before {
|
||||
border-color: transparent transparent #ddd transparent;
|
||||
}
|
||||
|
||||
.dark #mode-label {
|
||||
background-color: rgba(0,200,0,0.65);
|
||||
border-color: rgba(255,255,255,0.25);
|
||||
}
|
||||
|
||||
#top-mid {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
|
@ -268,6 +279,30 @@ button:hover {
|
|||
gap: 8px;
|
||||
}
|
||||
|
||||
#top-mode-label {
|
||||
color: var(--accent);
|
||||
white-space: nowrap;
|
||||
justify-content: flex-end;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
#top-doc-name {
|
||||
cursor: pointer;
|
||||
max-width: 320px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
justify-content: flex-end;
|
||||
border-color: #404040;
|
||||
background-color: #202020;
|
||||
transition: border-color 0.15s, color 0.15s;
|
||||
}
|
||||
|
||||
#top-doc-name:hover {
|
||||
border-color: var(--accent);
|
||||
background-color: rgba(0,0,0,0.5);
|
||||
}
|
||||
|
||||
/** specific modal dialogs */
|
||||
|
||||
.export {
|
||||
|
|
@ -313,6 +348,52 @@ button:hover {
|
|||
text-align: center;
|
||||
}
|
||||
|
||||
.doc-open-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-width: 420px;
|
||||
max-height: 60vh;
|
||||
overflow: auto;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.doc-open-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
border: 1px solid var(--menu-border, #bbb);
|
||||
border-radius: 6px;
|
||||
padding: 6px 8px;
|
||||
}
|
||||
|
||||
.doc-open-row:hover {
|
||||
background-color: var(--menu-blue);
|
||||
}
|
||||
|
||||
.doc-open-name {
|
||||
flex: 1;
|
||||
text-align: left;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.doc-open-empty {
|
||||
padding: 8px;
|
||||
text-align: center;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.doc-open-new {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.doc-open-del {
|
||||
min-width: 28px;
|
||||
padding: 2px 8px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.image-import {
|
||||
flex-direction: column;
|
||||
gap: 3px;
|
||||
|
|
@ -348,12 +429,18 @@ button:hover {
|
|||
}
|
||||
|
||||
#modal_frame {
|
||||
border-radius: 4px !important;
|
||||
background-color: #fff !important;
|
||||
background-color: rgba(30,30,30,0.9);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 4px;
|
||||
color: white;
|
||||
flex-direction: column;
|
||||
padding: 0 !important; /* override common below */
|
||||
/* z-index: 51; */
|
||||
gap: 2px;
|
||||
margin: 0 0 2px 0;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
#modal_frame a {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
#modal_frame > div {
|
||||
|
|
@ -362,10 +449,10 @@ button:hover {
|
|||
}
|
||||
|
||||
#modal_title {
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom: 1px solid gray;
|
||||
background-color: rgba(0,0,0,0.2);
|
||||
color: white;
|
||||
border-radius: 2px;
|
||||
border-bottom: 1px solid rgba(0,0,0,0.2);
|
||||
background-color: rgba(60,60,60,0.7);
|
||||
font-family: 'Russo One', monospace;
|
||||
font-size: smaller;
|
||||
justify-content: center;
|
||||
|
|
@ -374,13 +461,13 @@ button:hover {
|
|||
|
||||
#modal_title_close {
|
||||
position: absolute;
|
||||
color: #555;
|
||||
color: #999;
|
||||
right: 3px;
|
||||
top: 2px;
|
||||
}
|
||||
|
||||
#modal_title_close:hover {
|
||||
color: black;
|
||||
color: #eee;
|
||||
}
|
||||
|
||||
/** welcome dialog **/
|
||||
|
|
@ -394,13 +481,12 @@ button:hover {
|
|||
}
|
||||
|
||||
.welcome a {
|
||||
color: #038;
|
||||
border-radius: 3px;
|
||||
padding: 0 10px 0 10px;
|
||||
padding: 2px 10px 2px 10px;
|
||||
}
|
||||
|
||||
.welcome a:hover {
|
||||
background-color: #ddd;
|
||||
background-color: #111;
|
||||
}
|
||||
|
||||
.welcome .choice {
|
||||
|
|
@ -412,18 +498,18 @@ button:hover {
|
|||
.settings {
|
||||
gap: 5px;
|
||||
display: grid;
|
||||
background-color: #fff;
|
||||
/* background-color: #fff; */
|
||||
grid: min-content 1fr / min-content 1fr;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
}
|
||||
|
||||
.settings > div {
|
||||
display: grid;
|
||||
background-color: #f5f5f5;
|
||||
background-color: rgba(0,0,0,0.1);
|
||||
grid: min-content 1fr / min-content 1fr;
|
||||
white-space: nowrap;
|
||||
align-items: center;
|
||||
border: 1px solid #ddd;
|
||||
border: 1px solid rgba(100,100,100,0.7);
|
||||
border-radius: 3px;
|
||||
padding: 3px;
|
||||
}
|
||||
|
|
@ -433,7 +519,7 @@ button:hover {
|
|||
text-align: center;
|
||||
margin-bottom: 5px;
|
||||
border-radius: 3px;
|
||||
background-color: #ccc;
|
||||
background-color: rgba(100,100,100,0.8);
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
|
@ -477,12 +563,8 @@ button:hover {
|
|||
|
||||
/** common look & feel */
|
||||
|
||||
.dark #modal_frame, .dark #actions > div, .dark #grouplist > div {
|
||||
border: 1px solid #999;
|
||||
}
|
||||
|
||||
#modal_frame, #actions > div, #grouplist > div {
|
||||
border: 1px solid gray;
|
||||
#actions > div, #grouplist > div {
|
||||
border: 1px solid #555;
|
||||
border-radius: 3px;
|
||||
margin: 0 0 2px 0;
|
||||
padding: 3px;
|
||||
|
|
@ -502,24 +584,18 @@ button:hover {
|
|||
background-color: var(--selected-hover);
|
||||
}
|
||||
|
||||
/* .dark .head {
|
||||
/* .head {
|
||||
color: #000 !important;
|
||||
} */
|
||||
|
||||
/** slide in/out logging window **/
|
||||
|
||||
.dark #logger {
|
||||
border-color: var(--dark-border);
|
||||
background-color: var(--dark-menu-back);
|
||||
color: #ddd;
|
||||
}
|
||||
|
||||
#logger {
|
||||
border-top: 1px solid var(--border);
|
||||
border-right: 1px solid var(--border);
|
||||
background-color: var(--menu-back);
|
||||
display: none;
|
||||
color: #555;
|
||||
color: #ddd;
|
||||
min-width: 300px;
|
||||
flex-direction: column;
|
||||
position: absolute;
|
||||
|
|
@ -561,28 +637,24 @@ button:hover {
|
|||
border-right: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.dark .tools {
|
||||
border-color: var(--dark-border);
|
||||
background-color: var(--dark-menu-back);
|
||||
}
|
||||
|
||||
.dark .tools > div {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.tools {
|
||||
align-items: flex-start;
|
||||
background-color: var(--menu-back);
|
||||
padding-top: 2px;
|
||||
}
|
||||
|
||||
.tools > div {
|
||||
color: #fff;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
margin: 2px;
|
||||
}
|
||||
|
||||
.tools i {
|
||||
padding: 9px;
|
||||
border-bottom: 1px solid var(--border);
|
||||
border: 1px solid transparent;
|
||||
border-radius: 6px;
|
||||
/* border-bottom: 1px solid var(--border); */
|
||||
}
|
||||
|
||||
.tool > div {
|
||||
|
|
@ -597,11 +669,6 @@ button:hover {
|
|||
width: 100%;
|
||||
}
|
||||
|
||||
.dark .tool label {
|
||||
background-color: var(--dark-menu-back);
|
||||
border: 1px solid var(--dark-border);
|
||||
}
|
||||
|
||||
.tool label:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
|
|
@ -610,10 +677,6 @@ button:hover {
|
|||
transform: translateY(-50%);
|
||||
border-width: 6px;
|
||||
border-style: solid;
|
||||
border-color: transparent #777 transparent transparent;
|
||||
}
|
||||
|
||||
.dark .tool label:before {
|
||||
border-color: transparent #ddd transparent transparent;
|
||||
}
|
||||
|
||||
|
|
@ -715,14 +778,10 @@ button:hover {
|
|||
margin: 0;
|
||||
}
|
||||
|
||||
.dark #grouplist .models .square > svg {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#grouplist .models .square > svg {
|
||||
aspect-ratio: 1;
|
||||
max-height: 20px;
|
||||
color: #666;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#grouplist .models > div {
|
||||
|
|
@ -851,21 +910,15 @@ button:hover {
|
|||
transform: translate(-50%, 50%);
|
||||
}
|
||||
|
||||
.dark #pinner {
|
||||
background-color: rgba(255,255,255,0.15);
|
||||
border-color: rgba(255,255,255,0.25);
|
||||
border-top-color: rgba(255,255,255,0.6);
|
||||
}
|
||||
|
||||
#pinner {
|
||||
z-index: 5000;
|
||||
display: none;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
background-color: rgba(0,0,0,0.1);
|
||||
border: 12px solid rgba(0,0,0,0.15);
|
||||
background-color: rgba(255,255,255,0.15);
|
||||
border: 12px solid rgba(255,255,255,0.25);
|
||||
border-radius: 50%;
|
||||
border-top-color: rgba(0,0,0,0.6);
|
||||
border-top-color: rgba(255,255,255,0.6);
|
||||
animation: spin 1.5s linear infinite;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="en" data-app="mesh" data-theme="dark">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="author" content="Stewart Allen">
|
||||
|
|
@ -11,15 +11,16 @@
|
|||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://grid.space/mesh/">
|
||||
<title>Mesh:Tool</title>
|
||||
<link rel="icon" href="favicon.ico">
|
||||
<link rel="icon" href="/icon/meshtool.png">
|
||||
<link rel="stylesheet" type="text/css" href="/moto/palette.css">
|
||||
<link rel="stylesheet" type="text/css" href="index.css">
|
||||
<link href="../font/css/all.min.css" rel="stylesheet">
|
||||
<link href="../fon2/bootstrap-icons.min.css" rel="stylesheet">
|
||||
<!-- <script type="module" src="/lib/mesh/work.js"></script> -->
|
||||
<!-- <script src="../lib/ext/earcut.js" type="module"></script> -->
|
||||
<script src="../lib/ext/tween.js"></script>
|
||||
<script src="../font/js/all.min.js" crossorigin="anonymous"></script>
|
||||
<script src="../lib/main/mesh.js" type="module"></script>
|
||||
<!-- <script src="/lib/ext/earcut.js" type="module"></script> -->
|
||||
<script src="/lib/ext/tween.js"></script>
|
||||
<script src="/font/js/all.min.js" crossorigin="anonymous"></script>
|
||||
<script src="/lib/main/mesh.js" type="module"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
|
|
|
|||
172
web/moto/menubar.css
Normal file
172
web/moto/menubar.css
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
#menubar {
|
||||
position: relative;
|
||||
z-index: 50;
|
||||
background-color: var(--menubar-back);
|
||||
color: var(--menubar-fore);
|
||||
text-transform: capitalize;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid var(--border-gray);
|
||||
}
|
||||
|
||||
#menubar.top{
|
||||
border-top: 1px solid var(--border-gray);
|
||||
}
|
||||
|
||||
.menubar-separator {
|
||||
align-self: stretch;
|
||||
align-items: center;
|
||||
background: var(--menubar-vsep);
|
||||
margin: 5px;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
.menubar-appname,
|
||||
.menubar-mode {
|
||||
color: var(--appname-blue);
|
||||
cursor: default;
|
||||
align-self: stretch;
|
||||
align-items: center;
|
||||
margin: 4px 0 4px 0;
|
||||
padding: 4px 12px 4px 12px;
|
||||
border-radius: 0;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.menubar-appname {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#menubar .top-menu {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#menubar .top-menu > span {
|
||||
cursor: default;
|
||||
position: relative;
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
align-items: center;
|
||||
margin: 2px;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 6px;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
#menubar .top-menu > span:hover {
|
||||
border-color: var(--appname-blue);
|
||||
background-color: var(--menu-hover-bg);
|
||||
}
|
||||
|
||||
#menubar .top-menu > span:hover .top-menu-drop {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#menubar .top-menu > span > .pop {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
z-index: 90;
|
||||
margin-top: 3px;
|
||||
border: 1px solid var(--border-gray);
|
||||
border-radius: 6px;
|
||||
background: var(--menubar-back);
|
||||
color: var(--menubar-fore);
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
#menubar .top-menu > span > .pop::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 6px;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#menubar .top-menu > span:hover > .pop {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#menubar #ft-rotate.pop,
|
||||
#menubar #ft-scale.pop {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#menubar #tool-rotate:hover #ft-rotate.pop,
|
||||
#menubar #tool-scale:hover #ft-scale.pop {
|
||||
display: grid;
|
||||
}
|
||||
|
||||
#menubar .top-menu label,
|
||||
#menubar .top-menu svg {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
#menubar .top-menu hr {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
border-top: 0.5px solid var(--menubar-vsep);
|
||||
}
|
||||
|
||||
#menubar .top-menu-drop {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
z-index: 90;
|
||||
font-family: sans-serif;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
#menubar .top-menu-right {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#menubar .top-menu-drop .content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6px;
|
||||
border: 1px solid var(--border-gray);
|
||||
border-radius: 6px;
|
||||
background: var(--menubar-back);
|
||||
color: var(--menubar-fore);
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
#menubar .top-menu-drop .content > div {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 15px;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 6px;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
#menubar .top-menu-drop .content > div > label {
|
||||
flex-grow: 1;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#menubar .top-menu-drop .content > div > span {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
#menubar .top-menu-drop .content > div:hover {
|
||||
border-color: var(--appname-blue);
|
||||
background-color: var(--menu-hover-bg);
|
||||
}
|
||||
|
||||
#menubar .top-menu-drop .content > div.selected,
|
||||
#menubar .top-menu > span.selected {
|
||||
border-color: var(--appname-blue);
|
||||
background-color: var(--menu-active-bg);
|
||||
}
|
||||
71
web/moto/palette.css
Normal file
71
web/moto/palette.css
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
/* Shared color tokens for Kiri / Mesh / Void.
|
||||
* Phase 1: define semantic palette + compatibility aliases.
|
||||
* App CSS keeps final say by overriding locally as migration proceeds.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--appname-blue: #5a9fd4;
|
||||
--menubar-vsep: rgba(0,0,0,0.2);
|
||||
--menubar-back: rgba(245,245,245,1);
|
||||
--menubar-fore: rgba(20,20,20,1.0);
|
||||
--menu-hover-bg: rgba(250,250,250,1);
|
||||
--menu-active-bg: rgba(90,159,212,0.4);
|
||||
--border-gray: rgba(128,128,128,0.5);
|
||||
--ui-text: #222;
|
||||
--ui-text-muted: #888;
|
||||
--ui-border: #ddd;
|
||||
--ui-border-strong: #777;
|
||||
--ui-hr: #ddd;
|
||||
--ui-input-bg: #e8e8e8;
|
||||
--ui-input-fg: #222;
|
||||
--ui-input-disabled-bg: #ddd;
|
||||
--ui-input-disabled-fg: #000;
|
||||
--ui-select-bg: #e8e8e8;
|
||||
--ui-option-selected-bg: var(--appname-blue);
|
||||
--ui-textarea-bg: #fff;
|
||||
--ui-textarea-fg: #222;
|
||||
--ui-button-bg: #eee;
|
||||
--ui-button-fg: #222;
|
||||
--ui-button-border: #ccc;
|
||||
--ui-button-hover-bg: #5a9fd4;
|
||||
--ui-button-hover-fg: #fff;
|
||||
--ui-button-disabled-fg: #999;
|
||||
--ui-dialog-bg: rgba(255,255,255,0.85);
|
||||
--ui-dialog-fg: #222;
|
||||
--ui-dialog-border-top: rgba(180,180,180,1);
|
||||
--ui-dialog-border-bottom: rgba(180,180,180,1);
|
||||
}
|
||||
|
||||
:root.dark,
|
||||
:root[data-theme="dark"] {
|
||||
--appname-blue: #5a9fd4;
|
||||
--menubar-vsep: rgba(255,255,255,0.2);
|
||||
--menubar-back: rgba(40,40,40,1);
|
||||
--menubar-fore: rgba(250,250,250,1.0);
|
||||
--menu-hover-bg: rgba(0,0,0,0.5);
|
||||
--menu-active-bg: rgba(90,159,212,0.5);
|
||||
--border-gray: rgba(128,128,128,0.5);
|
||||
--ui-text: #fff;
|
||||
--ui-text-muted: #888;
|
||||
--ui-border: #444;
|
||||
--ui-border-strong: #666;
|
||||
--ui-hr: #555;
|
||||
--ui-input-bg: #333;
|
||||
--ui-input-fg: #fff;
|
||||
--ui-input-disabled-bg: #444;
|
||||
--ui-input-disabled-fg: #888;
|
||||
--ui-select-bg: #333;
|
||||
--ui-option-selected-bg: var(--blue-1, #5a9fd4);
|
||||
--ui-textarea-bg: #333;
|
||||
--ui-textarea-fg: #fff;
|
||||
--ui-button-bg: #555;
|
||||
--ui-button-fg: #fff;
|
||||
--ui-button-border: #777;
|
||||
--ui-button-hover-bg: var(--blue-2, #7e99b7);
|
||||
--ui-button-hover-fg: #000;
|
||||
--ui-button-disabled-fg: #888;
|
||||
--ui-dialog-bg: rgba(60,60,60,0.85);
|
||||
--ui-dialog-fg: #fff;
|
||||
--ui-dialog-border-top: rgba(100,100,100,1);
|
||||
--ui-dialog-border-bottom: rgba(100,100,100,1);
|
||||
}
|
||||
70
web/moto/theme.css
Normal file
70
web/moto/theme.css
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
/* Shared theme rules.
|
||||
* Phase 1 scope: Kiri fundamentals only.
|
||||
*/
|
||||
|
||||
:root[data-app="kiri"] {
|
||||
color: var(--ui-text);
|
||||
}
|
||||
|
||||
:root[data-app="kiri"] hr {
|
||||
border-color: var(--ui-hr);
|
||||
}
|
||||
|
||||
:root[data-app="kiri"] input,
|
||||
:root[data-app="kiri"] select,
|
||||
:root[data-app="kiri"] option {
|
||||
border-style: solid;
|
||||
border-width: 0px;
|
||||
border-color: var(--ui-border);
|
||||
background-color: var(--ui-input-bg);
|
||||
color: var(--ui-input-fg);
|
||||
border-bottom-width: 1px;
|
||||
}
|
||||
|
||||
:root[data-app="kiri"] select {
|
||||
background-color: var(--ui-select-bg);
|
||||
}
|
||||
|
||||
:root[data-app="kiri"] option:checked {
|
||||
background-color: var(--ui-option-selected-bg);
|
||||
}
|
||||
|
||||
:root[data-app="kiri"] input[disabled] {
|
||||
border-color: var(--ui-border-strong);
|
||||
background-color: var(--ui-input-disabled-bg);
|
||||
color: var(--ui-input-disabled-fg);
|
||||
}
|
||||
|
||||
:root[data-app="kiri"] textarea {
|
||||
background-color: var(--ui-textarea-bg);
|
||||
color: var(--ui-textarea-fg);
|
||||
}
|
||||
|
||||
:root[data-app="kiri"] button {
|
||||
color: var(--ui-button-fg);
|
||||
background-color: var(--ui-button-bg);
|
||||
border-color: var(--ui-button-border);
|
||||
}
|
||||
|
||||
:root[data-app="kiri"] button:not([disabled]):hover {
|
||||
background-color: var(--ui-button-hover-bg);
|
||||
color: var(--ui-button-hover-fg);
|
||||
}
|
||||
|
||||
:root[data-app="kiri"] button[disabled] {
|
||||
color: var(--ui-button-disabled-fg);
|
||||
}
|
||||
|
||||
:root[data-app="kiri"] #dialog {
|
||||
background-color: var(--ui-dialog-bg);
|
||||
color: var(--ui-dialog-fg);
|
||||
border-top-color: var(--ui-dialog-border-top);
|
||||
border-bottom-color: var(--ui-dialog-border-bottom);
|
||||
}
|
||||
|
||||
:root[data-app="kiri"] #modal,
|
||||
:root[data-app="kiri"] #dialog,
|
||||
:root[data-app="kiri"] #modal select,
|
||||
:root[data-app="kiri"] #dialog select {
|
||||
color: var(--ui-dialog-fg) !important;
|
||||
}
|
||||
30
web/void/index.html
Normal file
30
web/void/index.html
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-app="void" data-theme="dark">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Void:Form</title>
|
||||
<link rel="stylesheet" href="/moto/palette.css">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<link rel="icon" type="image/png" href="/icon/voidform.png">
|
||||
<script src="/lib/ext/tween.js"></script>
|
||||
<script src="/lib/main/void.js" type="module"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<div id="curtain">
|
||||
<div class="loading">
|
||||
<div class="spinner"></div>
|
||||
<div class="text">Loading Void:Form...</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="top-bar"></div>
|
||||
<div id="content">
|
||||
<div id="left-panel"></div>
|
||||
<div id="container">
|
||||
<div id="sketch-overlay" class="hidden"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
1234
web/void/style.css
Normal file
1234
web/void/style.css
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue