{# Vendor assets via asset() helper. Default mode = CDN (jsDelivr) with SRI; #} {# when `ntasker assets fetch` ran and `assets_mode=local|auto`, they come from #} {# the user-data dir under /static/vendor instead. SRI is emitted in both modes #} {# (local mode: tamper detection). `crossorigin` is only required for CDN loading. #} {# Frontend i18n bridge: js_strings is built server-side per request. #} {# Alpine magic property `$i18n('key')` is registered just below. #}
{# Sidebar: project + tag filter (full-width checkboxes). Hidden on mobile (<768px). #} {# Sticky-positioned aside outside the .page wrapper. Tabler/Bootstrap surface vars #} {# drive the bg so dark-mode behaves. Sidebar has its own scroll context; the main #} {# page-wrapper scrolls independently. #} {# Main content (full-width inside its column) #}
{# Tabler page-header: title left, view-mode switcher right. #} {# The two pseudo-tabs (Task list / Kanban) drive ``viewMode`` -- #} {# they are NOT bootstrap nav-tabs because the page wrappers below #} {# swap their entire layout, not just a tab-pane. #}
{# v2.0: projects_dir-Banner is gone -- projects emerge #} {# implicitly from tasks; no filesystem setup required. #} {# New-task form #}

{{ t('New task') }}

{# Free-form text + datalist autocomplete: pick an existing #} {# project or type a new name -- the project is created #} {# implicitly when the task is saved. Empty = cross-project. #}
{# Tag-Input: AlpineJS-driven combobox. Tags as badges, free-text input, autocomplete dropdown. #}
{# Filter bar: search only -- project, tag, phase filters live in the sidebar. #}
{# Tabs -- list view only. Kanban renders its own column layout below. #} {# Task list #}

{{ t('No tasks') }}

{# ===== Kanban board view ===== #} {# 4 columns: 3 phase columns (planned/wip/review) + 1 collapsible #} {# Done column derived from status='done'. Drag a card between #} {# columns -> PATCH phase (or status when crossing into Done). #} {# Same filters (search / sidebar) feed the same task list; #} {# the kanban view just groups it by phase. #}
{# Edit modal #}
{# Toast container (Tabler/Bootstrap-compatible). Toasts injected by app.js. #}
{# Shared autocomplete for every project text-input on the page. Populated #} {# from the same projectNames list the sidebar uses; reactive via Alpine. #}