企业级组件系统 · 新资源

Tabler 设计系统.

原生 Tabler 项目日志,采用实际的 1.6 主题变量、时间线卡片、数据网格上下文、模态框验证,以及可接收本地检查点的明暗主题组合。

OpenDesign 指南9 个章节34 条参考条目原始应用指南
01

Tabler 设计系统界面预览

查看设计决策和封面方案,添加经过验证的检查点,并切换原生颜色模式。

Atlas 项目日志打开完整示例
Tabler 1.6.1 编译后的 CSS 及其内置模态框 JavaScript。原始项目内容与封面设计方案。· 实现参考
02

Tabler 设计系统设计参考

Tabler 1.6.1 编译后的 CSS 变量。此版本使用 OKLCH 基础色值,并在语义角色中使用 light-dark()/color-mix();不应将较早版本基于十六进制值的 Tabler 示例视为同一主题。以下为实际安装的默认值。

默认状态色和操作色

来源
名称 / 规则值 / 配置用途
--tblr-primaryoklch(54.6% 0.1724 254.2deg)主要操作角色。
--tblr-secondaryoklch(55.55% 0 0deg)次要角色。
--tblr-successoklch(67.38% 0.1885 145.43deg)成功角色。
--tblr-infooklch(66.26% 0.1358 246.81deg)信息角色。
--tblr-warningoklch(77.02% 0.1658 71.02deg)警告角色。
--tblr-dangeroklch(58.29% 0.1941 25.59deg)危险角色。
--tblr-purpleoklch(57.83% 0.2186 319.15deg)此应用中的原型类别颜色。
--tblr-body-colorlight-dark(oklch(26.86% 0 0deg), oklch(92.19% 0 0deg))文本会适配当前配色方案。
--tblr-body-bglight-dark(oklch(98.51% 0 0deg), oklch(20.46% 0 0deg))页面背景会适配配色方案。
--tblr-bg-surfacelight-dark(var(--tblr-bg-surface-primary), var(--tblr-gray-800))卡片/界面表面背景角色。

正文排版与圆角比例

来源
名称 / 规则值 / 配置用途
--tblr-font-sans-serifsystem-ui, -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif已安装版本中的系统无衬线字体栈。
--tblr-body-font-size0.875rem默认值相当于浏览器根字号为 16px 时的 14px。
--tblr-body-font-weight400常规正文字重。
--tblr-body-line-height1.4285714286按默认正文大小计算约为 20px。
--tblr-border-radius6px默认 6px 圆角。
--tblr-border-radius-sm4px小号圆角:4px。
--tblr-border-radius-lg8px较大圆角,8px。
--tblr-border-radius-xl1rem特大圆角,1rem。
--tblr-border-radius-pill100rem胶囊形圆角。

间距与原生时间线几何尺寸

来源
名称 / 规则值 / 配置用途
--tblr-spacer-00原生命名间距值。
--tblr-spacer-10.25rem原生命名间距值。
--tblr-spacer-20.5rem原生命名间距值。
--tblr-spacer-31rem原生命名间距值。
--tblr-spacer-41.5rem原生命名间距值。
--tblr-spacer-52rem原生命名间距值。
--tblr-spacer-62.5rem原生命名间距值。
--tblr-page-paddingvar(--tblr-spacer-3)页面/时间线间距变量;响应式覆盖规则可能会改变它。
--tblr-card-spacer-x1.25rem默认卡片正文水平内边距。
--tblr-card-spacer-y1.25rem默认卡片正文垂直内边距。
--tblr-timeline-icon-size2.5rem默认根字号为 16px 时,图标节点为 40px。

原始期刊选项

来源
名称 / 规则值 / 配置用途
Project layoutcol-lg-8 + col-lg-4原生网格;从 lg 断点开始为两列。
Page padding32px; 24px 14px below 650px自定义应用内边距。
Journal title32px / 1.2; 27px on mobile原始页面标题覆盖样式。
Cover studies155px tall; 120px on mobile原始装饰性 CSS 插画。
03

Tabler 设计系统完整指南

实用指南,介绍如何为真实界面选择、应用和评审此系统。

DESIGN-tabler.md

完整指导、实现起点和源代码链接。

下载指南

Tabler 设计系统:使用与 Tabler 版本相匹配的主题

使用与 Tabler 版本匹配的主题

项目日志使用 Tabler 1.6.1 构建。其编译后的调色板采用 OKLCH 颜色,而语义变量使用 light-dark 和 color-mix。因此,本参考展示的是实际使用的表达式,而非照搬旧版 Bootstrap 或 Tabler 指南中的十六进制值。主要操作、状态徽标和界面表面角色均来自此已安装版本。

摘自本 OpenDesign 指南

Tabler 在 Bootstrap 的组件体系基础上,加入了自身的布局与信息展示模式。此示例将原生时间线、页面标题区、数据网格和头像类与常见的卡片、表单和模态框搭配使用。这些细节使其成为 Tabler 风格的组合,而不是仅换了标志的通用卡片网格。

阅读配套规范

Tabler 设计系统:配色模式会同时改变界面表面和文本

配色模式会同时改变界面表面和文本

主题控件会更改 html 元素上的 data-bs-theme,并更新自身的按下状态和操作标签。随后,Tabler 的语义表达式会选择浅色或深色值。对于这个简单的双状态示例,无需单独的 JavaScript 主题管理器,也不会在页面之外保存偏好设置。

Decision、Prototype 和 Review 使用原生蓝色、紫色和绿色色调类。即使不依赖颜色,文本标签也能传达含义。封面研究插画在两种模式下都保留原有的纸张质感配色;周围的卡片、页面和文本则使用组件实际主题。

阅读配套规范

Tabler 设计系统:紧凑的正文字体与独立的页面层级

正文排版紧凑,页面层级另行处理

默认正文大小为 0.875rem,行高接近 1.4286;根字号为 16px 时,文本约为 14px。已安装的字体栈采用系统无衬线字体,因此此预览无需加载远程字体。卡片标题和元数据保留其原生类,页面标题则使用原有的 32px 字号。

原生间距值依次为 0、0.25、0.5、1、1.5、2 和 2.5rem。它们是已安装 CSS 中的命名变量,并非推测出来的比例尺。卡片正文的默认内边距在两个方向上均为 1.25rem。时间线节点为 2.5rem,连接线则使用页面内边距变量,跨越条目之间的间隙。

阅读配套规范

Tabler 设计系统:时间线不只是垂直边框

时间线不只是垂直边框

每个检查点都是包含 timeline-event-icon 和 timeline-event-card 的时间线事件列表项。原生 CSS 会定位节点、绘制非末项之间的连接线,并根据节点宽度加页面内边距的距离偏移内容卡片。此示例不会用背景图伪造连线,也不依赖为每张卡片设置绝对定位。

卡片内容各不相同:一张记录结构决策,一张包含三幅实际封面研究图,另一张记录参考资料审阅。项目背景信息置于序列之外,因为格式和当前重点是持续有效的属性,而非按日期发生的事件。在较小屏幕上,侧栏会按文档顺序显示在时间线之后。

阅读配套规范

Tabler 设计系统:小型标签和值组使用数据网格

用 Datagrid 展示简洁的标签与值分组

“项目背景”卡片使用 datagrid-item、datagrid-title 和 datagrid-content 配对展示内容。Format、Team、Checkpoints 和 Current focus 是并列属性,因此使用紧凑的原生数据网格呈现,而不是使用带有重复行标题的表格。头像使用文本首字母,无需远程图片资源。

此示例只会修改上下文中的检查点数量。在本地添加一条记录后,数量从三变为四,而原始项目说明保持不变。这样可以避免捏造仪表板指标:数字与列表中可见的条目直接对应。

阅读配套规范

Tabler 设计系统:由内置模态框管理显示状态和焦点

可见性和焦点由内置模态框管理

点击“添加检查点”后,会通过 data-bs-toggle 和 data-bs-target 打开原生模态框。内置的 Tabler JavaScript 提供模态框实现。shown.bs.modal 事件监听器会在过渡完成、输入框实际显示后将焦点移至标题字段。“关闭”和“取消”按钮使用 data-bs-dismiss,因此会遵循相同的组件生命周期。

该模态框包含一个真实表单。必填项和长度限制会在提交处理程序运行前拒绝未填写完整的字段。处理程序还会检查去除首尾空格后的长度,因为全为空格的字符串不能作为有效标题或原因。验证失败时会保留已输入的文本,方便修改;只有成功添加条目后,表单才会重置。

  1. 打开模态框并提交空字段,检查第一个无效控件。
  2. 填写标题、选择检查点类型,并说明原因。
  3. 提交后确认新条目和上下文中的数量同步更新。

阅读配套规范

Tabler 设计系统:安全插入文本,并标明本地记录

以安全方式追加文本,并标明本地处理边界

应用会创建已知的卡片骨架,并通过 textContent 插入标题和原因。只有固定映射会根据选择框中的三种类型选择对应的色调类。用户提供的文本绝不会插入卡片 HTML。新条目会置于列表开头,并清楚标注为“本地记录”,而不是伪造服务器时间戳。

插入条目后,现有的模态框实例会关闭,并显示一条注明新检查点的状态通知。通知会明确说明项目服务并未更新。真正的协作日志需要持久化、作者身份和排序保证;仅在本地 DOM 中添加条目并不具备这些能力。

阅读配套规范

Tabler 设计系统:让时间线中的密集内容在窄屏上依然清晰易读

让窄屏时间线上的密集内容清晰易读

主网格使用 col-lg-8 和 col-lg-4。在原生 large 断点以下,项目上下文会移至日志下方。原有的小屏样式会缩小时间线的侧边距,让标题和徽章组可以换行,并缩放封面示例,同时保留相同的文本和操作。

图标列、卡片内边距和较长的标题挤在同一宽度内时,时间线可能会显得拥挤。移动端示例保留了节点作为稳定的视觉引导,同时采用紧凑的偏移量。原有的封面示例仍保留三张小图进行对比,因为它们之间的关系很重要;图注只是对相邻说明段落的补充。

  • 换行后,标题和检查点类型仍应清晰易读。
  • 保留原因文本,不要截断每个时间线条目。
  • 在移动端的主要阅读内容之后显示上下文卡片。

阅读配套规范

Tabler 设计系统:加载一组匹配的 CSS 和 JavaScript

加载一组匹配的 CSS 和 JavaScript

此配置使用 @tabler/core 1.6.1,并将其 dist 资源复制到本地 public 目录。请先加载 tabler.min.css,再加载应用样式表;先加载 tabler.min.js,再加载本地交互代码。再加入一个无关的 Bootstrap 包可能会导致相同的数据属性被初始化两次;此示例仅使用配套的 Tabler 包。

当前样式表使用现代颜色函数。将其用于有旧版浏览器支持要求的产品时,请查看 Tabler 的浏览器支持指南。本地示例已在 Chromium 中检查原生模态框验证、时间线插入、深色模式和 390px 布局;它不是生产部署,也不代表已在所有可能的浏览器中验证。

阅读配套规范

Tabler 设计系统组件示例

时间线、上下文卡片和条目模态框

原生时间线事件、卡片、数据网格、徽章和模态框的结构。

html
<main class="project-log"><header class="page-header d-print-none"><div class="row align-items-center"><div class="col"><div class="page-pretitle">TABLER · PROJECT JOURNAL</div><h1 class="page-title">Atlas field notes</h1><p class="text-secondary mt-2 mb-0">Decisions, prototypes and review checkpoints for a small editorial project.</p></div><div class="col-auto d-flex gap-2"><button id="theme" class="btn" aria-pressed="false">Dark mode</button><button id="add" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#entry-modal">Add checkpoint</button></div></div></header><div class="row g-4 mt-1"><section class="col-lg-8" aria-label="Project checkpoints"><ul id="timeline" class="timeline"><li class="timeline-event"><div class="timeline-event-icon bg-blue-lt" aria-hidden="true">AM</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">A clearer route through the issue</h2><span class="badge bg-blue-lt">Decision</span></div><div class="text-secondary small mb-3">Alex Morgan · 02 OCT</div><p class="mb-0">Group the field essays by landscape rather than author. Each chapter opens with a short map and a single question.</p></div></div></li><li class="timeline-event"><div class="timeline-event-icon bg-purple-lt" aria-hidden="true">JC</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">Three cover directions</h2><span class="badge bg-purple-lt">Prototype</span></div><div class="text-secondary small mb-3">Jules Chen · 01 OCT</div><div class="cover-strip" aria-label="Three original cover studies"><div><b>ATLAS</b><i></i><small>RIDGE / 01</small></div><div><b>ATLAS</b><i></i><small>RIVER / 02</small></div><div><b>ATLAS</b><i></i><small>PLAIN / 03</small></div></div><p class="mt-3 mb-0">Compare the quiet title treatment against the stronger geographic silhouette before selecting a direction.</p></div></div></li><li class="timeline-event"><div class="timeline-event-icon bg-green-lt" aria-hidden="true">SR</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">Reference package reviewed</h2><span class="badge bg-green-lt">Review</span></div><div class="text-secondary small mb-3">Sam Rivera · 30 SEP</div><p class="mb-0">Image captions, credit lines and print dimensions are recorded alongside each selected reference.</p></div></div></li></ul></section><aside class="col-lg-4"><div class="card"><div class="card-header"><h2 class="card-title">Project context</h2></div><div class="card-body"><div class="datagrid"><div class="datagrid-item"><div class="datagrid-title">Format</div><div class="datagrid-content">Editorial field journal</div></div><div class="datagrid-item"><div class="datagrid-title">Team</div><div class="datagrid-content"><span class="avatar avatar-xs me-1">AM</span><span class="avatar avatar-xs me-1">JC</span><span class="avatar avatar-xs">SR</span></div></div><div class="datagrid-item"><div class="datagrid-title">Checkpoints</div><div id="count" class="datagrid-content">3 recorded</div></div><div class="datagrid-item"><div class="datagrid-title">Current focus</div><div class="datagrid-content">Cover selection</div></div></div></div><div class="card-footer text-secondary">Sample project. New entries stay in this page.</div></div><div class="card mt-4"><div class="card-body"><h2 class="card-title">A useful checkpoint</h2><p class="text-secondary">Record the decision and the reason together. A future reader should understand what changed without reopening the meeting.</p><p class="mb-0 small">Choose Decision, Prototype or Review when adding a local entry.</p></div></div></aside></div><div id="notice" class="alert alert-success mt-3" role="status" hidden></div></main><div id="entry-modal" class="modal modal-blur fade" tabindex="-1" aria-labelledby="entry-title" aria-hidden="true"><div class="modal-dialog modal-dialog-centered"><div class="modal-content"><form id="entry-form"><div class="modal-header"><h2 id="entry-title" class="modal-title">Add a local checkpoint</h2><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button></div><div class="modal-body"><div class="mb-3"><label for="entry-name" class="form-label">Title</label><input id="entry-name" class="form-control" required minlength="5" maxlength="80" placeholder="What changed?"></div><div class="mb-3"><label for="entry-type" class="form-label">Kind</label><select id="entry-type" class="form-select"><option>Decision</option><option>Prototype</option><option>Review</option></select></div><div><label for="entry-detail" class="form-label">Reason or evidence</label><textarea id="entry-detail" class="form-control" required minlength="15" maxlength="360" rows="4" placeholder="Explain why this checkpoint matters."></textarea></div></div><div class="modal-footer"><button type="button" class="btn" data-bs-dismiss="modal">Cancel</button><button class="btn btn-primary" type="submit">Add to journal</button></div></form></div></div></div>

代码参考

  • 时间线采用真实列表,并按阅读顺序排列。
  • 项目上下文使用数据网格的标题/内容对。
  • 模态框触发器使用与内置 Bootstrap 兼容的数据 API。

已验证的本地检查点添加流程

模态框生命周期、安全文本插入、数量同步和颜色模式。

javascript
const q=s=>document.querySelector(s),modalEl=q('#entry-modal');let count=3;
modalEl.addEventListener('shown.bs.modal',()=>q('#entry-name').focus());
q('#theme').onclick=e=>{let dark=document.documentElement.dataset.bsTheme!=='dark';document.documentElement.dataset.bsTheme=dark?'dark':'light';e.currentTarget.setAttribute('aria-pressed',String(dark));e.currentTarget.textContent=dark?'Light mode':'Dark mode';};
q('#entry-form').onsubmit=e=>{e.preventDefault();const title=q('#entry-name'),detail=q('#entry-detail'),kind=q('#entry-type').value;if(title.value.trim().length<5){title.setCustomValidity('Use at least five non-space characters.');title.reportValidity();return;}if(detail.value.trim().length<15){detail.setCustomValidity('Use at least fifteen non-space characters.');detail.reportValidity();return;}const li=document.createElement('li');li.className='timeline-event';const color={Decision:'blue',Prototype:'purple',Review:'green'}[kind];li.innerHTML=`<div class="timeline-event-icon bg-${color}-lt" aria-hidden="true">YOU</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1"></h2><span class="badge bg-${color}-lt"></span></div><div class="text-secondary small mb-3">You · LOCAL ENTRY</div><p class="mb-0"></p></div></div>`;li.querySelector('h2').textContent=title.value.trim();li.querySelector('.badge').textContent=kind;li.querySelector('p').textContent=detail.value.trim();q('#timeline').prepend(li);q('#count').textContent=`${++count} recorded`;tabler.Modal.getInstance(modalEl).hide();q('#notice').hidden=false;q('#notice').textContent=`Local ${kind.toLowerCase()} added: ${title.value.trim()}. No project service was updated.`;e.target.reset();};['#entry-name','#entry-detail'].forEach(s=>q(s).oninput=e=>e.target.setCustomValidity(''));

代码参考

  • 用户输入的字符串通过 textContent 赋值。
  • 只有成功添加有效条目后,模态框才会重置。
  • 通知明确说明项目服务并未更新。

原始日志布局和封面示例

围绕原生 Tabler 组件进行响应式调整。

css
html,body{min-height:0;height:auto}body{margin:0}.project-log{max-width:1160px;padding:32px;margin:auto}.project-log .page-header{margin:0 0 24px}.project-log .page-title{font-size:32px;line-height:1.2}.cover-strip{display:flex;gap:12px}.cover-strip>div{flex:1;min-width:0;height:155px;padding:14px;background:#d6dfd2;color:#334834;position:relative;overflow:hidden;border-radius:4px}.cover-strip>div:nth-child(2){background:#cbdbe3;color:#2d4857}.cover-strip>div:nth-child(3){background:#e9d9bc;color:#6a5439}.cover-strip b{letter-spacing:.15em;font-size:14px}.cover-strip i{position:absolute;width:120px;height:90px;border-radius:50%;background:currentColor;opacity:.2;left:20%;top:38%;transform:rotate(-25deg)}.cover-strip>div:nth-child(2) i{width:40px;height:150px;top:30%;left:50%;border-radius:40%}.cover-strip>div:nth-child(3) i{width:160px;height:60px;top:45%;left:10%;border-radius:0;transform:rotate(-12deg)}.cover-strip small{position:absolute;bottom:12px;left:14px;font-size:9px;letter-spacing:.12em}[hidden]{display:none!important}.timeline-event-card .badge{height:fit-content;white-space:nowrap}.timeline-event-card p{line-height:1.65}.timeline-event-icon{font-size:11px;font-weight:700}@media(max-width:650px){.project-log{padding:24px 14px}.project-log .page-title{font-size:27px}.page-header .col-auto{width:100%;margin-top:16px}.cover-strip{gap:6px}.cover-strip>div{height:120px;padding:8px}.cover-strip b{font-size:10px}.cover-strip small{left:8px;font-size:7px}.timeline-event-card .d-flex{flex-wrap:wrap}.timeline-event-card{margin-inline-start:calc(var(--tblr-timeline-icon-size) + 12px)}}

代码参考

  • 封面插图展示了三项虚构的设计研究。
  • 文档采用内容高度,适用于嵌入场景。
04

Tabler 设计系统:AI Agent 设置

实现起点

已验证 Tabler 1.6.1。将附带的布局和应用模块分别保存为 style.css 和 app.js。使用原生模态框数据 API。HTML 封装器包含完整的 body 标记;请按此处引用的文件名保存提供的交互示例和 CSS 示例。

html
<!-- npm install @tabler/[email protected] -->
<!-- Copy node_modules/@tabler/core/dist to public/vendor/tabler. -->
<html lang="en" data-bs-theme="light">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="/vendor/tabler/css/tabler.min.css">
<link rel="stylesheet" href="style.css">
<main class="project-log"><header class="page-header d-print-none"><div class="row align-items-center"><div class="col"><div class="page-pretitle">TABLER · PROJECT JOURNAL</div><h1 class="page-title">Atlas field notes</h1><p class="text-secondary mt-2 mb-0">Decisions, prototypes and review checkpoints for a small editorial project.</p></div><div class="col-auto d-flex gap-2"><button id="theme" class="btn" aria-pressed="false">Dark mode</button><button id="add" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#entry-modal">Add checkpoint</button></div></div></header><div class="row g-4 mt-1"><section class="col-lg-8" aria-label="Project checkpoints"><ul id="timeline" class="timeline"><li class="timeline-event"><div class="timeline-event-icon bg-blue-lt" aria-hidden="true">AM</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">A clearer route through the issue</h2><span class="badge bg-blue-lt">Decision</span></div><div class="text-secondary small mb-3">Alex Morgan · 02 OCT</div><p class="mb-0">Group the field essays by landscape rather than author. Each chapter opens with a short map and a single question.</p></div></div></li><li class="timeline-event"><div class="timeline-event-icon bg-purple-lt" aria-hidden="true">JC</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">Three cover directions</h2><span class="badge bg-purple-lt">Prototype</span></div><div class="text-secondary small mb-3">Jules Chen · 01 OCT</div><div class="cover-strip" aria-label="Three original cover studies"><div><b>ATLAS</b><i></i><small>RIDGE / 01</small></div><div><b>ATLAS</b><i></i><small>RIVER / 02</small></div><div><b>ATLAS</b><i></i><small>PLAIN / 03</small></div></div><p class="mt-3 mb-0">Compare the quiet title treatment against the stronger geographic silhouette before selecting a direction.</p></div></div></li><li class="timeline-event"><div class="timeline-event-icon bg-green-lt" aria-hidden="true">SR</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">Reference package reviewed</h2><span class="badge bg-green-lt">Review</span></div><div class="text-secondary small mb-3">Sam Rivera · 30 SEP</div><p class="mb-0">Image captions, credit lines and print dimensions are recorded alongside each selected reference.</p></div></div></li></ul></section><aside class="col-lg-4"><div class="card"><div class="card-header"><h2 class="card-title">Project context</h2></div><div class="card-body"><div class="datagrid"><div class="datagrid-item"><div class="datagrid-title">Format</div><div class="datagrid-content">Editorial field journal</div></div><div class="datagrid-item"><div class="datagrid-title">Team</div><div class="datagrid-content"><span class="avatar avatar-xs me-1">AM</span><span class="avatar avatar-xs me-1">JC</span><span class="avatar avatar-xs">SR</span></div></div><div class="datagrid-item"><div class="datagrid-title">Checkpoints</div><div id="count" class="datagrid-content">3 recorded</div></div><div class="datagrid-item"><div class="datagrid-title">Current focus</div><div class="datagrid-content">Cover selection</div></div></div></div><div class="card-footer text-secondary">Sample project. New entries stay in this page.</div></div><div class="card mt-4"><div class="card-body"><h2 class="card-title">A useful checkpoint</h2><p class="text-secondary">Record the decision and the reason together. A future reader should understand what changed without reopening the meeting.</p><p class="mb-0 small">Choose Decision, Prototype or Review when adding a local entry.</p></div></div></aside></div><div id="notice" class="alert alert-success mt-3" role="status" hidden></div></main><div id="entry-modal" class="modal modal-blur fade" tabindex="-1" aria-labelledby="entry-title" aria-hidden="true"><div class="modal-dialog modal-dialog-centered"><div class="modal-content"><form id="entry-form"><div class="modal-header"><h2 id="entry-title" class="modal-title">Add a local checkpoint</h2><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button></div><div class="modal-body"><div class="mb-3"><label for="entry-name" class="form-label">Title</label><input id="entry-name" class="form-control" required minlength="5" maxlength="80" placeholder="What changed?"></div><div class="mb-3"><label for="entry-type" class="form-label">Kind</label><select id="entry-type" class="form-select"><option>Decision</option><option>Prototype</option><option>Review</option></select></div><div><label for="entry-detail" class="form-label">Reason or evidence</label><textarea id="entry-detail" class="form-control" required minlength="15" maxlength="360" rows="4" placeholder="Explain why this checkpoint matters."></textarea></div></div><div class="modal-footer"><button type="button" class="btn" data-bs-dismiss="modal">Cancel</button><button class="btn btn-primary" type="submit">Add to journal</button></div></form></div></div></div>

<script src="/vendor/tabler/js/tabler.min.js"></script>
<script src="app.js"></script>
<!-- The bundle exposes tabler.Modal; no second Bootstrap bundle is needed. -->
</html>

适用于你项目的提示词

Agent 提示词
使用 Tabler 1.6.1 重现 Atlas 项目日志,其中包含时间线、背景信息卡片、数据网格和原生 Modal。将已验证的节点表单与已提交的时间线分开:取消操作不会更改日志,有效提交会将输入的节点添加到本地记录。保留 data-bs 属性、匹配的 Tabler 程序包和主题样式。原始封面设计仅作装饰,节点文本在窄屏上也应清晰易读。不要暗示这是基础设施清单或已对外发布。
05

Tabler 设计系统来源与适用范围

Tabler 1.6.1。实际主题变量和原生组件与原创项目内容及封面插画分别标明。新节点仅保存在本地。