|
@@ -203,6 +203,49 @@ input:checked + .slider:before {
|
|
|
animation: spin 1s linear infinite;
|
|
animation: spin 1s linear infinite;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/* Collapsible section styles */
|
|
|
|
|
+.section-header {
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
+ user-select: none;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.section-header:hover {
|
|
|
|
|
+ background-color: #f8fafc;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.dark .section-header:hover {
|
|
|
|
|
+ background-color: #333333;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.section-toggle-icon {
|
|
|
|
|
+ transition: transform 0.2s ease-in-out;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.section-header.collapsed .section-toggle-icon {
|
|
|
|
|
+ transform: rotate(-90deg);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.section-header.collapsed {
|
|
|
|
|
+ border-bottom: none;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.section-content {
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ transition: max-height 0.3s ease-in-out, opacity 0.2s ease-in-out, padding 0.2s ease-in-out;
|
|
|
|
|
+ max-height: 2000px;
|
|
|
|
|
+ opacity: 1;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.section-content.collapsed {
|
|
|
|
|
+ max-height: 0;
|
|
|
|
|
+ opacity: 0;
|
|
|
|
|
+ padding-top: 0 !important;
|
|
|
|
|
+ padding-bottom: 0 !important;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
/* Time slot specific styles */
|
|
/* Time slot specific styles */
|
|
|
.time-slot-item {
|
|
.time-slot-item {
|
|
|
background-color: #f8fafc;
|
|
background-color: #f8fafc;
|
|
@@ -303,11 +346,13 @@ input:checked + .slider:before {
|
|
|
</div>
|
|
</div>
|
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
|
<h2
|
|
<h2
|
|
|
- class="text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
|
|
+ class="section-header text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
+ onclick="toggleSection(this)"
|
|
|
>
|
|
>
|
|
|
- Device Connection
|
|
|
|
|
|
|
+ <span>Device Connection</span>
|
|
|
|
|
+ <span class="material-icons section-toggle-icon text-slate-400">expand_more</span>
|
|
|
</h2>
|
|
</h2>
|
|
|
- <div>
|
|
|
|
|
|
|
+ <div class="section-content">
|
|
|
<div
|
|
<div
|
|
|
class="flex items-center gap-4 px-6 py-5 hover:bg-slate-50 transition-colors"
|
|
class="flex items-center gap-4 px-6 py-5 hover:bg-slate-50 transition-colors"
|
|
|
>
|
|
>
|
|
@@ -393,14 +438,75 @@ input:checked + .slider:before {
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</section>
|
|
</section>
|
|
|
|
|
+ <!-- Machine Settings Section -->
|
|
|
|
|
+ <section id="machineSection" class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
|
|
|
+ <h2
|
|
|
|
|
+ class="section-header collapsed text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
+ onclick="toggleSection(this)"
|
|
|
|
|
+ >
|
|
|
|
|
+ <span>Machine Settings</span>
|
|
|
|
|
+ <span class="material-icons section-toggle-icon text-slate-400">expand_more</span>
|
|
|
|
|
+ </h2>
|
|
|
|
|
+ <div class="section-content collapsed px-6 py-5 space-y-6">
|
|
|
|
|
+ <!-- Table Type Override -->
|
|
|
|
|
+ <div class="space-y-3">
|
|
|
|
|
+ <label class="text-sm font-medium text-slate-700 flex items-center gap-2">
|
|
|
|
|
+ <span class="material-icons text-slate-600 text-base">precision_manufacturing</span>
|
|
|
|
|
+ Table Type
|
|
|
|
|
+ </label>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- Current detected type display -->
|
|
|
|
|
+ <div id="detectedTableTypeContainer" class="flex items-center gap-2 text-sm text-slate-600 bg-slate-50 rounded-lg p-3">
|
|
|
|
|
+ <span class="material-icons text-slate-500 text-base">info</span>
|
|
|
|
|
+ <span>Detected: <span id="detectedTableType" class="font-medium text-slate-800">Unknown</span></span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="flex gap-3 items-center">
|
|
|
|
|
+ <select
|
|
|
|
|
+ id="tableTypeSelect"
|
|
|
|
|
+ class="form-select flex-1 resize-none overflow-hidden rounded-lg text-slate-900 focus:outline-0 focus:ring-2 focus:ring-sky-500 border border-slate-300 bg-white focus:border-sky-500 h-10 placeholder:text-slate-400 px-4 text-base font-medium leading-normal transition-colors"
|
|
|
|
|
+ >
|
|
|
|
|
+ <option value="">Auto-detect (use detected type)</option>
|
|
|
|
|
+ </select>
|
|
|
|
|
+ <button
|
|
|
|
|
+ id="saveTableType"
|
|
|
|
|
+ class="flex items-center justify-center gap-2 min-w-[100px] cursor-pointer rounded-lg h-10 px-4 bg-sky-600 hover:bg-sky-700 text-white text-sm font-medium leading-normal tracking-[0.015em] transition-colors flex-shrink-0"
|
|
|
|
|
+ >
|
|
|
|
|
+ <span class="material-icons text-lg">save</span>
|
|
|
|
|
+ <span class="truncate">Save</span>
|
|
|
|
|
+ </button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <p class="text-xs text-slate-500">
|
|
|
|
|
+ Override the automatically detected table type. This affects gear ratio calculations and homing behavior. Leave as "Auto-detect" unless you need to manually specify your table type.
|
|
|
|
|
+ </p>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- Info box -->
|
|
|
|
|
+ <div class="text-xs text-slate-600 bg-blue-50 border border-blue-200 rounded-lg p-3">
|
|
|
|
|
+ <div class="flex items-start gap-2">
|
|
|
|
|
+ <span class="material-icons text-blue-600 text-base">info</span>
|
|
|
|
|
+ <div>
|
|
|
|
|
+ <p class="font-medium text-blue-800">Table Type Detection</p>
|
|
|
|
|
+ <ul class="mt-1 space-y-1 text-blue-700">
|
|
|
|
|
+ <li>• Table type is normally detected automatically from GRBL settings</li>
|
|
|
|
|
+ <li>• Use override if auto-detection is incorrect for your hardware</li>
|
|
|
|
|
+ <li>• Changes take effect on next connection/homing</li>
|
|
|
|
|
+ </ul>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </section>
|
|
|
<!-- Homing Configuration Section -->
|
|
<!-- Homing Configuration Section -->
|
|
|
<section id="homingSection" class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
<section id="homingSection" class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
|
<h2
|
|
<h2
|
|
|
- class="text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
|
|
+ class="section-header collapsed text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
+ onclick="toggleSection(this)"
|
|
|
>
|
|
>
|
|
|
- Homing Configuration
|
|
|
|
|
|
|
+ <span>Homing Configuration</span>
|
|
|
|
|
+ <span class="material-icons section-toggle-icon text-slate-400">expand_more</span>
|
|
|
</h2>
|
|
</h2>
|
|
|
- <div class="px-6 py-5 space-y-6">
|
|
|
|
|
|
|
+ <div class="section-content collapsed px-6 py-5 space-y-6">
|
|
|
<!-- Homing Mode Selection -->
|
|
<!-- Homing Mode Selection -->
|
|
|
<div class="space-y-3">
|
|
<div class="space-y-3">
|
|
|
<label class="text-sm font-medium text-slate-700 flex items-center gap-2">
|
|
<label class="text-sm font-medium text-slate-700 flex items-center gap-2">
|
|
@@ -533,11 +639,13 @@ input:checked + .slider:before {
|
|
|
</section>
|
|
</section>
|
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
|
<h2
|
|
<h2
|
|
|
- class="text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
|
|
+ class="section-header collapsed text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
+ onclick="toggleSection(this)"
|
|
|
>
|
|
>
|
|
|
- Application Settings
|
|
|
|
|
|
|
+ <span>Application Settings</span>
|
|
|
|
|
+ <span class="material-icons section-toggle-icon text-slate-400">expand_more</span>
|
|
|
</h2>
|
|
</h2>
|
|
|
- <div class="px-6 py-5 space-y-6">
|
|
|
|
|
|
|
+ <div class="section-content collapsed px-6 py-5 space-y-6">
|
|
|
<label class="flex flex-col gap-1.5">
|
|
<label class="flex flex-col gap-1.5">
|
|
|
<span class="text-slate-700 text-sm font-medium leading-normal"
|
|
<span class="text-slate-700 text-sm font-medium leading-normal"
|
|
|
>Application Name</span
|
|
>Application Name</span
|
|
@@ -613,11 +721,13 @@ input:checked + .slider:before {
|
|
|
</section>
|
|
</section>
|
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
|
<h2
|
|
<h2
|
|
|
- class="text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
|
|
+ class="section-header collapsed text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
+ onclick="toggleSection(this)"
|
|
|
>
|
|
>
|
|
|
- Pattern Clearing
|
|
|
|
|
|
|
+ <span>Pattern Clearing</span>
|
|
|
|
|
+ <span class="material-icons section-toggle-icon text-slate-400">expand_more</span>
|
|
|
</h2>
|
|
</h2>
|
|
|
- <div class="px-6 py-5 space-y-6">
|
|
|
|
|
|
|
+ <div class="section-content collapsed px-6 py-5 space-y-6">
|
|
|
<p class="text-sm text-slate-600">
|
|
<p class="text-sm text-slate-600">
|
|
|
Customize the clearing behavior used when transitioning between patterns. Set custom patterns and speed to control how sand is distributed.
|
|
Customize the clearing behavior used when transitioning between patterns. Set custom patterns and speed to control how sand is distributed.
|
|
|
</p>
|
|
</p>
|
|
@@ -730,11 +840,13 @@ input:checked + .slider:before {
|
|
|
</section>
|
|
</section>
|
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
|
<h2
|
|
<h2
|
|
|
- class="text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
|
|
+ class="section-header collapsed text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
+ onclick="toggleSection(this)"
|
|
|
>
|
|
>
|
|
|
- LED Controller Configuration
|
|
|
|
|
|
|
+ <span>LED Controller Configuration</span>
|
|
|
|
|
+ <span class="material-icons section-toggle-icon text-slate-400">expand_more</span>
|
|
|
</h2>
|
|
</h2>
|
|
|
- <div class="px-6 py-5 space-y-6">
|
|
|
|
|
|
|
+ <div class="section-content collapsed px-6 py-5 space-y-6">
|
|
|
<!-- LED Provider Selection -->
|
|
<!-- LED Provider Selection -->
|
|
|
<div class="flex flex-col gap-2">
|
|
<div class="flex flex-col gap-2">
|
|
|
<span class="text-slate-700 text-sm font-medium leading-normal">LED Provider</span>
|
|
<span class="text-slate-700 text-sm font-medium leading-normal">LED Provider</span>
|
|
@@ -865,11 +977,13 @@ input:checked + .slider:before {
|
|
|
<!-- MQTT Configuration Section -->
|
|
<!-- MQTT Configuration Section -->
|
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
|
<h2
|
|
<h2
|
|
|
- class="text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
|
|
+ class="section-header collapsed text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
+ onclick="toggleSection(this)"
|
|
|
>
|
|
>
|
|
|
- Home Assistant Integration
|
|
|
|
|
|
|
+ <span>Home Assistant Integration</span>
|
|
|
|
|
+ <span class="material-icons section-toggle-icon text-slate-400">expand_more</span>
|
|
|
</h2>
|
|
</h2>
|
|
|
- <div class="px-6 py-5 space-y-6">
|
|
|
|
|
|
|
+ <div class="section-content collapsed px-6 py-5 space-y-6">
|
|
|
<!-- MQTT Enable Toggle -->
|
|
<!-- MQTT Enable Toggle -->
|
|
|
<div class="flex items-center justify-between">
|
|
<div class="flex items-center justify-between">
|
|
|
<div class="flex-1">
|
|
<div class="flex-1">
|
|
@@ -1057,11 +1171,13 @@ input:checked + .slider:before {
|
|
|
|
|
|
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
|
<h2
|
|
<h2
|
|
|
- class="text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
|
|
+ class="section-header collapsed text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
+ onclick="toggleSection(this)"
|
|
|
>
|
|
>
|
|
|
- Auto-play on Boot
|
|
|
|
|
|
|
+ <span>Auto-play on Boot</span>
|
|
|
|
|
+ <span class="material-icons section-toggle-icon text-slate-400">expand_more</span>
|
|
|
</h2>
|
|
</h2>
|
|
|
- <div class="px-6 py-5 space-y-6">
|
|
|
|
|
|
|
+ <div class="section-content collapsed px-6 py-5 space-y-6">
|
|
|
<div class="flex items-center justify-between">
|
|
<div class="flex items-center justify-between">
|
|
|
<div class="flex-1">
|
|
<div class="flex-1">
|
|
|
<h3 class="text-slate-700 text-base font-medium leading-normal">Enable Auto-play on Boot</h3>
|
|
<h3 class="text-slate-700 text-base font-medium leading-normal">Enable Auto-play on Boot</h3>
|
|
@@ -1167,11 +1283,13 @@ input:checked + .slider:before {
|
|
|
</section>
|
|
</section>
|
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
<section class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
|
<h2
|
|
<h2
|
|
|
- class="text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
|
|
+ class="section-header collapsed text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
+ onclick="toggleSection(this)"
|
|
|
>
|
|
>
|
|
|
- Still Sands
|
|
|
|
|
|
|
+ <span>Still Sands</span>
|
|
|
|
|
+ <span class="material-icons section-toggle-icon text-slate-400">expand_more</span>
|
|
|
</h2>
|
|
</h2>
|
|
|
- <div class="px-6 py-5 space-y-6">
|
|
|
|
|
|
|
+ <div class="section-content collapsed px-6 py-5 space-y-6">
|
|
|
<div class="flex items-center justify-between">
|
|
<div class="flex items-center justify-between">
|
|
|
<div class="flex-1">
|
|
<div class="flex-1">
|
|
|
<h3 class="text-slate-700 text-base font-medium leading-normal">Enable Still Sands</h3>
|
|
<h3 class="text-slate-700 text-base font-medium leading-normal">Enable Still Sands</h3>
|
|
@@ -1364,11 +1482,13 @@ input:checked + .slider:before {
|
|
|
</section>
|
|
</section>
|
|
|
<section id="software-version-section" class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
<section id="software-version-section" class="bg-white rounded-xl shadow-sm overflow-hidden">
|
|
|
<h2
|
|
<h2
|
|
|
- class="text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
|
|
+ class="section-header collapsed text-slate-800 text-xl sm:text-2xl font-semibold leading-tight tracking-[-0.01em] px-6 py-4 border-b border-slate-200"
|
|
|
|
|
+ onclick="toggleSection(this)"
|
|
|
>
|
|
>
|
|
|
- Software Version
|
|
|
|
|
|
|
+ <span>Software Version</span>
|
|
|
|
|
+ <span class="material-icons section-toggle-icon text-slate-400">expand_more</span>
|
|
|
</h2>
|
|
</h2>
|
|
|
- <div>
|
|
|
|
|
|
|
+ <div class="section-content collapsed">
|
|
|
<div class="flex items-center gap-4 px-6 py-5">
|
|
<div class="flex items-center gap-4 px-6 py-5">
|
|
|
<div
|
|
<div
|
|
|
class="text-slate-600 flex items-center justify-center rounded-lg bg-slate-100 shrink-0 size-12"
|
|
class="text-slate-600 flex items-center justify-center rounded-lg bg-slate-100 shrink-0 size-12"
|