@wssto2/vue-core 0.16.0 → 0.17.0

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 (146) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +4 -3
  3. package/bin/architecture/engine.mjs +3 -0
  4. package/bin/architecture/permissions.mjs +56 -0
  5. package/bin/architecture/rules.mjs +17 -0
  6. package/bin/commands/check-architecture.mjs +19 -0
  7. package/bin/config.mjs +2 -0
  8. package/dist/{AccessGate.vue_vue_type_script_setup_true_lang-BH3f0hda.js → AccessGate.vue_vue_type_script_setup_true_lang-Bg8JFAOT.js} +1 -1
  9. package/dist/{ActionRow.vue_vue_type_script_setup_true_lang-DybAIOHS.js → ActionRow.vue_vue_type_script_setup_true_lang-B5IMNnTf.js} +4 -4
  10. package/dist/{Activity-DOUuIkZR.js → Activity-CiYn5E6A.js} +7 -7
  11. package/dist/{AdaptivePageShell.vue_vue_type_script_setup_true_lang-d_dPurWG.js → AdaptivePageShell.vue_vue_type_script_setup_true_lang-oXWQTfBs.js} +1 -1
  12. package/dist/{Changes-BfcbVgmu.js → Changes-Cy8STpLX.js} +3 -3
  13. package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-B5hSkJ2N.js → CollectionPage.vue_vue_type_script_setup_true_lang-Dr6nFNBB.js} +6 -6
  14. package/dist/{DataTable.vue_vue_type_script_setup_true_lang-DbRS37n3.js → DataTable.vue_vue_type_script_setup_true_lang-D372wlxR.js} +1 -1
  15. package/dist/{DateField.vue_vue_type_script_setup_true_lang-DzCvYHAf.js → DateField.vue_vue_type_script_setup_true_lang-D0KcfW8R.js} +17 -16
  16. package/dist/{DeadLetters-CuMvfXH8.js → DeadLetters-DhJkMpd_.js} +4 -4
  17. package/dist/{FormGroup.vue_vue_type_script_setup_true_lang-dsO1m9Mm.js → FormGroup.vue_vue_type_script_setup_true_lang-lvAuBG-0.js} +2 -2
  18. package/dist/FormRow.vue_vue_type_script_setup_true_lang-CpgNVQF4.js +160 -0
  19. package/dist/{FormView.vue_vue_type_script_setup_true_lang-Bq_Qa4py.js → FormView.vue_vue_type_script_setup_true_lang-D01Jr4UU.js} +5 -5
  20. package/dist/{General-B5vcSEhP.js → General-CwTPC5UP.js} +10 -10
  21. package/dist/{IncidentRecord-wmStcEag.js → IncidentRecord-hXEGuLGg.js} +13 -13
  22. package/dist/{IncidentsList-CFx5tsxP.js → IncidentsList-C41VyDwK.js} +6 -6
  23. package/dist/{NewRolePage-CZxAp7LR.js → NewRolePage-BYYZJkK7.js} +3 -3
  24. package/dist/{NumberField.vue_vue_type_script_setup_true_lang-U-_kcnGr.js → NumberField.vue_vue_type_script_setup_true_lang-BhNZgEW6.js} +7 -6
  25. package/dist/{PersonAccess.vue_vue_type_script_setup_true_lang-BPDh9s2m.js → PersonAccess.vue_vue_type_script_setup_true_lang-mYFuG-Y3.js} +56 -56
  26. package/dist/{ProfilePage-B-T8kBcc.js → ProfilePage-DGEsIycR.js} +13 -13
  27. package/dist/{RecordHeader.vue_vue_type_script_setup_true_lang-Bt5mT19g.js → RecordHeader.vue_vue_type_script_setup_true_lang-B3BnYg1x.js} +1 -1
  28. package/dist/{ResourcePage.vue_vue_type_script_setup_true_lang-DOiFuJnH.js → ResourcePage.vue_vue_type_script_setup_true_lang-1iZtj3rh.js} +1 -1
  29. package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-CqSsNPCw.js → RoleEditor.vue_vue_type_script_setup_true_lang-BslSDDiM.js} +9 -9
  30. package/dist/{RolePage-zcUWpuDE.js → RolePage-C08ZUqw1.js} +9 -9
  31. package/dist/{RolesPage-C7_zWw-c.js → RolesPage-FOuY1VKg.js} +10 -10
  32. package/dist/{SectionNavigator.vue_vue_type_script_setup_true_lang-BlCx9dVL.js → SectionNavigator.vue_vue_type_script_setup_true_lang-DCTFxfPB.js} +2 -2
  33. package/dist/{SegmentedField.vue_vue_type_script_setup_true_lang-zv_AxpBn.js → SegmentedField.vue_vue_type_script_setup_true_lang-CLR6EvzO.js} +13 -12
  34. package/dist/{SelectField.vue_vue_type_script_setup_true_lang-CLkoPbGm.js → SelectField.vue_vue_type_script_setup_true_lang-D5xYofdb.js} +10 -9
  35. package/dist/{ServiceAccountDialog.vue_vue_type_script_setup_true_lang-C2D_D5Hi.js → ServiceAccountDialog.vue_vue_type_script_setup_true_lang-CDr4WNIb.js} +9 -9
  36. package/dist/{ServiceAccountRecord-BYxpHzTR.js → ServiceAccountRecord-kWwIQGZb.js} +12 -12
  37. package/dist/{ServiceAccountsList-BUuK-RUj.js → ServiceAccountsList-CKy9_YHP.js} +8 -8
  38. package/dist/{Sessions-Cm-Kilwl.js → Sessions-BDc8gdYH.js} +4 -4
  39. package/dist/{SettingsPage-Bavl0K-F.js → SettingsPage-t-8kmFVT.js} +13 -13
  40. package/dist/{SignIn-SfEhFiyM.js → SignIn-CqtkvtCZ.js} +7 -7
  41. package/dist/{SignInPage-BU0n2ehq.js → SignInPage-DcdNKZIb.js} +4 -4
  42. package/dist/{SignIns-Ahbn5cO6.js → SignIns-D4-nGu0B.js} +3 -3
  43. package/dist/{SwitchField.vue_vue_type_script_setup_true_lang-Ds4q0bbl.js → SwitchField.vue_vue_type_script_setup_true_lang-CLtcuofe.js} +15 -14
  44. package/dist/{TextField.vue_vue_type_script_setup_true_lang-CWIeeZRE.js → TextField.vue_vue_type_script_setup_true_lang-CVGh-p3J.js} +7 -6
  45. package/dist/{TextareaField.vue_vue_type_script_setup_true_lang-D2j4s96s.js → TextareaField.vue_vue_type_script_setup_true_lang-YxUlNHSk.js} +6 -5
  46. package/dist/{TimeField.vue_vue_type_script_setup_true_lang-C1mLvOkc.js → TimeField.vue_vue_type_script_setup_true_lang-DHNC_MLt.js} +30 -29
  47. package/dist/{Timestamp.vue_vue_type_script_setup_true_lang-jCXYFLtq.js → Timestamp.vue_vue_type_script_setup_true_lang-d_KuxWjH.js} +1 -1
  48. package/dist/{UserRecord-3pCKMHkq.js → UserRecord-CwZCr9Im.js} +10 -10
  49. package/dist/{UsersList-vw3aDpvo.js → UsersList-Cn19sFgv.js} +4 -4
  50. package/dist/access/index.js +4 -4
  51. package/dist/app/application.d.ts +2 -0
  52. package/dist/app/index.js +2 -2
  53. package/dist/app/validate.d.ts +3 -1
  54. package/dist/{application-CHPpOssP.js → application-CDSweJb9.js} +144 -142
  55. package/dist/collection/authors.d.ts +27 -0
  56. package/dist/collection/index.d.ts +2 -0
  57. package/dist/collection/index.js +81 -76
  58. package/dist/config/index.d.ts +42 -0
  59. package/dist/config/index.js +12 -3
  60. package/dist/content/Panel.vue.d.ts +1 -1
  61. package/dist/content/index.js +2 -2
  62. package/dist/{contributions-9CPT-Z5v.js → contributions-B0x5x5xD.js} +1 -1
  63. package/dist/form/CommandDialog.vue.d.ts +1 -1
  64. package/dist/form/DateField.vue.d.ts +1 -1
  65. package/dist/form/DateTimeField.vue.d.ts +1 -1
  66. package/dist/form/FileField.vue.d.ts +1 -1
  67. package/dist/form/FormRow.vue.d.ts +2 -2
  68. package/dist/form/I18nField.vue.d.ts +2 -2
  69. package/dist/form/TextField.vue.d.ts +1 -1
  70. package/dist/form/TextareaField.vue.d.ts +2 -2
  71. package/dist/form/date/value.d.ts +21 -0
  72. package/dist/form/index.d.ts +1 -0
  73. package/dist/form/index.js +745 -715
  74. package/dist/format/format.d.ts +8 -2
  75. package/dist/format/index.js +1 -1
  76. package/dist/format-C_HXlOYQ.js +136 -0
  77. package/dist/{guards-6fJxfUtk.js → guards-CNJ0ATVC.js} +1 -1
  78. package/dist/i18n/index.d.ts +14 -2
  79. package/dist/i18n/index.js +84 -73
  80. package/dist/i18n/messages.d.ts +10 -1
  81. package/dist/i18n/runtime.d.ts +3 -1
  82. package/dist/identity/index.js +3 -3
  83. package/dist/identity/profile/EmailChangeDialog.vue.d.ts +2 -2
  84. package/dist/identity/users/list.d.ts +1 -1
  85. package/dist/incidents/index.js +1 -1
  86. package/dist/{index-D9_xqF5g.js → index-1HS7O2-e.js} +9 -9
  87. package/dist/{index-nByFc1eL.js → index-BA2w8uwD.js} +86 -86
  88. package/dist/{index-Ct7W_gYE.js → index-SLJWm40T.js} +4 -4
  89. package/dist/index.d.ts +1 -1
  90. package/dist/index.js +1 -1
  91. package/dist/modal/DiscardChangesModal.vue.d.ts +2 -2
  92. package/dist/modal/Modal.vue.d.ts +2 -2
  93. package/dist/modal/Sheet.vue.d.ts +2 -2
  94. package/dist/modules/identity/routes.d.ts +1 -1
  95. package/dist/modules/identity/schemas.d.ts +2 -2
  96. package/dist/{navigation-DMJ6akat.js → navigation-d-JAPBGA.js} +1 -1
  97. package/dist/{neighbors-BpypL3Wb.js → neighbors-Dg_LU9ry.js} +1 -1
  98. package/dist/notifications/index.js +1 -1
  99. package/dist/onboarding/index.js +1 -1
  100. package/dist/options-mOOX6JSS.js +214 -0
  101. package/dist/overlay/AlertDialog.vue.d.ts +3 -3
  102. package/dist/overlay/Menu.vue.d.ts +2 -2
  103. package/dist/overlay/PhotoViewer.vue.d.ts +2 -2
  104. package/dist/overlay/Popover.vue.d.ts +2 -2
  105. package/dist/page/SectionNavigator.vue.d.ts +1 -1
  106. package/dist/page/SectionPanel.vue.d.ts +1 -1
  107. package/dist/page/index.js +3 -3
  108. package/dist/phone/index.js +57 -56
  109. package/dist/platform/index.d.ts +10 -1
  110. package/dist/platform/index.js +16 -15
  111. package/dist/platform/platform.d.ts +4 -2
  112. package/dist/{platform-ORzRR3Tw.js → platform-DU9QFts8.js} +7 -6
  113. package/dist/playwright/config.d.ts +33 -0
  114. package/dist/playwright/index.d.ts +2 -0
  115. package/dist/playwright/index.js +192 -171
  116. package/dist/resource/index.js +1 -1
  117. package/dist/router/index.js +3 -3
  118. package/dist/{rowLayout-QKfNHsML.js → rowLayout-PIuD7MGo.js} +2 -2
  119. package/dist/{sections-CSpJN0Z7.js → sections-BpiRLntE.js} +1 -1
  120. package/dist/{serverMessages-Ce8-MK4e.js → serverMessages-C_KkDvpT.js} +1 -1
  121. package/dist/shell/index.js +4 -4
  122. package/dist/state/NextStepPanel.vue.d.ts +63 -0
  123. package/dist/state/PhaseTiles.vue.d.ts +20 -0
  124. package/dist/state/PhaseTrack.vue.d.ts +48 -0
  125. package/dist/state/RequirementList.vue.d.ts +10 -0
  126. package/dist/state/TodoRow.vue.d.ts +52 -0
  127. package/dist/state/index.d.ts +9 -0
  128. package/dist/state/index.js +731 -126
  129. package/dist/state/phaseStep.d.ts +7 -0
  130. package/dist/state/phaseTile.d.ts +10 -0
  131. package/dist/state/requirementItem.d.ts +16 -0
  132. package/dist/state/todoRow.d.ts +8 -0
  133. package/dist/{state-QDaxntgR.js → state-z1iPF1DT.js} +1 -1
  134. package/dist/styles.css +1 -1
  135. package/dist/{suggestions-q_v3M7G6.js → suggestions-DeMgs_ki.js} +1 -1
  136. package/dist/testing/format.d.ts +1 -1
  137. package/dist/testing/index.js +31 -31
  138. package/dist/{useCommand-DAMgQ5NE.js → useCommand-DQKvro1n.js} +2 -2
  139. package/dist/{useGroupSheet-B-Hs4gNO.js → useGroupSheet-CRw3MUmX.js} +3 -3
  140. package/dist/{usePreferences-BfMXVbSO.js → usePreferences-DB29UTFD.js} +1 -1
  141. package/dist/{useRecordDialog-QPKFH1Ww.js → useRecordDialog-0azHxxvm.js} +1 -1
  142. package/dist/{useResourceForm-Oa6bk3NI.js → useResourceForm-zVuWerSn.js} +1 -1
  143. package/dist/{useTypedEntry-CITij2C_.js → useTypedEntry-BsMV66Yc.js} +46 -45
  144. package/package.json +1 -1
  145. package/dist/format-Cp1h0vsC.js +0 -125
  146. package/dist/options-B48UiYsG.js +0 -368
@@ -1,167 +1,172 @@
1
- import { _ as de, a as me, b as fe, i as pe, v as ve } from "../AsyncSection.vue_vue_type_script_setup_true_lang-CX8mpXRE.js";
2
- import { _ as xe } from "../Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
3
- import { _ as _e } from "../Banner.vue_vue_type_script_setup_true_lang-sv0phngk.js";
4
- import { _ as A } from "../DrawnCheck.vue_vue_type_script_setup_true_lang-9DzDJlIA.js";
5
- import { _ as ye } from "../EmptyState.vue_vue_type_script_setup_true_lang-DbZiO2RF.js";
6
- import { defineComponent as S, computed as w, openBlock as d, createElementBlock as f, normalizeClass as M, createVNode as h, unref as t, createElementVNode as p, renderSlot as C, ref as g, watch as B, onBeforeUnmount as E, createBlock as y, withCtx as b, Transition as F, toDisplayString as x, Fragment as z, createCommentVNode as D, toValue as T, onScopeDispose as $ } from "vue";
7
- import { _ } from "../Icon.vue_vue_type_script_lang-BhhsFYwp.js";
8
- import { _ as be } from "../ProgressTrack.vue_vue_type_script_setup_true_lang-DrOm8k--.js";
9
- import { _ as Se } from "../StatusLine.vue_vue_type_script_setup_true_lang-DsdQmLq6.js";
10
- import { u as Ae } from "../useLoad-M7V-AVwR.js";
11
- import { D as Ce, W as Ee, b as Fe } from "../shortcut-oixX55SZ.js";
12
- import { useI18n as L } from "vue-i18n";
13
- import { useRouter as N } from "vue-router";
14
- import { _ as I } from "../BottomDockPortal.vue_vue_type_script_setup_true_lang-DmwR-2SP.js";
15
- import { d as V } from "../context-Ch1r4fdN.js";
16
- const se = ["amber", "lime", "teal", "cyan", "blue", "indigo", "violet", "fuchsia", "pink"], oe = /* @__PURE__ */ S({
1
+ import { _ as He, a as Ke, b as Qe, i as Ge, v as Je } from "../AsyncSection.vue_vue_type_script_setup_true_lang-CX8mpXRE.js";
2
+ import { _ as Ye } from "../Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
3
+ import { _ as ts } from "../Banner.vue_vue_type_script_setup_true_lang-sv0phngk.js";
4
+ import { _ as U } from "../DrawnCheck.vue_vue_type_script_setup_true_lang-9DzDJlIA.js";
5
+ import { _ as ss } from "../EmptyState.vue_vue_type_script_setup_true_lang-DbZiO2RF.js";
6
+ import { defineComponent as q, computed as z, openBlock as e, createElementBlock as o, normalizeClass as _, createVNode as $, unref as n, createElementVNode as l, renderSlot as R, ref as A, watch as P, onBeforeUnmount as H, createBlock as T, withCtx as S, Transition as K, toDisplayString as d, Fragment as M, createCommentVNode as m, toValue as F, onScopeDispose as Q, mergeProps as O, createTextVNode as E, useTemplateRef as V, renderList as B, resolveDynamicComponent as G, resolveComponent as J, createSlots as X, withModifiers as Y } from "vue";
7
+ import { _ as y } from "../Icon.vue_vue_type_script_lang-BhhsFYwp.js";
8
+ import { _ as os } from "../ProgressTrack.vue_vue_type_script_setup_true_lang-DrOm8k--.js";
9
+ import { _ as rs } from "../StatusLine.vue_vue_type_script_setup_true_lang-DsdQmLq6.js";
10
+ import { u as is } from "../useLoad-M7V-AVwR.js";
11
+ import { D as us, W as ds, b as ps } from "../shortcut-oixX55SZ.js";
12
+ import { useI18n as N } from "vue-i18n";
13
+ import { useRouter as Z, RouterLink as tt } from "vue-router";
14
+ import { _ as et } from "../BottomDockPortal.vue_vue_type_script_setup_true_lang-DmwR-2SP.js";
15
+ import { d as st } from "../context-Ch1r4fdN.js";
16
+ import { _ as nt } from "../Button.vue_vue_type_script_setup_true_lang-JrqhO99l.js";
17
+ import { _ as ot } from "../Avatar.vue_vue_type_script_setup_true_lang-BPj_fkJR.js";
18
+ import { _ as W } from "../Sheet.vue_vue_type_script_setup_true_lang-BG8HUNfs.js";
19
+ import { a as I } from "../mediaQuery-CygcXmFW.js";
20
+ import { _ as at } from "../FormRow.vue_vue_type_script_setup_true_lang-CpgNVQF4.js";
21
+ const Ne = ["amber", "lime", "teal", "cyan", "blue", "indigo", "violet", "fuchsia", "pink"], Ae = /* @__PURE__ */ q({
17
22
  __name: "FieldNote",
18
23
  props: {
19
24
  tone: { default: "info" },
20
25
  icon: { default: void 0 }
21
26
  },
22
- setup(a) {
23
- const s = a, r = {
27
+ setup(c) {
28
+ const t = c, r = {
24
29
  info: { text: "text-content-muted", icon: "informationLine" },
25
30
  warning: { text: "text-status-warning-content", icon: "alertTriangle" },
26
31
  critical: { text: "text-status-danger-content", icon: "errorWarningLine" }
27
- }, i = w(() => r[s.tone]);
28
- return (u, e) => (d(), f("p", {
29
- class: M(["mt-1 flex items-start gap-1.5 text-xs", i.value.text])
32
+ }, g = z(() => r[t.tone]);
33
+ return (h, u) => (e(), o("p", {
34
+ class: _(["mt-1 flex items-start gap-1.5 text-xs", g.value.text])
30
35
  }, [
31
- h(t(_), {
32
- name: s.icon ?? i.value.icon,
36
+ $(n(y), {
37
+ name: t.icon ?? g.value.icon,
33
38
  size: 14,
34
39
  class: "mt-px"
35
40
  }, null, 8, ["name"]),
36
- p("span", null, [
37
- C(u.$slots, "default")
41
+ l("span", null, [
42
+ R(h.$slots, "default")
38
43
  ])
39
44
  ], 2));
40
45
  }
41
46
  });
42
- function W() {
43
- const a = g([]), s = g({}), r = (n) => a.value.find((c) => c.id === n);
44
- function i(n, c) {
45
- a.value = a.value.map((l) => l.id === n ? { ...l, ...c } : l);
47
+ function rt() {
48
+ const c = A([]), t = A({}), r = (i) => c.value.find((p) => p.id === i);
49
+ function g(i, p) {
50
+ c.value = c.value.map((k) => k.id === i ? { ...k, ...p } : k);
46
51
  }
47
- async function u(n, c, l) {
48
- a.value = [...a.value.filter((o) => o.id !== n.id), { ...n, startedAt: Date.now(), status: "running" }];
52
+ async function h(i, p, k) {
53
+ c.value = [...c.value.filter((b) => b.id !== i.id), { ...i, startedAt: Date.now(), status: "running" }];
49
54
  try {
50
- const o = await c();
51
- return i(n.id, { status: "done", outcome: l?.(o) }), o;
52
- } catch (o) {
53
- throw i(n.id, { status: "failed", outcome: o instanceof Error ? o.message : void 0 }), o;
55
+ const b = await p();
56
+ return g(i.id, { status: "done", outcome: k?.(b) }), b;
57
+ } catch (b) {
58
+ throw g(i.id, { status: "failed", outcome: b instanceof Error ? b.message : void 0 }), b;
54
59
  }
55
60
  }
56
- function e(n) {
57
- return s.value = { ...s.value, [n]: (s.value[n] ?? 0) + 1 }, () => {
58
- s.value = { ...s.value, [n]: Math.max(0, (s.value[n] ?? 1) - 1) };
61
+ function u(i) {
62
+ return t.value = { ...t.value, [i]: (t.value[i] ?? 0) + 1 }, () => {
63
+ t.value = { ...t.value, [i]: Math.max(0, (t.value[i] ?? 1) - 1) };
59
64
  };
60
65
  }
61
66
  return {
62
- tasks: a,
67
+ tasks: c,
63
68
  find: r,
64
- isRunning: (n) => r(n)?.status === "running",
65
- run: u,
66
- watchTask: e,
67
- dismiss: (n) => {
68
- a.value = a.value.filter((c) => c.id !== n);
69
+ isRunning: (i) => r(i)?.status === "running",
70
+ run: h,
71
+ watchTask: u,
72
+ dismiss: (i) => {
73
+ c.value = c.value.filter((p) => p.id !== i);
69
74
  },
70
- unwatched: w(() => [...a.value].reverse().find((n) => !(s.value[n.id] ?? 0)) ?? null)
75
+ unwatched: z(() => [...c.value].reverse().find((i) => !(t.value[i.id] ?? 0)) ?? null)
71
76
  };
72
77
  }
73
- const [R, j] = V("vue-core.backgroundTasks");
74
- function re(a, s = W()) {
75
- return a.provide(R, s), s;
78
+ const [lt, it] = st("vue-core.backgroundTasks");
79
+ function Re(c, t = rt()) {
80
+ return c.provide(lt, t), t;
76
81
  }
77
- const q = ["data-status"], O = {
82
+ const ct = ["data-status"], ut = {
78
83
  class: "flex min-h-13 w-full max-w-md items-center gap-3 rounded-full bg-surface-inverse py-1.5 pr-1.5 pl-4 text-content-inverse shadow-float",
79
84
  role: "status",
80
85
  "aria-live": "polite"
81
- }, U = {
86
+ }, dt = {
82
87
  key: 1,
83
88
  class: "flex size-6 shrink-0 animate-pop items-center justify-center rounded-full bg-control-on text-white"
84
- }, H = { class: "flex min-w-0 flex-1 flex-col" }, K = {
89
+ }, pt = { class: "flex min-w-0 flex-1 flex-col" }, ft = {
85
90
  class: "truncate text-subheadline font-semibold",
86
91
  "data-test": "background-task-title"
87
- }, P = {
92
+ }, mt = {
88
93
  key: 3,
89
94
  class: "shrink-0 pr-3 text-footnote tabular-nums opacity-80"
90
- }, G = ["aria-label"], ie = /* @__PURE__ */ S({
95
+ }, gt = ["aria-label"], Ie = /* @__PURE__ */ q({
91
96
  __name: "BackgroundTaskCapsule",
92
97
  props: {
93
98
  hideAfterMs: { default: 12e3 }
94
99
  },
95
- setup(a) {
96
- const s = a, { t: r } = L(), i = N(), u = j(), e = u.unwatched, n = g(Date.now()), c = setInterval(() => n.value = Date.now(), 1e3), l = w(() => e.value ? Math.max(0, Math.floor((n.value - e.value.startedAt) / 1e3)) : 0);
97
- let o = null;
98
- B(() => [e.value?.id, e.value?.status], ([m, v]) => {
99
- o && clearTimeout(o), o = null, m && v && v !== "running" && (o = setTimeout(() => u.dismiss(m), s.hideAfterMs));
100
- }), E(() => {
101
- clearInterval(c), o && clearTimeout(o);
100
+ setup(c) {
101
+ const t = c, { t: r } = N(), g = Z(), h = it(), u = h.unwatched, i = A(Date.now()), p = setInterval(() => i.value = Date.now(), 1e3), k = z(() => u.value ? Math.max(0, Math.floor((i.value - u.value.startedAt) / 1e3)) : 0);
102
+ let b = null;
103
+ P(() => [u.value?.id, u.value?.status], ([x, v]) => {
104
+ b && clearTimeout(b), b = null, x && v && v !== "running" && (b = setTimeout(() => h.dismiss(x), t.hideAfterMs));
105
+ }), H(() => {
106
+ clearInterval(p), b && clearTimeout(b);
102
107
  });
103
- function k() {
104
- const m = e.value;
105
- m && (u.dismiss(m.id), i.push(m.route));
108
+ function a() {
109
+ const x = u.value;
110
+ x && (h.dismiss(x.id), g.push(x.route));
106
111
  }
107
- return (m, v) => (d(), y(t(I), null, {
108
- default: b(() => [
109
- h(F, {
112
+ return (x, v) => (e(), T(n(et), null, {
113
+ default: S(() => [
114
+ $(K, {
110
115
  "enter-active-class": "transition duration-motion-sheet ease-motion-sheet",
111
116
  "enter-from-class": "translate-y-6 scale-95 opacity-0",
112
117
  "leave-active-class": "transition duration-motion-normal ease-motion-standard",
113
118
  "leave-to-class": "translate-y-4 opacity-0"
114
119
  }, {
115
- default: b(() => [
116
- t(e) ? (d(), f("div", {
120
+ default: S(() => [
121
+ n(u) ? (e(), o("div", {
117
122
  key: 0,
118
123
  class: "dock-safe-area pointer-events-auto order-first mb-3 flex justify-center px-3",
119
124
  "data-test": "background-task",
120
- "data-status": t(e).status
125
+ "data-status": n(u).status
121
126
  }, [
122
- p("div", O, [
123
- t(e).status === "running" ? (d(), y(t(_), {
127
+ l("div", ut, [
128
+ n(u).status === "running" ? (e(), T(n(y), {
124
129
  key: 0,
125
130
  name: "loader4Line",
126
131
  size: 18,
127
132
  class: "shrink-0 animate-spin text-content-inverse-accent"
128
- })) : t(e).status === "done" ? (d(), f("span", U, [
129
- h(A, { size: 13 })
130
- ])) : (d(), y(t(_), {
133
+ })) : n(u).status === "done" ? (e(), o("span", dt, [
134
+ $(U, { size: 13 })
135
+ ])) : (e(), T(n(y), {
131
136
  key: 2,
132
137
  name: "errorWarningLine",
133
138
  size: 18,
134
139
  class: "shrink-0 text-content-inverse-danger"
135
140
  })),
136
- p("span", H, [
137
- p("span", K, x(t(e).status === "running" ? t(e).title : t(e).status === "done" ? t(e).doneTitle : t(e).failedTitle), 1),
138
- (d(), f("span", {
139
- key: `${t(e).status}:${t(e).outcome ?? t(e).detail}`,
141
+ l("span", pt, [
142
+ l("span", ft, d(n(u).status === "running" ? n(u).title : n(u).status === "done" ? n(u).doneTitle : n(u).failedTitle), 1),
143
+ (e(), o("span", {
144
+ key: `${n(u).status}:${n(u).outcome ?? n(u).detail}`,
140
145
  class: "truncate text-footnote opacity-80 animate-text-swap"
141
- }, x(t(e).status === "running" ? t(e).detail : t(e).outcome ?? t(e).title), 1))
146
+ }, d(n(u).status === "running" ? n(u).detail : n(u).outcome ?? n(u).title), 1))
142
147
  ]),
143
- t(e).status === "running" ? (d(), f("span", P, x(t(r)("core.wait.seconds", { count: l.value })), 1)) : (d(), f(z, { key: 4 }, [
144
- p("button", {
148
+ n(u).status === "running" ? (e(), o("span", mt, d(n(r)("core.wait.seconds", { count: k.value })), 1)) : (e(), o(M, { key: 4 }, [
149
+ l("button", {
145
150
  type: "button",
146
151
  class: "hit-target shrink-0 cursor-pointer rounded-full bg-content-inverse-accent px-4 py-2 text-subheadline font-semibold text-surface-inverse",
147
152
  "data-test": "background-task-open",
148
- onClick: k
149
- }, x(t(r)("core.actions.open")), 1),
150
- p("button", {
153
+ onClick: a
154
+ }, d(n(r)("core.actions.open")), 1),
155
+ l("button", {
151
156
  type: "button",
152
157
  class: "hit-target flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-full text-content-inverse opacity-70",
153
- "aria-label": t(r)("core.actions.close"),
158
+ "aria-label": n(r)("core.actions.close"),
154
159
  "data-test": "background-task-dismiss",
155
- onClick: v[0] || (v[0] = (Q) => t(u).dismiss(t(e).id))
160
+ onClick: v[0] || (v[0] = (f) => n(h).dismiss(n(u).id))
156
161
  }, [
157
- h(t(_), {
162
+ $(n(y), {
158
163
  name: "close",
159
164
  size: 14
160
165
  })
161
- ], 8, G)
166
+ ], 8, gt)
162
167
  ], 64))
163
168
  ])
164
- ], 8, q)) : D("", !0)
169
+ ], 8, ct)) : m("", !0)
165
170
  ]),
166
171
  _: 1
167
172
  })
@@ -170,49 +175,649 @@ const q = ["data-status"], O = {
170
175
  }));
171
176
  }
172
177
  });
173
- function J() {
178
+ function ht() {
174
179
  return typeof window < "u" && !!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
175
180
  }
176
- function ue(a, s = 700) {
177
- const r = g(T(a));
178
- let i = 0;
179
- function u() {
180
- i && cancelAnimationFrame(i), i = 0;
181
+ function De(c, t = 700) {
182
+ const r = A(F(c));
183
+ let g = 0;
184
+ function h() {
185
+ g && cancelAnimationFrame(g), g = 0;
181
186
  }
182
- return B(() => T(a), (e, n) => {
183
- if (u(), n !== 0 || e === 0 || J() || typeof requestAnimationFrame > "u") {
184
- r.value = e;
187
+ return P(() => F(c), (u, i) => {
188
+ if (h(), i !== 0 || u === 0 || ht() || typeof requestAnimationFrame > "u") {
189
+ r.value = u;
185
190
  return;
186
191
  }
187
- const c = performance.now(), l = (o) => {
188
- const k = Math.min(1, (o - c) / s);
189
- r.value = Math.round(e * (1 - Math.pow(1 - k, 3))), i = k < 1 ? requestAnimationFrame(l) : 0;
192
+ const p = performance.now(), k = (b) => {
193
+ const a = Math.min(1, (b - p) / t);
194
+ r.value = Math.round(u * (1 - Math.pow(1 - a, 3))), g = a < 1 ? requestAnimationFrame(k) : 0;
190
195
  };
191
- r.value = 0, i = requestAnimationFrame(l);
192
- }), $(u), r;
196
+ r.value = 0, g = requestAnimationFrame(k);
197
+ }), Q(h), r;
193
198
  }
199
+ const bt = {
200
+ class: "flex min-w-0 flex-col gap-3 rounded-group bg-surface-cell p-4 shadow-group",
201
+ "data-test": "next-step"
202
+ }, xt = { class: "text-headline font-semibold text-content-strong" }, _t = {
203
+ key: 0,
204
+ class: "text-footnote text-content-muted",
205
+ "data-test": "next-step-body"
206
+ }, vt = {
207
+ key: 1,
208
+ class: "flex items-start gap-3 rounded-control bg-fill px-3 py-2.5",
209
+ "data-test": "next-step-handoff"
210
+ }, kt = { class: "min-w-0 flex-1 text-footnote text-content" }, yt = {
211
+ key: 3,
212
+ class: "text-footnote text-status-warning-content",
213
+ "data-test": "next-step-reason"
214
+ }, wt = {
215
+ key: 4,
216
+ class: "flex items-start gap-2 border-t border-border-separator pt-3 text-footnote text-content-muted",
217
+ "data-test": "next-step-note"
218
+ }, Fe = /* @__PURE__ */ q({
219
+ __name: "NextStepPanel",
220
+ props: {
221
+ title: { default: void 0 },
222
+ body: { default: void 0 },
223
+ action: { default: void 0 },
224
+ reason: { default: void 0 },
225
+ handoff: { default: void 0 },
226
+ note: { default: void 0 }
227
+ },
228
+ emits: ["act"],
229
+ setup(c, { emit: t }) {
230
+ const r = c, g = t, { t: h } = N();
231
+ return (u, i) => (e(), o("aside", bt, [
232
+ l("h2", xt, d(r.title ?? n(h)("core.next_step.title")), 1),
233
+ r.body ? (e(), o("p", _t, d(r.body), 1)) : m("", !0),
234
+ r.handoff ? (e(), o("div", vt, [
235
+ $(n(ot), {
236
+ name: r.handoff.name,
237
+ size: "sm"
238
+ }, null, 8, ["name"]),
239
+ l("p", kt, d(r.handoff.text), 1)
240
+ ])) : m("", !0),
241
+ r.action ? (e(), T(n(nt), O({
242
+ key: 2,
243
+ prominence: "primary",
244
+ class: "w-full justify-center",
245
+ disabled: r.action.disabled,
246
+ processing: r.action.processing,
247
+ icon: r.action.disabled ? "lockLine" : void 0
248
+ }, { "data-test": r.action.testId ?? "next-step-action" }, {
249
+ onClick: i[0] || (i[0] = (p) => g("act"))
250
+ }), {
251
+ default: S(() => [
252
+ E(d(r.action.label), 1)
253
+ ]),
254
+ _: 1
255
+ }, 16, ["disabled", "processing", "icon"])) : m("", !0),
256
+ r.reason ? (e(), o("p", yt, d(r.reason), 1)) : m("", !0),
257
+ R(u.$slots, "default"),
258
+ r.note ? (e(), o("p", wt, [
259
+ $(n(y), {
260
+ name: "informationLine",
261
+ size: 16,
262
+ class: "mt-px shrink-0"
263
+ }),
264
+ l("span", null, d(r.note), 1)
265
+ ])) : m("", !0)
266
+ ]));
267
+ }
268
+ }), $t = ["aria-label"], zt = { class: "flex min-w-0 flex-1 flex-col gap-2" }, Tt = { class: "min-w-0 truncate" }, St = { class: "text-subheadline text-content-muted" }, Ct = { class: "text-headline font-semibold text-content-strong" }, Mt = {
269
+ class: "flex gap-1",
270
+ "aria-hidden": "true"
271
+ }, Lt = {
272
+ class: "flex flex-col",
273
+ "data-test": "progress-stepper-history"
274
+ }, jt = ["aria-current", "data-state"], Bt = { class: "flex min-w-0 flex-col gap-px pt-0.5" }, qt = {
275
+ key: 0,
276
+ class: "sr-only"
277
+ }, Et = ["data-orientation"], Nt = {
278
+ key: 0,
279
+ class: "flex items-center gap-3"
280
+ }, At = { class: "min-w-0 flex-1 text-subheadline font-semibold text-content-strong" }, Rt = { class: "shrink-0 text-footnote text-content-muted" }, It = ["aria-label"], Dt = ["aria-current", "data-state"], Ft = { class: "flex min-w-0 flex-col gap-px" }, Pt = {
281
+ key: 0,
282
+ class: "sr-only"
283
+ }, Ot = ["aria-label"], Vt = ["aria-current", "data-state"], Wt = { class: "flex min-w-0 flex-col gap-0.5 pr-3" }, Ut = {
284
+ key: 0,
285
+ class: "sr-only"
286
+ }, Ht = /* @__PURE__ */ q({
287
+ __name: "PhaseTrack",
288
+ props: {
289
+ steps: {},
290
+ currentStep: {},
291
+ title: { default: void 0 },
292
+ currentTone: { default: "tint" },
293
+ orientation: { default: "horizontal" },
294
+ compactOnMobile: { type: Boolean, default: !1 },
295
+ outcome: { default: null }
296
+ },
297
+ setup(c) {
298
+ const t = c, { t: r } = N(), g = I("(max-width: 1023px)"), h = z(() => t.compactOnMobile && g.value), u = I("(max-width: 47.999rem)"), i = z(() => t.orientation === "horizontal" && u.value ? "vertical" : t.orientation), p = z(() => t.currentStep >= t.steps.length), k = z(() => Math.min(Math.max(t.currentStep, 0), t.steps.length - 1)), b = z(() => r("core.stepper.step_of", { current: k.value + 1, total: t.steps.length }));
299
+ function a(L) {
300
+ return p.value && t.outcome && L === t.steps.length - 1 ? t.outcome : L < t.currentStep ? "completed" : L === t.currentStep ? "active" : "pending";
301
+ }
302
+ const x = {
303
+ tint: { ring: "border-tint", fill: "bg-tint", text: "text-content-link" },
304
+ info: { ring: "border-status-info-content", fill: "bg-status-info-content", text: "text-status-info-content" },
305
+ warning: { ring: "border-status-warning-content", fill: "bg-status-warning-content", text: "text-status-warning-content" },
306
+ danger: { ring: "border-status-danger-content", fill: "bg-status-danger-content", text: "text-status-danger-content" },
307
+ neutral: { ring: "border-status-neutral-content", fill: "bg-status-neutral-content", text: "text-status-neutral-content" }
308
+ }, v = z(() => x[t.currentTone]);
309
+ function f(L) {
310
+ const C = a(L);
311
+ return C === "danger" ? "bg-status-danger-solid" : C === "completed" || C === "success" ? "bg-control-on" : C === "active" ? v.value.fill : "bg-fill-strong";
312
+ }
313
+ function j(L) {
314
+ const C = a(L);
315
+ return C === "active" ? r("core.stepper.current") : C === "pending" ? "" : r("core.stepper.completed");
316
+ }
317
+ const D = V("historySheet");
318
+ return (L, C) => h.value ? (e(), o(M, { key: 0 }, [
319
+ l("button", {
320
+ type: "button",
321
+ "data-test": "progress-stepper-compact",
322
+ "aria-label": `${n(r)("core.stepper.history")}: ${b.value} · ${c.steps[k.value]?.label ?? ""}`,
323
+ class: "flex w-full cursor-pointer items-center gap-3 rounded-group bg-surface-cell px-row-inset py-3 text-left shadow-group transition-colors duration-motion-fast active:bg-fill",
324
+ onClick: C[0] || (C[0] = (w) => D.value?.present())
325
+ }, [
326
+ l("span", zt, [
327
+ l("span", Tt, [
328
+ l("span", St, d(b.value) + " · ", 1),
329
+ l("span", Ct, d(c.steps[k.value]?.label), 1)
330
+ ]),
331
+ l("span", Mt, [
332
+ (e(!0), o(M, null, B(c.steps, (w, s) => (e(), o("span", {
333
+ key: s,
334
+ class: _(["h-1.5 flex-1 rounded-full", f(s)])
335
+ }, null, 2))), 128))
336
+ ])
337
+ ]),
338
+ $(n(y), {
339
+ name: "arrowRightSLine",
340
+ size: 18,
341
+ class: "shrink-0 text-content-disabled"
342
+ })
343
+ ], 8, $t),
344
+ $(n(W), {
345
+ ref_key: "historySheet",
346
+ ref: D,
347
+ title: c.title ?? n(r)("core.stepper.history")
348
+ }, {
349
+ default: S(() => [
350
+ l("ol", Lt, [
351
+ (e(!0), o(M, null, B(c.steps, (w, s) => (e(), o("li", {
352
+ key: s,
353
+ class: "relative flex gap-3 pb-4 last:pb-0",
354
+ "aria-current": a(s) === "active" ? "step" : void 0,
355
+ "data-state": a(s)
356
+ }, [
357
+ s < c.steps.length - 1 ? (e(), o("span", {
358
+ key: 0,
359
+ "aria-hidden": "true",
360
+ class: _(["absolute top-6 bottom-0 left-[11px] w-0.5", a(s) === "completed" ? "bg-control-on" : "bg-fill-strong"])
361
+ }, null, 2)) : m("", !0),
362
+ l("span", {
363
+ "aria-hidden": "true",
364
+ class: _(["relative flex size-6 shrink-0 items-center justify-center rounded-full", {
365
+ "bg-control-on text-white": a(s) === "completed" || a(s) === "success",
366
+ "bg-status-danger-solid text-white": a(s) === "danger",
367
+ [`border-[2.5px] bg-surface-cell ${v.value.ring}`]: a(s) === "active",
368
+ "border-2 border-fill-strong": a(s) === "pending",
369
+ "border-dashed": a(s) === "pending" && w.dashed
370
+ }])
371
+ }, [
372
+ a(s) === "danger" ? (e(), T(n(y), {
373
+ key: 0,
374
+ name: "close",
375
+ size: 14
376
+ })) : a(s) !== "active" && a(s) !== "pending" ? (e(), T(n(y), {
377
+ key: 1,
378
+ name: "checkCustom",
379
+ size: 14
380
+ })) : m("", !0)
381
+ ], 2),
382
+ l("span", Bt, [
383
+ l("span", {
384
+ class: _(["text-body", a(s) === "active" ? "font-semibold text-content-strong" : a(s) === "pending" ? "text-content-muted" : "font-medium text-content-strong"])
385
+ }, [
386
+ E(d(w.label), 1),
387
+ j(s) ? (e(), o("span", qt, " (" + d(j(s)) + ")", 1)) : m("", !0)
388
+ ], 2),
389
+ w.subtitle ? (e(), o("span", {
390
+ key: 0,
391
+ class: _(["text-footnote tabular-nums", a(s) === "active" ? v.value.text : "text-content-muted"])
392
+ }, d(w.subtitle), 3)) : m("", !0)
393
+ ])
394
+ ], 8, jt))), 128))
395
+ ])
396
+ ]),
397
+ _: 1
398
+ }, 8, ["title"])
399
+ ], 64)) : (e(), o("section", {
400
+ key: 1,
401
+ "data-test": "phase-track",
402
+ "data-orientation": i.value,
403
+ class: "flex min-w-0 flex-col gap-4 rounded-group bg-surface-cell px-5 pt-4 pb-5 shadow-group"
404
+ }, [
405
+ c.title ? (e(), o("header", Nt, [
406
+ l("h3", At, d(c.title), 1),
407
+ R(L.$slots, "header-trailing", {}, () => [
408
+ l("span", Rt, d(b.value), 1)
409
+ ])
410
+ ])) : m("", !0),
411
+ i.value === "vertical" ? (e(), o("ol", {
412
+ key: 1,
413
+ class: "flex flex-col",
414
+ "aria-label": c.title ?? n(r)("core.stepper.history")
415
+ }, [
416
+ (e(!0), o(M, null, B(c.steps, (w, s) => (e(), o("li", {
417
+ key: s,
418
+ class: "relative flex gap-3 pb-3.5 last:pb-0",
419
+ "aria-current": a(s) === "active" ? "step" : void 0,
420
+ "data-state": a(s)
421
+ }, [
422
+ s < c.steps.length - 1 ? (e(), o("span", {
423
+ key: 0,
424
+ "aria-hidden": "true",
425
+ class: _(["absolute top-5 bottom-0 left-[9px] w-0.5", a(s) === "completed" ? "bg-control-on" : "bg-fill-strong"])
426
+ }, null, 2)) : m("", !0),
427
+ l("span", {
428
+ "aria-hidden": "true",
429
+ class: _(["relative mt-px flex size-5 shrink-0 items-center justify-center rounded-full", {
430
+ "bg-control-on text-white": a(s) === "completed" || a(s) === "success",
431
+ "bg-status-danger-solid text-white": a(s) === "danger",
432
+ [`border-[2.5px] bg-surface-cell ${v.value.ring}`]: a(s) === "active",
433
+ "border-2 border-fill-strong": a(s) === "pending",
434
+ "border-dashed": a(s) === "pending" && w.dashed
435
+ }])
436
+ }, [
437
+ a(s) === "danger" ? (e(), T(n(y), {
438
+ key: 0,
439
+ name: "close",
440
+ size: 12
441
+ })) : a(s) !== "active" && a(s) !== "pending" ? (e(), T(n(y), {
442
+ key: 1,
443
+ name: "checkCustom",
444
+ size: 12
445
+ })) : m("", !0)
446
+ ], 2),
447
+ l("span", Ft, [
448
+ l("span", {
449
+ class: _(["text-body", a(s) === "active" ? "font-semibold text-content-strong" : a(s) === "pending" ? "text-content-muted" : "font-medium text-content-strong"])
450
+ }, [
451
+ E(d(w.label), 1),
452
+ j(s) ? (e(), o("span", Pt, " (" + d(j(s)) + ")", 1)) : m("", !0)
453
+ ], 2),
454
+ w.subtitle ? (e(), o("span", {
455
+ key: 0,
456
+ class: _(["text-footnote tabular-nums", a(s) === "active" ? v.value.text : "text-content-muted"])
457
+ }, d(w.subtitle), 3)) : m("", !0)
458
+ ])
459
+ ], 8, Dt))), 128))
460
+ ], 8, It)) : (e(), o("ol", {
461
+ key: 2,
462
+ class: "flex w-full min-w-0 items-start",
463
+ "aria-label": c.title ?? n(r)("core.stepper.history")
464
+ }, [
465
+ (e(!0), o(M, null, B(c.steps, (w, s) => (e(), o("li", {
466
+ key: s,
467
+ class: "relative flex min-w-0 flex-1 flex-col items-start gap-2.5",
468
+ "aria-current": a(s) === "active" ? "step" : void 0,
469
+ "data-state": a(s)
470
+ }, [
471
+ s < c.steps.length - 1 ? (e(), o("span", {
472
+ key: 0,
473
+ "aria-hidden": "true",
474
+ class: _(["absolute top-[13px] right-1.5 left-[34px] h-0.5 rounded-full", a(s) === "completed" ? "bg-control-on" : "bg-fill-strong"])
475
+ }, null, 2)) : m("", !0),
476
+ l("span", {
477
+ "aria-hidden": "true",
478
+ class: _(["relative flex size-7 shrink-0 items-center justify-center rounded-full", {
479
+ "bg-control-on text-white": a(s) === "completed" || a(s) === "success",
480
+ "bg-status-danger-solid text-white": a(s) === "danger",
481
+ [`border-[3px] bg-surface-cell ${v.value.ring}`]: a(s) === "active",
482
+ "border-2 border-fill-strong bg-surface-cell": a(s) === "pending",
483
+ "border-dashed": a(s) === "pending" && w.dashed
484
+ }])
485
+ }, [
486
+ a(s) === "active" ? (e(), o("span", {
487
+ key: 0,
488
+ class: _(["size-2.5 rounded-full", v.value.fill])
489
+ }, null, 2)) : a(s) === "danger" ? (e(), T(n(y), {
490
+ key: 1,
491
+ name: "close",
492
+ size: 16
493
+ })) : a(s) !== "pending" ? (e(), T(n(y), {
494
+ key: 2,
495
+ name: "checkCustom",
496
+ size: 16
497
+ })) : m("", !0)
498
+ ], 2),
499
+ l("span", Wt, [
500
+ l("span", {
501
+ class: _(["text-body text-pretty break-words", a(s) === "active" ? "font-semibold text-content-strong" : a(s) === "pending" ? "text-content-muted" : "font-medium text-content-strong"])
502
+ }, [
503
+ E(d(w.label), 1),
504
+ j(s) ? (e(), o("span", Ut, " (" + d(j(s)) + ")", 1)) : m("", !0)
505
+ ], 2),
506
+ w.subtitle ? (e(), o("span", {
507
+ key: 0,
508
+ class: _(["text-footnote tabular-nums", a(s) === "active" ? v.value.text : "text-content-muted"])
509
+ }, d(w.subtitle), 3)) : m("", !0)
510
+ ])
511
+ ], 8, Vt))), 128))
512
+ ], 8, Ot))
513
+ ], 8, Et));
514
+ }
515
+ }), Kt = ["aria-label"], Qt = { class: "flex gap-2.5" }, Gt = { class: "flex min-w-0 items-center gap-2.5" }, Jt = {
516
+ key: 0,
517
+ "aria-hidden": "true",
518
+ class: "flex size-6.5 shrink-0 items-center justify-center rounded-full bg-control-on text-white"
519
+ }, Xt = { class: "sr-only" }, Yt = ["aria-label"], Zt = { class: "flex min-w-0 flex-1 flex-col gap-1" }, te = {
520
+ class: "mb-1.5 flex gap-1",
521
+ "aria-hidden": "true"
522
+ }, ee = { class: "text-footnote text-content-muted" }, se = { class: "truncate text-title font-semibold text-content-strong" }, Pe = /* @__PURE__ */ q({
523
+ __name: "PhaseTiles",
524
+ props: {
525
+ label: {},
526
+ phases: {}
527
+ },
528
+ setup(c) {
529
+ const t = c, { t: r } = N(), g = I("(min-width: 64rem)"), h = V("panel"), u = z(() => {
530
+ const x = t.phases.findIndex((v) => v.state === "current");
531
+ return x < 0 ? t.phases.length : x;
532
+ }), i = z(() => t.phases[u.value]), p = {
533
+ warning: "text-status-warning-content",
534
+ danger: "text-status-danger-content",
535
+ success: "text-status-success-content"
536
+ }, k = (x) => x.tone ? p[x.tone] : "text-content-muted", b = (x) => x.state === "done" ? r("core.phase_tiles.done") : x.state === "current" ? r("core.phase_tiles.current") : x.state === "skipped" ? r("core.phase_tiles.skipped") : "", a = (x) => x.state === "done" ? "bg-control-on" : x.state === "current" ? "bg-tint" : "bg-fill-strong";
537
+ return (x, v) => n(g) ? (e(), o("nav", {
538
+ key: 0,
539
+ "aria-label": t.label,
540
+ "data-test": "phase-tiles"
541
+ }, [
542
+ l("ol", Qt, [
543
+ (e(!0), o(M, null, B(t.phases, (f, j) => (e(), o("li", {
544
+ key: f.key,
545
+ class: "flex min-w-0 flex-1"
546
+ }, [
547
+ (e(), T(G(f.to ? n(tt) : "div"), {
548
+ to: f.to,
549
+ "data-test": `phase-tile-${f.key}`,
550
+ "data-state": f.state,
551
+ "aria-current": f.state === "current" ? "step" : void 0,
552
+ class: _(["flex min-w-0 flex-1 flex-col gap-1 rounded-group px-4 py-3", [
553
+ f.state === "current" ? "bg-tint-soft ring-2 ring-inset ring-tint" : "bg-surface-cell shadow-group",
554
+ f.to ? "transition-colors duration-motion-fast hover:bg-fill focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus" : ""
555
+ ]])
556
+ }, {
557
+ default: S(() => [
558
+ l("span", Gt, [
559
+ f.state === "done" ? (e(), o("span", Jt, [
560
+ $(n(y), {
561
+ name: "checkCustom",
562
+ size: 14
563
+ })
564
+ ])) : (e(), o("span", {
565
+ key: 1,
566
+ "aria-hidden": "true",
567
+ class: _(["flex size-6.5 shrink-0 items-center justify-center rounded-full text-footnote font-semibold", f.state === "current" ? "bg-tint text-content-on-tint" : f.state === "skipped" ? "border-2 border-dashed border-fill-strong text-content-muted" : "text-content-muted ring-2 ring-inset ring-fill-strong"])
568
+ }, d(j + 1), 3)),
569
+ l("span", {
570
+ class: _(["truncate text-headline", f.state === "later" || f.state === "skipped" ? "font-medium text-content-muted" : "font-semibold text-content-strong"])
571
+ }, d(f.label), 3)
572
+ ]),
573
+ l("span", {
574
+ class: _(["truncate text-footnote", k(f)]),
575
+ "data-test": "phase-tile-sub"
576
+ }, d(f.sub || "—"), 3),
577
+ l("span", Xt, d(b(f)), 1)
578
+ ]),
579
+ _: 2
580
+ }, 1032, ["to", "data-test", "data-state", "aria-current", "class"]))
581
+ ]))), 128))
582
+ ])
583
+ ], 8, Kt)) : (e(), o(M, { key: 1 }, [
584
+ l("button", {
585
+ type: "button",
586
+ "data-test": "phase-tiles-compact",
587
+ "aria-label": `${n(r)("core.phase_tiles.position", { current: u.value + 1, total: t.phases.length })} · ${i.value?.label ?? ""}`,
588
+ class: "flex w-full items-center gap-3 rounded-group bg-surface-cell px-row-inset py-3 text-left shadow-group transition-colors duration-motion-fast active:bg-fill",
589
+ onClick: v[0] || (v[0] = (f) => h.value?.present())
590
+ }, [
591
+ l("span", Zt, [
592
+ l("span", te, [
593
+ (e(!0), o(M, null, B(t.phases, (f) => (e(), o("span", {
594
+ key: f.key,
595
+ class: _(["h-1.5 flex-1 rounded-full", a(f)])
596
+ }, null, 2))), 128))
597
+ ]),
598
+ l("span", ee, d(n(r)("core.phase_tiles.position", { current: u.value + 1, total: t.phases.length })), 1),
599
+ l("span", se, d(i.value?.label), 1),
600
+ i.value?.sub ? (e(), o("span", {
601
+ key: 0,
602
+ class: _(["truncate text-footnote", k(i.value)])
603
+ }, d(i.value.sub), 3)) : m("", !0)
604
+ ]),
605
+ $(n(y), {
606
+ name: "arrowRightSLine",
607
+ size: 18,
608
+ class: "shrink-0 text-content-disabled"
609
+ })
610
+ ], 8, Yt),
611
+ $(n(W), {
612
+ ref_key: "panel",
613
+ ref: h,
614
+ title: t.label
615
+ }, {
616
+ default: S(() => [
617
+ $(Ht, {
618
+ orientation: "vertical",
619
+ steps: t.phases.map((f) => ({ label: f.label, subtitle: f.sub })),
620
+ "current-step": u.value
621
+ }, null, 8, ["steps", "current-step"])
622
+ ]),
623
+ _: 1
624
+ }, 8, ["title"])
625
+ ], 64));
626
+ }
627
+ }), ne = {
628
+ key: 0,
629
+ "data-test": "requirements-all-met",
630
+ role: "status",
631
+ class: "flex min-h-row items-center gap-3 rounded-group bg-surface-cell px-row-inset py-2.5 shadow-group"
632
+ }, oe = {
633
+ "aria-hidden": "true",
634
+ class: "flex size-[22px] shrink-0 items-center justify-center rounded-full bg-control-on text-white compact:size-7"
635
+ }, ae = { class: "min-w-0 flex-1 text-body font-medium text-content-strong" }, re = {
636
+ key: 1,
637
+ "data-test": "requirement-list",
638
+ class: "flex min-w-0 flex-col"
639
+ }, le = {
640
+ key: 0,
641
+ class: "px-row-inset pb-2 text-subheadline font-semibold text-content-strong compact:text-footnote compact:font-normal compact:uppercase compact:tracking-wide compact:text-content-muted"
642
+ }, ie = { class: "rounded-group bg-surface-cell shadow-group" }, ce = ["data-test", "data-met"], ue = { class: "flex min-h-row min-w-0 flex-1 items-center gap-3 border-t border-border-separator py-2 pr-row-inset group-first/req:border-t-0" }, de = { class: "min-w-0 flex-1" }, pe = { class: "text-body text-content-strong" }, fe = { class: "sr-only" }, me = {
643
+ key: 0,
644
+ class: "mt-0.5 text-footnote text-content-muted"
645
+ }, Oe = /* @__PURE__ */ q({
646
+ __name: "RequirementList",
647
+ props: {
648
+ items: {},
649
+ title: {},
650
+ summaryWhenMet: {}
651
+ },
652
+ setup(c) {
653
+ const { t } = N(), r = c, g = z(
654
+ () => r.items.length > 0 && r.items.every((h) => h.met)
655
+ );
656
+ return (h, u) => {
657
+ const i = J("router-link");
658
+ return g.value ? (e(), o("div", ne, [
659
+ l("span", oe, [
660
+ $(n(y), {
661
+ name: "checkCustom",
662
+ size: 14
663
+ })
664
+ ]),
665
+ l("p", ae, d(r.summaryWhenMet ?? n(t)("core.requirements.all_met")), 1)
666
+ ])) : (e(), o("section", re, [
667
+ r.title ? (e(), o("h3", le, d(r.title), 1)) : m("", !0),
668
+ l("ul", ie, [
669
+ (e(!0), o(M, null, B(r.items, (p) => (e(), o("li", {
670
+ key: p.key,
671
+ class: "group/req flex items-center gap-3 pl-row-inset",
672
+ "data-test": `requirement-${p.key}`,
673
+ "data-met": p.met
674
+ }, [
675
+ l("span", {
676
+ "aria-hidden": "true",
677
+ class: _(["flex size-[22px] shrink-0 items-center justify-center rounded-full compact:size-7", p.met ? "bg-control-on text-white" : "bg-status-danger-surface text-status-danger-content"])
678
+ }, [
679
+ $(n(y), {
680
+ name: p.met ? "checkCustom" : "close",
681
+ size: 12
682
+ }, null, 8, ["name"])
683
+ ], 2),
684
+ l("div", ue, [
685
+ l("div", de, [
686
+ l("p", pe, [
687
+ E(d(p.label) + " ", 1),
688
+ l("span", fe, "(" + d(p.met ? n(t)("core.requirements.met") : n(t)("core.requirements.not_met")) + ")", 1)
689
+ ]),
690
+ p.hint ? (e(), o("p", me, d(p.hint), 1)) : m("", !0)
691
+ ]),
692
+ !p.met && p.fix ? (e(), T(i, {
693
+ key: 0,
694
+ to: p.fix.to,
695
+ class: "hit-target relative inline-flex min-h-7 shrink-0 items-center rounded-full bg-tint-soft px-3 text-footnote font-semibold text-content-link transition-[filter] duration-motion-fast hover:brightness-95 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus dark:hover:brightness-125 compact:bg-transparent compact:px-1 compact:text-headline"
696
+ }, {
697
+ default: S(() => [
698
+ E(d(p.fix.label), 1)
699
+ ]),
700
+ _: 2
701
+ }, 1032, ["to"])) : m("", !0)
702
+ ])
703
+ ], 8, ce))), 128))
704
+ ])
705
+ ]));
706
+ };
707
+ }
708
+ }), ge = {
709
+ key: 0,
710
+ "aria-hidden": "true",
711
+ class: "flex size-[22px] shrink-0 items-center justify-center rounded-full bg-control-on text-white compact:size-7"
712
+ }, he = {
713
+ key: 1,
714
+ "aria-hidden": "true",
715
+ class: "flex size-[22px] shrink-0 items-center justify-center rounded-full bg-tint text-caption font-semibold text-content-on-tint compact:size-7"
716
+ }, be = {
717
+ key: 2,
718
+ "aria-hidden": "true",
719
+ class: "flex size-[22px] shrink-0 items-center justify-center rounded-full bg-status-danger-surface text-status-danger-content compact:size-7"
720
+ }, xe = {
721
+ key: 3,
722
+ "aria-hidden": "true",
723
+ "data-todo-tracked": "",
724
+ class: "flex size-[22px] shrink-0 items-center justify-center rounded-full border-2 border-status-warning-content/60 compact:size-7"
725
+ }, _e = {
726
+ key: 4,
727
+ "aria-hidden": "true",
728
+ class: "flex size-[22px] shrink-0 items-center justify-center rounded-full border-2 border-dashed border-fill-strong text-caption font-semibold text-content-muted compact:size-7"
729
+ }, ve = { class: "sr-only" }, ke = {
730
+ key: 0,
731
+ class: "text-body tabular-nums text-content-muted"
732
+ }, ye = ["data-test", "aria-label"], Ve = /* @__PURE__ */ q({
733
+ __name: "TodoRow",
734
+ props: {
735
+ state: {},
736
+ label: {},
737
+ sub: { default: void 0 },
738
+ step: { default: void 0 },
739
+ to: { default: void 0 },
740
+ action: { default: void 0 },
741
+ print: { default: void 0 },
742
+ value: { default: void 0 },
743
+ blocking: { type: Boolean, default: !0 }
744
+ },
745
+ setup(c) {
746
+ const t = c, { t: r } = N(), g = z(() => t.state === "missing" && t.step !== void 0), h = z(() => t.state === "missing" && !g.value && t.blocking), u = z(() => r(`core.todo_state.${t.state}`));
747
+ return (i, p) => (e(), T(n(at), O({
748
+ label: t.label,
749
+ layout: "setting",
750
+ to: t.action || i.$slots.trailing ? void 0 : t.to
751
+ }, { "data-todo-state": t.state }), X({
752
+ leading: S(() => [
753
+ t.state === "done" ? (e(), o("span", ge, [
754
+ $(n(y), {
755
+ name: "checkCustom",
756
+ size: 12
757
+ })
758
+ ])) : g.value ? (e(), o("span", he, d(t.step), 1)) : h.value ? (e(), o("span", be, [
759
+ $(n(y), {
760
+ name: "close",
761
+ size: 12
762
+ })
763
+ ])) : t.state === "missing" ? (e(), o("span", xe)) : (e(), o("span", _e, d(t.step ?? ""), 1))
764
+ ]),
765
+ sub: S(() => [
766
+ t.sub ? (e(), o("span", {
767
+ key: 0,
768
+ class: _(h.value ? "text-status-danger-content" : "")
769
+ }, d(t.sub), 3)) : m("", !0),
770
+ l("span", ve, " (" + d(u.value) + ")", 1)
771
+ ]),
772
+ default: S(() => [
773
+ t.value ? (e(), o("span", ke, d(t.value), 1)) : m("", !0)
774
+ ]),
775
+ _: 2
776
+ }, [
777
+ i.$slots.trailing || t.action || t.print ? {
778
+ name: "trailing",
779
+ fn: S(() => [
780
+ i.$slots.trailing ? R(i.$slots, "trailing", {}, void 0, void 0, 0) : t.action || t.print ? (e(), o("button", {
781
+ key: 1,
782
+ type: "button",
783
+ "data-test": (t.action ?? t.print).testId,
784
+ "aria-label": (t.action ?? t.print).ariaLabel,
785
+ class: "hit-target relative text-body text-content-link focus-visible:outline-2 focus-visible:outline-border-focus",
786
+ onClick: p[0] || (p[0] = Y((k) => (t.action ?? t.print).onClick(), ["prevent", "stop"]))
787
+ }, d((t.action ?? t.print).label), 9, ye)) : m("", !0)
788
+ ]),
789
+ key: "0"
790
+ } : void 0
791
+ ]), 1040, ["label", "to"]));
792
+ }
793
+ });
194
794
  export {
195
- de as AsyncSection,
196
- ie as BackgroundTaskCapsule,
197
- xe as Badge,
198
- _e as Banner,
199
- Ce as DONE_BEAT_MS,
200
- A as DrawnCheck,
201
- ye as EmptyState,
202
- oe as FieldNote,
203
- se as HUES,
204
- be as ProgressTrack,
205
- me as Skeleton,
206
- Se as StatusLine,
207
- Ee as WAIT_VISIBLE_AFTER_MS,
208
- fe as asyncState,
209
- R as backgroundTasksKey,
210
- W as createBackgroundTasks,
211
- re as installBackgroundTasks,
212
- pe as isEmptyValue,
213
- j as useBackgroundTasks,
214
- ue as useCountUp,
215
- Ae as useLoad,
216
- Fe as useWaitStatus,
217
- ve as valueOf
795
+ He as AsyncSection,
796
+ Ie as BackgroundTaskCapsule,
797
+ Ye as Badge,
798
+ ts as Banner,
799
+ us as DONE_BEAT_MS,
800
+ U as DrawnCheck,
801
+ ss as EmptyState,
802
+ Ae as FieldNote,
803
+ Ne as HUES,
804
+ Fe as NextStepPanel,
805
+ Pe as PhaseTiles,
806
+ Ht as PhaseTrack,
807
+ os as ProgressTrack,
808
+ Oe as RequirementList,
809
+ Ke as Skeleton,
810
+ rs as StatusLine,
811
+ Ve as TodoRow,
812
+ ds as WAIT_VISIBLE_AFTER_MS,
813
+ Qe as asyncState,
814
+ lt as backgroundTasksKey,
815
+ rt as createBackgroundTasks,
816
+ Re as installBackgroundTasks,
817
+ Ge as isEmptyValue,
818
+ it as useBackgroundTasks,
819
+ De as useCountUp,
820
+ is as useLoad,
821
+ ps as useWaitStatus,
822
+ Je as valueOf
218
823
  };