scrum-skills 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/.agents/skills/scrum-planning/references/schema.md +84 -1
  2. package/.agents/skills/scrum-report/SKILL.md +1 -0
  3. package/.agents/skills/scrum-tdd/SKILL.md +45 -0
  4. package/README.md +21 -2
  5. package/assets/board/200.html +1 -1
  6. package/assets/board/404.html +1 -1
  7. package/assets/board/_nuxt/{RJtjdZeG.js → 13F3FZJq.js} +1 -1
  8. package/assets/board/_nuxt/{DsNkyZPc.js → 4G46xON2.js} +1 -1
  9. package/assets/board/_nuxt/7DnHvJyr.js +1 -0
  10. package/assets/board/_nuxt/B8d-LQbt.js +13 -0
  11. package/assets/board/_nuxt/{CNbS93H9.js → BGRxZnwm.js} +1 -1
  12. package/assets/board/_nuxt/BMRYIH0I.js +1 -0
  13. package/assets/board/_nuxt/Bi9Axj3V.js +1 -0
  14. package/assets/board/_nuxt/Bk5o5EMW.js +1 -0
  15. package/assets/board/_nuxt/BsNk4K6P.js +1 -0
  16. package/assets/board/_nuxt/BtzBJuQU.js +1 -0
  17. package/assets/board/_nuxt/{DwcwzwSx.js → BvwhGSdZ.js} +1 -1
  18. package/assets/board/_nuxt/{Bh7eUS6e.js → C4MZsmn0.js} +1 -1
  19. package/assets/board/_nuxt/{DJUwhJ8T.js → C7AVymkF.js} +1 -1
  20. package/assets/board/_nuxt/{DrbU50Zd.js → C7wdFLdw.js} +1 -1
  21. package/assets/board/_nuxt/{CUnX_QKi.js → C8xxmt66.js} +1 -1
  22. package/assets/board/_nuxt/{CD0uJuyA.js → CB66hjP7.js} +1 -1
  23. package/assets/board/_nuxt/{D8Bpf7sE.js → CNCQ_RRC.js} +1 -1
  24. package/assets/board/_nuxt/CSF_x8S0.js +1 -0
  25. package/assets/board/_nuxt/CcCIS_4Q.js +1 -0
  26. package/assets/board/_nuxt/{Bu60uYgs.js → CnWxhsmi.js} +1 -1
  27. package/assets/board/_nuxt/{DmKZi-Wo.js → Cp9-r9Yz.js} +1 -1
  28. package/assets/board/_nuxt/CqT7Crsj.js +95 -0
  29. package/assets/board/_nuxt/CqhzGRpQ.js +1 -0
  30. package/assets/board/_nuxt/{D1Yxjnz9.js → CurAl_-I.js} +1 -1
  31. package/assets/board/_nuxt/{CjRYYbsC.js → D2zrOcWn.js} +1 -1
  32. package/assets/board/_nuxt/{CHZ_IHOa.js → DCRsKQUZ.js} +1 -1
  33. package/assets/board/_nuxt/{obNw9aRV.js → DDF25zwT.js} +1 -1
  34. package/assets/board/_nuxt/DIAPFfZA.js +2 -0
  35. package/assets/board/_nuxt/DMZvQhvU.js +1 -0
  36. package/assets/board/_nuxt/{BNKWWG8o.js → DNJ5OliG.js} +1 -1
  37. package/assets/board/_nuxt/{CvFE1CeN.js → DPeEWyPC.js} +1 -1
  38. package/assets/board/_nuxt/DZXukN7r.js +6 -0
  39. package/assets/board/_nuxt/{CyAQx5wv.js → D_dkfQp-.js} +1 -1
  40. package/assets/board/_nuxt/{BSov4ehT.js → Dp5MbiLe.js} +1 -1
  41. package/assets/board/_nuxt/FxbXzpZ6.js +1 -0
  42. package/assets/board/_nuxt/{DaqxYsbV.js → HUproyl7.js} +1 -1
  43. package/assets/board/_nuxt/{C9MiPNdJ.js → J9NS0_M_.js} +1 -1
  44. package/assets/board/_nuxt/builds/latest.json +1 -1
  45. package/assets/board/_nuxt/builds/meta/ceebd758-b616-48d8-872b-0de05659de19.json +1 -0
  46. package/assets/board/_nuxt/burndown.Do6IbM6o.css +1 -0
  47. package/assets/board/_nuxt/{KhBLkIKl.js → dI2CahwK.js} +1 -1
  48. package/assets/board/_nuxt/entry.DUA8YVRM.css +2 -0
  49. package/assets/board/_nuxt/epics.Dmessplu.css +1 -0
  50. package/assets/board/_nuxt/gantt.Dmp00GUo.css +1 -0
  51. package/assets/board/_nuxt/last-change.CaSxA-Z0.css +1 -0
  52. package/assets/board/_nuxt/milestones.U0xKCsEo.css +1 -0
  53. package/assets/board/_nuxt/pages.Dbj2IVk8.css +1 -0
  54. package/assets/board/_nuxt/{BuuAjxsV.js → rV_oonhV.js} +1 -1
  55. package/assets/board/_nuxt/x-PrcVk4.js +1 -0
  56. package/assets/board/burndown/index.html +1 -1
  57. package/assets/board/epics/index.html +1 -1
  58. package/assets/board/gantt/index.html +1 -1
  59. package/assets/board/index.html +1 -1
  60. package/assets/board/last-change/index.html +1 -0
  61. package/assets/board/milestones/index.html +1 -1
  62. package/bin/scrum-skills.mjs +3 -0
  63. package/package.json +41 -40
  64. package/templates/AGENTS.md +15 -2
  65. package/tools/last-change.mjs +326 -0
  66. package/tools/projects.mjs +66 -12
  67. package/tools/serve.mjs +1 -1
  68. package/tools/validate.mjs +124 -0
  69. package/assets/board/_nuxt/0VBLkWnu.js +0 -1
  70. package/assets/board/_nuxt/BTxVIV74.js +0 -1
  71. package/assets/board/_nuxt/C-GYjxwr.js +0 -13
  72. package/assets/board/_nuxt/CDL4GvLz.js +0 -1
  73. package/assets/board/_nuxt/CeiBZIn1.js +0 -95
  74. package/assets/board/_nuxt/Cfk_R787.js +0 -1
  75. package/assets/board/_nuxt/DhhR1iR4.js +0 -1
  76. package/assets/board/_nuxt/HrhQecsY.js +0 -6
  77. package/assets/board/_nuxt/RM4VQc4e.js +0 -1
  78. package/assets/board/_nuxt/builds/meta/ecbff4a6-6538-49b0-9844-64f03ebd103a.json +0 -1
  79. package/assets/board/_nuxt/burndown.BCLMmigw.css +0 -1
  80. package/assets/board/_nuxt/entry.nk2xQ-sa.css +0 -2
  81. package/assets/board/_nuxt/epics.B4-eK1Py.css +0 -1
  82. package/assets/board/_nuxt/fFGyRlCx.js +0 -1
  83. package/assets/board/_nuxt/gantt.DATOqoZf.css +0 -1
  84. package/assets/board/_nuxt/l05SqxhY.js +0 -1
  85. package/assets/board/_nuxt/milestones.z-UuT44X.css +0 -1
  86. package/assets/board/_nuxt/pages.Bi6nErnd.css +0 -1
  87. package/assets/board/_nuxt/uGmbQYdY.js +0 -1
@@ -1,12 +1,13 @@
1
1
  # 敏捷数据 Schema(v3 · 三文件结构)
2
2
 
3
- `agile/` 下**只有三个文件**,全部 UTF-8 JSON、2 空格缩进、末尾换行。
3
+ `agile/` 下**三个常驻数据文件 + 一个可选的交付说明**,全部 UTF-8 JSON、2 空格缩进、末尾换行。
4
4
 
5
5
  | 文件 | 装什么 |
6
6
  |---|---|
7
7
  | `agile/backlog.json` | 史诗 epics(含量化目标 keyResults)+ 用户故事 stories(内联 tasks) |
8
8
  | `agile/sprints.json` | 迭代 sprints + 里程碑 milestones(MVP 节点是里程碑的一种) |
9
9
  | `agile/journal.json` | TDD 实施日志 journals(一个 task 一条,内联 entries) |
10
+ | `agile/last-change.json` | 最近一次交付的汇报(可选;已提交才覆盖,未提交则合并,见第 4 节) |
10
11
 
11
12
  > 三个文件都必须带 `"schemaVersion": 3`。v2 及更早的散文件结构不再兼容,校验器发现 `agile/backlog/epics/`、`agile/backlog/stories/`、`agile/sprints/`、`agile/journal/` 里还有 JSON 会直接报错。
12
13
 
@@ -151,6 +152,88 @@
151
152
  }
152
153
  ```
153
154
 
155
+ ## 4. last-change.json(最后更新 / 交付说明)
156
+
157
+ `agile/last-change.json` 是**可选**文件:还没交付过东西时不存在,校验器不报错。看板 `/last-change` 页读的就是它。
158
+
159
+ ### 写之前先查 git:已提交才覆盖,未提交就合并
160
+
161
+ 只留最近一次交付的前提是**上一次已经进了版本库**。文件如果还有没提交的改动,直接覆盖就把那次记录冲掉了,所以写入策略分两种:
162
+
163
+ | 文件在 git 里的状态 | 写法 | 结果 |
164
+ |---|---|---|
165
+ | 已提交、工作区干净 | 整份覆盖 | 文件里只有本次交付 |
166
+ | 有未提交改动 / 已暂存未提交 / 未跟踪 / 不是 git 仓库 | 合并 | 本次结果并进旧记录,旧的一条不丢 |
167
+
168
+ 用工具判断并写入,不要手写覆盖:
169
+
170
+ ```bash
171
+ node tools/last-change.mjs check # 退出码 0 = 可覆盖,2 = 必须先合并
172
+ node tools/last-change.mjs write <记录.json> # 按状态自动覆盖或合并,写后校验,失败回滚
173
+ node tools/last-change.mjs write <记录.json> --replace # 确认旧记录不要了才强制覆盖
174
+ ```
175
+
176
+ 合并的取舍(`write` 自动完成,手动合并也要照这个来):
177
+
178
+ - `changes` 按 `kind:id`、`scenarios` 按 `id`(没有就按 `title`)去重:**新的覆盖旧的**,没被提到的旧条目原样保留,顺序按「旧的在前、新增的追加」;
179
+ - `extras` 按 `title`、`verification` 按 `what`、`preparation` 按 `step` 去重,规则同上;
180
+ - `notes` / `open` 字符串去重后拼接;`access.urls` 按 `url`、`access.accounts` 按 `username` 合并;
181
+ - `title` / `at` / `summary` 取本次的(缺了才沿用旧的);
182
+ - 合并后自动带上 `"merged": true` 与 `"mergedFrom"`(被并进来的那几次交付),看板据此标「合并记录」。
183
+
184
+ ```json
185
+ {
186
+ "schemaVersion": 3,
187
+ "lastChange": {
188
+ "title": "登录接口收尾",
189
+ "at": "2026-10-27 14:35:12",
190
+ "summary": "一句话说清这次交付做成了什么",
191
+ "changes": [
192
+ {
193
+ "kind": "story",
194
+ "id": "S-001",
195
+ "title": "邮箱密码登录",
196
+ "action": "added | updated | removed",
197
+ "from": "in-progress",
198
+ "to": "review",
199
+ "note": "变更内容:补了两条验收、状态推进到评审",
200
+ "files": ["agile/backlog.json", "src/auth/login.ts"]
201
+ }
202
+ ],
203
+ "extras": [{ "title": "顺手把校验错误信息改成中文", "detail": "为什么做、做到什么程度", "files": ["tools/validate.mjs"] }],
204
+ "verification": [{ "what": "pnpm test", "result": "pass | fail | partial | skipped", "detail": "32 passed" }],
205
+ "access": {
206
+ "urls": [{ "label": "看板", "url": "http://localhost:4173", "note": "先起 serve" }],
207
+ "accounts": [{ "role": "管理员", "username": "admin@example.com", "password": "Passw0rd!", "note": "仅本地环境" }]
208
+ },
209
+ "preparation": [{ "step": "装依赖", "command": "pnpm install", "note": "Node ≥ 18" }],
210
+ "scenarios": [
211
+ {
212
+ "id": "TC-01",
213
+ "title": "正确密码能登录",
214
+ "storyIds": ["S-001"],
215
+ "steps": ["打开 /login", "填表提交"],
216
+ "expect": "跳转首页并下发会话 cookie",
217
+ "acceptance": "对应验收第 1 条"
218
+ }
219
+ ],
220
+ "merged": true,
221
+ "mergedFrom": [{ "title": "上一次还没提交的交付", "at": "2026-10-26 18:02:41" }],
222
+ "notes": ["使用说明、口径解释"],
223
+ "open": ["还没做的、已知限制"]
224
+ }
225
+ }
226
+ ```
227
+
228
+ 字段说明:
229
+
230
+ - **`title` / `at` 必填**:`at` 是本次交付时间,**写到秒**:`YYYY-MM-DD HH:mm:ss`(ISO 的 `T` 分隔也认)。只写 `YYYY-MM-DD` 仍然合法,但校验器会给 WARN、看板上也只能看到「哪天」,看不出「几点几分交付的」。`node tools/last-change.mjs write` 发现缺 `at` 会自动补当前时间。
231
+ - **`merged` / `mergedFrom` 由工具写,不要手填**:只有「并进未提交旧记录」时才出现,`mergedFrom` 每条要有 `title`(`at` 可选)。`merged: true` 却没有 `mergedFrom` 会被校验器提醒。
232
+ - **`changes[]`**:故事与任务的变更清单,看板表格一行一条。`kind` 只认 `story` / `task`,`id` 必须是 backlg 里真实存在的 id;`action` 是 `added`(新增)/ `updated`(状态或内容变更)/ `removed`(删除);状态变更填 `from` → `to`,`files` 是这次动过的文件。
233
+ - **其余分区都可选**,没有就省略,**不许为了填满而编**:项目没有账号体系就不写 `accounts`,没有前端入口就不写 `urls`。
234
+ - `verification[].result` 与 `scenarios[].expect` 是「验收不是口号」的凭据:场景必须写清步骤与验收标准,验证结果只认 `pass/fail/partial/skipped`。
235
+ - 校验器会查:`schemaVersion`、`at` 格式、`kind`/`action`/`result` 枚举、`changes[].id` 是否真实存在、`scenarios[].steps` 与 `expect` 是否齐备、`access.urls[].url` 是否为 `http(s)` 完整地址。缺 `title`、`what`、`expect`、`step` 报错;缺 `changes[].title`、场景 id、url label 只给 WARN。
236
+
154
237
  ## 状态机(校验器强制)
155
238
 
156
239
  - story: `draft → ready → in-progress → review → done`;不做了直接进 `cancelled`(已取消)终态(可回退,不可跳级;`done` 与 `cancelled` 都是终态)
@@ -25,6 +25,7 @@ server 读取 `agile/` 三文件(backlog / sprints / journal),每次请求
25
25
  渲染由 Nuxt 静态产物(`assets/board/`)负责,`tools/serve.mjs` 只提供 `/api/agile` 与静态托管,没有任何手写 HTML。
26
26
 
27
27
  - `/` 看板:六列(草稿 / 就绪 / 进行中 / 评审 / 完成 / 已取消),可按史诗、里程碑筛选,可按优先级 / WSJF / 点数重排;卡片显示 id、类型(功能·缺陷·技术债·调研)、优先级、阻塞标记、范围变更标记、点数与 WSJF、task 进度、MVP 标记
28
+ - `/last-change` 最后更新:渲染 `agile/last-change.json` —— 变更清单(故事 / 任务 · 新增还是状态变更 · 涉及文件)、额外做的事、验证结果、调试入口与账号密码、测试前准备、逐条测试场景(步骤 + 验收标准)、说明与遗留;「查看历史」从 git 里列出该文件的每次提交,选中某版整页只读展示,顶部页签可在最新/各历史版本间切换;文件不存在时给空状态并说明谁来写
28
29
  - `/gantt` 甘特图:按迭代分带;浅色条是 `story.schedule` 计划区间,实心条是 journal 推出的真实执行区间;菱形是里程碑(MVP 琥珀色),红色虚线是今天;行内标出依赖数量与阻塞,图下列出依赖链与阻塞清单
29
30
  - `/milestones` 里程碑 / MVP 节点:按 kind 分组(mvp / release / checkpoint),显示达成口径、挂的故事、进度与剩余天数
30
31
  - `/burndown` 燃尽图:可选任意迭代;实线来自每个 task 最后一条 pass 的日期,虚线是理想线,逐日格子给出实际/理想剩余
@@ -44,6 +44,49 @@ description: 以 red-green-refactor TDD 循环驱动任务实施,并把每一
44
44
  3. task 状态 → `done`,`files` 补齐本次触碰的文件
45
45
  4. story 的所有 task 都 done → 提醒用户进入 review(scrum-sprint skill)
46
46
 
47
+ ## 交工汇报(每做完一项功能必做)
48
+
49
+ task 推到 `done` 之后、向用户回话之前,两件事缺一不可。
50
+
51
+ ### 1. 写 `agile/last-change.json`:先看 git,再决定覆盖还是合并
52
+
53
+ **写之前必须先判断这个文件提交了没有**——上一次交付很可能还没 commit,直接覆盖就把它冲掉了:
54
+
55
+ ```bash
56
+ node tools/last-change.mjs check # 退出码 0 = 可整份覆盖,2 = 必须合并
57
+ ```
58
+
59
+ 用工具写最省事(它自己判状态、合并、写后校验、失败回滚):
60
+
61
+ ```bash
62
+ node tools/last-change.mjs write <本次记录.json> # 已提交 → 覆盖;未提交 → 并入旧记录
63
+ ```
64
+
65
+ - **已提交**(工作区干净)→ 上一次交付已在版本库里,整份覆盖,文件里只有本次交付;
66
+ - **未提交 / 未跟踪 / 不是 git 仓库** → 把本次结果并进旧记录:`changes`·`extras`·`verification`·`preparation`·`scenarios` 按 key 去重(新的覆盖旧的、旧的顺序保留),`notes`·`open` 去重合并,`access` 按 url / 账号合并,并自动打上 `merged` + `mergedFrom` 说明并了哪几次;
67
+ - 千万**不要**为了省事手动 `writeFileSync` 覆盖:那一步绕过 git 判断,丢的是别人还没提交的记录;
68
+ - `at` 要**写到时分秒**(`YYYY-MM-DD HH:mm:ss`,本机时间)——「最近一次交付」在页面顶部标的就是它。`write` 发现缺 `at` 会自动补当前时间,但手写记录时得自己填;只写日期会吃一条 WARN,页面上也只显示到天。
69
+
70
+ 不用工具时也得照这个顺序:`check` → 需要合并就先读旧文件再合并 → 写完跑 `node tools/validate.mjs`。
71
+
72
+ 七个分区按需写(结构见 planning skill 的 `references/schema.md` 第 4 节),当前项目没有的那项直接省略,不许编:
73
+
74
+ | 分区 | 写什么 |
75
+ |---|---|
76
+ | `changes` | 本次涉及的故事与任务:新增还是状态变更(`action` + `from`/`to`)、变更内容、涉及文件 |
77
+ | `extras` | 计划外顺手做的事(修掉的小 bug、补的文档、重构) |
78
+ | `verification` | 验证了哪些项、结果(`pass`/`fail`/`partial`/`skipped`)、依据 |
79
+ | `access` | 调试访问地址(`urls`)与账号密码(`accounts`);没有账号体系就不写 accounts |
80
+ | `preparation` | 用户自己跑起来之前要做的准备(装依赖、起服务、灌数据),带命令 |
81
+ | `scenarios` | 一条测试场景一段:`steps` 是测试步骤,`expect` 是验收标准 |
82
+ | `notes` / `open` | 使用说明与遗留问题 |
83
+
84
+ 写完整份跑 `node tools/validate.mjs`:校验器会查 id 是否真实存在、枚举是否合法、场景有没有验收标准、调试地址是不是完整 http(s) 地址。
85
+
86
+ ### 2. 按同一顺序回话给用户
87
+
88
+ 变更表(故事/任务 · 新增还是状态变更 · 改了什么 · 涉及文件)→ 额外做的事 → 验证结果 → 账号密码与访问地址 → 测试前准备 → 逐条测试场景(步骤 + 验收标准)→ 说明。**缺哪项就不提那节,但不许只说「做完了」**,也不许用「应该没问题」代替验证记录。最后告诉用户:起 `node tools/serve.mjs` 后到 `/last-change` 页能看到同一份内容。
89
+
47
90
  ## 排障纪律(源自 superpowers 的 systematic-debugging)
48
91
 
49
92
  测试意外失败、行为不符预期、bug 排查时:
@@ -66,3 +109,5 @@ description: 以 red-green-refactor TDD 循环驱动任务实施,并把每一
66
109
  - 不许为让测试通过而删除/跳过/弱化测试;确需改测试时在 journal 的 note 里说明理由
67
110
  - 一次只做一个 task 的一个阶段,禁止批量推进多个 task 状态
68
111
  - 交工前没做真实验证不许把 task 置 `done`(跑不起入口的须在 journal 里写明验证边界)
112
+ - 没写 `agile/last-change.json` 不算交付完成:交付说明和代码一样是交付物
113
+ - 写它之前没查 git 状态(该合并却整份覆盖)同样算违规:会把上一次还没提交的记录冲掉
package/README.md CHANGED
@@ -44,7 +44,7 @@ npx scrum-skills serve # → http://localhost:4173
44
44
  | `scrum-skills init [dir] [--force]` | 初始化(已有 `AGENTS.md` 时拒绝,`--force` 先备份成 `AGENTS.md.<时间戳>.bak` 再覆盖) |
45
45
  | `scrum-skills update [dir] [--dry-run]` | 只刷新框架文件(skill / AGENTS.md / 校验器),**绝不碰 `agile/` 数据**,覆盖前逐文件备份成 `<文件>.<时间戳>.bak` |
46
46
  | `scrum-skills validate [dir]` | 校验数据(引用完整性 / 状态机 / TDD 纪律 / 里程碑 / 依赖无环) |
47
- | `scrum-skills serve [dir] [port]` | 起看板(默认当前目录,端口 4173),**校验不通过时拒绝出报表** |
47
+ | `scrum-skills serve [dir] [port]` | 起看板(默认当前目录,端口 4173),**校验不通过时拒绝出报表**;打开的就是启动目录,上次打开过的项目只留在「最近项目」里供手动切回 |
48
48
 
49
49
  `scsk` 是 `scrum-skills` 的等价简写,全局安装后两个命令都可直接用,如 `scsk serve`。
50
50
 
@@ -61,6 +61,7 @@ npx scrum-skills serve # → http://localhost:4173
61
61
  | `agile/backlog.json` | 史诗 `epics`(含量化目标 `keyResults`)+ 故事 `stories`(内联 `tasks`) |
62
62
  | `agile/sprints.json` | 迭代 `sprints` + 里程碑 `milestones`(MVP 节点 = `kind: "mvp"`) |
63
63
  | `agile/journal.json` | 每个任务一条 TDD 日志 `journals`(内联 `entries`) |
64
+ | `agile/last-change.json` | 最近一次交付的汇报(可选;已提交才覆盖,未提交则合并):变更清单 / 额外工作 / 验证 / 入口与账号 / 测试前准备 / 测试场景 / 说明 |
64
65
 
65
66
  ```jsonc
66
67
  // 一条故事(节选)
@@ -97,12 +98,15 @@ npx scrum-skills serve # → http://localhost:4173
97
98
  | 页面 | 内容 |
98
99
  |---|---|
99
100
  | `/` 看板 | 六列(草稿/就绪/进行中/评审/完成/已取消),按史诗/里程碑筛选,按优先级或 WSJF 重排;卡片带类型、阻塞、范围变更标记 |
101
+ | `/last-change` 最后更新 | 渲染 `agile/last-change.json`:故事/任务变更清单、额外做的事、验证结果、调试入口与账号、测试前准备、逐条测试场景、说明与遗留;点「查看历史」按 git 提交翻看任一版本(只读,顶部页签可在最新/历史间切换);没有该文件时给空状态 |
100
102
  | `/epics` 史诗与目标 | 每个史诗的关键结果(KR)进度、故事完成度、阻塞与缺陷统计 |
101
103
  | `/gantt` 甘特图 | 迭代分带,浅色条=计划、实心条=journal 推出的实际执行区间,菱形=里程碑,依赖与阻塞清单 |
102
104
  | `/milestones` 里程碑 / MVP | 按 kind 分组,显示达成口径、挂的故事、剩余天数 |
103
105
  | `/burndown` 燃尽图 | 实线=真实剩余,虚线=理想线,竖线标出**哪一天插了需求**(范围变更) |
104
106
  | `/story/:id` 追溯链 | 验收标准 → 任务 → 每条 red/green/refactor 记录,含测试命令与产出文件 |
105
107
 
108
+ > **并排指标卡的配色顺序固定为 绿 → 蓝 → 紫 → 黑,卡片更多才往后用黄、红**。顺序只在 `apps/board/app/composables/model.ts` 的 `CARD_TONES` 里定义一次,页面写 `:class="cardToneClass(i)"`、光斑写 `:tone="cardTone(i)"`;黑卡是深底,文字要翻白。新增页面照着取色,别另起一套。
109
+
106
110
  ## 内置 AI 助手
107
111
 
108
112
  看板右下角有个悬浮按钮,点开是右侧抽屉——不用离开看板就能让模型查/改当前项目的敏捷数据。
@@ -139,6 +143,21 @@ npx scrum-skills serve # → http://localhost:4173
139
143
 
140
144
  > 纯静态托管(只放 `assets/board`)时没有 `/api/ai/*`,此时对话不可用;`pnpm serve` 才带这套能力。
141
145
 
146
+ ## 交付说明:先查 git,再决定覆盖还是合并
147
+
148
+ `agile/last-change.json` 只留最近一次交付,但「最近一次」的前提是**上一次已经进了版本库**。所以写入前先看这个文件在 git 里的状态:
149
+
150
+ - **已提交、工作区干净** → 上一次已入库,整份覆盖,文件里只有本次交付;
151
+ - **有未提交改动 / 已暂存未提交 / 未跟踪 / 不是 git 仓库** → 把本次结果**合并**进旧记录,旧的一条不丢(`changes` / `extras` / `verification` / `preparation` / `scenarios` 按 key 去重、新覆盖旧;`notes` / `open` 去重拼接;`access` 按地址与账号合并),并打上 `merged` + `mergedFrom`。
152
+
153
+ ```bash
154
+ node tools/last-change.mjs check # 退出码 0 = 可覆盖,2 = 必须先合并
155
+ node tools/last-change.mjs write 记录.json # 按状态自动覆盖或合并,写后校验,不过就回滚
156
+ node tools/last-change.mjs write 记录.json --replace # 确认旧记录不要了才强制覆盖
157
+ ```
158
+
159
+ 看板 `/last-change`(侧栏「最后更新」)页面上方就写着这条规则,并显示该文件当前是「已提交」还是「未提交改动」;合并过的记录会标出「合并记录 · N 次交付」。
160
+
142
161
  ## 校验器管什么
143
162
 
144
163
  `validate` 是这套体系的地基,**错误**会让它退出码非 0:
@@ -164,7 +183,7 @@ AGILE_DIR=/别的项目 pnpm dev # 看别的项目的数据
164
183
 
165
184
  pnpm build # 构建看板静态产物 → assets/board
166
185
  pnpm validate # 只校验数据
167
- pnpm test # 回归测试(校验器 / 看板皮肤 / 项目目录 / AI 服务与面板,59 个用例)
186
+ pnpm test # 回归测试(校验器 / 看板皮肤与配色 / 布局回归 / 卡片操作 / 项目目录 / 最后更新页与历史版本 / 交付说明写入策略 / AI 服务与面板,159 个用例)
168
187
  pnpm serve # 起看板(读目标目录的 agile/,同时提供 /api/ai)
169
188
  ```
170
189
 
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/CeiBZIn1.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.nk2xQ-sa.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CeiBZIn1.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/HrhQecsY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CjRYYbsC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D8Bpf7sE.js"><script type="module" src="/_nuxt/CeiBZIn1.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/C-GYjxwr.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"ecbff4a6-6538-49b0-9844-64f03ebd103a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792999430301,false]</script></body></html>
1
+ <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/CqT7Crsj.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.DUA8YVRM.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CqT7Crsj.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZXukN7r.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FxbXzpZ6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2zrOcWn.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CNCQ_RRC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BsNk4K6P.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/CqT7Crsj.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8d-LQbt.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"ceebd758-b616-48d8-872b-0de05659de19",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793099665693,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/CeiBZIn1.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.nk2xQ-sa.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CeiBZIn1.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/HrhQecsY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CjRYYbsC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D8Bpf7sE.js"><script type="module" src="/_nuxt/CeiBZIn1.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/C-GYjxwr.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"ecbff4a6-6538-49b0-9844-64f03ebd103a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792999430301,false]</script></body></html>
1
+ <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/CqT7Crsj.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.DUA8YVRM.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CqT7Crsj.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZXukN7r.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FxbXzpZ6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2zrOcWn.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CNCQ_RRC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BsNk4K6P.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/CqT7Crsj.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8d-LQbt.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"ceebd758-b616-48d8-872b-0de05659de19",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793099665693,false]</script></body></html>
@@ -1 +1 @@
1
- import{s as e}from"./u88eXCXy.js";import{D as t,On as n,Zn as r,_ as i,b as a,g as o,mt as s,xt as c}from"./DZo3dYLJ.js";import{r as l}from"./oXSDGTSr.js";import{n as u,t as d}from"./Baq-Hrpf.js";import{t as f}from"./CjRYYbsC.js";var p={slots:{base:[`relative text-xl text-highlighted font-bold mt-8 mb-3 scroll-mt-[calc(32px+45px+var(--ui-header-height))] lg:scroll-mt-[calc(32px+var(--ui-header-height))] [&>a]:rounded-sm [&>a]:outline-primary/25 [&>a]:focus-visible:outline-3 [&>a>code]:border-dashed hover:[&>a>code]:border-primary hover:[&>a>code]:text-primary [&>a>code]:text-lg/6 [&>a>code]:font-bold`,`[&>a>code]:transition-colors`],leading:[`absolute -ms-8 top-0.5 opacity-0 group-hover:opacity-100 group-focus:opacity-100 p-1 bg-elevated group-hover:text-primary group-focus:text-primary rounded-md hidden lg:flex text-muted`,`transition`],leadingIcon:`size-4 shrink-0`,link:`group lg:after:absolute lg:after:inset-y-0 lg:after:-inset-s-2 lg:after:w-2`}},m=[`id`],h=[`href`],g={__name:`ProseH3`,props:{id:{type:String,required:!1},anchor:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(g){let _=u(`prose.h3`,g),v=l(),{headings:y}=e().public?.mdc||{},b=o(()=>d({extend:p,...v.ui?.prose?.h3||{}})()),x=o(()=>_.id&&(_.anchor??(typeof y?.anchorLinks==`boolean`?y.anchorLinks:y?.anchorLinks?.h3)??!1));return(e,o)=>(s(),a(`h3`,{id:n(_).id,class:r(b.value.base({class:[n(_).ui?.base,n(_).class]}))},[n(_).id&&x.value?(s(),a(`a`,{key:0,href:`#${n(_).id}`,class:r(b.value.link({class:n(_).ui?.link}))},[i(`span`,{class:r(b.value.leading({class:n(_).ui?.leading}))},[t(f,{name:n(v).ui.icons.hash,class:r(b.value.leadingIcon({class:n(_).ui?.leadingIcon}))},null,8,[`name`,`class`])],2),c(e.$slots,`default`)],10,h)):c(e.$slots,`default`,{},void 0,void 0,1)],10,m))}};export{g as default};
1
+ import{s as e}from"./u88eXCXy.js";import{D as t,On as n,Zn as r,_ as i,b as a,g as o,mt as s,xt as c}from"./DZo3dYLJ.js";import{r as l}from"./oXSDGTSr.js";import{n as u,t as d}from"./Baq-Hrpf.js";import{t as f}from"./D2zrOcWn.js";var p={slots:{base:[`relative text-xl text-highlighted font-bold mt-8 mb-3 scroll-mt-[calc(32px+45px+var(--ui-header-height))] lg:scroll-mt-[calc(32px+var(--ui-header-height))] [&>a]:rounded-sm [&>a]:outline-primary/25 [&>a]:focus-visible:outline-3 [&>a>code]:border-dashed hover:[&>a>code]:border-primary hover:[&>a>code]:text-primary [&>a>code]:text-lg/6 [&>a>code]:font-bold`,`[&>a>code]:transition-colors`],leading:[`absolute -ms-8 top-0.5 opacity-0 group-hover:opacity-100 group-focus:opacity-100 p-1 bg-elevated group-hover:text-primary group-focus:text-primary rounded-md hidden lg:flex text-muted`,`transition`],leadingIcon:`size-4 shrink-0`,link:`group lg:after:absolute lg:after:inset-y-0 lg:after:-inset-s-2 lg:after:w-2`}},m=[`id`],h=[`href`],g={__name:`ProseH3`,props:{id:{type:String,required:!1},anchor:{type:Boolean,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(g){let _=u(`prose.h3`,g),v=l(),{headings:y}=e().public?.mdc||{},b=o(()=>d({extend:p,...v.ui?.prose?.h3||{}})()),x=o(()=>_.id&&(_.anchor??(typeof y?.anchorLinks==`boolean`?y.anchorLinks:y?.anchorLinks?.h3)??!1));return(e,o)=>(s(),a(`h3`,{id:n(_).id,class:r(b.value.base({class:[n(_).ui?.base,n(_).class]}))},[n(_).id&&x.value?(s(),a(`a`,{key:0,href:`#${n(_).id}`,class:r(b.value.link({class:n(_).ui?.link}))},[i(`span`,{class:r(b.value.leading({class:n(_).ui?.leading}))},[t(f,{name:n(v).ui.icons.hash,class:r(b.value.leadingIcon({class:n(_).ui?.leadingIcon}))},null,8,[`name`,`class`])],2),c(e.$slots,`default`)],10,h)):c(e.$slots,`default`,{},void 0,void 0,1)],10,m))}};export{g as default};
@@ -1 +1 @@
1
- import{On as e,Zn as t,_ as n,b as r,et as i,g as a,mt as o,qt as s,v as c,y as l}from"./DZo3dYLJ.js";import{r as u}from"./oXSDGTSr.js";import{n as d,t as f}from"./Baq-Hrpf.js";import{t as p}from"./CjRYYbsC.js";import{t as m}from"./ChJuu-Ky.js";import{t as h}from"./CQTvWh4i.js";var g={slots:{base:[`group relative block px-4 py-3 rounded-md text-sm/6 my-5 last:mb-0 [&_code]:text-xs/5 [&_code]:bg-default [&_pre]:bg-default [&>div]:my-2.5 [&_ul]:my-2.5 [&_ol]:my-2.5 *:last:mb-0! [&_ul]:ps-4.5 [&_ol]:ps-4.5 [&_li]:my-0`,`transition-colors`],icon:[`size-4 shrink-0 align-sub me-2 inline-block`,`transition-colors`],externalIcon:[`size-4 align-top absolute end-2 top-2 pointer-events-none`,`transition-colors`]},variants:{color:{primary:{base:`border border-primary/25 bg-primary/10 text-primary-600 dark:text-primary-300 [&_a]:text-primary [&_a]:hover:border-primary [&_a]:focus-visible:border-transparent [&_a]:outline-primary/25 [&_a]:focus-visible:outline-3 [&_a]:focus-visible:has-[>code]:outline-0 [&_code]:text-primary-600 dark:[&_code]:text-primary-300 [&_code]:border-primary/25 [&_a]:[&>code]:outline-primary/25 [&_a]:hover:[&>code]:border-primary [&_a]:hover:[&>code]:text-primary [&_a]:focus-visible:[&>code]:border-primary [&_a]:focus-visible:[&>code]:text-primary [&>ul]:marker:text-primary/50`,icon:`text-primary`,externalIcon:`text-primary-600 dark:text-primary-300`},secondary:{base:`border border-secondary/25 bg-secondary/10 text-secondary-600 dark:text-secondary-300 [&_a]:text-secondary [&_a]:hover:border-secondary [&_a]:focus-visible:border-transparent [&_a]:outline-secondary/25 [&_a]:focus-visible:outline-3 [&_a]:focus-visible:has-[>code]:outline-0 [&_code]:text-secondary-600 dark:[&_code]:text-secondary-300 [&_code]:border-secondary/25 [&_a]:[&>code]:outline-secondary/25 [&_a]:hover:[&>code]:border-secondary [&_a]:hover:[&>code]:text-secondary [&_a]:focus-visible:[&>code]:border-secondary [&_a]:focus-visible:[&>code]:text-secondary [&>ul]:marker:text-secondary/50`,icon:`text-secondary`,externalIcon:`text-secondary-600 dark:text-secondary-300`},success:{base:`border border-success/25 bg-success/10 text-success-600 dark:text-success-300 [&_a]:text-success [&_a]:hover:border-success [&_a]:focus-visible:border-transparent [&_a]:outline-success/25 [&_a]:focus-visible:outline-3 [&_a]:focus-visible:has-[>code]:outline-0 [&_code]:text-success-600 dark:[&_code]:text-success-300 [&_code]:border-success/25 [&_a]:[&>code]:outline-success/25 [&_a]:hover:[&>code]:border-success [&_a]:hover:[&>code]:text-success [&_a]:focus-visible:[&>code]:border-success [&_a]:focus-visible:[&>code]:text-success [&>ul]:marker:text-success/50`,icon:`text-success`,externalIcon:`text-success-600 dark:text-success-300`},info:{base:`border border-info/25 bg-info/10 text-info-600 dark:text-info-300 [&_a]:text-info [&_a]:hover:border-info [&_a]:focus-visible:border-transparent [&_a]:outline-info/25 [&_a]:focus-visible:outline-3 [&_a]:focus-visible:has-[>code]:outline-0 [&_code]:text-info-600 dark:[&_code]:text-info-300 [&_code]:border-info/25 [&_a]:[&>code]:outline-info/25 [&_a]:hover:[&>code]:border-info [&_a]:hover:[&>code]:text-info [&_a]:focus-visible:[&>code]:border-info [&_a]:focus-visible:[&>code]:text-info [&>ul]:marker:text-info/50`,icon:`text-info`,externalIcon:`text-info-600 dark:text-info-300`},warning:{base:`border border-warning/25 bg-warning/10 text-warning-600 dark:text-warning-300 [&_a]:text-warning [&_a]:hover:border-warning [&_a]:focus-visible:border-transparent [&_a]:outline-warning/25 [&_a]:focus-visible:outline-3 [&_a]:focus-visible:has-[>code]:outline-0 [&_code]:text-warning-600 dark:[&_code]:text-warning-300 [&_code]:border-warning/25 [&_a]:[&>code]:outline-warning/25 [&_a]:hover:[&>code]:border-warning [&_a]:hover:[&>code]:text-warning [&_a]:focus-visible:[&>code]:border-warning [&_a]:focus-visible:[&>code]:text-warning [&>ul]:marker:text-warning/50`,icon:`text-warning`,externalIcon:`text-warning-600 dark:text-warning-300`},error:{base:`border border-error/25 bg-error/10 text-error-600 dark:text-error-300 [&_a]:text-error [&_a]:hover:border-error [&_a]:focus-visible:border-transparent [&_a]:outline-error/25 [&_a]:focus-visible:outline-3 [&_a]:focus-visible:has-[>code]:outline-0 [&_code]:text-error-600 dark:[&_code]:text-error-300 [&_code]:border-error/25 [&_a]:[&>code]:outline-error/25 [&_a]:hover:[&>code]:border-error [&_a]:hover:[&>code]:text-error [&_a]:focus-visible:[&>code]:border-error [&_a]:focus-visible:[&>code]:text-error [&>ul]:marker:text-error/50`,icon:`text-error`,externalIcon:`text-error-600 dark:text-error-300`},neutral:{base:`border border-muted bg-muted text-default`,icon:`text-highlighted`,externalIcon:`text-dimmed`}},to:{true:`border-dashed`}},compoundVariants:[{color:`primary`,to:!0,class:{base:`hover:border-primary outline-primary/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-primary`,externalIcon:`group-hover:text-primary`}},{color:`secondary`,to:!0,class:{base:`hover:border-secondary outline-secondary/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-secondary`,externalIcon:`group-hover:text-secondary`}},{color:`success`,to:!0,class:{base:`hover:border-success outline-success/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-success`,externalIcon:`group-hover:text-success`}},{color:`info`,to:!0,class:{base:`hover:border-info outline-info/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-info`,externalIcon:`group-hover:text-info`}},{color:`warning`,to:!0,class:{base:`hover:border-warning outline-warning/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-warning`,externalIcon:`group-hover:text-warning`}},{color:`error`,to:!0,class:{base:`hover:border-error outline-error/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-error`,externalIcon:`group-hover:text-error`}},{color:`neutral`,to:!0,class:{base:`hover:border-inverted outline-inverted/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-inverted`,externalIcon:`group-hover:text-highlighted`}}],defaultVariants:{color:`neutral`}},_=Object.assign({inheritAttrs:!1},{__name:`ProseCallout`,props:{to:{type:null,required:!1},target:{type:[String,Object,null],required:!1},icon:{type:null,required:!1},color:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(_){let v=d(`prose.callout`,_),y=u(),b=a(()=>f({extend:g,...y.ui?.prose?.callout||{}})({color:v.color,to:!!v.to})),x=a(()=>v.target||(v.to&&typeof v.to==`string`&&v.to.startsWith(`http`)?`_blank`:void 0));return(a,u)=>(o(),r(`div`,i(e(v).to?{}:a.$attrs,{class:b.value.base({class:[e(v).ui?.base,e(v).class]})}),[e(v).to?(o(),c(m,i({key:0},{to:e(v).to,target:x.value,...a.$attrs},{class:`focus:outline-none`,raw:``}),{default:s(()=>[...u[0]||=[n(`span`,{class:`absolute inset-0`,"aria-hidden":`true`},null,-1)]]),_:1},16)):l(``,!0),e(v).icon?(o(),c(p,{key:1,name:e(v).icon,class:t(b.value.icon({class:e(v).ui?.icon}))},null,8,[`name`,`class`])):l(``,!0),e(v).to&&x.value===`_blank`?(o(),c(p,{key:2,name:e(y).ui.icons.external,class:t(b.value.externalIcon({class:e(v).ui?.externalIcon}))},null,8,[`name`,`class`])):l(``,!0),h(a.$slots,`default`,{mdcUnwrap:`p`})],16))}});export{_ as default};
1
+ import{On as e,Zn as t,_ as n,b as r,et as i,g as a,mt as o,qt as s,v as c,y as l}from"./DZo3dYLJ.js";import{r as u}from"./oXSDGTSr.js";import{n as d,t as f}from"./Baq-Hrpf.js";import{t as p}from"./D2zrOcWn.js";import{t as m}from"./ChJuu-Ky.js";import{t as h}from"./CQTvWh4i.js";var g={slots:{base:[`group relative block px-4 py-3 rounded-md text-sm/6 my-5 last:mb-0 [&_code]:text-xs/5 [&_code]:bg-default [&_pre]:bg-default [&>div]:my-2.5 [&_ul]:my-2.5 [&_ol]:my-2.5 *:last:mb-0! [&_ul]:ps-4.5 [&_ol]:ps-4.5 [&_li]:my-0`,`transition-colors`],icon:[`size-4 shrink-0 align-sub me-2 inline-block`,`transition-colors`],externalIcon:[`size-4 align-top absolute end-2 top-2 pointer-events-none`,`transition-colors`]},variants:{color:{primary:{base:`border border-primary/25 bg-primary/10 text-primary-600 dark:text-primary-300 [&_a]:text-primary [&_a]:hover:border-primary [&_a]:focus-visible:border-transparent [&_a]:outline-primary/25 [&_a]:focus-visible:outline-3 [&_a]:focus-visible:has-[>code]:outline-0 [&_code]:text-primary-600 dark:[&_code]:text-primary-300 [&_code]:border-primary/25 [&_a]:[&>code]:outline-primary/25 [&_a]:hover:[&>code]:border-primary [&_a]:hover:[&>code]:text-primary [&_a]:focus-visible:[&>code]:border-primary [&_a]:focus-visible:[&>code]:text-primary [&>ul]:marker:text-primary/50`,icon:`text-primary`,externalIcon:`text-primary-600 dark:text-primary-300`},secondary:{base:`border border-secondary/25 bg-secondary/10 text-secondary-600 dark:text-secondary-300 [&_a]:text-secondary [&_a]:hover:border-secondary [&_a]:focus-visible:border-transparent [&_a]:outline-secondary/25 [&_a]:focus-visible:outline-3 [&_a]:focus-visible:has-[>code]:outline-0 [&_code]:text-secondary-600 dark:[&_code]:text-secondary-300 [&_code]:border-secondary/25 [&_a]:[&>code]:outline-secondary/25 [&_a]:hover:[&>code]:border-secondary [&_a]:hover:[&>code]:text-secondary [&_a]:focus-visible:[&>code]:border-secondary [&_a]:focus-visible:[&>code]:text-secondary [&>ul]:marker:text-secondary/50`,icon:`text-secondary`,externalIcon:`text-secondary-600 dark:text-secondary-300`},success:{base:`border border-success/25 bg-success/10 text-success-600 dark:text-success-300 [&_a]:text-success [&_a]:hover:border-success [&_a]:focus-visible:border-transparent [&_a]:outline-success/25 [&_a]:focus-visible:outline-3 [&_a]:focus-visible:has-[>code]:outline-0 [&_code]:text-success-600 dark:[&_code]:text-success-300 [&_code]:border-success/25 [&_a]:[&>code]:outline-success/25 [&_a]:hover:[&>code]:border-success [&_a]:hover:[&>code]:text-success [&_a]:focus-visible:[&>code]:border-success [&_a]:focus-visible:[&>code]:text-success [&>ul]:marker:text-success/50`,icon:`text-success`,externalIcon:`text-success-600 dark:text-success-300`},info:{base:`border border-info/25 bg-info/10 text-info-600 dark:text-info-300 [&_a]:text-info [&_a]:hover:border-info [&_a]:focus-visible:border-transparent [&_a]:outline-info/25 [&_a]:focus-visible:outline-3 [&_a]:focus-visible:has-[>code]:outline-0 [&_code]:text-info-600 dark:[&_code]:text-info-300 [&_code]:border-info/25 [&_a]:[&>code]:outline-info/25 [&_a]:hover:[&>code]:border-info [&_a]:hover:[&>code]:text-info [&_a]:focus-visible:[&>code]:border-info [&_a]:focus-visible:[&>code]:text-info [&>ul]:marker:text-info/50`,icon:`text-info`,externalIcon:`text-info-600 dark:text-info-300`},warning:{base:`border border-warning/25 bg-warning/10 text-warning-600 dark:text-warning-300 [&_a]:text-warning [&_a]:hover:border-warning [&_a]:focus-visible:border-transparent [&_a]:outline-warning/25 [&_a]:focus-visible:outline-3 [&_a]:focus-visible:has-[>code]:outline-0 [&_code]:text-warning-600 dark:[&_code]:text-warning-300 [&_code]:border-warning/25 [&_a]:[&>code]:outline-warning/25 [&_a]:hover:[&>code]:border-warning [&_a]:hover:[&>code]:text-warning [&_a]:focus-visible:[&>code]:border-warning [&_a]:focus-visible:[&>code]:text-warning [&>ul]:marker:text-warning/50`,icon:`text-warning`,externalIcon:`text-warning-600 dark:text-warning-300`},error:{base:`border border-error/25 bg-error/10 text-error-600 dark:text-error-300 [&_a]:text-error [&_a]:hover:border-error [&_a]:focus-visible:border-transparent [&_a]:outline-error/25 [&_a]:focus-visible:outline-3 [&_a]:focus-visible:has-[>code]:outline-0 [&_code]:text-error-600 dark:[&_code]:text-error-300 [&_code]:border-error/25 [&_a]:[&>code]:outline-error/25 [&_a]:hover:[&>code]:border-error [&_a]:hover:[&>code]:text-error [&_a]:focus-visible:[&>code]:border-error [&_a]:focus-visible:[&>code]:text-error [&>ul]:marker:text-error/50`,icon:`text-error`,externalIcon:`text-error-600 dark:text-error-300`},neutral:{base:`border border-muted bg-muted text-default`,icon:`text-highlighted`,externalIcon:`text-dimmed`}},to:{true:`border-dashed`}},compoundVariants:[{color:`primary`,to:!0,class:{base:`hover:border-primary outline-primary/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-primary`,externalIcon:`group-hover:text-primary`}},{color:`secondary`,to:!0,class:{base:`hover:border-secondary outline-secondary/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-secondary`,externalIcon:`group-hover:text-secondary`}},{color:`success`,to:!0,class:{base:`hover:border-success outline-success/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-success`,externalIcon:`group-hover:text-success`}},{color:`info`,to:!0,class:{base:`hover:border-info outline-info/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-info`,externalIcon:`group-hover:text-info`}},{color:`warning`,to:!0,class:{base:`hover:border-warning outline-warning/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-warning`,externalIcon:`group-hover:text-warning`}},{color:`error`,to:!0,class:{base:`hover:border-error outline-error/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-error`,externalIcon:`group-hover:text-error`}},{color:`neutral`,to:!0,class:{base:`hover:border-inverted outline-inverted/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-inverted`,externalIcon:`group-hover:text-highlighted`}}],defaultVariants:{color:`neutral`}},_=Object.assign({inheritAttrs:!1},{__name:`ProseCallout`,props:{to:{type:null,required:!1},target:{type:[String,Object,null],required:!1},icon:{type:null,required:!1},color:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(_){let v=d(`prose.callout`,_),y=u(),b=a(()=>f({extend:g,...y.ui?.prose?.callout||{}})({color:v.color,to:!!v.to})),x=a(()=>v.target||(v.to&&typeof v.to==`string`&&v.to.startsWith(`http`)?`_blank`:void 0));return(a,u)=>(o(),r(`div`,i(e(v).to?{}:a.$attrs,{class:b.value.base({class:[e(v).ui?.base,e(v).class]})}),[e(v).to?(o(),c(m,i({key:0},{to:e(v).to,target:x.value,...a.$attrs},{class:`focus:outline-none`,raw:``}),{default:s(()=>[...u[0]||=[n(`span`,{class:`absolute inset-0`,"aria-hidden":`true`},null,-1)]]),_:1},16)):l(``,!0),e(v).icon?(o(),c(p,{key:1,name:e(v).icon,class:t(b.value.icon({class:e(v).ui?.icon}))},null,8,[`name`,`class`])):l(``,!0),e(v).to&&x.value===`_blank`?(o(),c(p,{key:2,name:e(y).ui.icons.external,class:t(b.value.externalIcon({class:e(v).ui?.externalIcon}))},null,8,[`name`,`class`])):l(``,!0),h(a.$slots,`default`,{mdcUnwrap:`p`})],16))}});export{_ as default};
@@ -0,0 +1 @@
1
+ import{D as e,On as t,Rt as n,Zn as r,_ as i,b as a,et as o,g as s,mt as c,tr as l,v as u,xt as d,y as f}from"./DZo3dYLJ.js";import{r as p}from"./oXSDGTSr.js";import{n as m,t as h}from"./Baq-Hrpf.js";import{a as g}from"./Vo4wMbnS.js";import{t as _}from"./BsNk4K6P.js";import{u as v}from"#entry";import y from"./Cp9-r9Yz.js";var b={slots:{root:`relative my-5 group`,header:`flex items-center gap-1.5 border border-muted bg-default border-b-0 relative rounded-t-md px-4 py-3`,filename:`text-default text-sm/6`,icon:`size-4 shrink-0`,copy:`absolute top-[11px] end-[11px] lg:opacity-0 lg:group-hover:opacity-100 lg:focus-visible:opacity-100 transition`,base:`group font-mono text-sm/6 border border-muted bg-muted rounded-md px-4 py-3 whitespace-pre-wrap wrap-break-word overflow-x-auto outline-primary/25 focus-visible:outline-3 focus-visible:border-primary **:[.line]:block **:[.line.highlight]:-mx-4 **:[.line.highlight]:px-4 **:[.line.highlight]:bg-accented/50!`},variants:{filename:{true:{root:`[&>pre]:rounded-t-none [&>pre]:my-0 my-5`}}}},x={__name:`ProsePre`,props:{icon:{type:null,required:!1},code:{type:String,required:!1},language:{type:String,required:!1},filename:{type:String,required:!1},highlights:{type:Array,required:!1},hideHeader:{type:Boolean,required:!1},meta:{type:String,required:!1},copy:{type:[Boolean,Object],required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(x){let S=m(`prose.pre`,x),{t:C}=v(),{copy:w,copied:T}=g(),E=p(),D=n(`baseRef`),O=s(()=>h({extend:b,...E.ui?.prose?.pre||{}})());function k(){let e=S.code??D.value?.textContent??``;w(e)}return(n,s)=>(c(),a(`div`,{class:r(O.value.root({class:[t(S).ui?.root],filename:!!t(S).filename}))},[t(S).filename&&!t(S).hideHeader?(c(),a(`div`,{key:0,class:r(O.value.header({class:t(S).ui?.header}))},[e(y,{icon:t(S).icon,filename:t(S).filename,class:r(O.value.icon({class:t(S).ui?.icon}))},null,8,[`icon`,`filename`,`class`]),i(`span`,{class:r(O.value.filename({class:t(S).ui?.filename}))},l(t(S).filename),3)],2)):f(``,!0),t(S).copy?(c(),u(_,o({key:1,icon:t(T)?t(E).ui.icons.copyCheck:t(E).ui.icons.copy,color:`neutral`,variant:`outline`,size:`sm`,"aria-label":t(C)(`prose.pre.copy`)},typeof t(S).copy==`object`?t(S).copy:{},{class:O.value.copy({class:t(S).ui?.copy}),onClick:k}),null,16,[`icon`,`aria-label`,`class`])):f(``,!0),i(`pre`,o({ref_key:`baseRef`,ref:D,class:O.value.base({class:[t(S).ui?.base,t(S).class]})},n.$attrs),[d(n.$slots,`default`)],16)],2))}};export{x as default};
@@ -0,0 +1,13 @@
1
+ import{$n as e,D as t,E as n,Ht as r,Lt as i,On as a,Rt as o,Ut as s,Zn as c,_ as l,b as u,bt as d,ct as f,er as p,et as m,ft as h,g,gn as _,k as v,mt as y,o as b,pn as x,qt as S,tr as C,tt as w,u as T,v as E,vn as D,wn as O,wt as k,xn as A,xt as j,y as M}from"./DZo3dYLJ.js";import{w as N}from"./51OWHj8c.js";import{r as P}from"./oXSDGTSr.js";import{h as F,n as I,t as L}from"./Baq-Hrpf.js";import{r as ee,t as R}from"./DLkAKotw.js";import{t as z}from"./DHihWhf5.js";import{S as B,m as V,s as te}from"./CuJUHLl8.js";import{d as ne,f as re,p as H,r as ie}from"./Vo4wMbnS.js";import{t as U}from"./CK9_veoz.js";import{t as W}from"./BuOKDFiJ.js";import{t as G}from"./D3YCAmfu.js";import{t as K}from"./C9StZL3D.js";import{t as q}from"./Bi9Axj3V.js";import{t as J}from"./D2zrOcWn.js";import{n as Y}from"./CNCQ_RRC.js";import{t as X}from"./BsNk4K6P.js";import{_ as ae,b as oe,g as se,h as ce,u as Z,v as Q,y as le}from"#entry";var $=100,[ue,de]=F(`ProgressRoot`),fe=e=>typeof e==`number`;function pe(e,t){return z(e)||fe(e)&&!Number.isNaN(e)&&e<=t&&e>=0?e:(console.error(`Invalid prop \`value\` of value \`${e}\` supplied to \`ProgressRoot\`. The \`value\` prop must be:
2
+ - a positive number
3
+ - less than the value passed to \`max\` (or ${$} if no \`max\` prop is set)
4
+ - \`null\` or \`undefined\` if the progress is indeterminate.
5
+
6
+ Defaulting to \`null\`.`),null)}function me(e){return fe(e)&&!Number.isNaN(e)&&e>0?e:(console.error(`Invalid prop \`max\` of value \`${e}\` supplied to \`ProgressRoot\`. Only numbers greater than 0 are valid max values. Defaulting to \`${$}\`.`),$)}var he=v({__name:`ProgressRoot`,props:{modelValue:{type:[Number,null],required:!1},max:{type:Number,required:!1,default:$},getValueLabel:{type:Function,required:!1,default:(e,t)=>fe(e)?`${Math.round(e/t*$)}%`:void 0},getValueText:{type:Function,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`update:modelValue`,`update:max`],setup(e,{emit:t}){let n=e,i=t;G();let o=H(n,`modelValue`,i,{passive:n.modelValue===void 0}),s=H(n,`max`,i,{passive:n.max===void 0});r(()=>o.value,async e=>{let t=pe(e,n.max);t!==e&&(await w(),o.value=t)},{immediate:!0}),r(()=>n.max,e=>{let t=me(n.max);t!==e&&(s.value=t)},{immediate:!0});let c=g(()=>z(o.value)?`indeterminate`:o.value===s.value?`complete`:`loading`);return de({modelValue:o,max:s,progressState:c}),(t,n)=>(y(),E(a(U),{"as-child":e.asChild,as:e.as,"aria-valuemax":a(s),"aria-valuemin":0,"aria-valuenow":fe(a(o))?a(o):void 0,"aria-valuetext":e.getValueText?.(a(o),a(s)),"aria-label":e.getValueLabel(a(o),a(s)),role:`progressbar`,"data-state":c.value,"data-value":a(o)??void 0,"data-max":a(s)},{default:S(()=>[j(t.$slots,`default`,{modelValue:a(o)})]),_:3},8,[`as-child`,`as`,`aria-valuemax`,`aria-valuenow`,`aria-valuetext`,`aria-label`,`data-state`,`data-value`,`data-max`]))}}),ge=v({__name:`ProgressIndicator`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e,n=ue();return G(),(e,r)=>(y(),E(a(U),m(t,{"data-state":a(n).progressState.value,"data-value":a(n).modelValue?.value??void 0,"data-max":a(n).max.value}),{default:S(()=>[j(e.$slots,`default`)]),_:3},16,[`data-state`,`data-value`,`data-max`]))}}),_e=v({__name:`ToastAnnounceExclude`,props:{altText:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){return(t,n)=>(y(),E(a(U),{as:e.as,"as-child":e.asChild,"data-reka-toast-announce-exclude":``,"data-reka-toast-announce-alt":e.altText||void 0},{default:S(()=>[j(t.$slots,`default`)]),_:3},8,[`as`,`as-child`,`data-reka-toast-announce-alt`]))}}),ve=v({__name:`ToastAnnounce`,setup(e){let t=oe(),r=B(1e3),i=D(!1),o=0,s=0;return te&&(o=requestAnimationFrame(()=>{s=requestAnimationFrame(()=>{i.value=!0})}),x(()=>{cancelAnimationFrame(o),cancelAnimationFrame(s)})),(e,o)=>a(r)||i.value?(y(),E(a(q),{key:0,feature:`fully-hidden`},{default:S(()=>[n(C(a(t).label.value)+` `,1),j(e.$slots,`default`)]),_:3})):M(`v-if`,!0)}}),[ye,be]=F(`ToastPositioner`),[xe,Se]=F(`ToastRoot`),Ce=v({inheritAttrs:!1,__name:`ToastRootImpl`,props:{type:{type:String,required:!1},open:{type:Boolean,required:!1,default:!1},duration:{type:Number,required:!1},toast:{type:Object,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`li`}},emits:[`close`,`escapeKeyDown`,`pause`,`resume`,`swipeStart`,`swipeMove`,`swipeCancel`,`swipeEnd`],setup(e,{emit:i}){let o=e,c=i,{forwardRef:l,currentElement:p}=G(),{CollectionItem:v}=R(),x=oe(),w=D(null),k=D(null),P=g(()=>typeof o.duration==`number`?o.duration:x.duration.value),F=D(0),I=D(P.value),L=D(0),z=D(P.value),B=ne(()=>{let e=Date.now()-F.value;z.value=Math.max(I.value-e,0)},{fpsLimit:60});function V(e){e<=0||e===1/0||te&&(window.clearTimeout(L.value),F.value=Date.now(),L.value=window.setTimeout(H,e))}function H(e){let t=e?.pointerType===``;p.value?.contains(ee())&&t&&x.viewport.value?.focus(),t&&(x.isClosePausedRef.value=!1),c(`close`)}let W=ye(null),K=A(null);r([p,()=>o.toast?.updateKey],([e])=>{K.value=e?ae(e):null},{flush:`post`,immediate:!0});let q=_({seq:0,height:0,open:o.open}),J=g(()=>x.getToastStack(q));function Y(){let e=p.value;if(!e)return;let t=e.style.height;e.style.height=`auto`,q.height=e.offsetHeight,e.style.height=t}if(re(p,Y),r(()=>o.toast?.updateKey,Y,{flush:`post`}),r(()=>o.open,(e,t)=>{q.open=e,e&&!t&&x.reopenToast(q)}),o.type&&![`foreground`,`background`].includes(o.type))throw Error("Invalid prop `type` supplied to `Toast`. Expected `foreground | background`.");s(e=>{let t=x.viewport.value;if(t){let n=()=>{V(I.value),B.resume(),c(`resume`)},r=()=>{let e=Date.now()-F.value;I.value-=e,window.clearTimeout(L.value),B.pause(),c(`pause`)};t.addEventListener(ce,r),t.addEventListener(se,n),e(()=>{t.removeEventListener(ce,r),t.removeEventListener(se,n)})}});let X=g(()=>o.toast?x.toastStore.getRestartKey(o.toast.id):0);r([()=>o.open,P,X],()=>{I.value=P.value,o.open&&!x.isClosePausedRef.value&&V(P.value)},{immediate:!0}),ie(`Escape`,e=>{c(`escapeKeyDown`,e),e.defaultPrevented||(x.isFocusedToastEscapeKeyDownRef.value=!0,H())});let Z;return f(()=>{x.onToastAdd(),Z=x.registerToast(q),Y()}),h(()=>{x.onToastRemove(),Z?.()}),Se({onClose:H,toast:O(o,`toast`)}),(r,i)=>(y(),u(b,null,[K.value?(y(),E(ve,{key:e.toast?.updateKey??0,role:`alert`,"aria-live":e.type===`foreground`?`assertive`:`polite`},{default:S(()=>[M(`
7
+ Render each chunk as its own text node so screen readers get the
8
+ natural pause break between nodes (see comment in utils.ts).
9
+ Interpolating the array directly with \`{{ announceTextContent }}\`
10
+ would route through Vue's \`toDisplayString\`, which JSON-stringifies
11
+ arrays — the live region would then announce literal \`[\`, quotes
12
+ and commas instead of the toast title and description.
13
+ `),(y(!0),u(b,null,d(K.value,(e,t)=>(y(),u(b,{key:t},[n(C(e),1)],64))),128))]),_:1},8,[`aria-live`])):M(`v-if`,!0),a(x).viewport.value||a(W)?(y(),E(T,{key:1,to:a(x).viewport.value??`body`,disabled:!!a(W)},[t(a(v),null,{default:S(()=>[t(a(U),m({ref:a(l),tabindex:`0`},r.$attrs,{as:e.as,"as-child":e.asChild,"data-state":e.open?`open`:`closed`,"data-swipe-direction":a(x).swipeDirection.value,"data-status":e.toast?.status,"data-expanded":a(x).expanded.value?``:void 0,"data-limited":J.value.limited?``:void 0,inert:J.value.limited||void 0,style:{...a(x).disableSwipe.value?void 0:{userSelect:`none`,touchAction:`none`},"--reka-toast-index":J.value.index,"--reka-toast-offset-y":`${J.value.offsetY}px`,"--reka-toast-height":q.height?`${q.height}px`:void 0},onPointerdown:i[0]||=N(e=>{a(x).disableSwipe.value||(w.value={x:e.clientX,y:e.clientY})},[`left`]),onPointermove:i[1]||=e=>{if(a(x).disableSwipe.value||!w.value)return;let t=e.clientX-w.value.x,n=e.clientY-w.value.y,r=!!k.value,i=[`left`,`right`].includes(a(x).swipeDirection.value),o=[`left`,`up`].includes(a(x).swipeDirection.value)?Math.min:Math.max,s=i?o(0,t):0,l=i?0:o(0,n),u=e.pointerType===`touch`?10:2,d={x:s,y:l},f={originalEvent:e,delta:d};r?(k.value=d,a(Q)(a(`toast.swipeMove`),e=>c(`swipeMove`,e),f)):a(le)(d,a(x).swipeDirection.value,u)?(k.value=d,a(Q)(a(`toast.swipeStart`),e=>c(`swipeStart`,e),f),e.target.setPointerCapture(e.pointerId)):(Math.abs(t)>u||Math.abs(n)>u)&&(w.value=null)},onPointerup:i[2]||=e=>{if(a(x).disableSwipe.value)return;let t=k.value,n=e.target;if(n.hasPointerCapture(e.pointerId)&&n.releasePointerCapture(e.pointerId),k.value=null,w.value=null,t){let n=e.currentTarget,r={originalEvent:e,delta:t};a(le)(t,a(x).swipeDirection.value,a(x).swipeThreshold.value)?a(Q)(a(`toast.swipeEnd`),e=>c(`swipeEnd`,e),r):a(Q)(a(`toast.swipeCancel`),e=>c(`swipeCancel`,e),r),n?.addEventListener(`click`,e=>e.preventDefault(),{once:!0})}}}),{default:S(()=>[j(r.$slots,`default`,{remaining:z.value,duration:P.value})]),_:3},16,[`as`,`as-child`,`data-state`,`data-swipe-direction`,`data-status`,`data-expanded`,`data-limited`,`inert`,`style`])]),_:3})],8,[`to`,`disabled`])):M(`v-if`,!0)],64))}}),we=v({__name:`ToastAction`,props:{altText:{type:String,required:!1},closeOnClick:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(e){let r=e,o=xe(),{forwardRef:s}=G(),c=i(),l=g(()=>o.toast.value?.actionProps),u=g(()=>!!c.default||!o.toast.value||!!l.value),d=g(()=>r.altText??l.value?.altText);if(u.value&&!d.value)throw Error("Missing prop `altText` expected on `ToastAction`");function f(e){l.value?.onClick?.(e),(l.value?.closeOnClick??r.closeOnClick)&&o.onClose(e)}return(r,i)=>u.value&&d.value?(y(),E(_e,{key:0,"alt-text":d.value,"as-child":``},{default:S(()=>[t(a(U),{ref:a(s),as:e.as,"as-child":e.asChild,type:e.as===`button`?`button`:void 0,onClick:f},{default:S(()=>[j(r.$slots,`default`,{},()=>[n(C(l.value?.label),1)])]),_:3},8,[`as`,`as-child`,`type`])]),_:3},8,[`alt-text`])):M(`v-if`,!0)}}),Te=v({__name:`ToastClose`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(e){let n=e,r=xe(),{forwardRef:i}=G();return(o,s)=>(y(),E(_e,{"as-child":``},{default:S(()=>[t(a(U),m(n,{ref:a(i),type:e.as===`button`?`button`:void 0,onClick:a(r).onClose}),{default:S(()=>[j(o.$slots,`default`)]),_:3},16,[`type`,`onClick`])]),_:3}))}}),Ee=v({__name:`ToastDescription`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let r=t;G();let i=xe(null);return(t,o)=>t.$slots.default||!a(i)?.toast.value||a(i).toast.value.description?(y(),E(a(U),e(m({key:0},r)),{default:S(()=>[j(t.$slots,`default`,{},()=>[n(C(a(i)?.toast.value?.description),1)])]),_:3},16)):M(`v-if`,!0)}}),De=v({__name:`ToastRoot`,props:{defaultOpen:{type:Boolean,required:!1,default:!0},forceMount:{type:Boolean,required:!1},type:{type:String,required:!1,default:`foreground`},open:{type:Boolean,required:!1,default:void 0},duration:{type:Number,required:!1},toast:{type:Object,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`li`}},emits:[`escapeKeyDown`,`pause`,`resume`,`swipeStart`,`swipeMove`,`swipeCancel`,`swipeEnd`,`update:open`],setup(e,{emit:n}){let i=e,o=n,{forwardRef:s}=G(),c=H(i,`open`,o,{defaultValue:i.defaultOpen,passive:i.open===void 0}),l=oe(),u=g(()=>i.toast?i.toast.open:c.value),d=g(()=>i.toast?.type??i.type),f=g(()=>i.toast?.status===`loading`?1/0:i.toast?.duration??i.duration);function p(){i.toast?(l.toastStore.close(i.toast.id),o(`update:open`,!1)):c.value=!1}let h=D(!1);return r([()=>i.toast,h],([e,t])=>{e&&!e.open&&!t&&l.toastStore.remove(e.id)},{immediate:!0}),(n,r)=>(y(),E(a(K),{present:e.forceMount||u.value},{default:S(()=>[t(Ce,m({ref:a(s),open:u.value,type:d.value,as:e.as,"as-child":e.asChild,duration:f.value,toast:e.toast},n.$attrs,{onVnodeMounted:r[0]||=e=>h.value=!0,onVnodeUnmounted:r[1]||=e=>h.value=!1,onClose:p,onPause:r[2]||=e=>o(`pause`),onResume:r[3]||=e=>o(`resume`),onEscapeKeyDown:r[4]||=e=>o(`escapeKeyDown`,e),onSwipeStart:r[5]||=e=>{o(`swipeStart`,e),e.defaultPrevented||e.currentTarget.setAttribute(`data-swipe`,`start`)},onSwipeMove:r[6]||=e=>{if(o(`swipeMove`,e),!e.defaultPrevented){let{x:t,y:n}=e.detail.delta,r=e.currentTarget;r.setAttribute(`data-swipe`,`move`),r.style.setProperty(`--reka-toast-swipe-move-x`,`${t}px`),r.style.setProperty(`--reka-toast-swipe-move-y`,`${n}px`)}},onSwipeCancel:r[7]||=e=>{if(o(`swipeCancel`,e),!e.defaultPrevented){let t=e.currentTarget;t.setAttribute(`data-swipe`,`cancel`),t.style.removeProperty(`--reka-toast-swipe-move-x`),t.style.removeProperty(`--reka-toast-swipe-move-y`),t.style.removeProperty(`--reka-toast-swipe-end-x`),t.style.removeProperty(`--reka-toast-swipe-end-y`)}},onSwipeEnd:r[8]||=e=>{if(o(`swipeEnd`,e),!e.defaultPrevented){let{x:t,y:n}=e.detail.delta,r=e.currentTarget;r.setAttribute(`data-swipe`,`end`),r.style.removeProperty(`--reka-toast-swipe-move-x`),r.style.removeProperty(`--reka-toast-swipe-move-y`),r.style.setProperty(`--reka-toast-swipe-end-x`,`${t}px`),r.style.setProperty(`--reka-toast-swipe-end-y`,`${n}px`),p()}}}),{default:S(({remaining:e,duration:t})=>[j(n.$slots,`default`,{remaining:e,duration:t,open:u.value})]),_:3},16,[`open`,`type`,`as`,`as-child`,`duration`,`toast`])]),_:3},8,[`present`]))}}),Oe=v({__name:`ToastTitle`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let r=t;G();let i=xe(null);return(t,o)=>t.$slots.default||!a(i)?.toast.value||a(i).toast.value.title?(y(),E(a(U),e(m({key:0},r)),{default:S(()=>[j(t.$slots,`default`,{},()=>[n(C(a(i)?.toast.value?.title),1)])]),_:3},16)):M(`v-if`,!0)}}),ke={slots:{root:`gap-2`,base:`relative overflow-hidden rounded-full bg-accented`,indicator:`rounded-full size-full transition-transform duration-200 ease-out motion-reduce:transition-none motion-reduce:data-[state=indeterminate]:animate-pulse`,status:`flex text-dimmed duration-200 ease-out motion-reduce:transition-none`,steps:`grid items-end`,step:`truncate text-end row-start-1 col-start-1 transition-opacity ease-out`},variants:{animation:{carousel:``,"carousel-inverse":``,swing:``,elastic:``},color:{primary:{indicator:`bg-primary`,steps:`text-primary`},secondary:{indicator:`bg-secondary`,steps:`text-secondary`},success:{indicator:`bg-success`,steps:`text-success`},info:{indicator:`bg-info`,steps:`text-info`},warning:{indicator:`bg-warning`,steps:`text-warning`},error:{indicator:`bg-error`,steps:`text-error`},neutral:{indicator:`bg-inverted`,steps:`text-highlighted`}},size:{"2xs":{status:`text-xs`,steps:`text-xs`},xs:{status:`text-xs`,steps:`text-xs`},sm:{status:`text-sm`,steps:`text-sm`},md:{status:`text-sm`,steps:`text-sm`},lg:{status:`text-sm`,steps:`text-sm`},xl:{status:`text-base`,steps:`text-base`},"2xl":{status:`text-base`,steps:`text-base`}},step:{active:{step:`opacity-100`},first:{step:`opacity-100 text-muted`},other:{step:`opacity-0`},last:{step:``}},orientation:{horizontal:{root:`w-full flex flex-col`,base:`w-full`,status:`flex-row items-center justify-end w-(--percent) min-w-fit transition-[width]`},vertical:{root:`h-full flex flex-row-reverse`,base:`h-full`,status:`flex-col justify-end h-(--percent) min-h-fit transition-[height]`}},inverted:{true:{status:`self-end`}}},compoundVariants:[{inverted:!0,orientation:`horizontal`,class:{step:`text-start`,status:`flex-row-reverse`}},{inverted:!0,orientation:`vertical`,class:{steps:`items-start`,status:`flex-col-reverse`}},{orientation:`horizontal`,size:`2xs`,class:`h-px`},{orientation:`horizontal`,size:`xs`,class:`h-0.5`},{orientation:`horizontal`,size:`sm`,class:`h-1`},{orientation:`horizontal`,size:`md`,class:`h-2`},{orientation:`horizontal`,size:`lg`,class:`h-3`},{orientation:`horizontal`,size:`xl`,class:`h-4`},{orientation:`horizontal`,size:`2xl`,class:`h-5`},{orientation:`vertical`,size:`2xs`,class:`w-px`},{orientation:`vertical`,size:`xs`,class:`w-0.5`},{orientation:`vertical`,size:`sm`,class:`w-1`},{orientation:`vertical`,size:`md`,class:`w-2`},{orientation:`vertical`,size:`lg`,class:`w-3`},{orientation:`vertical`,size:`xl`,class:`w-4`},{orientation:`vertical`,size:`2xl`,class:`w-5`},{orientation:`horizontal`,animation:`carousel`,class:{indicator:`motion-safe:data-[state=indeterminate]:animate-[carousel_2s_linear_infinite] motion-safe:data-[state=indeterminate]:rtl:animate-[carousel-rtl_2s_linear_infinite]`}},{orientation:`vertical`,animation:`carousel`,class:{indicator:`motion-safe:data-[state=indeterminate]:animate-[carousel-vertical_2s_linear_infinite]`}},{orientation:`horizontal`,animation:`carousel-inverse`,class:{indicator:`motion-safe:data-[state=indeterminate]:animate-[carousel-inverse_2s_linear_infinite] motion-safe:data-[state=indeterminate]:rtl:animate-[carousel-inverse-rtl_2s_linear_infinite]`}},{orientation:`vertical`,animation:`carousel-inverse`,class:{indicator:`motion-safe:data-[state=indeterminate]:animate-[carousel-inverse-vertical_2s_linear_infinite]`}},{orientation:`horizontal`,animation:`swing`,class:{indicator:`motion-safe:data-[state=indeterminate]:animate-[swing_2s_var(--ease-in-out)_infinite]`}},{orientation:`vertical`,animation:`swing`,class:{indicator:`motion-safe:data-[state=indeterminate]:animate-[swing-vertical_2s_var(--ease-in-out)_infinite]`}},{orientation:`horizontal`,animation:`elastic`,class:{indicator:`relative motion-safe:data-[state=indeterminate]:animate-[elastic_2s_var(--ease-in-out)_infinite]`}},{orientation:`vertical`,animation:`elastic`,class:{indicator:`relative motion-safe:data-[state=indeterminate]:animate-[elastic-vertical_2s_var(--ease-in-out)_infinite]`}}],defaultVariants:{animation:`carousel`,color:`primary`,size:`md`}},Ae={__name:`UProgress`,props:{as:{type:null,required:!1},max:{type:[Number,Array],required:!1},status:{type:Boolean,required:!1},inverted:{type:Boolean,required:!1,default:!1},size:{type:null,required:!1},color:{type:null,required:!1},orientation:{type:null,required:!1,default:`horizontal`},animation:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},getValueLabel:{type:Function,required:!1},getValueText:{type:Function,required:!1},modelValue:{type:[Number,null],required:!1,default:null}},emits:[`update:modelValue`,`update:max`],setup(e,{emit:r}){let o=e,s=r,l=i(),f=I(`progress`,o),{dir:h}=Z(),_=P(),v=W(V(f,`getValueLabel`,`getValueText`,`modelValue`),s),x=g(()=>v.value.modelValue===null),w=g(()=>Array.isArray(f.max)),T=g(()=>{if(!x.value&&f.max)return Array.isArray(f.max)?f.max.length-1:Number(f.max)}),D=g(()=>{if(!x.value)switch(!0){case v.value.modelValue<0:return 0;case v.value.modelValue>(T.value??100):return 100;default:return Math.round(v.value.modelValue/(T.value??100)*100)}}),O=g(()=>{if(D.value!==void 0)return f.orientation===`vertical`?{transform:`translateY(${f.inverted?``:`-`}${100-D.value}%)`}:h.value===`rtl`?{transform:`translateX(${f.inverted?`-`:``}${100-D.value}%)`}:{transform:`translateX(${f.inverted?``:`-`}${100-D.value}%)`}}),k=g(()=>({"--percent":`${Math.max(D.value??0,0)}%`}));function A(e){return e===Number(f.modelValue)}function N(e){return e===0}function F(e){return e===T.value}function ee(e){return e=Number(e),A(e)&&!N(e)?`active`:N(e)&&A(e)?`first`:F(e)&&A(e)?`last`:`other`}let R=g(()=>L({extend:ke,..._.ui?.progress||{}})({animation:f.animation,size:f.size,color:f.color,orientation:f.orientation,inverted:f.inverted})),z=g(()=>Object.keys({...ke.variants?.color,..._.ui?.progress?.variants?.color})),B=g(()=>f.color&&!z.value.includes(f.color)?f.color:void 0);return(e,r)=>(y(),E(a(U),{as:a(f).as,"data-orientation":a(f).orientation,"data-slot":`root`,class:c(R.value.root({class:[a(f).ui?.root,a(f).class]}))},{default:S(()=>[!x.value&&(a(f).status||l.status)?(y(),u(`div`,{key:0,"data-slot":`status`,class:c(R.value.status({class:a(f).ui?.status})),style:p(k.value)},[j(e.$slots,`status`,{percent:D.value},()=>[n(C(D.value)+`% `,1)])],6)):M(``,!0),t(a(he),m(a(v),{max:T.value,"data-slot":`base`,class:R.value.base({class:a(f).ui?.base}),style:{transform:`translateZ(0)`}}),{default:S(()=>[t(a(ge),{"data-slot":`indicator`,class:c(R.value.indicator({class:a(f).ui?.indicator})),style:p([O.value,B.value?{backgroundColor:B.value}:void 0])},null,8,[`class`,`style`])]),_:1},16,[`max`,`class`]),w.value?(y(),u(`div`,{key:1,"data-slot":`steps`,class:c(R.value.steps({class:a(f).ui?.steps})),style:p(B.value?{color:B.value}:void 0)},[(y(!0),u(b,null,d(a(f).max,(t,r)=>(y(),u(`div`,{key:r,"data-slot":`step`,class:c(R.value.step({class:a(f).ui?.step,step:ee(r)}))},[j(e.$slots,`step-${r}`,{step:t},()=>[n(C(t),1)])],2))),128))],6)):M(``,!0)]),_:3},8,[`as`,`data-orientation`,`class`]))}},je={slots:{root:`relative group overflow-hidden bg-default shadow-lg rounded-lg ring ring-default p-4 flex gap-2.5`,wrapper:`w-0 flex-1 flex flex-col`,title:`text-sm font-medium text-highlighted`,description:`text-sm text-muted`,icon:`shrink-0 size-5`,avatar:`shrink-0`,avatarSize:`2xl`,actions:`flex gap-1.5 shrink-0`,progress:`absolute inset-x-0 bottom-0`,close:`p-0`},variants:{color:{primary:{root:`outline-primary/25 focus-visible:outline-3 focus-visible:ring-primary`,icon:`text-primary`},secondary:{root:`outline-secondary/25 focus-visible:outline-3 focus-visible:ring-secondary`,icon:`text-secondary`},success:{root:`outline-success/25 focus-visible:outline-3 focus-visible:ring-success`,icon:`text-success`},info:{root:`outline-info/25 focus-visible:outline-3 focus-visible:ring-info`,icon:`text-info`},warning:{root:`outline-warning/25 focus-visible:outline-3 focus-visible:ring-warning`,icon:`text-warning`},error:{root:`outline-error/25 focus-visible:outline-3 focus-visible:ring-error`,icon:`text-error`},neutral:{root:`outline-inverted/25 focus-visible:outline-3 focus-visible:ring-inverted`,icon:`text-highlighted`}},orientation:{horizontal:{root:`items-center`,actions:`items-center`},vertical:{root:`items-start`,actions:`items-start mt-2.5`}},title:{true:{description:`mt-1`}}},defaultVariants:{color:`primary`}},Me={__name:`UToast`,props:{as:{type:null,required:!1},title:{type:[String,Object,Function],required:!1},description:{type:[String,Object,Function],required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},color:{type:null,required:!1},orientation:{type:null,required:!1,default:`vertical`},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:null,required:!1},actions:{type:Array,required:!1},duration:{type:Number,required:!1},progress:{type:[Boolean,Object],required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},type:{type:String,required:!1}},emits:[`escapeKeyDown`,`pause`,`resume`,`swipeStart`,`swipeMove`,`swipeCancel`,`swipeEnd`,`update:open`],setup(e,{expose:r,emit:s}){let p=e,h=s,_=i(),v=I(`toast`,p),{t:x}=Z(),w=P(),T=W(V(v,`as`,`defaultOpen`,`open`,`duration`,`type`),h),O=g(()=>L({extend:je,...w.ui?.toast||{}})({color:v.color,orientation:v.orientation,title:!!v.title||!!_.title})),A=o(`rootRef`),F=D(0);return f(()=>{A.value?.$el?.getBoundingClientRect&&(F.value=A.value.$el.getBoundingClientRect().height)}),r({height:F}),(e,r)=>(y(),E(a(De),m({ref_key:`rootRef`,ref:A},a(T),{"data-orientation":a(v).orientation,"data-slot":`root`,class:O.value.root({class:[a(v).ui?.root,a(v).class]}),style:{"--height":F.value}}),{default:S(({remaining:i,duration:o,open:s})=>[j(e.$slots,`leading`,{ui:O.value},()=>[a(v).avatar?(y(),E(Y,m({key:0,size:a(v).ui?.avatarSize||O.value.avatarSize()},a(v).avatar,{"data-slot":`avatar`,class:O.value.avatar({class:a(v).ui?.avatar})}),null,16,[`size`,`class`])):a(v).icon?(y(),E(J,{key:1,name:a(v).icon,"data-slot":`icon`,class:c(O.value.icon({class:a(v).ui?.icon}))},null,8,[`name`,`class`])):M(``,!0)]),l(`div`,{"data-slot":`wrapper`,class:c(O.value.wrapper({class:a(v).ui?.wrapper}))},[a(v).title||_.title?(y(),E(a(Oe),{key:0,"data-slot":`title`,class:c(O.value.title({class:a(v).ui?.title}))},{default:S(()=>[j(e.$slots,`title`,{},()=>[typeof a(v).title==`function`?(y(),E(k(a(v).title()),{key:0})):typeof a(v).title==`object`?(y(),E(k(a(v).title),{key:1})):(y(),u(b,{key:2},[n(C(a(v).title),1)],64))])]),_:3},8,[`class`])):M(``,!0),a(v).description||_.description?(y(),E(a(Ee),{key:1,"data-slot":`description`,class:c(O.value.description({class:a(v).ui?.description}))},{default:S(()=>[j(e.$slots,`description`,{},()=>[typeof a(v).description==`function`?(y(),E(k(a(v).description()),{key:0})):typeof a(v).description==`object`?(y(),E(k(a(v).description),{key:1})):(y(),u(b,{key:2},[n(C(a(v).description),1)],64))])]),_:3},8,[`class`])):M(``,!0),a(v).orientation===`vertical`&&(a(v).actions?.length||_.actions)?(y(),u(`div`,{key:2,"data-slot":`actions`,class:c(O.value.actions({class:a(v).ui?.actions}))},[j(e.$slots,`actions`,{},()=>[(y(!0),u(b,null,d(a(v).actions,({closeOnClick:e,...n},i)=>(y(),E(a(we),{key:i,"alt-text":n.label||`Action`,"close-on-click":e,"as-child":``,onClick:r[0]||=N(()=>{},[`stop`])},{default:S(()=>[t(X,m({size:`xs`,color:a(v).color},{ref_for:!0},n),null,16,[`color`])]),_:2},1032,[`alt-text`,`close-on-click`]))),128))])],2)):M(``,!0)],2),a(v).orientation===`horizontal`&&(a(v).actions?.length||_.actions)||a(v).close?(y(),u(`div`,{key:0,"data-slot":`actions`,class:c(O.value.actions({class:a(v).ui?.actions,orientation:`horizontal`}))},[a(v).orientation===`horizontal`&&(a(v).actions?.length||_.actions)?j(e.$slots,`actions`,{},()=>[(y(!0),u(b,null,d(a(v).actions,({closeOnClick:e,...n},i)=>(y(),E(a(we),{key:i,"alt-text":n.label||`Action`,"close-on-click":e,"as-child":``,onClick:r[1]||=N(()=>{},[`stop`])},{default:S(()=>[t(X,m({size:`xs`,color:a(v).color},{ref_for:!0},n),null,16,[`color`])]),_:2},1032,[`alt-text`,`close-on-click`]))),128))],void 0,0):M(``,!0),a(v).close||_.close?(y(),E(a(Te),{key:1,"as-child":``},{default:S(()=>[j(e.$slots,`close`,{ui:O.value},()=>[a(v).close?(y(),E(X,m({key:0,icon:a(v).closeIcon||a(w).ui.icons.close,color:`neutral`,variant:`link`,"aria-label":a(x)(`toast.close`)},typeof a(v).close==`object`?a(v).close:{},{"data-slot":`close`,class:O.value.close({class:a(v).ui?.close}),onClick:r[2]||=N(()=>{},[`stop`])}),null,16,[`icon`,`aria-label`,`class`])):M(``,!0)])]),_:3})):M(``,!0)],2)):M(``,!0),a(v).progress&&s&&i>0&&o?(y(),E(Ae,m({key:1,"model-value":i/o*100,color:a(v).color},typeof a(v).progress==`object`?a(v).progress:{},{size:`sm`,"data-slot":`progress`,class:O.value.progress({class:a(v).ui?.progress})}),null,16,[`model-value`,`color`,`class`])):M(``,!0)]),_:3},16,[`data-orientation`,`class`,`style`]))}};export{Me as default};
@@ -1 +1 @@
1
- import{$ as e,D as t,E as n,Ft as r,Ht as i,Lt as a,On as o,Zn as s,at as c,b as l,bt as u,ct as d,et as f,g as p,mt as m,o as h,qt as g,tr as _,v,vn as y,wt as b,xt as x,y as S}from"./DZo3dYLJ.js";import{r as C}from"./oXSDGTSr.js";import{i as w,m as T,n as E,t as D}from"./Baq-Hrpf.js";import{m as O}from"./CuJUHLl8.js";import{t as k}from"./BuOKDFiJ.js";import{a as A,i as j,n as M,r as N,t as P}from"./DJUwhJ8T.js";import{t as F}from"./CjRYYbsC.js";import{n as I}from"./D8Bpf7sE.js";import{o as L}from"#entry";import{t as R}from"./BSov4ehT.js";var z={slots:{root:`flex items-center gap-2`,list:`relative flex p-1 group`,indicator:`absolute transition-[translate,width] duration-200 ease-out motion-reduce:transition-none`,trigger:[`group relative inline-flex items-center min-w-0 data-[state=inactive]:text-muted hover:data-[state=inactive]:not-disabled:text-default font-medium rounded-md disabled:cursor-not-allowed disabled:opacity-75`,`transition-colors`],leadingIcon:`shrink-0`,leadingAvatar:`shrink-0`,leadingAvatarSize:``,label:`truncate`,trailingBadge:`shrink-0`,trailingBadgeSize:`sm`,content:`w-full rounded-md focus-visible:outline-3`},variants:{color:{primary:{content:`outline-primary/25`},secondary:{content:`outline-secondary/25`},success:{content:`outline-success/25`},info:{content:`outline-info/25`},warning:{content:`outline-warning/25`},error:{content:`outline-error/25`},neutral:{content:`outline-inverted/25`}},variant:{pill:{list:`bg-elevated rounded-lg`,trigger:[`grow`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:content-[''] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:absolute in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:inset-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:rounded-md in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:shadow-xs in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:-z-10 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:isolate`],indicator:`rounded-md shadow-xs`},link:{list:`border-default`,indicator:`rounded-full`,trigger:`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:content-[''] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:absolute in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:rounded-full`}},orientation:{horizontal:{root:`flex-col`,list:`w-full`,indicator:`left-0 w-(--reka-tabs-indicator-size) translate-x-(--reka-tabs-indicator-position)`,trigger:`justify-center`},vertical:{list:`flex-col`,indicator:`top-0 h-(--reka-tabs-indicator-size) translate-y-(--reka-tabs-indicator-position)`}},size:{xs:{trigger:`px-2 py-1 text-xs gap-1`,leadingIcon:`size-4`,leadingAvatarSize:`3xs`},sm:{trigger:`px-2.5 py-1.5 text-xs gap-1.5`,leadingIcon:`size-4`,leadingAvatarSize:`3xs`},md:{trigger:`px-3 py-1.5 text-sm gap-1.5`,leadingIcon:`size-5`,leadingAvatarSize:`2xs`},lg:{trigger:`px-3 py-2 text-sm gap-2`,leadingIcon:`size-5`,leadingAvatarSize:`2xs`},xl:{trigger:`px-3 py-2 text-base gap-2`,leadingIcon:`size-6`,leadingAvatarSize:`xs`}}},compoundVariants:[{orientation:`horizontal`,variant:`pill`,class:{indicator:`inset-y-1`}},{orientation:`horizontal`,variant:`link`,class:{list:`border-b -mb-px`,indicator:`-bottom-px h-px`,trigger:`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:inset-x-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:-bottom-[calc(var(--spacing)+1px)] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:h-px`}},{orientation:`vertical`,variant:`pill`,class:{indicator:`inset-x-1`,list:`items-center`,trigger:`w-full justify-center`}},{orientation:`vertical`,variant:`link`,class:{list:`border-s -ms-px`,indicator:`-start-px w-px`,trigger:`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:inset-y-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:-start-[calc(var(--spacing)+1px)] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:w-px`}},{color:`primary`,variant:`pill`,class:{indicator:`bg-primary`,trigger:[`data-[state=active]:text-inverted outline-primary/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-primary`]}},{color:`secondary`,variant:`pill`,class:{indicator:`bg-secondary`,trigger:[`data-[state=active]:text-inverted outline-secondary/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-secondary`]}},{color:`success`,variant:`pill`,class:{indicator:`bg-success`,trigger:[`data-[state=active]:text-inverted outline-success/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-success`]}},{color:`info`,variant:`pill`,class:{indicator:`bg-info`,trigger:[`data-[state=active]:text-inverted outline-info/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-info`]}},{color:`warning`,variant:`pill`,class:{indicator:`bg-warning`,trigger:[`data-[state=active]:text-inverted outline-warning/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-warning`]}},{color:`error`,variant:`pill`,class:{indicator:`bg-error`,trigger:[`data-[state=active]:text-inverted outline-error/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-error`]}},{color:`neutral`,variant:`pill`,class:{indicator:`bg-inverted`,trigger:[`data-[state=active]:text-inverted outline-inverted/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-inverted`]}},{color:`primary`,variant:`link`,class:{indicator:`bg-primary`,trigger:[`data-[state=active]:text-primary outline-primary/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-primary`]}},{color:`secondary`,variant:`link`,class:{indicator:`bg-secondary`,trigger:[`data-[state=active]:text-secondary outline-secondary/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-secondary`]}},{color:`success`,variant:`link`,class:{indicator:`bg-success`,trigger:[`data-[state=active]:text-success outline-success/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-success`]}},{color:`info`,variant:`link`,class:{indicator:`bg-info`,trigger:[`data-[state=active]:text-info outline-info/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-info`]}},{color:`warning`,variant:`link`,class:{indicator:`bg-warning`,trigger:[`data-[state=active]:text-warning outline-warning/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-warning`]}},{color:`error`,variant:`link`,class:{indicator:`bg-error`,trigger:[`data-[state=active]:text-error outline-error/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-error`]}},{color:`neutral`,variant:`link`,class:{indicator:`bg-inverted`,trigger:[`data-[state=active]:text-highlighted outline-inverted/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-inverted`]}}],defaultVariants:{color:`primary`,variant:`pill`,size:`md`}},B={__name:`UTabs`,props:{as:{type:null,required:!1},items:{type:Array,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},orientation:{type:null,required:!1,default:`horizontal`},content:{type:Boolean,required:!1,default:!0},valueKey:{type:null,required:!1,default:`value`},labelKey:{type:null,required:!1,default:`label`},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultValue:{type:[String,Number],required:!1,default:`0`},modelValue:{type:[String,Number],required:!1},activationMode:{type:String,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:[`update:modelValue`],setup(e,{expose:r,emit:i}){let c=e,d=i,b=a(),T=E(`tabs`,c),L=C(),B=k(O(T,`as`,`unmountOnHide`),d),V=p(()=>D({extend:z,...L.ui?.tabs||{}})({color:T.color,variant:T.variant,size:T.size,orientation:T.orientation})),H=y([]);function U(e,t){H.value[e]=t}return r({triggersRef:H}),(e,r)=>(m(),v(o(A),f(o(B),{"model-value":o(T).modelValue,"default-value":o(T).defaultValue,orientation:o(T).orientation,"activation-mode":o(T).activationMode,"data-slot":`root`,class:V.value.root({class:[o(T).ui?.root,o(T).class]})}),{default:g(()=>[t(o(M),{"data-slot":`list`,class:s(V.value.list({class:o(T).ui?.list}))},{default:g(()=>[t(o(N),{"data-slot":`indicator`,class:s(V.value.indicator({class:o(T).ui?.indicator}))},null,8,[`class`]),x(e.$slots,`list-leading`),(m(!0),l(h,null,u(o(T).items,(t,r)=>(m(),v(o(P),{key:o(w)(t,o(T).valueKey)??r,ref_for:!0,ref:e=>U(r,e),value:o(w)(t,o(T).valueKey)??String(r),disabled:t.disabled,"data-slot":`trigger`,class:s(V.value.trigger({class:[o(T).ui?.trigger,t.ui?.trigger]}))},{default:g(()=>[x(e.$slots,`leading`,{item:t,index:r,ui:V.value},()=>[t.icon?(m(),v(F,{key:0,name:t.icon,"data-slot":`leadingIcon`,class:s(V.value.leadingIcon({class:[o(T).ui?.leadingIcon,t.ui?.leadingIcon]}))},null,8,[`name`,`class`])):t.avatar?(m(),v(I,f({key:1,size:t.ui?.leadingAvatarSize||o(T).ui?.leadingAvatarSize||V.value.leadingAvatarSize()},{ref_for:!0},t.avatar,{"data-slot":`leadingAvatar`,class:V.value.leadingAvatar({class:[o(T).ui?.leadingAvatar,t.ui?.leadingAvatar]})}),null,16,[`size`,`class`])):S(``,!0)]),o(w)(t,o(T).labelKey)||b.default?(m(),l(`span`,{key:0,"data-slot":`label`,class:s(V.value.label({class:[o(T).ui?.label,t.ui?.label]}))},[x(e.$slots,`default`,{item:t,index:r},()=>[n(_(o(w)(t,o(T).labelKey)),1)])],2)):S(``,!0),x(e.$slots,`trailing`,{item:t,index:r,ui:V.value},()=>[t.badge||t.badge===0?(m(),v(R,f({key:0,color:`neutral`,variant:`outline`,size:t.ui?.trailingBadgeSize||o(T).ui?.trailingBadgeSize||V.value.trailingBadgeSize()},{ref_for:!0},typeof t.badge==`string`||typeof t.badge==`number`?{label:t.badge}:t.badge,{"data-slot":`trailingBadge`,class:V.value.trailingBadge({class:[o(T).ui?.trailingBadge,t.ui?.trailingBadge]})}),null,16,[`size`,`class`])):S(``,!0)])]),_:2},1032,[`value`,`disabled`,`class`]))),128)),x(e.$slots,`list-trailing`)]),_:3},8,[`class`]),o(T).content?(m(!0),l(h,{key:0},u(o(T).items,(t,r)=>(m(),v(o(j),{key:o(w)(t,o(T).valueKey)??r,value:o(w)(t,o(T).valueKey)??String(r),"data-slot":`content`,class:s(V.value.content({class:[o(T).ui?.content,t.ui?.content,t.class]}))},{default:g(()=>[x(e.$slots,t.slot||`content`,{item:t,index:r,ui:V.value},()=>[n(_(t.content),1)])]),_:2},1032,[`value`,`class`]))),128)):S(``,!0)]),_:3},16,[`model-value`,`default-value`,`orientation`,`activation-mode`,`class`]))}},V={slots:{root:`my-5 gap-4`}},H={__name:`ProseTabs`,props:e({defaultValue:{type:String,required:!1,default:`0`},sync:{type:String,required:!1},hash:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},{modelValue:{type:String},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,n=a(),l=E(`prose.tabs`,t),u=r(e,`modelValue`),f=C(),h=p(()=>D({extend:V,...f.ui?.prose?.tabs||{}})),_=y(1),x=p(()=>(_.value,n.default?.()?.flatMap(S).filter(Boolean)||[]));function S(e,t){return typeof e.type==`symbol`?e.children?.map(S):{index:t,label:e.props?.label||`${t}`,description:e.props?.description,icon:e.props?.icon,component:e}}d(()=>{if(l.sync){let e=`tabs-${l.sync}`,t=L(e,()=>localStorage.getItem(e));i(t,()=>{t.value&&(u.value=t.value)},{immediate:!0}),i(u,()=>{u.value&&(t.value=u.value,localStorage.setItem(e,u.value))})}});async function w(){if(l.hash){let e=l.hash.startsWith(`#`)?l.hash:`#${l.hash}`;setTimeout(()=>{document.querySelector(e)?.scrollIntoView()},200)}}return c(()=>_.value++),(e,t)=>(m(),v(B,{modelValue:u.value,"onUpdate:modelValue":[t[0]||=e=>u.value=e,w],color:`primary`,variant:`link`,items:x.value,class:s(o(l).class),"unmount-on-hide":!1,ui:o(T)(h.value(),o(l).ui)},{content:g(({item:e})=>[(m(),v(b(e.component)))]),_:1},8,[`modelValue`,`items`,`class`,`ui`]))}};export{H as default};
1
+ import{$ as e,D as t,E as n,Ft as r,Ht as i,Lt as a,On as o,Zn as s,at as c,b as l,bt as u,ct as d,et as f,g as p,mt as m,o as h,qt as g,tr as _,v,vn as y,wt as b,xt as x,y as S}from"./DZo3dYLJ.js";import{r as C}from"./oXSDGTSr.js";import{i as w,m as T,n as E,t as D}from"./Baq-Hrpf.js";import{m as O}from"./CuJUHLl8.js";import{t as k}from"./BuOKDFiJ.js";import{a as A,i as j,n as M,r as N,t as P}from"./C7AVymkF.js";import{t as F}from"./D2zrOcWn.js";import{n as I}from"./CNCQ_RRC.js";import{c as L}from"#entry";import{t as R}from"./Dp5MbiLe.js";var z={slots:{root:`flex items-center gap-2`,list:`relative flex p-1 group`,indicator:`absolute transition-[translate,width] duration-200 ease-out motion-reduce:transition-none`,trigger:[`group relative inline-flex items-center min-w-0 data-[state=inactive]:text-muted hover:data-[state=inactive]:not-disabled:text-default font-medium rounded-md disabled:cursor-not-allowed disabled:opacity-75`,`transition-colors`],leadingIcon:`shrink-0`,leadingAvatar:`shrink-0`,leadingAvatarSize:``,label:`truncate`,trailingBadge:`shrink-0`,trailingBadgeSize:`sm`,content:`w-full rounded-md focus-visible:outline-3`},variants:{color:{primary:{content:`outline-primary/25`},secondary:{content:`outline-secondary/25`},success:{content:`outline-success/25`},info:{content:`outline-info/25`},warning:{content:`outline-warning/25`},error:{content:`outline-error/25`},neutral:{content:`outline-inverted/25`}},variant:{pill:{list:`bg-elevated rounded-lg`,trigger:[`grow`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:content-[''] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:absolute in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:inset-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:rounded-md in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:shadow-xs in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:-z-10 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:isolate`],indicator:`rounded-md shadow-xs`},link:{list:`border-default`,indicator:`rounded-full`,trigger:`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:content-[''] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:absolute in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:rounded-full`}},orientation:{horizontal:{root:`flex-col`,list:`w-full`,indicator:`left-0 w-(--reka-tabs-indicator-size) translate-x-(--reka-tabs-indicator-position)`,trigger:`justify-center`},vertical:{list:`flex-col`,indicator:`top-0 h-(--reka-tabs-indicator-size) translate-y-(--reka-tabs-indicator-position)`}},size:{xs:{trigger:`px-2 py-1 text-xs gap-1`,leadingIcon:`size-4`,leadingAvatarSize:`3xs`},sm:{trigger:`px-2.5 py-1.5 text-xs gap-1.5`,leadingIcon:`size-4`,leadingAvatarSize:`3xs`},md:{trigger:`px-3 py-1.5 text-sm gap-1.5`,leadingIcon:`size-5`,leadingAvatarSize:`2xs`},lg:{trigger:`px-3 py-2 text-sm gap-2`,leadingIcon:`size-5`,leadingAvatarSize:`2xs`},xl:{trigger:`px-3 py-2 text-base gap-2`,leadingIcon:`size-6`,leadingAvatarSize:`xs`}}},compoundVariants:[{orientation:`horizontal`,variant:`pill`,class:{indicator:`inset-y-1`}},{orientation:`horizontal`,variant:`link`,class:{list:`border-b -mb-px`,indicator:`-bottom-px h-px`,trigger:`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:inset-x-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:-bottom-[calc(var(--spacing)+1px)] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:h-px`}},{orientation:`vertical`,variant:`pill`,class:{indicator:`inset-x-1`,list:`items-center`,trigger:`w-full justify-center`}},{orientation:`vertical`,variant:`link`,class:{list:`border-s -ms-px`,indicator:`-start-px w-px`,trigger:`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:inset-y-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:-start-[calc(var(--spacing)+1px)] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:w-px`}},{color:`primary`,variant:`pill`,class:{indicator:`bg-primary`,trigger:[`data-[state=active]:text-inverted outline-primary/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-primary`]}},{color:`secondary`,variant:`pill`,class:{indicator:`bg-secondary`,trigger:[`data-[state=active]:text-inverted outline-secondary/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-secondary`]}},{color:`success`,variant:`pill`,class:{indicator:`bg-success`,trigger:[`data-[state=active]:text-inverted outline-success/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-success`]}},{color:`info`,variant:`pill`,class:{indicator:`bg-info`,trigger:[`data-[state=active]:text-inverted outline-info/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-info`]}},{color:`warning`,variant:`pill`,class:{indicator:`bg-warning`,trigger:[`data-[state=active]:text-inverted outline-warning/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-warning`]}},{color:`error`,variant:`pill`,class:{indicator:`bg-error`,trigger:[`data-[state=active]:text-inverted outline-error/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-error`]}},{color:`neutral`,variant:`pill`,class:{indicator:`bg-inverted`,trigger:[`data-[state=active]:text-inverted outline-inverted/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-inverted`]}},{color:`primary`,variant:`link`,class:{indicator:`bg-primary`,trigger:[`data-[state=active]:text-primary outline-primary/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-primary`]}},{color:`secondary`,variant:`link`,class:{indicator:`bg-secondary`,trigger:[`data-[state=active]:text-secondary outline-secondary/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-secondary`]}},{color:`success`,variant:`link`,class:{indicator:`bg-success`,trigger:[`data-[state=active]:text-success outline-success/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-success`]}},{color:`info`,variant:`link`,class:{indicator:`bg-info`,trigger:[`data-[state=active]:text-info outline-info/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-info`]}},{color:`warning`,variant:`link`,class:{indicator:`bg-warning`,trigger:[`data-[state=active]:text-warning outline-warning/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-warning`]}},{color:`error`,variant:`link`,class:{indicator:`bg-error`,trigger:[`data-[state=active]:text-error outline-error/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-error`]}},{color:`neutral`,variant:`link`,class:{indicator:`bg-inverted`,trigger:[`data-[state=active]:text-highlighted outline-inverted/25 focus-visible:outline-3`,`in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-inverted`]}}],defaultVariants:{color:`primary`,variant:`pill`,size:`md`}},B={__name:`UTabs`,props:{as:{type:null,required:!1},items:{type:Array,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},orientation:{type:null,required:!1,default:`horizontal`},content:{type:Boolean,required:!1,default:!0},valueKey:{type:null,required:!1,default:`value`},labelKey:{type:null,required:!1,default:`label`},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultValue:{type:[String,Number],required:!1,default:`0`},modelValue:{type:[String,Number],required:!1},activationMode:{type:String,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:[`update:modelValue`],setup(e,{expose:r,emit:i}){let c=e,d=i,b=a(),T=E(`tabs`,c),L=C(),B=k(O(T,`as`,`unmountOnHide`),d),V=p(()=>D({extend:z,...L.ui?.tabs||{}})({color:T.color,variant:T.variant,size:T.size,orientation:T.orientation})),H=y([]);function U(e,t){H.value[e]=t}return r({triggersRef:H}),(e,r)=>(m(),v(o(A),f(o(B),{"model-value":o(T).modelValue,"default-value":o(T).defaultValue,orientation:o(T).orientation,"activation-mode":o(T).activationMode,"data-slot":`root`,class:V.value.root({class:[o(T).ui?.root,o(T).class]})}),{default:g(()=>[t(o(M),{"data-slot":`list`,class:s(V.value.list({class:o(T).ui?.list}))},{default:g(()=>[t(o(N),{"data-slot":`indicator`,class:s(V.value.indicator({class:o(T).ui?.indicator}))},null,8,[`class`]),x(e.$slots,`list-leading`),(m(!0),l(h,null,u(o(T).items,(t,r)=>(m(),v(o(P),{key:o(w)(t,o(T).valueKey)??r,ref_for:!0,ref:e=>U(r,e),value:o(w)(t,o(T).valueKey)??String(r),disabled:t.disabled,"data-slot":`trigger`,class:s(V.value.trigger({class:[o(T).ui?.trigger,t.ui?.trigger]}))},{default:g(()=>[x(e.$slots,`leading`,{item:t,index:r,ui:V.value},()=>[t.icon?(m(),v(F,{key:0,name:t.icon,"data-slot":`leadingIcon`,class:s(V.value.leadingIcon({class:[o(T).ui?.leadingIcon,t.ui?.leadingIcon]}))},null,8,[`name`,`class`])):t.avatar?(m(),v(I,f({key:1,size:t.ui?.leadingAvatarSize||o(T).ui?.leadingAvatarSize||V.value.leadingAvatarSize()},{ref_for:!0},t.avatar,{"data-slot":`leadingAvatar`,class:V.value.leadingAvatar({class:[o(T).ui?.leadingAvatar,t.ui?.leadingAvatar]})}),null,16,[`size`,`class`])):S(``,!0)]),o(w)(t,o(T).labelKey)||b.default?(m(),l(`span`,{key:0,"data-slot":`label`,class:s(V.value.label({class:[o(T).ui?.label,t.ui?.label]}))},[x(e.$slots,`default`,{item:t,index:r},()=>[n(_(o(w)(t,o(T).labelKey)),1)])],2)):S(``,!0),x(e.$slots,`trailing`,{item:t,index:r,ui:V.value},()=>[t.badge||t.badge===0?(m(),v(R,f({key:0,color:`neutral`,variant:`outline`,size:t.ui?.trailingBadgeSize||o(T).ui?.trailingBadgeSize||V.value.trailingBadgeSize()},{ref_for:!0},typeof t.badge==`string`||typeof t.badge==`number`?{label:t.badge}:t.badge,{"data-slot":`trailingBadge`,class:V.value.trailingBadge({class:[o(T).ui?.trailingBadge,t.ui?.trailingBadge]})}),null,16,[`size`,`class`])):S(``,!0)])]),_:2},1032,[`value`,`disabled`,`class`]))),128)),x(e.$slots,`list-trailing`)]),_:3},8,[`class`]),o(T).content?(m(!0),l(h,{key:0},u(o(T).items,(t,r)=>(m(),v(o(j),{key:o(w)(t,o(T).valueKey)??r,value:o(w)(t,o(T).valueKey)??String(r),"data-slot":`content`,class:s(V.value.content({class:[o(T).ui?.content,t.ui?.content,t.class]}))},{default:g(()=>[x(e.$slots,t.slot||`content`,{item:t,index:r,ui:V.value},()=>[n(_(t.content),1)])]),_:2},1032,[`value`,`class`]))),128)):S(``,!0)]),_:3},16,[`model-value`,`default-value`,`orientation`,`activation-mode`,`class`]))}},V={slots:{root:`my-5 gap-4`}},H={__name:`ProseTabs`,props:e({defaultValue:{type:String,required:!1,default:`0`},sync:{type:String,required:!1},hash:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},{modelValue:{type:String},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,n=a(),l=E(`prose.tabs`,t),u=r(e,`modelValue`),f=C(),h=p(()=>D({extend:V,...f.ui?.prose?.tabs||{}})),_=y(1),x=p(()=>(_.value,n.default?.()?.flatMap(S).filter(Boolean)||[]));function S(e,t){return typeof e.type==`symbol`?e.children?.map(S):{index:t,label:e.props?.label||`${t}`,description:e.props?.description,icon:e.props?.icon,component:e}}d(()=>{if(l.sync){let e=`tabs-${l.sync}`,t=L(e,()=>localStorage.getItem(e));i(t,()=>{t.value&&(u.value=t.value)},{immediate:!0}),i(u,()=>{u.value&&(t.value=u.value,localStorage.setItem(e,u.value))})}});async function w(){if(l.hash){let e=l.hash.startsWith(`#`)?l.hash:`#${l.hash}`;setTimeout(()=>{document.querySelector(e)?.scrollIntoView()},200)}}return c(()=>_.value++),(e,t)=>(m(),v(B,{modelValue:u.value,"onUpdate:modelValue":[t[0]||=e=>u.value=e,w],color:`primary`,variant:`link`,items:x.value,class:s(o(l).class),"unmount-on-hide":!1,ui:o(T)(h.value(),o(l).ui)},{content:g(({item:e})=>[(m(),v(b(e.component)))]),_:1},8,[`modelValue`,`items`,`class`,`ui`]))}};export{H as default};
@@ -0,0 +1 @@
1
+ import{$ as e,D as t,Ft as n,On as r,Zn as i,_ as a,b as o,g as s,mt as c,xt as l}from"./DZo3dYLJ.js";import{r as u}from"./oXSDGTSr.js";import{n as d,t as f}from"./Baq-Hrpf.js";import{t as p}from"./BsNk4K6P.js";import{u as m}from"#entry";var h={slots:{root:`relative my-5 bg-muted [&>div]:my-0 [&_pre]:max-h-[80vh] [&_pre]:pb-12`,footer:`h-16 absolute inset-x-px bottom-px rounded-b-md flex items-center justify-center`,trigger:`group`,triggerIcon:`group-data-[state=open]:rotate-180`},variants:{open:{true:{root:`rounded-md`},false:{root:`max-h-[200px] overflow-hidden rounded-b-md [&_pre]:overflow-hidden`,footer:`inset-x-0 bottom-0 border border-t-0 border-muted bg-linear-to-t from-muted`}}}},g={__name:`ProseCodeCollapse`,props:e({icon:{type:null,required:!1},name:{type:String,required:!1},openText:{type:String,required:!1},closeText:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:[`update:open`],setup(e){let g=d(`prose.codeCollapse`,e),_=n(e,`open`,{type:Boolean,default:!1}),{t:v}=m(),y=u(),b=s(()=>f({extend:h,...y.ui?.prose?.codeCollapse||{}})({open:_.value}));return(e,n)=>(c(),o(`div`,{class:i(b.value.root({class:[r(g).ui?.root,r(g).class]}))},[l(e.$slots,`default`),a(`div`,{class:i(b.value.footer({class:r(g).ui?.footer}))},[t(p,{icon:r(g).icon||r(y).ui.icons.chevronDown,color:`neutral`,variant:`outline`,"data-state":_.value?`open`:`closed`,label:`${_.value?r(g).closeText||r(v)(`prose.codeCollapse.closeText`):r(g).openText||r(v)(`prose.codeCollapse.openText`)} ${r(g).name||r(v)(`prose.codeCollapse.name`)}`,class:i(b.value.trigger({class:r(g).ui?.trigger})),ui:{leadingIcon:b.value.triggerIcon({class:r(g).ui?.triggerIcon})},onClick:n[0]||=e=>_.value=!_.value},null,8,[`icon`,`data-state`,`label`,`class`,`ui`])],2)],2))}};export{g as default};
@@ -0,0 +1 @@
1
+ import{On as e,k as t,mt as n,qt as r,v as i,xt as a}from"./DZo3dYLJ.js";import{t as o}from"./CK9_veoz.js";var s=t({__name:`VisuallyHidden`,props:{feature:{type:String,required:!1,default:`focusable`},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(t){return(s,c)=>(n(),i(e(o),{as:t.as,"as-child":t.asChild,"aria-hidden":t.feature===`fully-hidden`?`true`:void 0,"data-hidden":t.feature===`fully-hidden`?``:void 0,tabindex:t.feature===`fully-hidden`?`-1`:void 0,style:{position:`absolute`,border:0,width:`1px`,height:`1px`,padding:0,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,clipPath:`inset(50%)`,whiteSpace:`nowrap`,wordWrap:`normal`,top:`-1px`,left:`-1px`}},{default:r(()=>[a(s.$slots,`default`)]),_:3},8,[`as`,`as-child`,`aria-hidden`,`data-hidden`,`tabindex`]))}});export{s as t};
@@ -0,0 +1 @@
1
+ import{D as e,E as t,On as n,T as r,Zn as i,_ as a,b as o,bt as s,er as c,g as l,k as u,mt as d,o as f,qt as ee,tr as p,v as te,y as m}from"./DZo3dYLJ.js";import{t as h}from"./BJW3UkS7.js";import{t as ne}from"./D2zrOcWn.js";import{a as g,i as _,o as v,r as re,s as y}from"#entry";var b={class:`kpis`},x={class:`v`},ie={class:`v`},ae={class:`v`},oe={class:`v`},se={class:`v`},S={class:`card tl-wrap`},C={class:`card-hd tl-hd`},w={class:`h2`},T={class:`timeline`},E={key:0,class:`tl-today`},D={class:`tl-item`},O={class:`when`},k={class:`when-date mono`},A={class:`when-year`},j={class:`axis`},M={class:`node-top`},N={class:`tag tag-ghost`},P={key:0,class:`tag tag-neutral mono`},F={class:`node-title`},I={class:`criteria`},L={class:`nums`},R={class:`dim`},z={class:`mpct`},B={class:`mss`},ce={class:`st-id mono`},V={class:`st-title`},H={class:`st-state dim`},U={class:`st-pts dim`},W={key:0,class:`tl-today`},G=_(u({__name:`milestones`,setup(u){let{milestones:_,milestoneProgress:G,now:K,md:le,MS_LABEL:ue,MS_COLOR:de,KIND_LABEL:fe,KIND_ICON:pe,STATE_DOT:me,STATE_LABEL:he,diffDays:q}=y(),J=l(()=>[..._.value].sort((e,t)=>e.due<t.due?-1:+(e.due>t.due))),Y=e=>q(K,e),X=e=>{let t=G(e);return t.total?Math.round(t.done/t.total*100):0},Z=e=>e===`mvp`?`mint`:e===`release`?`lilac`:`ink`,ge=e=>({reached:`ok`,"at-risk":`risk`,planned:`plan`,missed:`miss`})[e]??`plan`,_e=[`日`,`一`,`二`,`三`,`四`,`五`,`六`],ve=e=>`周${_e[new Date(`${e}T00:00:00Z`).getUTCDay()]}`,ye=e=>{let t=Y(e);return t>0?`还剩 ${t} 天`:t===0?`今天到期`:`已过 ${-t} 天`},Q=l(()=>{let e=J.value.findIndex(e=>e.due>=K);return e<0?J.value.length:e}),$=l(()=>({mvp:_.value.filter(e=>e.kind===`mvp`).length,release:_.value.filter(e=>e.kind===`release`).length,checkpoint:_.value.filter(e=>e.kind===`checkpoint`).length,risk:_.value.filter(e=>e.status===`at-risk`||e.status===`missed`).length,reached:_.value.filter(e=>e.status===`reached`).length}));return(l,u)=>{let y=re,K=ne,q=h;return d(),o(`div`,null,[a(`div`,b,[a(`div`,{class:i([`kpi`,(`cardToneClass`in l?l.cardToneClass:n(v))(0)])},[e(y,{tone:(`cardTone`in l?l.cardTone:n(g))(0),size:`sm`},null,8,[`tone`]),u[1]||=a(`p`,{class:`k`},`MVP 节点`,-1),a(`p`,x,[t(p(n($).mvp),1),u[0]||=a(`small`,null,`个`,-1)])],2),a(`div`,{class:i([`kpi`,(`cardToneClass`in l?l.cardToneClass:n(v))(1)])},[e(y,{tone:(`cardTone`in l?l.cardTone:n(g))(1),size:`sm`},null,8,[`tone`]),u[3]||=a(`p`,{class:`k`},`发布节点`,-1),a(`p`,ie,[t(p(n($).release),1),u[2]||=a(`small`,null,`个`,-1)])],2),a(`div`,{class:i([`kpi`,(`cardToneClass`in l?l.cardToneClass:n(v))(2)])},[e(y,{tone:(`cardTone`in l?l.cardTone:n(g))(2),size:`sm`},null,8,[`tone`]),u[5]||=a(`p`,{class:`k`},`检查点`,-1),a(`p`,ae,[t(p(n($).checkpoint),1),u[4]||=a(`small`,null,`个`,-1)])],2),a(`div`,{class:i([`kpi`,(`cardToneClass`in l?l.cardToneClass:n(v))(3)])},[e(y,{tone:(`cardTone`in l?l.cardTone:n(g))(3),size:`sm`},null,8,[`tone`]),u[6]||=a(`p`,{class:`k`},`已达成`,-1),a(`p`,oe,[t(p(n($).reached),1),a(`small`,null,`/ `+p(n(_).length),1)])],2),a(`div`,{class:i([`kpi`,(`cardToneClass`in l?l.cardToneClass:n(v))(4)])},[e(y,{tone:(`cardTone`in l?l.cardTone:n(g))(4),size:`sm`},null,8,[`tone`]),u[8]||=a(`p`,{class:`k`},`有风险 / 错过`,-1),a(`p`,se,[t(p(n($).risk),1),u[7]||=a(`small`,null,`个`,-1)])],2)]),a(`div`,S,[a(`div`,C,[a(`h2`,w,[e(K,{name:`i-lucide-git-commit-vertical`,class:`size-3.5`}),u[9]||=t(`时间线`,-1)]),u[10]||=r(`<span class="dim tip" data-v-fcd79590>按到期日从早到晚 · 节点达成口径是「挂的故事全部完成」</span><div class="legend" data-v-fcd79590><span class="lg" data-v-fcd79590><i class="sw mint" data-v-fcd79590></i>MVP</span><span class="lg" data-v-fcd79590><i class="sw lilac" data-v-fcd79590></i>发布</span><span class="lg" data-v-fcd79590><i class="sw white" data-v-fcd79590></i>检查点</span><i class="sep" data-v-fcd79590></i><span class="lg" data-v-fcd79590><i class="dot ok" data-v-fcd79590></i>已达成</span><span class="lg" data-v-fcd79590><i class="dot risk" data-v-fcd79590></i>有风险</span><span class="lg" data-v-fcd79590><i class="dot plan" data-v-fcd79590></i>计划中</span></div>`,2)]),a(`div`,T,[(d(!0),o(f,null,s(n(J),(r,l)=>(d(),o(f,{key:r.id},[l===n(Q)?(d(),o(`div`,E,[...u[11]||=[a(`span`,{class:`today-when`},`今天`,-1),a(`span`,{class:`today-axis`},[a(`i`)],-1),a(`span`,{class:`today-line`},null,-1)]])):m(``,!0),a(`article`,D,[a(`div`,O,[a(`p`,k,p(n(le)(r.due)),1),a(`p`,A,p(ve(r.due)),1)]),a(`div`,j,[a(`span`,{class:i([`dot-lg`,ge(r.status)])},[r.status===`reached`?(d(),te(K,{key:0,name:`i-lucide-check`,class:`size-2.5`})):m(``,!0)],2)]),a(`div`,{class:i([`node`,`node-${Z(r.kind)}`])},[e(y,{tone:Z(r.kind),size:`xl`,min:3,max:5},null,8,[`tone`]),a(`div`,M,[a(`span`,N,p(r.id),1),a(`span`,{class:i([`tag`,`tag-${n(de)[r.status]}`])},p(n(ue)[r.status]),3),a(`span`,{class:i([`tag`,r.kind===`mvp`?`tag-mint`:r.kind===`release`?`tag-primary`:`tag-neutral`])},[e(K,{name:n(pe)[r.kind],class:`size-3`},null,8,[`name`]),t(p(n(fe)[r.kind]),1)],2),r.sprintId?(d(),o(`span`,P,p(r.sprintId),1)):m(``,!0),a(`span`,{class:i([`days`,{over:Y(r.due)<0,soon:Y(r.due)>=0&&Y(r.due)<=7}])},p(ye(r.due)),3)]),a(`h3`,F,p(r.title),1),a(`p`,I,p(r.criteria),1),a(`div`,L,[a(`span`,null,[a(`b`,null,p(n(G)(r).done)+`/`+p(n(G)(r).total),1),u[12]||=t(` 个故事`,-1)]),n(G)(r).cancelled?(d(),o(f,{key:0},[u[13]||=a(`span`,{class:`dim`},`·`,-1),a(`span`,R,p(n(G)(r).cancelled)+` 个已取消`,1)],64)):m(``,!0),u[14]||=a(`span`,{class:`dim`},`·`,-1),a(`span`,null,p(n(G)(r).points)+` 点`,1),a(`span`,z,p(X(r))+`%`,1)]),a(`div`,{class:i([`bar`,r.kind===`checkpoint`?``:Z(r.kind)])},[a(`i`,{style:c({width:X(r)+`%`})},null,4)],2),a(`ul`,B,[(d(!0),o(f,null,s(n(G)(r).list,t=>(d(),o(`li`,{key:t.id},[e(q,{to:`/story/${t.id}`,class:`srow`},{default:ee(()=>[a(`i`,{class:`sdot`,style:c({background:n(me)[t.status]})},null,4),a(`span`,ce,p(t.id),1),a(`span`,V,p(t.title),1),a(`span`,H,p(n(he)[t.status]),1),a(`span`,U,p(t.points),1)]),_:2},1032,[`to`])]))),128))])],2)])],64))),128)),n(Q)===n(J).length?(d(),o(`div`,W,[...u[15]||=[a(`span`,{class:`today-when`},`今天`,-1),a(`span`,{class:`today-axis`},[a(`i`)],-1),a(`span`,{class:`today-line`},null,-1)]])):m(``,!0)])])])}}}),[[`__scopeId`,`data-v-fcd79590`]]);export{G as default};
@@ -0,0 +1 @@
1
+ import{D as e,J as t,Lt as n,On as r,Zn as i,an as a,b as o,et as s,g as c,gt as l,mt as u,pn as d,qt as f,tr as p,v as m,vn as h,xt as g,y as _}from"./DZo3dYLJ.js";import{t as v}from"./DSaWoFHS.js";import{r as y}from"./oXSDGTSr.js";import{d as b,n as x,t as S,u as C}from"./Baq-Hrpf.js";import{x as w}from"./CuJUHLl8.js";import{t as T}from"./BuOKDFiJ.js";import{t as E}from"./D2zrOcWn.js";import{a as D,i as O,t as k}from"./ChJuu-Ky.js";import{a as A,n as j,t as M}from"./CNCQ_RRC.js";var N=Symbol(`nuxt-ui.form-options`),P=Symbol(`nuxt-ui.form-events`),F=Symbol(`nuxt-ui.form-field`),I=Symbol(`nuxt-ui.input-id`),L=Symbol(`nuxt-ui.form-loading`);function R(e,n){let r=t(N,void 0),i=t(P,void 0),o=t(F,void 0),s=t(I,void 0);l(F,void 0),o&&s&&(n?.bind===!1?s.value=void 0:e?.id&&(s.value=e?.id));function u(e,t,n){i&&o&&t&&i.emit({type:e,name:t,...n})}function f(){u(`blur`,o?.value.name)}function p(){u(`focus`,o?.value.name)}function m(){u(`change`,o?.value.name)}let h=!1;a()&&d(()=>{h=!0});let g=w(()=>{h||u(`input`,o?.value.name,{eager:!n?.deferInputValidation||o?.value.eagerValidation,track:!1})},o?.value.validateOnInputDelay??r?.value.validateOnInputDelay??0);function _(){return u(`input`,o?.value.name,{validate:!1}),g()}return{id:c(()=>e?.id??s?.value),labelId:c(()=>o?.value.labelId),name:c(()=>e?.name??o?.value.name),size:c(()=>e?.size??o?.value.size),color:c(()=>o?.value.error?`error`:e?.color),highlight:c(()=>o?.value.error?!0:e?.highlight||void 0),disabled:c(()=>r?.value.disabled||e?.disabled||void 0),emitFormBlur:f,emitFormInput:_,emitFormChange:m,emitFormFocus:p,ariaAttrs:c(()=>{if(!o?.value)return;let e=[`error`,`hint`,`description`,`help`].filter(e=>o?.value?.[e]).map(e=>`${o?.value.ariaId}-${e}`)||[],t={"aria-invalid":!!o?.value.error};return e.length>0&&(t[`aria-describedby`]=e.join(` `)),t})}}var z={slots:{base:[`rounded-md font-medium inline-flex items-center disabled:cursor-not-allowed aria-disabled:cursor-not-allowed disabled:opacity-75 aria-disabled:opacity-75`,`transition-colors`],label:`truncate`,leadingIcon:`shrink-0`,leadingAvatar:`shrink-0`,leadingAvatarSize:``,trailingIcon:`shrink-0`},variants:{fieldGroup:{horizontal:`not-only:first:rounded-e-none not-only:last:rounded-s-none not-last:not-first:rounded-none focus-visible:z-[1]`,vertical:`not-only:first:rounded-b-none not-only:last:rounded-t-none not-last:not-first:rounded-none focus-visible:z-[1]`},color:{primary:``,secondary:``,success:``,info:``,warning:``,error:``,neutral:``},variant:{solid:``,outline:``,soft:``,subtle:``,ghost:``,link:``},size:{xs:{base:`px-2 py-1 text-xs gap-1`,leadingIcon:`size-4`,leadingAvatarSize:`3xs`,trailingIcon:`size-4`},sm:{base:`px-2.5 py-1.5 text-xs gap-1.5`,leadingIcon:`size-4`,leadingAvatarSize:`3xs`,trailingIcon:`size-4`},md:{base:`px-2.5 py-1.5 text-sm gap-1.5`,leadingIcon:`size-5`,leadingAvatarSize:`2xs`,trailingIcon:`size-5`},lg:{base:`px-3 py-2 text-sm gap-2`,leadingIcon:`size-5`,leadingAvatarSize:`2xs`,trailingIcon:`size-5`},xl:{base:`px-3 py-2 text-base gap-2`,leadingIcon:`size-6`,leadingAvatarSize:`xs`,trailingIcon:`size-6`}},block:{true:{base:`w-full justify-center`,trailingIcon:`ms-auto`}},square:{true:``},leading:{true:``},trailing:{true:``},loading:{true:``},active:{true:{base:``},false:{base:``}}},compoundVariants:[{color:`primary`,variant:`solid`,class:`text-inverted bg-primary hover:bg-primary/75 active:bg-primary/75 disabled:bg-primary aria-disabled:bg-primary outline-primary/25 focus-visible:outline-3`},{color:`secondary`,variant:`solid`,class:`text-inverted bg-secondary hover:bg-secondary/75 active:bg-secondary/75 disabled:bg-secondary aria-disabled:bg-secondary outline-secondary/25 focus-visible:outline-3`},{color:`success`,variant:`solid`,class:`text-inverted bg-success hover:bg-success/75 active:bg-success/75 disabled:bg-success aria-disabled:bg-success outline-success/25 focus-visible:outline-3`},{color:`info`,variant:`solid`,class:`text-inverted bg-info hover:bg-info/75 active:bg-info/75 disabled:bg-info aria-disabled:bg-info outline-info/25 focus-visible:outline-3`},{color:`warning`,variant:`solid`,class:`text-inverted bg-warning hover:bg-warning/75 active:bg-warning/75 disabled:bg-warning aria-disabled:bg-warning outline-warning/25 focus-visible:outline-3`},{color:`error`,variant:`solid`,class:`text-inverted bg-error hover:bg-error/75 active:bg-error/75 disabled:bg-error aria-disabled:bg-error outline-error/25 focus-visible:outline-3`},{color:`primary`,variant:`outline`,class:`ring ring-inset ring-primary/50 text-primary hover:bg-primary/10 active:bg-primary/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent outline-primary/25 focus-visible:outline-3 focus-visible:ring-primary`},{color:`secondary`,variant:`outline`,class:`ring ring-inset ring-secondary/50 text-secondary hover:bg-secondary/10 active:bg-secondary/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent outline-secondary/25 focus-visible:outline-3 focus-visible:ring-secondary`},{color:`success`,variant:`outline`,class:`ring ring-inset ring-success/50 text-success hover:bg-success/10 active:bg-success/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent outline-success/25 focus-visible:outline-3 focus-visible:ring-success`},{color:`info`,variant:`outline`,class:`ring ring-inset ring-info/50 text-info hover:bg-info/10 active:bg-info/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent outline-info/25 focus-visible:outline-3 focus-visible:ring-info`},{color:`warning`,variant:`outline`,class:`ring ring-inset ring-warning/50 text-warning hover:bg-warning/10 active:bg-warning/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent outline-warning/25 focus-visible:outline-3 focus-visible:ring-warning`},{color:`error`,variant:`outline`,class:`ring ring-inset ring-error/50 text-error hover:bg-error/10 active:bg-error/10 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent outline-error/25 focus-visible:outline-3 focus-visible:ring-error`},{color:`primary`,variant:`soft`,class:`text-primary bg-primary/10 hover:bg-primary/15 active:bg-primary/15 outline-primary/25 focus-visible:outline-3 disabled:bg-primary/10 aria-disabled:bg-primary/10`},{color:`secondary`,variant:`soft`,class:`text-secondary bg-secondary/10 hover:bg-secondary/15 active:bg-secondary/15 outline-secondary/25 focus-visible:outline-3 disabled:bg-secondary/10 aria-disabled:bg-secondary/10`},{color:`success`,variant:`soft`,class:`text-success bg-success/10 hover:bg-success/15 active:bg-success/15 outline-success/25 focus-visible:outline-3 disabled:bg-success/10 aria-disabled:bg-success/10`},{color:`info`,variant:`soft`,class:`text-info bg-info/10 hover:bg-info/15 active:bg-info/15 outline-info/25 focus-visible:outline-3 disabled:bg-info/10 aria-disabled:bg-info/10`},{color:`warning`,variant:`soft`,class:`text-warning bg-warning/10 hover:bg-warning/15 active:bg-warning/15 outline-warning/25 focus-visible:outline-3 disabled:bg-warning/10 aria-disabled:bg-warning/10`},{color:`error`,variant:`soft`,class:`text-error bg-error/10 hover:bg-error/15 active:bg-error/15 outline-error/25 focus-visible:outline-3 disabled:bg-error/10 aria-disabled:bg-error/10`},{color:`primary`,variant:`subtle`,class:`text-primary ring ring-inset ring-primary/25 bg-primary/10 hover:bg-primary/15 active:bg-primary/15 disabled:bg-primary/10 aria-disabled:bg-primary/10 outline-primary/25 focus-visible:outline-3 focus-visible:ring-primary`},{color:`secondary`,variant:`subtle`,class:`text-secondary ring ring-inset ring-secondary/25 bg-secondary/10 hover:bg-secondary/15 active:bg-secondary/15 disabled:bg-secondary/10 aria-disabled:bg-secondary/10 outline-secondary/25 focus-visible:outline-3 focus-visible:ring-secondary`},{color:`success`,variant:`subtle`,class:`text-success ring ring-inset ring-success/25 bg-success/10 hover:bg-success/15 active:bg-success/15 disabled:bg-success/10 aria-disabled:bg-success/10 outline-success/25 focus-visible:outline-3 focus-visible:ring-success`},{color:`info`,variant:`subtle`,class:`text-info ring ring-inset ring-info/25 bg-info/10 hover:bg-info/15 active:bg-info/15 disabled:bg-info/10 aria-disabled:bg-info/10 outline-info/25 focus-visible:outline-3 focus-visible:ring-info`},{color:`warning`,variant:`subtle`,class:`text-warning ring ring-inset ring-warning/25 bg-warning/10 hover:bg-warning/15 active:bg-warning/15 disabled:bg-warning/10 aria-disabled:bg-warning/10 outline-warning/25 focus-visible:outline-3 focus-visible:ring-warning`},{color:`error`,variant:`subtle`,class:`text-error ring ring-inset ring-error/25 bg-error/10 hover:bg-error/15 active:bg-error/15 disabled:bg-error/10 aria-disabled:bg-error/10 outline-error/25 focus-visible:outline-3 focus-visible:ring-error`},{color:`primary`,variant:`ghost`,class:`text-primary hover:bg-primary/10 active:bg-primary/10 outline-primary/25 focus-visible:outline-3 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent`},{color:`secondary`,variant:`ghost`,class:`text-secondary hover:bg-secondary/10 active:bg-secondary/10 outline-secondary/25 focus-visible:outline-3 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent`},{color:`success`,variant:`ghost`,class:`text-success hover:bg-success/10 active:bg-success/10 outline-success/25 focus-visible:outline-3 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent`},{color:`info`,variant:`ghost`,class:`text-info hover:bg-info/10 active:bg-info/10 outline-info/25 focus-visible:outline-3 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent`},{color:`warning`,variant:`ghost`,class:`text-warning hover:bg-warning/10 active:bg-warning/10 outline-warning/25 focus-visible:outline-3 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent`},{color:`error`,variant:`ghost`,class:`text-error hover:bg-error/10 active:bg-error/10 outline-error/25 focus-visible:outline-3 disabled:bg-transparent aria-disabled:bg-transparent dark:disabled:bg-transparent dark:aria-disabled:bg-transparent`},{color:`primary`,variant:`link`,class:`text-primary hover:text-primary/75 active:text-primary/75 disabled:text-primary aria-disabled:text-primary outline-primary/25 focus-visible:outline-3`},{color:`secondary`,variant:`link`,class:`text-secondary hover:text-secondary/75 active:text-secondary/75 disabled:text-secondary aria-disabled:text-secondary outline-secondary/25 focus-visible:outline-3`},{color:`success`,variant:`link`,class:`text-success hover:text-success/75 active:text-success/75 disabled:text-success aria-disabled:text-success outline-success/25 focus-visible:outline-3`},{color:`info`,variant:`link`,class:`text-info hover:text-info/75 active:text-info/75 disabled:text-info aria-disabled:text-info outline-info/25 focus-visible:outline-3`},{color:`warning`,variant:`link`,class:`text-warning hover:text-warning/75 active:text-warning/75 disabled:text-warning aria-disabled:text-warning outline-warning/25 focus-visible:outline-3`},{color:`error`,variant:`link`,class:`text-error hover:text-error/75 active:text-error/75 disabled:text-error aria-disabled:text-error outline-error/25 focus-visible:outline-3`},{color:`neutral`,variant:`solid`,class:`text-inverted bg-inverted hover:bg-inverted/90 active:bg-inverted/90 disabled:bg-inverted aria-disabled:bg-inverted outline-inverted/25 focus-visible:outline-3`},{color:`neutral`,variant:`outline`,class:`ring ring-inset ring-accented text-default bg-default hover:bg-elevated active:bg-elevated disabled:bg-default aria-disabled:bg-default outline-inverted/25 focus-visible:outline-3 focus-visible:ring-inverted`},{color:`neutral`,variant:`soft`,class:`text-default bg-elevated hover:bg-accented/75 active:bg-accented/75 outline-inverted/25 focus-visible:outline-3 disabled:bg-elevated aria-disabled:bg-elevated`},{color:`neutral`,variant:`subtle`,class:`ring ring-inset ring-accented text-default bg-elevated hover:bg-accented/75 active:bg-accented/75 disabled:bg-elevated aria-disabled:bg-elevated outline-inverted/25 focus-visible:outline-3 focus-visible:ring-inverted`},{color:`neutral`,variant:`ghost`,class:`text-default hover:bg-elevated active:bg-elevated outline-inverted/25 focus-visible:outline-3 hover:disabled:bg-transparent dark:hover:disabled:bg-transparent hover:aria-disabled:bg-transparent dark:hover:aria-disabled:bg-transparent`},{color:`neutral`,variant:`link`,class:`text-muted hover:text-default active:text-default disabled:text-muted aria-disabled:text-muted outline-inverted/25 focus-visible:outline-3`},{size:`xs`,square:!0,class:`p-1`},{size:`sm`,square:!0,class:`p-1.5`},{size:`md`,square:!0,class:`p-1.5`},{size:`lg`,square:!0,class:`p-2`},{size:`xl`,square:!0,class:`p-2`},{loading:!0,leading:!0,class:{leadingIcon:`animate-spin`}},{loading:!0,leading:!1,trailing:!0,class:{trailingIcon:`animate-spin`}}],defaultVariants:{color:`primary`,variant:`solid`,size:`md`}},B={__name:`UButton`,props:{label:{type:String,required:!1},color:{type:null,required:!1},activeColor:{type:null,required:!1},variant:{type:null,required:!1},activeVariant:{type:null,required:!1},size:{type:null,required:!1},square:{type:Boolean,required:!1},block:{type:Boolean,required:!1},loadingAuto:{type:Boolean,required:!1},onClick:{type:[Function,Array],required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:null,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:null,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1},as:{type:null,required:!1},type:{type:null,required:!1},disabled:{type:Boolean,required:!1},active:{type:Boolean,required:!1},exact:{type:Boolean,required:!1},exactQuery:{type:[Boolean,String],required:!1},exactHash:{type:Boolean,required:!1},inactiveClass:{type:String,required:!1},locale:{type:[Boolean,String],required:!1},to:{type:null,required:!1},href:{type:null,required:!1},external:{type:Boolean,required:!1},target:{type:[String,Object,null],required:!1},rel:{type:[String,Object,null],required:!1},noRel:{type:Boolean,required:!1},prefetchedClass:{type:String,required:!1},prefetch:{type:Boolean,required:!1},prefetchOn:{type:[String,Object],required:!1},noPrefetch:{type:Boolean,required:!1},trailingSlash:{type:String,required:!1},activeClass:{type:String,required:!1},exactActiveClass:{type:String,required:!1},ariaCurrentValue:{type:String,required:!1},viewTransition:{type:Boolean,required:!1},replace:{type:Boolean,required:!1}},setup(a){let l=a,d=n(),w=x(`button`,l),N=y(),{orientation:P,size:F}=A(l),I=T(c(()=>D(w))),R=c(()=>b(I.value,[`type`,`disabled`,`onClick`])),B=h(!1),V=t(L,void 0);async function H(e){B.value=!0;let t=Array.isArray(w.onClick)?w.onClick:[w.onClick];try{await Promise.all(t.map(t=>t?.(e)))}finally{B.value=!1}}let U=c(()=>w.loading||w.loadingAuto&&(B.value||V?.value&&w.type===`submit`)),{isLeading:W,isTrailing:G,leadingIconName:K,trailingIconName:q}=M(c(()=>({icon:w.icon,leading:w.leading,leadingIcon:w.leadingIcon,trailing:w.trailing,trailingIcon:w.trailingIcon,loading:U.value,loadingIcon:w.loadingIcon}))),J=c(()=>S({extend:z,...v({variants:{active:{true:{base:C(N.ui?.button?.variants?.active?.true?.base,w.activeClass)},false:{base:C(N.ui?.button?.variants?.active?.false?.base,w.inactiveClass)}}}},N.ui?.button||{})})({color:w.color,variant:w.variant,size:F.value??w.size,loading:U.value,block:w.block,square:w.square||!d.default&&!w.label,leading:W.value,trailing:G.value,fieldGroup:P.value}));return(t,n)=>(u(),m(k,s({type:r(w).type,disabled:r(w).disabled||U.value},R.value,{custom:``}),{default:f(({active:n,...a})=>[e(O,s({"data-slot":`base`},a,{class:J.value.base({class:[r(w).ui?.base,r(w).class],active:n,...n&&r(w).activeVariant?{variant:r(w).activeVariant}:{},...n&&r(w).activeColor?{color:r(w).activeColor}:{}}),onClick:H}),{default:f(()=>[g(t.$slots,`leading`,{ui:J.value},()=>[r(W)&&r(K)?(u(),m(E,{key:0,name:r(K),"data-slot":`leadingIcon`,class:i(J.value.leadingIcon({class:r(w).ui?.leadingIcon,active:n}))},null,8,[`name`,`class`])):r(w).avatar?(u(),m(j,s({key:1,size:r(w).ui?.leadingAvatarSize||J.value.leadingAvatarSize()},r(w).avatar,{"data-slot":`leadingAvatar`,class:J.value.leadingAvatar({class:r(w).ui?.leadingAvatar,active:n})}),null,16,[`size`,`class`])):_(``,!0)]),g(t.$slots,`default`,{ui:J.value},()=>[r(w).label!==void 0&&r(w).label!==null?(u(),o(`span`,{key:0,"data-slot":`label`,class:i(J.value.label({class:r(w).ui?.label,active:n}))},p(r(w).label),3)):_(``,!0)]),g(t.$slots,`trailing`,{ui:J.value},()=>[r(G)&&r(q)?(u(),m(E,{key:0,name:r(q),"data-slot":`trailingIcon`,class:i(J.value.trailingIcon({class:r(w).ui?.trailingIcon,active:n}))},null,8,[`name`,`class`])):_(``,!0)])]),_:2},1040,[`class`])]),_:3},16,[`type`,`disabled`]))}};export{R as n,B as t};
@@ -0,0 +1 @@
1
+ import{D as e,E as t,On as n,T as r,Ut as i,Yt as ee,Zn as a,_ as o,b as s,bt as c,er as te,g as l,k as u,mt as d,o as f,qt as ne,tr as p,un as re,vn as m,y as h}from"./DZo3dYLJ.js";import{S as ie}from"./51OWHj8c.js";import{t as ae}from"./BJW3UkS7.js";import{t as oe}from"./CqhzGRpQ.js";import{t as se}from"./D2zrOcWn.js";import{a as g,i as _,o as v,r as ce,s as y}from"#entry";var le={class:`kpis`},ue={class:`v`},de={class:`v`},fe={class:`v`},pe={class:`v`},me={key:0,class:`card panel`},he={class:`panel-hd`},ge={class:`ph-l`},_e={class:`sp-name`},ve={class:`sub mono`},ye={class:`goal`},be={class:`chart-wrap`},xe=[`viewBox`],Se=[`y1`,`x2`,`y2`],b=[`x`,`y`],x=[`d`],S=[`d`],C=[`points`],w=[`cx`,`cy`],T=[`x1`,`y1`,`x2`,`y2`],E=[`x`,`y`],D=[`x`,`y`],O=[`x1`,`y1`,`x2`,`y2`],k=[`cx`,`cy`],A={class:`cells`},j={class:`cd mono`},Ce={class:`ca`},we={class:`ci dim`},Te={key:0,class:`scope`},Ee={class:`h3`},De={class:`tag tag-info`},Oe={class:`dim`},ke={key:1,class:`callout soft`},Ae={class:`card`},je={class:`card-hd`},Me={class:`tag tag-neutral`},M={class:`card-bd`},Ne={class:`tbl`},Pe=[`onClick`],Fe={class:`mono`},Ie={class:`mono dim`},Le={class:`r`},Re={class:`r mono`},ze=980,Be=300,N=42,P=_(u({__name:`burndown`,setup(u){let{sprints:_,burndown:P,sprintCommit:F,md:I,now:L,sprintById:R,storyById:Ve,SCOPE_LABEL:z}=y(),B=m(``),He=l(()=>[..._.value].reverse().map(e=>({label:`${e.id} · ${e.name}`,value:e.id,icon:`i-lucide-calendar-range`}))),V=l(()=>R.value.get(B.value)??_.value[_.value.length-1]),H=l(()=>V.value?P(V.value):{total:0,days:[]});i(()=>{B.value&&!R.value.has(B.value)&&(B.value=``),!B.value&&_.value.length&&(B.value=_.value[_.value.length-1].id)});let U=l(()=>H.value.days.length||1),W=l(()=>H.value.total||1),G=e=>N+e*896/(U.value-1||1),K=e=>258-e*216/W.value,Ue=e=>H.value.days.map((t,n)=>`${G(n)},${K(t[e])}`).join(` `),We=l(()=>{let e=H.value.days.map((e,t)=>`${G(t)},${K(e.actual)}`).join(` `),t=H.value.days.length-1;return`M${G(0)},${K(0)} L${e.replaceAll(` `,` L`)} L${G(t)},${K(0)} Z`}),q=l(()=>H.value.days.findIndex(e=>e.date===L)),J=l(()=>H.value.days.find(e=>e.date===L)??H.value.days[H.value.days.length-1]),Y=l(()=>J.value?.actual??0),X=l(()=>J.value?.ideal??0),Z=l(()=>Math.round((Y.value-X.value)*10)/10),Q=l(()=>{let e=V.value;return e?(e.stories??[]).map(e=>Ve.value.get(e)).filter(Boolean).filter(t=>t.scopeChange&&t.scopeChange.at>=e.start&&t.scopeChange.at<=e.end).map(e=>({id:e.id,title:e.title,at:e.scopeChange.at,kind:e.scopeChange.kind,reason:e.scopeChange.reason,points:e.points,idx:H.value.days.findIndex(t=>t.date===e.scopeChange.at)})).filter(e=>e.idx>=0):[]}),Ge=l(()=>new Set(Q.value.map(e=>e.at))),$=l(()=>[..._.value].reverse().map(e=>{let t=e.start<=L&&e.end>=L;return{id:e.id,name:e.name,period:`${I(e.start)} ~ ${I(e.end)}`,stories:(e.stories??[]).length,commit:F(e),capacity:e.capacity,status:t?`进行中`:e.end<L?`已结束`:`未开始`,tone:t?`tag-primary`:e.end<L?`tag-neutral`:`tag-info`}}));return(i,l)=>{let u=ce,m=oe,_=se,y=ae;return d(),s(`div`,null,[o(`div`,le,[o(`div`,{class:a([`kpi`,(`cardToneClass`in i?i.cardToneClass:n(v))(0)])},[e(u,{tone:(`cardTone`in i?i.cardTone:n(g))(0),size:`sm`},null,8,[`tone`]),l[1]||=o(`p`,{class:`k`},`剩余故事点`,-1),o(`p`,ue,[t(p(n(Y)),1),o(`small`,null,`/ `+p(n(H).total),1)])],2),o(`div`,{class:a([`kpi`,(`cardToneClass`in i?i.cardToneClass:n(v))(1)])},[e(u,{tone:(`cardTone`in i?i.cardTone:n(g))(1),size:`sm`},null,8,[`tone`]),l[3]||=o(`p`,{class:`k`},`理想剩余(今天)`,-1),o(`p`,de,[t(p(n(X)),1),l[2]||=o(`small`,null,`点`,-1)])],2),o(`div`,{class:a([`kpi`,(`cardToneClass`in i?i.cardToneClass:n(v))(2)])},[e(u,{tone:(`cardTone`in i?i.cardTone:n(g))(2),size:`sm`},null,8,[`tone`]),l[5]||=o(`p`,{class:`k`},`偏差`,-1),o(`p`,{class:a([`v`,{bad:n(Z)>0,good:n(Z)<=0}])},[t(p(n(Z)>0?`+`+n(Z):n(Z)),1),l[4]||=o(`small`,null,`点`,-1)],2)],2),o(`div`,{class:a([`kpi`,(`cardToneClass`in i?i.cardToneClass:n(v))(3)])},[e(u,{tone:(`cardTone`in i?i.cardTone:n(g))(3),size:`sm`},null,8,[`tone`]),l[6]||=o(`p`,{class:`k`},`承诺 / 容量`,-1),o(`p`,fe,[t(p(n(V)?n(F)(n(V)):0),1),o(`small`,null,`/ `+p(n(V)?.capacity??0),1)])],2),o(`div`,{class:a([`kpi`,(`cardToneClass`in i?i.cardToneClass:n(v))(4)])},[e(u,{tone:(`cardTone`in i?i.cardTone:n(g))(4),size:`sm`},null,8,[`tone`]),l[8]||=o(`p`,{class:`k`},`范围变更`,-1),o(`p`,pe,[t(p(n(Q).length),1),l[7]||=o(`small`,null,`次`,-1)])],2)]),n(V)?(d(),s(`div`,me,[o(`div`,he,[o(`div`,ge,[o(`h2`,_e,p(n(V).name),1),o(`p`,ve,p(n(V).id)+` · `+p(n(I)(n(V).start))+` ~ `+p(n(I)(n(V).end)),1),o(`p`,ye,p(n(V).goal),1)]),e(m,{modelValue:n(B),"onUpdate:modelValue":l[0]||=e=>re(B)?B.value=e:null,items:n(He),icon:`i-lucide-calendar-range`,"aria-label":`选择迭代`,class:`bd-select`},null,8,[`modelValue`,`items`])]),o(`div`,be,[l[10]||=r(`<div class="chart-legend" data-v-d8ba9a67><span class="lg" data-v-d8ba9a67><i class="sw actual" data-v-d8ba9a67></i>实际剩余</span><span class="lg" data-v-d8ba9a67><i class="sw ideal" data-v-d8ba9a67></i>理想线</span><span class="lg" data-v-d8ba9a67><i class="sw scope" data-v-d8ba9a67></i>范围变更</span></div>`,1),(d(),s(`svg`,{viewBox:`0 0 ${ze} ${Be}`,class:`chart`,role:`img`},[l[9]||=r(`<defs data-v-d8ba9a67><linearGradient id="bd-line" x1="0" y1="0" x2="1" y2="0" data-v-d8ba9a67><stop offset="0%" stop-color="#8a63f7" data-v-d8ba9a67></stop><stop offset="100%" stop-color="#c3aefb" data-v-d8ba9a67></stop></linearGradient><linearGradient id="bd-area" x1="0" y1="0" x2="0" y2="1" data-v-d8ba9a67><stop offset="0%" stop-color="#8a63f7" stop-opacity="0.16" data-v-d8ba9a67></stop><stop offset="100%" stop-color="#8a63f7" stop-opacity="0" data-v-d8ba9a67></stop></linearGradient></defs>`,1),o(`g`,null,[(d(),s(f,null,c([0,.25,.5,.75,1],e=>o(`line`,{key:`grid`+e,x1:N,y1:K(n(W)*e),x2:938,y2:K(n(W)*e),stroke:`#f1f0ea`,"stroke-width":`1`},null,8,Se)),64)),(d(),s(f,null,c([0,.25,.5,.75,1],e=>o(`text`,{key:`gl`+e,x:32,y:K(n(W)*e)+3.5,"text-anchor":`end`,"font-size":`9.5`,fill:`#b0b4ba`},p(Math.round(n(W)*e)),9,b)),64))]),o(`path`,{d:n(We),fill:`url(#bd-area)`},null,8,x),o(`path`,{d:`M${G(0)},${K(n(W))} L${G(n(U)-1)},${K(0)}`,stroke:`#cdc9d8`,"stroke-width":`1.4`,"stroke-dasharray":`5 5`,fill:`none`},null,8,S),o(`polyline`,{points:Ue(`actual`),stroke:`url(#bd-line)`,"stroke-width":`2.6`,fill:`none`,"stroke-linejoin":`round`,"stroke-linecap":`round`},null,8,C),(d(!0),s(f,null,c(n(H).days,(e,t)=>(d(),s(`circle`,{key:e.date,cx:G(t),cy:K(e.actual),r:`3`,fill:`#fff`,stroke:`#8a63f7`,"stroke-width":`1.8`},null,8,w))),128)),n(q)>=0?(d(),s(`line`,{key:0,x1:G(n(q)),y1:34,x2:G(n(q)),y2:K(0),stroke:`#cf4759`,"stroke-dasharray":`3 3`,"stroke-width":`1.2`,opacity:`0.7`},null,8,T)):h(``,!0),n(q)>=0?(d(),s(`text`,{key:1,x:G(n(q)),y:28,"text-anchor":`middle`,"font-size":`9.5`,fill:`#a5382f`},`今天`,8,E)):h(``,!0),(d(!0),s(f,null,c(n(H).days,(e,t)=>ee((d(),s(`text`,{key:`t`+e.date,x:G(t),y:286,"text-anchor":`middle`,"font-size":`9.5`,fill:`#b0b4ba`},p(n(I)(e.date)),9,D)),[[ie,t%Math.ceil(n(U)/10)===0]])),128)),(d(!0),s(f,null,c(n(Q),e=>(d(),s(`g`,{key:e.at+e.id},[o(`title`,null,p(e.id)+` `+p(e.title)+`:`+p(n(z)[e.kind])+`(`+p(e.at)+`,`+p(e.points)+` 点)—— `+p(e.reason),1),o(`line`,{x1:G(e.idx),y1:36,x2:G(e.idx),y2:K(0),stroke:`#3f7fd4`,"stroke-dasharray":`4 3`,"stroke-width":`1.2`,opacity:`0.8`},null,8,O),o(`circle`,{cx:G(e.idx),cy:34,r:`3`,fill:`#3f7fd4`},null,8,k)]))),128))],8,xe))]),o(`div`,A,[(d(!0),s(f,null,c(n(H).days,e=>(d(),s(`div`,{key:`row`+e.date,class:a([`cell`,{today:e.date===n(L),future:e.date>n(L),scope:n(Ge).has(e.date)}])},[o(`span`,j,p(n(I)(e.date)),1),o(`span`,Ce,p(e.actual),1),o(`span`,we,p(e.ideal),1),o(`i`,{class:`underline`,style:te({width:(n(W)?e.actual/n(W)*100:0)+`%`})},null,4)],2))),128))]),l[12]||=o(`p`,{class:`foot dim`},`每格:日期 / 实际剩余 / 理想剩余`,-1),n(Q).length?(d(),s(`div`,Te,[o(`p`,Ee,[e(_,{name:`i-lucide-git-branch`,class:`size-3`}),t(`本迭代范围变更(`+p(n(Q).length)+`)`,1)]),o(`ul`,null,[(d(!0),s(f,null,c(n(Q),r=>(d(),s(`li`,{key:r.id},[o(`span`,De,p(n(z)[r.kind]),1),e(y,{to:`/story/${r.id}`,class:`mono link`},{default:ne(()=>[t(p(r.id),1)]),_:2},1032,[`to`]),o(`span`,null,p(r.title),1),o(`span`,Oe,`· `+p(r.at)+` · `+p(r.points)+` 点 · `+p(r.reason),1)]))),128))]),l[11]||=o(`p`,{class:`foot dim`},`竖线标出的那几天,实际剩余没有按理想线下滑,是插了活而不是团队拖。`,-1)])):h(``,!0)])):(d(),s(`div`,ke,[e(_,{name:`i-lucide-info`,class:`size-4`}),l[13]||=t(`还没有迭代数据。 `,-1)])),o(`div`,Ae,[o(`div`,je,[l[14]||=o(`h2`,{class:`h2`},`迭代对照`,-1),o(`span`,Me,p(n($).length),1),l[15]||=o(`span`,{class:`dim tip`},`点一行切换上面的燃尽图`,-1)]),o(`div`,M,[o(`table`,Ne,[l[16]||=o(`thead`,null,[o(`tr`,null,[o(`th`,null,`迭代`),o(`th`,null,`名称`),o(`th`,null,`周期`),o(`th`,{class:`r`},`故事`),o(`th`,{class:`r`},`承诺 / 容量`),o(`th`,null,`状态`)])],-1),o(`tbody`,null,[(d(!0),s(f,null,c(n($),e=>(d(),s(`tr`,{key:e.id,class:a({on:e.id===n(B)}),onClick:t=>B.value=e.id},[o(`td`,Fe,p(e.id),1),o(`td`,null,p(e.name),1),o(`td`,Ie,p(e.period),1),o(`td`,Le,p(e.stories),1),o(`td`,Re,p(e.commit)+`/`+p(e.capacity),1),o(`td`,null,[o(`span`,{class:a([`tag`,e.tone])},p(e.status),3)])],10,Pe))),128))])])])])])}}}),[[`__scopeId`,`data-v-d8ba9a67`]]);export{P as default};