feat: per-task image/annotations, annotation editor toolbar, Tailwind compiled

- Add per-task file upload with image preview in task editor
- Add dedicated annotation editor page (task_drawing.html) with Fabric.js
- Add color picker, stroke width, and line dash controls to annotation toolbar
- Apply property changes to selected objects in real-time
- Disable style controls until a drawing tool or object is selected
- Remove zoom/pan from annotation toolbar (simplified UX)
- Auto-switch to select mode after placing annotation elements
- Show annotation overlay on task image previews (read-only canvas)
- Add file proxy route in measure blueprint for task file access
- Add file_path/file_type fields to TaskCreate/TaskUpdate Pydantic schemas
- Replace Tailwind CDN with compiled CSS (tailwind.config.js with full shades)
- Fix Alpine.js x-init crash: extract annotations JSON to <script> tags
  (recipe_preview.html, task_execute.html) to avoid HTML attribute breakage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Adriano
2026-02-08 01:20:34 +01:00
parent b075115cef
commit 6ea94cca47
14 changed files with 1290 additions and 555 deletions
+9 -1
View File
@@ -34,6 +34,14 @@
{% endblock %}
{% block content %}
<script>
window.__taskAnnotations = {};
{% for task in recipe.tasks %}
{% if task.annotations_json %}
window.__taskAnnotations[{{ task.id }}] = {{ task.annotations_json|tojson }};
{% endif %}
{% endfor %}
</script>
<div class="container mx-auto px-4 sm:px-6 lg:px-8 py-8 max-w-5xl"
x-data="recipePreview()"
x-cloak>
@@ -208,7 +216,7 @@
x-data="annotationViewer()"
x-init="
imageUrl = '/maker/api/files/{{ task.file_path }}';
annotations = {{ task.annotations_json|default('null')|tojson }};
annotations = window.__taskAnnotations[{{ task.id }}] || null;
$nextTick(() => init());
">
<canvas x-ref="annotationCanvas"></canvas>