@north-light/crouter 0.3.192 → 0.3.194

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 (190) hide show
  1. package/dist/api/client.d.ts +31 -10
  2. package/dist/api/client.js +83 -24
  3. package/dist/api/dto/bash-jobs.d.ts +24 -0
  4. package/dist/api/dto/bash-jobs.js +9 -0
  5. package/dist/api/dto/human.d.ts +3 -4
  6. package/dist/api/dto/inbox.d.ts +106 -65
  7. package/dist/api/dto/inbox.js +2 -8
  8. package/dist/api/index.d.ts +1 -0
  9. package/dist/api/index.js +1 -0
  10. package/dist/api/routes.d.ts +7 -0
  11. package/dist/api/routes.js +7 -0
  12. package/dist/builtin-memory/02-lifecycle/01-resident.md +1 -1
  13. package/dist/builtin-memory/internal/examples/imessage-assistant.md +1 -1
  14. package/dist/builtin-memory/internal/nodes-and-canvas.md +2 -2
  15. package/dist/builtin-memory/internal/storage-tiers.md +1 -1
  16. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/serial/provider-rotation.test.ts +101 -3
  17. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.d.ts +6 -2
  18. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +68 -14
  19. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +87 -13
  20. package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +2 -2
  21. package/dist/clients/attach/__tests__/group-activity.test.js +2 -2
  22. package/dist/clients/attach/chrome/canvas-panels.d.ts +1 -1
  23. package/dist/clients/attach/chrome/canvas-panels.js +1 -1
  24. package/dist/clients/attach/input/overlay-owner.js +1 -1
  25. package/dist/clients/attach/overlays/auth.js +34 -8
  26. package/dist/clients/attach/overlays/pickers.d.ts +5 -8
  27. package/dist/clients/attach/overlays/pickers.js +37 -43
  28. package/dist/clients/attach/viewer.js +643 -620
  29. package/dist/clients/inbox/__tests__/serial/inbox-controller.test.js +38 -128
  30. package/dist/clients/inbox/__tests__/serial/mount-panel.test.js +72 -148
  31. package/dist/clients/inbox/controller.d.ts +2 -3
  32. package/dist/clients/inbox/controller.js +41 -42
  33. package/dist/clients/inbox/page-adapter.d.ts +33 -0
  34. package/dist/clients/inbox/page-adapter.js +54 -0
  35. package/dist/clients/inbox/resolve.d.ts +2 -2
  36. package/dist/clients/inbox/resolve.js +1 -1
  37. package/dist/clients/inbox/review-visibility.d.ts +1 -1
  38. package/dist/clients/inbox/review-visibility.js +1 -1
  39. package/dist/clients/inbox/tui/ansi.d.ts +1 -1
  40. package/dist/clients/inbox/tui/ansi.js +2 -2
  41. package/dist/clients/inbox/tui/input.d.ts +1 -3
  42. package/dist/clients/inbox/tui/input.js +242 -553
  43. package/dist/clients/inbox/tui/panel.d.ts +3 -1
  44. package/dist/clients/inbox/tui/panel.js +59 -187
  45. package/dist/clients/inbox/tui/render.d.ts +0 -25
  46. package/dist/clients/inbox/tui/render.js +165 -416
  47. package/dist/clients/inbox/tui/slots.d.ts +32 -0
  48. package/dist/clients/inbox/tui/slots.js +156 -0
  49. package/dist/clients/inbox/tui/types.d.ts +25 -13
  50. package/dist/clients/inbox/tui.js +5 -3
  51. package/dist/commands/attention.js +2 -2
  52. package/dist/commands/human/doc.js +66 -20
  53. package/dist/commands/human/prompts.d.ts +3 -3
  54. package/dist/commands/human/prompts.js +158 -112
  55. package/dist/commands/human/queue.d.ts +0 -1
  56. package/dist/commands/human/queue.js +34 -94
  57. package/dist/commands/human/shared.d.ts +10 -4
  58. package/dist/commands/human/shared.js +62 -13
  59. package/dist/commands/human.js +8 -4
  60. package/dist/commands/memory/read.js +13 -5
  61. package/dist/commands/node/bash.js +18 -30
  62. package/dist/commands/node/lifecycle.js +2 -2
  63. package/dist/commands/surface/node/focus.js +1 -1
  64. package/dist/core/__tests__/human-deliver.test.js +40 -46
  65. package/dist/core/__tests__/seam/broker-attach-stream.test.js +7 -1
  66. package/dist/core/__tests__/seam/dormancy-release.test.js +64 -10
  67. package/dist/core/__tests__/serial/human-deliver-e2e.test.js +40 -31
  68. package/dist/core/__tests__/serial/spawn-root.test.js +3 -1
  69. package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +3 -1
  70. package/dist/core/auth-interaction.d.ts +2 -2
  71. package/dist/core/bash-jobs.d.ts +43 -0
  72. package/dist/core/bash-jobs.js +96 -2
  73. package/dist/core/canvas/__tests__/attention.test.js +16 -10
  74. package/dist/core/canvas/__tests__/render-remote.test.js +9 -3
  75. package/dist/core/canvas/attention.js +1 -1
  76. package/dist/core/canvas/browse/app.js +1 -1
  77. package/dist/core/canvas/nav-model.d.ts +1 -1
  78. package/dist/core/canvas/nav-model.js +1 -1
  79. package/dist/core/canvas/remote-canvas-source.js +1 -1
  80. package/dist/core/canvas/types.d.ts +2 -1
  81. package/dist/core/config.js +4 -1
  82. package/dist/core/human/__tests__/page-render.test.d.ts +1 -0
  83. package/dist/core/human/__tests__/page-render.test.js +49 -0
  84. package/dist/core/human/__tests__/page-tickets.test.d.ts +1 -0
  85. package/dist/core/human/__tests__/page-tickets.test.js +112 -0
  86. package/dist/core/human/__tests__/page.test.d.ts +1 -0
  87. package/dist/core/human/__tests__/page.test.js +139 -0
  88. package/dist/core/human/__tests__/serial/inbox-core.test.js +42 -32
  89. package/dist/core/human/claim.js +2 -2
  90. package/dist/core/human/convention.d.ts +4 -4
  91. package/dist/core/human/convention.js +6 -13
  92. package/dist/core/human/markdown-html.d.ts +8 -0
  93. package/dist/core/human/markdown-html.js +581 -0
  94. package/dist/core/human/page-catalog.d.ts +6 -0
  95. package/dist/core/human/page-catalog.js +43 -0
  96. package/dist/core/human/page-render.d.ts +3 -0
  97. package/dist/core/human/page-render.js +131 -0
  98. package/dist/core/human/page-schema.d.ts +312 -0
  99. package/dist/core/human/page-schema.js +291 -0
  100. package/dist/core/human/page-synth.d.ts +9 -0
  101. package/dist/core/human/page-synth.js +17 -0
  102. package/dist/core/human/page.d.ts +22 -0
  103. package/dist/core/human/page.js +427 -0
  104. package/dist/core/human/review-schema.d.ts +19 -0
  105. package/dist/core/human/review-schema.js +34 -0
  106. package/dist/core/human/scan.d.ts +12 -3
  107. package/dist/core/human/scan.js +69 -26
  108. package/dist/core/human/summary.d.ts +5 -6
  109. package/dist/core/human/summary.js +54 -37
  110. package/dist/core/human/tickets.d.ts +61 -11
  111. package/dist/core/human/tickets.js +100 -57
  112. package/dist/core/human/types.d.ts +21 -66
  113. package/dist/core/human/types.js +1 -5
  114. package/dist/core/inspector/model.d.ts +5 -0
  115. package/dist/core/inspector/model.js +5 -0
  116. package/dist/core/inspector/text.js +2 -2
  117. package/dist/core/inspector/tui.js +10 -3
  118. package/dist/core/keybindings/catalog.d.ts +1 -1
  119. package/dist/core/keybindings/catalog.js +4 -2
  120. package/dist/core/preview-registry.js +0 -1
  121. package/dist/core/review/ticket-filter.d.ts +1 -1
  122. package/dist/core/review/ticket-filter.js +2 -8
  123. package/dist/core/runtime/broker/read-ops.js +3 -0
  124. package/dist/core/runtime/broker.js +19 -10
  125. package/dist/core/runtime/package-health.js +1 -1
  126. package/dist/core/runtime/persona.js +2 -1
  127. package/dist/core/runtime/tmux-bindings.js +8 -1
  128. package/dist/core/termrender/termrender.d.ts +1 -1
  129. package/dist/core/termrender/termrender.js +2 -2
  130. package/dist/core/termrender/version.d.ts +1 -1
  131. package/dist/core/termrender/version.js +1 -1
  132. package/dist/core/tui/page-host.d.ts +1 -1
  133. package/dist/core/tui/page-host.js +2 -2
  134. package/dist/core/user-settings.d.ts +19 -0
  135. package/dist/core/user-settings.js +22 -0
  136. package/dist/daemon/api/handlers/bash-jobs.d.ts +2 -0
  137. package/dist/daemon/api/handlers/bash-jobs.js +90 -0
  138. package/dist/daemon/api/handlers/human.js +16 -14
  139. package/dist/daemon/api/handlers/inbox.js +311 -227
  140. package/dist/daemon/api/router.d.ts +5 -1
  141. package/dist/daemon/api/router.js +5 -0
  142. package/dist/daemon/api/server.js +2 -0
  143. package/dist/daemon/cron-run.js +23 -10
  144. package/dist/daemon/human/finish.d.ts +8 -3
  145. package/dist/daemon/human/finish.js +35 -15
  146. package/dist/daemon/reconcilers/broker-supervision.js +7 -1
  147. package/dist/daemon/reconcilers/dormant-inbox.js +8 -0
  148. package/dist/daemon/reconcilers/live-obligation.d.ts +2 -0
  149. package/dist/daemon/reconcilers/live-obligation.js +11 -0
  150. package/dist/pages/bundle.css +1 -0
  151. package/dist/pages/bundle.js +1347 -0
  152. package/dist/pages/comments.d.ts +34 -0
  153. package/dist/pages/comments.js +72 -0
  154. package/dist/pages/elements/cards.d.ts +17 -0
  155. package/dist/pages/elements/cards.js +785 -0
  156. package/dist/pages/elements/chart.d.ts +1 -0
  157. package/dist/pages/elements/chart.js +648 -0
  158. package/dist/pages/elements/options.d.ts +21 -0
  159. package/dist/pages/elements/options.js +604 -0
  160. package/dist/pages/elements/pages.d.ts +24 -0
  161. package/dist/pages/elements/pages.js +355 -0
  162. package/dist/pages/elements/slot.d.ts +21 -0
  163. package/dist/pages/elements/slot.js +105 -0
  164. package/dist/pages/elements/table.d.ts +19 -0
  165. package/dist/pages/elements/table.js +906 -0
  166. package/dist/pages/elements/text.d.ts +25 -0
  167. package/dist/pages/elements/text.js +951 -0
  168. package/dist/pages/entry.d.ts +8 -0
  169. package/dist/pages/entry.js +8 -0
  170. package/dist/pages/host.d.ts +132 -0
  171. package/dist/pages/host.js +149 -0
  172. package/dist/pages/register.d.ts +2 -0
  173. package/dist/pages/register.js +3 -0
  174. package/dist/pages/slot-config.d.ts +36 -0
  175. package/dist/pages/slot-config.js +50 -0
  176. package/dist/pages/types.d.ts +98 -0
  177. package/dist/pages/types.js +23 -0
  178. package/dist/pi-extensions/canvas-bash-valve.d.ts +4 -2
  179. package/dist/pi-extensions/canvas-bash-valve.js +25 -7
  180. package/dist/types.d.ts +4 -0
  181. package/dist/types.js +2 -0
  182. package/package.json +8 -8
  183. package/runtime.lock.json +156 -101
  184. package/scripts/install-runtime.mjs +172 -5
  185. package/dist/clients/inbox/deck-adapter.d.ts +0 -29
  186. package/dist/clients/inbox/deck-adapter.js +0 -63
  187. package/dist/core/human/deck-factories.d.ts +0 -8
  188. package/dist/core/human/deck-factories.js +0 -15
  189. package/dist/core/human/deck-schema.d.ts +0 -70
  190. package/dist/core/human/deck-schema.js +0 -92
@@ -0,0 +1,1347 @@
1
+ "use strict";(()=>{function B(o){switch(o.kind){case"whole":return"whole";case"option":return`option:${o.optionId}`;case"row":return`row:${o.rowId}`;case"column":return`column:${o.columnId}`;case"card":return`card:${o.cardId}`;case"range":return`range:${o.start}:${o.end}`}}function x(o,t){let e=B(t);return o.find(r=>B(r.anchor)===e)}function H(o,t,e){let r=B(t),n=o.filter(s=>B(s.anchor)!==r),i=e.trim();if(i==="")return n;let a=o.find(s=>B(s.anchor)===r);return[...n,{id:a?.id??Bt(),anchor:t,text:i}]}var ht=0;function Bt(){return ht+=1,`c${ht}`}function Z(o){switch(o.kind){case"whole":return"this";case"range":return`\u201C${o.quote}\u201D`;default:return B(o)}}function Q(){return typeof window>"u"?void 0:window.crtr}function ft(o){if(o instanceof Error&&o.message!=="")return o.message;let t=String(o);return t===""?"unknown error":t}function gt(o){return{status:"unavailable",reason:`host bridge does not provide ${o}()`}}function R(o,t){let e=Q();if(typeof e?.respond!="function")return gt("respond");try{return e.respond(o,t),{status:"ok"}}catch(r){return{status:"failed",reason:ft(r)}}}async function P(o){let t=Q();if(typeof t?.artifact?.data!="function")return gt("artifact.data");try{return{status:"ok",data:await t.artifact.data(o)}}catch(e){return{status:"failed",reason:ft(e)}}}async function bt(o,t,e){let r=Q();if(typeof r?.mountWorkspaceComponent!="function")return"unavailable";try{return await r.mountWorkspaceComponent(o,t,e)}catch{return"unavailable"}}function b(o,t){customElements.define(o,t)}function C(o){let t=o.querySelector('script[type="application/json"]');if(t===null)return{status:"invalid",reason:"slot has no application/json config"};let e=t.textContent??"";if(e.trim()==="")return{status:"invalid",reason:"slot config is empty"};let r;try{r=JSON.parse(e)}catch(n){return{status:"invalid",reason:`slot config is not valid JSON: ${n instanceof Error&&n.message!==""?n.message:"invalid JSON"}`}}return typeof r!="object"||r===null||Array.isArray(r)?{status:"invalid",reason:"slot config must be a JSON object"}:{status:"ok",config:r}}function $(o){let t=o.getAttribute("slot-id")?.trim();return t===void 0||t===""?void 0:t}var Pt='<svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 3.5h11v7h-6l-3 2.5v-2.5h-2z"/><path d="M8 5.5v3M6.5 7h3"/></svg>',_t='<svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 3.5h11v7h-6l-3 2.5v-2.5h-2z"/><path d="M5 6.25h6M5 8.25h4"/></svg>',vt=`
2
+ :host {
3
+ display: block;
4
+ }
5
+
6
+ [part="container"] {
7
+ display: grid;
8
+ gap: var(--crtr-space-3);
9
+ }
10
+
11
+ [part="list"] {
12
+ display: grid;
13
+ gap: var(--crtr-space-2);
14
+ }
15
+
16
+ [part="option"] {
17
+ position: relative;
18
+ display: flex;
19
+ align-items: flex-start;
20
+ gap: var(--crtr-space-3);
21
+ padding: var(--crtr-space-2) var(--crtr-space-3);
22
+ background: var(--crtr-color-surface);
23
+ border: 1px solid var(--crtr-color-border);
24
+ border-radius: var(--crtr-radius-medium);
25
+ transition: background-color 120ms ease, border-color 120ms ease;
26
+ }
27
+
28
+ [part="option"]:hover,
29
+ [part="option"][data-active="true"] {
30
+ background: var(--crtr-color-surface-hover);
31
+ }
32
+
33
+ [part="option"][data-selected="true"] {
34
+ border-color: var(--crtr-color-accent);
35
+ background: color-mix(in srgb, var(--crtr-color-accent) 10%, var(--crtr-color-surface));
36
+ }
37
+
38
+ [part="option-label"] {
39
+ display: flex;
40
+ flex: 1;
41
+ align-items: flex-start;
42
+ gap: var(--crtr-space-3);
43
+ cursor: pointer;
44
+ }
45
+
46
+ [part="option-control"] {
47
+ margin: 0;
48
+ margin-top: 0.15em;
49
+ accent-color: var(--crtr-color-accent);
50
+ }
51
+
52
+ [part="option-control"]:focus-visible {
53
+ outline: 2px solid var(--crtr-color-focus);
54
+ outline-offset: 2px;
55
+ }
56
+
57
+ [part="option-text"] {
58
+ display: grid;
59
+ gap: var(--crtr-space-1);
60
+ }
61
+
62
+ [part="option-title"] {
63
+ font-weight: 500;
64
+ }
65
+
66
+ [part="option-description"] {
67
+ color: var(--crtr-color-text-muted);
68
+ font-size: 0.9em;
69
+ }
70
+
71
+ [part="comment"] {
72
+ display: inline-flex;
73
+ align-items: center;
74
+ justify-content: center;
75
+ flex: none;
76
+ width: 1.5rem;
77
+ height: 1.5rem;
78
+ padding: 0;
79
+ color: var(--crtr-color-text-muted);
80
+ background: transparent;
81
+ border: 1px solid transparent;
82
+ border-radius: var(--crtr-radius-small);
83
+ opacity: 0;
84
+ cursor: pointer;
85
+ transition: opacity 120ms ease, color 120ms ease, background-color 120ms ease;
86
+ }
87
+
88
+ [part="option"]:hover [part="comment"],
89
+ [part="option"][data-active="true"] [part="comment"],
90
+ [part="option"]:focus-within [part="comment"],
91
+ [part="comment"][data-state="commented"],
92
+ [part="comment"][aria-expanded="true"] {
93
+ opacity: 1;
94
+ }
95
+
96
+ [part="comment"]:hover {
97
+ background: var(--crtr-color-surface-hover);
98
+ border-color: var(--crtr-color-border);
99
+ }
100
+
101
+ [part="comment"]:focus-visible {
102
+ outline: 2px solid var(--crtr-color-focus);
103
+ outline-offset: 1px;
104
+ }
105
+
106
+ [part="comment"][data-state="commented"] {
107
+ color: var(--crtr-color-accent);
108
+ }
109
+
110
+ [part="comment"] svg {
111
+ width: 0.9rem;
112
+ height: 0.9rem;
113
+ fill: none;
114
+ stroke: currentColor;
115
+ stroke-width: 1.25;
116
+ stroke-linecap: round;
117
+ stroke-linejoin: round;
118
+ }
119
+
120
+ [part="comment-popover"] {
121
+ position: absolute;
122
+ top: calc(100% + var(--crtr-space-1));
123
+ right: 0;
124
+ z-index: 2;
125
+ display: grid;
126
+ gap: var(--crtr-space-2);
127
+ width: min(20rem, 100%);
128
+ padding: var(--crtr-space-3);
129
+ background: var(--crtr-color-background);
130
+ border: 1px solid var(--crtr-color-border);
131
+ border-radius: var(--crtr-radius-medium);
132
+ box-shadow: var(--crtr-shadow);
133
+ }
134
+
135
+ [part="comment-popover"][hidden] {
136
+ display: none;
137
+ }
138
+
139
+ [part="comment-subject"] {
140
+ margin: 0;
141
+ color: var(--crtr-color-text-muted);
142
+ font-family: var(--crtr-font-mono);
143
+ font-size: 0.75em;
144
+ letter-spacing: 0.06em;
145
+ text-transform: uppercase;
146
+ }
147
+
148
+ [part="comment-input"],
149
+ [part="freetext-input"] {
150
+ width: 100%;
151
+ box-sizing: border-box;
152
+ padding: var(--crtr-space-2);
153
+ color: var(--crtr-color-text);
154
+ font: inherit;
155
+ background: var(--crtr-color-surface);
156
+ border: 1px solid var(--crtr-color-border);
157
+ border-radius: var(--crtr-radius-small);
158
+ resize: vertical;
159
+ }
160
+
161
+ [part="comment-input"] {
162
+ min-height: 4.5rem;
163
+ }
164
+
165
+ [part="freetext-input"] {
166
+ min-height: 4rem;
167
+ }
168
+
169
+ [part="comment-input"]:focus-visible,
170
+ [part="freetext-input"]:focus-visible {
171
+ outline: 2px solid var(--crtr-color-focus);
172
+ outline-offset: -1px;
173
+ }
174
+
175
+ [part="comment-actions"] {
176
+ display: flex;
177
+ align-items: center;
178
+ justify-content: space-between;
179
+ gap: var(--crtr-space-2);
180
+ }
181
+
182
+ [part="comment-hint"] {
183
+ color: var(--crtr-color-text-muted);
184
+ font-family: var(--crtr-font-mono);
185
+ font-size: 0.75em;
186
+ letter-spacing: 0.06em;
187
+ text-transform: uppercase;
188
+ }
189
+
190
+ [part="comment-cancel"],
191
+ [part="comment-save"] {
192
+ padding: var(--crtr-space-1) var(--crtr-space-2);
193
+ font: inherit;
194
+ font-size: 0.9em;
195
+ border-radius: var(--crtr-radius-small);
196
+ cursor: pointer;
197
+ }
198
+
199
+ [part="comment-cancel"] {
200
+ color: var(--crtr-color-text-muted);
201
+ background: transparent;
202
+ border: 1px solid transparent;
203
+ }
204
+
205
+ [part="comment-cancel"]:hover {
206
+ color: var(--crtr-color-text);
207
+ background: var(--crtr-color-surface-hover);
208
+ }
209
+
210
+ [part="comment-save"] {
211
+ color: var(--crtr-color-accent-contrast);
212
+ background: var(--crtr-color-accent);
213
+ border: 1px solid var(--crtr-color-accent);
214
+ }
215
+
216
+ [part="comment-cancel"]:focus-visible,
217
+ [part="comment-save"]:focus-visible {
218
+ outline: 2px solid var(--crtr-color-focus);
219
+ outline-offset: 1px;
220
+ }
221
+
222
+ [part="freetext"] {
223
+ display: grid;
224
+ gap: var(--crtr-space-1);
225
+ }
226
+
227
+ [part="freetext-label"] {
228
+ color: var(--crtr-color-text-muted);
229
+ font-size: 0.85em;
230
+ }
231
+
232
+ [part="unavailable"] {
233
+ padding: var(--crtr-space-3);
234
+ color: var(--crtr-color-text-muted);
235
+ background: var(--crtr-color-surface);
236
+ border: 1px solid var(--crtr-color-border);
237
+ border-radius: var(--crtr-radius-medium);
238
+ }
239
+
240
+ [part="reason"] {
241
+ color: var(--crtr-color-text);
242
+ font-family: var(--crtr-font-mono);
243
+ }
244
+ `,xt=0;function Kt(o){return o instanceof HTMLTextAreaElement||o instanceof HTMLElement&&o.isContentEditable?!0:o instanceof HTMLInputElement?o.type!=="checkbox"&&o.type!=="radio":!1}var et=class extends HTMLElement{#n;#d;#c;#t=new Map;#r=[];#e=[];#i=[];#l;#s;#a;#u=!1;constructor(){super(),this.#n=this.attachShadow({mode:"open"})}connectedCallback(){if(this.#u)return;this.#u=!0,this.#c=$(this);let t=C(this);if(t.status!=="ok"){this.#o(t.reason);return}let e=t.config;if(!Array.isArray(e.options)||e.options.length===0){this.#o("options config lists no options");return}this.#d=e,this.#r=e.options.map(r=>r.id),this.#p(e),this.#A()}disconnectedCallback(){document.removeEventListener("pointerdown",this.#g,!0)}#o(t){let e=document.createElement("style");e.textContent=vt;let r=document.createElement("div");r.part.add("unavailable"),r.setAttribute("role","status");let n=document.createElement("span");n.part.add("reason"),n.textContent=t,r.append("Options unavailable: ",n),this.#n.replaceChildren(e,r)}#p(t){let e=document.createElement("style");e.textContent=vt;let r=document.createElement("div");r.part.add("container");let n=document.createElement("div");n.part.add("list"),t.mode==="single"&&n.setAttribute("role","radiogroup"),xt+=1;let i=`crtr-options-${xt}`;for(let a of t.options)n.append(this.#f(t,a,i));r.append(n),t.allowFreetext===!0&&r.append(this.#m(t)),r.addEventListener("keydown",a=>this.#h(a)),this.#n.replaceChildren(e,r)}#f(t,e,r){let n=document.createElement("div");n.part.add("option"),n.dataset.optionId=e.id;let i=document.createElement("label");i.part.add("option-label");let a=document.createElement("input");a.part.add("option-control"),a.type=t.mode==="single"?"radio":"checkbox",a.name=r,a.value=e.id,a.addEventListener("change",()=>this.#E(e.id,a.checked)),a.addEventListener("focus",()=>this.#v(e.id));let s=document.createElement("span");s.part.add("option-text");let c=document.createElement("span");if(c.part.add("option-title"),c.textContent=e.label,s.append(c),e.description!==void 0&&e.description!==""){let y=document.createElement("span");y.part.add("option-description"),y.textContent=e.description,s.append(y)}i.append(a,s);let d=document.createElement("button");d.part.add("comment"),d.type="button",d.setAttribute("aria-haspopup","dialog"),d.addEventListener("click",()=>{this.#a===e.id?this.#y():this.#w(e.id)});let u=document.createElement("div");u.part.add("comment-popover"),u.setAttribute("role","dialog"),u.hidden=!0;let g=document.createElement("p");g.part.add("comment-subject"),g.textContent=`Comment on ${e.label}`,u.setAttribute("aria-label",g.textContent);let m=document.createElement("textarea");m.part.add("comment-input"),m.placeholder="What should the agent know about this?",m.addEventListener("keydown",y=>{if(y.key==="Enter"&&(y.metaKey||y.ctrlKey)){y.preventDefault(),this.#C(e.id);return}y.key==="Escape"&&(y.preventDefault(),this.#y())});let W=document.createElement("div");W.part.add("comment-actions");let D=document.createElement("span");D.part.add("comment-hint");let A=document.createElement("span"),T=document.createElement("button");T.part.add("comment-cancel"),T.type="button",T.textContent="Cancel",T.addEventListener("click",()=>this.#y());let M=document.createElement("button");return M.part.add("comment-save"),M.type="button",M.textContent="Save",M.addEventListener("click",()=>this.#C(e.id)),A.append(T,M),W.append(D,A),u.append(g,m,W),n.append(i,d,u),n.addEventListener("mouseenter",()=>this.#v(e.id)),n.addEventListener("mouseleave",()=>this.#x(e.id)),this.#t.set(e.id,{id:e.id,label:e.label,root:n,control:a,comment:d,popover:u,input:m,hint:D}),n}#m(t){let e=document.createElement("label");e.part.add("freetext");let r=document.createElement("span");r.part.add("freetext-label"),r.textContent=t.freetextLabel??"Something else";let n=document.createElement("textarea");return n.part.add("freetext-input"),n.placeholder=t.freetextPlaceholder??"Answer in your own words\u2026",n.addEventListener("input",()=>{this.#l=n.value===""?void 0:n.value,this.#b()}),e.append(r,n),e}#h(t){if(t.metaKey||t.ctrlKey||t.altKey||Kt(t.target))return;let e=t.key.toLowerCase(),r=this.#s??this.#e.at(-1)??this.#r[0];if(r!==void 0){if(e==="j"||e==="k"){t.preventDefault();let n=Math.max(0,this.#r.indexOf(r)),i=e==="j"?1:-1,a=this.#r[(n+i+this.#r.length)%this.#r.length];this.#v(a),this.#t.get(a)?.control.focus();return}if(e==="x"){t.preventDefault();let n=this.#e.includes(r);this.#E(r,this.#d?.mode==="single"?!0:!n);return}e==="c"&&(t.preventDefault(),this.#w(r))}}#v(t){this.#s!==t&&(this.#s=t,this.#A())}#x(t){this.#s===t&&(this.#s=void 0,this.#A())}#E(t,e){if(this.#d!==void 0){if(this.#d.mode==="single")this.#e=[t];else{let r=e?[...this.#e,t]:this.#e.filter(n=>n!==t);this.#e=this.#r.filter(n=>r.includes(n))}this.#v(t),this.#A(),this.#b()}}#g=t=>{if(this.#a===void 0)return;let e=this.#t.get(this.#a);if(e===void 0)return;let r=t.composedPath();r.includes(e.popover)||r.includes(e.comment)||this.#y(!1)};#w(t){let e=this.#t.get(t);e!==void 0&&(this.#a===void 0&&document.addEventListener("pointerdown",this.#g,!0),this.#a=t,this.#s=t,e.input.value=x(this.#i,tt(t))?.text??"",this.#A(),e.input.focus())}#y(t=!0){if(this.#a===void 0)return;let e=this.#t.get(this.#a);this.#a=void 0,document.removeEventListener("pointerdown",this.#g,!0),this.#A(),t&&e?.comment.focus()}#C(t){let e=this.#t.get(t);e!==void 0&&(this.#i=H(this.#i,tt(t),e.input.value),this.#y(),this.#b())}#A(){for(let t of this.#t.values()){let e=this.#e.includes(t.id);t.control.checked=e,t.root.dataset.selected=String(e),t.root.dataset.active=String(this.#s===t.id);let r=x(this.#i,tt(t.id));t.comment.dataset.state=r===void 0?"empty":"commented",t.comment.innerHTML=r===void 0?Pt:_t,t.comment.setAttribute("aria-label",r===void 0?`Comment on ${t.label}`:`Edit comment on ${t.label}`);let n=this.#a===t.id;t.comment.setAttribute("aria-expanded",String(n)),t.popover.hidden=!n,t.hint.textContent=r===void 0?"\u2318\u21B5 to save":"empty to delete"}}#b(){if(this.#c===void 0)return;let t={selectedOptionIds:[...this.#e],comments:this.#i.map(e=>({...e}))};this.#d?.allowFreetext===!0&&this.#l!==void 0&&(t.freetext=this.#l),R(this.#c,t)}};function tt(o){return{kind:"option",optionId:o}}b("crtr-options",et);var rt={kind:"whole"},_="the whole passage",q="the selected text",Gt=6,Tt="comment-popover",Wt=`
245
+ :host {
246
+ display: block;
247
+ }
248
+
249
+ [part="container"] {
250
+ position: relative;
251
+ display: grid;
252
+ gap: var(--crtr-space-2);
253
+ }
254
+
255
+ [part="toolbar"] {
256
+ display: flex;
257
+ flex-wrap: wrap;
258
+ align-items: center;
259
+ justify-content: flex-end;
260
+ gap: var(--crtr-space-2);
261
+ }
262
+
263
+ [part="edited"] {
264
+ padding: 0 var(--crtr-space-2);
265
+ color: var(--crtr-color-accent);
266
+ background: color-mix(in srgb, var(--crtr-color-accent) 14%, transparent);
267
+ border-radius: var(--crtr-radius-small);
268
+ font-family: var(--crtr-font-mono);
269
+ font-size: 0.6875rem;
270
+ letter-spacing: 0.06em;
271
+ line-height: 1.7;
272
+ text-transform: uppercase;
273
+ }
274
+
275
+ button {
276
+ display: inline-flex;
277
+ align-items: center;
278
+ gap: var(--crtr-space-1);
279
+ max-width: 100%;
280
+ padding: var(--crtr-space-1) var(--crtr-space-2);
281
+ color: var(--crtr-color-text-muted);
282
+ font: inherit;
283
+ background: transparent;
284
+ border: 1px solid transparent;
285
+ border-radius: var(--crtr-radius-small);
286
+ cursor: pointer;
287
+ }
288
+
289
+ button:hover {
290
+ color: var(--crtr-color-text);
291
+ background: var(--crtr-color-surface-hover);
292
+ }
293
+
294
+ button:focus-visible {
295
+ outline: 2px solid var(--crtr-color-focus);
296
+ outline-offset: 2px;
297
+ }
298
+
299
+ button[data-state="on"] {
300
+ color: var(--crtr-color-accent);
301
+ }
302
+
303
+ svg {
304
+ width: 0.875rem;
305
+ height: 0.875rem;
306
+ flex: none;
307
+ }
308
+
309
+ [part="editor"] {
310
+ display: block;
311
+ box-sizing: border-box;
312
+ width: 100%;
313
+ min-height: 10rem;
314
+ padding: var(--crtr-space-3) var(--crtr-space-4);
315
+ color: var(--crtr-color-text);
316
+ font: inherit;
317
+ line-height: var(--crtr-line-height);
318
+ background: var(--crtr-color-background);
319
+ border: 1px solid var(--crtr-color-border);
320
+ border-radius: var(--crtr-radius-medium);
321
+ resize: vertical;
322
+ }
323
+
324
+ [part="editor"]:focus-visible,
325
+ [part="popover-input"]:focus-visible {
326
+ outline: 2px solid var(--crtr-color-focus);
327
+ outline-offset: -1px;
328
+ }
329
+
330
+ [part="body"] {
331
+ position: relative;
332
+ padding: var(--crtr-space-3) var(--crtr-space-4);
333
+ background: var(--crtr-color-surface);
334
+ border: 1px solid var(--crtr-color-border);
335
+ border-radius: var(--crtr-radius-medium);
336
+ }
337
+
338
+ [part="body"]:focus-visible {
339
+ outline: 2px solid var(--crtr-color-focus);
340
+ outline-offset: 2px;
341
+ }
342
+
343
+ [part="prose"] {
344
+ display: grid;
345
+ gap: var(--crtr-space-3);
346
+ }
347
+
348
+ [part="prose"] p {
349
+ margin: 0;
350
+ white-space: pre-wrap;
351
+ }
352
+
353
+ [part="placeholder"] {
354
+ color: var(--crtr-color-text-muted);
355
+ }
356
+
357
+ [part~="commented"] {
358
+ position: relative;
359
+ border-radius: var(--crtr-radius-small);
360
+ background: color-mix(in srgb, var(--crtr-color-accent) 18%, transparent);
361
+ text-decoration: underline dotted;
362
+ text-decoration-color: var(--crtr-color-accent);
363
+ text-underline-offset: 4px;
364
+ cursor: help;
365
+ outline: none;
366
+ }
367
+
368
+ [part~="commented"]:focus-visible {
369
+ outline: 2px solid var(--crtr-color-focus);
370
+ outline-offset: 2px;
371
+ }
372
+
373
+ [part="comment-bubble"] {
374
+ position: absolute;
375
+ bottom: calc(100% + var(--crtr-space-1));
376
+ left: 0;
377
+ z-index: 2;
378
+ display: grid;
379
+ gap: var(--crtr-space-1);
380
+ width: max-content;
381
+ max-width: 18rem;
382
+ padding: var(--crtr-space-2) var(--crtr-space-3);
383
+ color: var(--crtr-color-text);
384
+ background: var(--crtr-color-background);
385
+ border: 1px solid var(--crtr-color-border);
386
+ border-radius: var(--crtr-radius-medium);
387
+ box-shadow: var(--crtr-shadow);
388
+ text-decoration: none;
389
+ white-space: normal;
390
+ user-select: none;
391
+ opacity: 0;
392
+ visibility: hidden;
393
+ transition: opacity 120ms ease 120ms, visibility 0s linear 240ms;
394
+ }
395
+
396
+ [part~="commented"]:hover > [part="comment-bubble"],
397
+ [part~="commented"]:focus > [part="comment-bubble"] {
398
+ opacity: 1;
399
+ visibility: visible;
400
+ transition: opacity 120ms ease 220ms, visibility 0s linear 220ms;
401
+ }
402
+
403
+ [part="bubble-label"],
404
+ [part="comment-count"],
405
+ [part="popover-subject"],
406
+ [part="popover-hint"] {
407
+ color: var(--crtr-color-text-muted);
408
+ font-family: var(--crtr-font-mono);
409
+ font-size: 0.6875rem;
410
+ letter-spacing: 0.06em;
411
+ text-transform: uppercase;
412
+ }
413
+
414
+ [part="bubble-label"] {
415
+ color: var(--crtr-color-accent);
416
+ }
417
+
418
+ [part~="selection-comment"] {
419
+ position: absolute;
420
+ z-index: 3;
421
+ color: var(--crtr-color-accent);
422
+ background: var(--crtr-color-background);
423
+ border-color: color-mix(in srgb, var(--crtr-color-accent) 40%, transparent);
424
+ box-shadow: var(--crtr-shadow);
425
+ }
426
+
427
+ [part="comment-rail"] {
428
+ display: grid;
429
+ gap: var(--crtr-space-1);
430
+ }
431
+
432
+ [part="comment-chips"] {
433
+ display: flex;
434
+ flex-wrap: wrap;
435
+ gap: var(--crtr-space-2);
436
+ }
437
+
438
+ [part~="comment-chip"] {
439
+ color: var(--crtr-color-text);
440
+ border-color: var(--crtr-color-border);
441
+ text-align: left;
442
+ }
443
+
444
+ [part~="comment-chip"] > span {
445
+ overflow: hidden;
446
+ white-space: nowrap;
447
+ text-overflow: ellipsis;
448
+ }
449
+
450
+ [part="popover"] {
451
+ position: absolute;
452
+ z-index: 5;
453
+ box-sizing: border-box;
454
+ display: grid;
455
+ gap: var(--crtr-space-2);
456
+ width: 20rem;
457
+ max-width: 100%;
458
+ padding: var(--crtr-space-3);
459
+ background: var(--crtr-color-background);
460
+ border: 1px solid var(--crtr-color-border);
461
+ border-radius: var(--crtr-radius-medium);
462
+ box-shadow: var(--crtr-shadow);
463
+ }
464
+
465
+ [part="popover"][hidden],
466
+ [part="edited"][hidden],
467
+ [part="comment-rail"][hidden],
468
+ [part~="selection-comment"][hidden],
469
+ [part="popover-quote"][hidden],
470
+ [part="edit-toggle"][hidden] {
471
+ display: none;
472
+ }
473
+
474
+ [part="popover-subject"],
475
+ [part="popover-quote"] {
476
+ margin: 0;
477
+ }
478
+
479
+ [part="popover-quote"] {
480
+ padding: var(--crtr-space-1) var(--crtr-space-2);
481
+ color: var(--crtr-color-text-muted);
482
+ background: color-mix(in srgb, var(--crtr-color-accent) 8%, transparent);
483
+ border-left: 2px solid color-mix(in srgb, var(--crtr-color-accent) 40%, transparent);
484
+ white-space: pre-wrap;
485
+ }
486
+
487
+ [part="popover-input"] {
488
+ box-sizing: border-box;
489
+ width: 100%;
490
+ min-height: 5rem;
491
+ padding: var(--crtr-space-2);
492
+ color: var(--crtr-color-text);
493
+ font: inherit;
494
+ background: var(--crtr-color-surface);
495
+ border: 1px solid var(--crtr-color-border);
496
+ border-radius: var(--crtr-radius-small);
497
+ resize: vertical;
498
+ }
499
+
500
+ [part="popover-actions"] {
501
+ display: flex;
502
+ align-items: center;
503
+ justify-content: space-between;
504
+ gap: var(--crtr-space-2);
505
+ }
506
+
507
+ [part="popover-buttons"] {
508
+ display: flex;
509
+ gap: var(--crtr-space-2);
510
+ }
511
+
512
+ [part="popover-save"] {
513
+ color: var(--crtr-color-accent-contrast);
514
+ background: var(--crtr-color-accent);
515
+ }
516
+
517
+ [part="popover-save"]:hover {
518
+ color: var(--crtr-color-accent-contrast);
519
+ background: var(--crtr-color-accent);
520
+ opacity: 0.9;
521
+ }
522
+
523
+ [part="popover-cancel"] {
524
+ border-color: var(--crtr-color-border);
525
+ }
526
+
527
+ [part="unavailable"] {
528
+ padding: var(--crtr-space-3);
529
+ color: var(--crtr-color-text-muted);
530
+ background: var(--crtr-color-surface);
531
+ border: 1px solid var(--crtr-color-border);
532
+ border-radius: var(--crtr-radius-medium);
533
+ box-shadow: var(--crtr-shadow);
534
+ }
535
+
536
+ [part="reason"] {
537
+ color: var(--crtr-color-text);
538
+ font-family: var(--crtr-font-mono);
539
+ }
540
+ `,yt="http://www.w3.org/2000/svg",At="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",Et=[At,"M12 7v6","M9 10h6"],wt=[At,"M13 8H7","M17 12H7"],Ft=["M12 20h9","M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z","m15 5 3 3"],qt=["M20 6 9 17l-5-5"];function Y(o){let t=document.createElementNS(yt,"svg");t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width","2"),t.setAttribute("stroke-linecap","round"),t.setAttribute("stroke-linejoin","round"),t.setAttribute("aria-hidden","true");for(let e of o){let r=document.createElementNS(yt,"path");r.setAttribute("d",e),t.append(r)}return t}function Vt(o){let t=[],e=/\n{2,}/g,r=0,n;for(;(n=e.exec(o))!==null;)t.push({start:r,text:o.slice(r,n.index)}),r=n.index+n[0].length;return t.push({start:r,text:o.slice(r)}),t.filter(i=>i.text.trim().length>0)}function Ut(o,t){let e=t.filter(i=>i.anchor.kind==="range").filter(i=>i.anchor.end>o.start&&i.anchor.start<o.start+o.text.length).sort((i,a)=>i.anchor.start-a.anchor.start),r=[],n=0;for(let i of e){let a=Math.max(n,i.anchor.start-o.start),s=Math.min(o.text.length,i.anchor.end-o.start);s<=a||(a>n&&r.push({text:o.text.slice(n,a)}),r.push({text:o.text.slice(a,s),comment:i}),n=s)}return n<o.text.length&&r.push({text:o.text.slice(n)}),r}function Yt(o){return(o.nodeType===Node.ELEMENT_NODE?o:o.parentElement)?.closest("[data-paragraph]")??null}function Xt(o,t,e){let r=document.createRange();r.selectNodeContents(o),r.setEnd(t,e);let n=r.cloneContents();for(let i of n.querySelectorAll('[part="comment-bubble"]'))i.remove();return n.textContent?.length??0}function Ct(o){let t=o.cloneNode(!0);for(let e of t.querySelectorAll('[part="comment-bubble"]'))e.remove();return t.textContent?.length??0}function kt(o,t,e,r){let n=Array.from(o.querySelectorAll("[data-paragraph]")),i=Yt(t);if(i){if(r==="end"&&e===0){let c=n.indexOf(i),d=n[c-1];if(d)return{paragraph:d,offset:Ct(d)}}return{paragraph:i,offset:Xt(i,t,e)}}let a=document.createRange();a.setStart(t,e),a.collapse(!0);let s=r==="start"?n:[...n].reverse();for(let c of s){let d=document.createRange();d.selectNodeContents(c);let u=a.compareBoundaryPoints(r==="start"?Range.START_TO_START:Range.START_TO_END,d);if(r==="start"&&u<=0||r==="end"&&u>=0)return{paragraph:c,offset:r==="start"?0:Ct(c)}}return null}function Jt(o,t){let e=o,r=[typeof e.getSelection=="function"?e.getSelection():null,document.getSelection()];for(let n of r){if(!n||n.isCollapsed||n.rangeCount===0)continue;let i=n.getRangeAt(0);if(t.contains(i.startContainer)&&t.contains(i.endContainer))return i}return null}function X(o){o.setAttribute("aria-haspopup","dialog"),o.setAttribute("aria-controls",Tt),o.setAttribute("aria-expanded","false")}var nt=class extends HTMLElement{#n;#d=document.createElement("div");#c=document.createElement("div");#t=document.createElement("span");#r=document.createElement("button");#e=document.createElement("button");#i=document.createElement("span");#l=document.createElement("div");#s=document.createElement("textarea");#a=document.createElement("div");#u=document.createElement("div");#o=document.createElement("button");#p=document.createElement("div");#f=document.createElement("span");#m=document.createElement("div");#h=document.createElement("div");#v=document.createElement("p");#x=document.createElement("blockquote");#E=document.createElement("textarea");#g=document.createElement("span");#w=document.createElement("button");#y=document.createElement("button");#C={initialText:""};#A;#b="";#k=[];#T=!1;#H=!1;#N=null;#M=null;constructor(){super(),this.#n=this.attachShadow({mode:"open"});let t=document.createElement("style");t.textContent=Wt,this.#d.part.add("container"),this.#c.part.add("toolbar"),this.#t.part.add("edited"),this.#t.textContent="edited",this.#t.hidden=!0,this.#r.type="button",this.#r.part.add("comment-trigger"),this.#r.part.add("whole-comment"),X(this.#r),this.#r.addEventListener("click",()=>{this.#S(rt,_,this.#r,"end")}),this.#e.type="button",this.#e.part.add("edit-toggle"),this.#e.hidden=!0,this.#e.append(this.#i),this.#e.addEventListener("click",()=>{this.#T=!this.#T,this.#I(),this.#_(),this.#L(),this.#T?this.#s.focus():this.#a.focus()}),this.#c.append(this.#t,this.#r,this.#e),this.#l.part.add("surface"),this.#s.part.add("editor"),this.#s.addEventListener("input",()=>{this.#b=this.#s.value,this.#L(),this.#P()}),this.#a.part.add("body"),this.#a.tabIndex=0,this.#u.part.add("prose"),this.#o.type="button",this.#o.part.add("comment-trigger"),this.#o.part.add("selection-comment"),this.#o.hidden=!0,X(this.#o),this.#o.append(Y(Et),document.createTextNode("Comment")),this.#o.addEventListener("mousedown",n=>n.preventDefault()),this.#o.addEventListener("click",()=>{let n=this.#N;n!==null&&this.#S(n.anchor,q,this.#o,"start",n.anchor.quote)}),this.#a.append(this.#u,this.#o),this.#a.addEventListener("mouseup",()=>this.#q()),this.#p.part.add("comment-rail"),this.#p.hidden=!0,this.#f.part.add("comment-count"),this.#m.part.add("comment-chips"),this.#p.append(this.#f,this.#m),this.#h.part.add("popover"),this.#h.hidden=!0,this.#h.id=Tt,this.#h.setAttribute("role","dialog"),this.#v.part.add("popover-subject"),this.#x.part.add("popover-quote"),this.#x.hidden=!0,this.#E.part.add("popover-input"),this.#E.placeholder="What should the agent know about this?",this.#E.addEventListener("keydown",n=>{n.key==="Enter"&&(n.metaKey||n.ctrlKey)&&(n.preventDefault(),this.#W())}),this.#g.part.add("popover-hint"),this.#y.type="button",this.#y.part.add("popover-cancel"),this.#y.textContent="Cancel",this.#y.addEventListener("click",()=>this.#R()),this.#w.type="button",this.#w.part.add("popover-save"),this.#w.textContent="Save",this.#w.addEventListener("click",()=>this.#W());let e=document.createElement("div");e.part.add("popover-actions");let r=document.createElement("div");r.part.add("popover-buttons"),r.append(this.#y,this.#w),e.append(this.#g,r),this.#h.append(this.#v,this.#x,this.#E,e),this.#d.append(this.#c,this.#l,this.#p,this.#h),this.#n.append(t,this.#d),this.addEventListener("keydown",this.#U)}connectedCallback(){if(this.#H)return;let t=C(this);if(t.status!=="ok"){this.#z(t.reason);return}if(typeof t.config.initialText!="string"){this.#z("text config has no initialText string");return}this.#H=!0,this.#C=t.config,this.#A=$(this),this.#b=t.config.initialText,this.#T=t.config.editable===!0&&this.#b.length===0,this.#L(),this.#_(),this.#K()}disconnectedCallback(){document.removeEventListener("pointerdown",this.#O,!0)}#B(){return{text:this.#b,edited:this.#b!==this.#C.initialText,comments:this.#k}}#P(){this.#A!==void 0&&R(this.#A,this.#B())}#z(t){let e=document.createElement("div");e.part.add("unavailable"),e.setAttribute("role","status");let r=document.createElement("span");r.part.add("reason"),r.textContent=t,e.append("Text unavailable: ",r),this.#d.replaceChildren(e)}#L(){this.#t.hidden=this.#b===this.#C.initialText;let t=x(this.#k,rt);this.#r.replaceChildren(Y(t?wt:Et)),this.#r.dataset.state=t?"on":"off",this.#r.setAttribute("aria-label",`${t?"Edit comment on":"Comment on"} ${_}`),this.#e.hidden=this.#C.editable!==!0,this.#e.dataset.state=this.#T?"on":"off",this.#i.textContent=this.#T?"Done":"Edit",this.#e.replaceChildren(Y(this.#T?qt:Ft),this.#i)}#_(){if(this.#T){this.#s.value!==this.#b&&(this.#s.value=this.#b),this.#s.placeholder=this.#C.placeholder??"Write your answer\u2026",this.#l.firstChild!==this.#s&&this.#l.replaceChildren(this.#s);return}this.#l.firstChild!==this.#a&&this.#l.replaceChildren(this.#a),this.#j()}#j(){let t=Vt(this.#b);if(t.length===0){let r=document.createElement("p");r.part.add("placeholder"),r.textContent=this.#C.placeholder??"Nothing yet.",this.#u.replaceChildren(r);return}let e=t.map(r=>{let n=document.createElement("p");n.dataset.paragraph="",n.dataset.start=String(r.start);for(let i of Ut(r,this.#k))n.append(i.comment?this.#F(i.text,i.comment):i.text);return n});this.#u.replaceChildren(...e)}#F(t,e){let r=document.createElement("span");r.part.add("commented"),r.tabIndex=0,r.dataset.commentId=e.id,X(r);let n=document.createElement("span");n.part.add("comment-bubble"),n.setAttribute("role","note");let i=document.createElement("span");i.part.add("bubble-label"),i.textContent="Comment";let a=document.createElement("span");return a.textContent=e.text,n.append(i,a),r.append(t,n),r}#K(){let t=this.#k.length;if(this.#p.hidden=t===0,t===0){this.#m.replaceChildren();return}this.#f.textContent=`${t} comment${t===1?"":"s"}`;let e=this.#k.map(r=>{let n=document.createElement("button");n.type="button",n.part.add("comment-trigger"),n.part.add("comment-chip"),n.dataset.commentId=r.id,X(n);let i=document.createElement("span");i.textContent=r.text,n.append(Y(wt),i);let a=r.anchor.kind==="range"?r.anchor:void 0;return n.setAttribute("aria-label",`Edit comment on ${a?q:_}`),n.addEventListener("click",()=>{this.#S(r.anchor,a?q:_,n,"start",a?.quote)}),n});this.#m.replaceChildren(...e)}#D(){let t=Jt(this.#n,this.#a);if(t===null)return null;let e=kt(this.#a,t.startContainer,t.startOffset,"start"),r=kt(this.#a,t.endContainer,t.endOffset,"end");if(e===null||r===null||e.paragraph!==r.paragraph)return null;let n=Number(e.paragraph.dataset.start??"0"),i=n+e.offset,a=n+r.offset;if(a<=i)return null;let s=t.getBoundingClientRect(),c=this.#a.getBoundingClientRect();return{anchor:{kind:"range",start:i,end:a,quote:this.#b.slice(i,a)},left:s.left-c.left,top:s.bottom-c.top+4}}#q(){if(this.#T||this.#M!==null)return;let t=this.#D();if(t===null){this.#I();return}this.#N=t,this.#o.hidden=!1,this.#o.style.left=`${t.left}px`,this.#o.style.top=`${t.top}px`}#I(){this.#N=null,this.#o.hidden=!0}#S(t,e,r,n,i){let a=this.#M;if(a!==null){if(a.trigger===r){this.#R();return}a.trigger.setAttribute("aria-expanded","false")}let s=x(this.#k,t);this.#M={anchor:t,trigger:r},r.setAttribute("aria-expanded","true"),this.#v.textContent=`Comment on ${e}`,this.#h.setAttribute("aria-label",`Comment on ${e}`),this.#x.hidden=i===void 0||i==="",this.#x.textContent=i??"",this.#E.value=s?.text??"",this.#g.textContent=s?"empty to delete":"\u2318\u21B5 to save",this.#h.hidden=!1,this.#G(r,n),this.#E.focus(),document.addEventListener("pointerdown",this.#O,!0)}#G(t,e){let r=this.#d.getBoundingClientRect(),n=t.getBoundingClientRect(),i=this.#h.offsetWidth,a=e==="end"?n.right-r.left-i:n.left-r.left,s=Math.min(Math.max(a,0),Math.max(0,r.width-i));this.#h.style.left=`${s}px`,this.#h.style.top=`${n.bottom-r.top+Gt}px`}#R(t=!0){let e=this.#M;this.#M=null,this.#h.hidden=!0,e?.trigger.setAttribute("aria-expanded","false"),document.removeEventListener("pointerdown",this.#O,!0);let r=e!==null&&e.trigger!==this.#o?e.trigger:this.#a;this.#I(),t&&this.#n.contains(r)&&r.focus()}#W(){let t=this.#M;if(t===null)return;let e=this.#u.contains(t.trigger)||this.#m.contains(t.trigger);this.#k=H(this.#k,t.anchor,this.#E.value),this.#R(!e),this.#L(),this.#T||this.#j(),this.#K(),e&&this.#V(t.anchor),this.#P()}#V(t){let e=x(this.#k,t)?.id,r=e===void 0?null:`[data-comment-id="${CSS.escape(e)}"]`,i=(r===null?null:this.#u.querySelector(r)??this.#m.querySelector(r))??this.#a;this.#n.contains(i)&&i.focus()}#O=t=>{if(this.#M===null)return;let e=t.composedPath();e.includes(this.#h)||e.includes(this.#M.trigger)||this.#R()};#U=t=>{if(t.defaultPrevented)return;if(t.key==="Escape"&&this.#M!==null){t.preventDefault(),this.#R();return}if(this.#M!==null||this.#T)return;let e=t.composedPath()[0];if(!(e instanceof HTMLElement&&(e.tagName==="TEXTAREA"||e.tagName==="INPUT"))&&!(t.metaKey||t.ctrlKey||t.altKey)){if(t.key==="j"||t.key==="k"){t.preventDefault(),this.#Y(t.key==="j"?1:-1);return}t.key==="c"&&(t.preventDefault(),this.#X())}};#$(){return Array.from(this.#u.querySelectorAll('[part~="commented"]'))}#Y(t){let e=this.#$();if(e.length===0)return;let r=this.#n.activeElement,n=r instanceof HTMLElement?e.indexOf(r):-1,i=n===-1?t>0?0:e.length-1:n+t;e[Math.min(Math.max(i,0),e.length-1)]?.focus()}#X(){let t=this.#N??this.#D();if(t!==null){this.#N=t,this.#o.hidden=!1,this.#o.style.left=`${t.left}px`,this.#o.style.top=`${t.top}px`,this.#S(t.anchor,q,this.#o,"start",t.anchor.quote);return}let e=this.#n.activeElement;if(e instanceof HTMLElement&&e.dataset.commentId!==void 0){let r=this.#k.find(n=>n.id===e.dataset.commentId);if(r!==void 0){let n=r.anchor.kind==="range"?r.anchor:void 0,i=n===void 0?_:q;this.#S(r.anchor,i,e,"start",n?.quote);return}}this.#S(rt,_,this.#r,"end")}};b("crtr-text",nt);var Zt="M3.25 3.5h9.5A1.75 1.75 0 0 1 14.5 5.25v5A1.75 1.75 0 0 1 12.75 12H7.4l-3.15 2.36A.5.5 0 0 1 3.5 14v-2H3.25A1.75 1.75 0 0 1 1.5 10.25v-5A1.75 1.75 0 0 1 3.25 3.5Z",Qt=`
541
+ :host {
542
+ display: block;
543
+ }
544
+
545
+ [part="container"] {
546
+ position: relative;
547
+ background: var(--crtr-color-background);
548
+ border: 1px solid var(--crtr-color-border);
549
+ border-radius: var(--crtr-radius-medium);
550
+ box-shadow: var(--crtr-shadow);
551
+ overflow: hidden;
552
+ }
553
+
554
+ [part="container"]:focus-visible {
555
+ outline: 2px solid var(--crtr-color-focus);
556
+ outline-offset: 2px;
557
+ }
558
+
559
+ [part="table"] {
560
+ width: 100%;
561
+ border-collapse: collapse;
562
+ font: inherit;
563
+ color: var(--crtr-color-text);
564
+ }
565
+
566
+ [part="caption"] {
567
+ caption-side: top;
568
+ padding: var(--crtr-space-3) var(--crtr-space-3) var(--crtr-space-2);
569
+ text-align: left;
570
+ color: var(--crtr-color-text-muted);
571
+ }
572
+
573
+ th {
574
+ padding: var(--crtr-space-2) var(--crtr-space-3);
575
+ text-align: left;
576
+ font-weight: 600;
577
+ color: var(--crtr-color-text-muted);
578
+ border-bottom: 1px solid var(--crtr-color-border);
579
+ white-space: nowrap;
580
+ }
581
+
582
+ th[data-align="right"] {
583
+ text-align: right;
584
+ }
585
+
586
+ [part="header-cell-inner"] {
587
+ display: inline-flex;
588
+ align-items: center;
589
+ gap: var(--crtr-space-1);
590
+ }
591
+
592
+ th[data-align="right"] [part="header-cell-inner"] {
593
+ flex-direction: row-reverse;
594
+ }
595
+
596
+ [part="column-toggle"] {
597
+ font: inherit;
598
+ font-weight: 600;
599
+ color: inherit;
600
+ background: transparent;
601
+ border: 1px solid transparent;
602
+ border-radius: var(--crtr-radius-small);
603
+ padding: var(--crtr-space-1) var(--crtr-space-2);
604
+ margin: calc(var(--crtr-space-1) * -1) calc(var(--crtr-space-2) * -1);
605
+ cursor: pointer;
606
+ }
607
+
608
+ [part="column-toggle"]:hover {
609
+ background: var(--crtr-color-surface-hover);
610
+ }
611
+
612
+ [part="column-toggle"][aria-pressed="true"] {
613
+ color: var(--crtr-color-text);
614
+ background: color-mix(in srgb, var(--crtr-color-accent) 12%, transparent);
615
+ border-color: color-mix(in srgb, var(--crtr-color-accent) 40%, transparent);
616
+ }
617
+
618
+ [part="column-toggle"]:focus-visible,
619
+ [part="comment-trigger"]:focus-visible,
620
+ [part="row-control"]:focus-visible,
621
+ [part="select-all"]:focus-visible {
622
+ outline: 2px solid var(--crtr-color-focus);
623
+ outline-offset: 1px;
624
+ }
625
+
626
+ [part="row"] {
627
+ border-bottom: 1px solid color-mix(in srgb, var(--crtr-color-border) 60%, transparent);
628
+ }
629
+
630
+ [part="row"]:last-child {
631
+ border-bottom: none;
632
+ }
633
+
634
+ [part="row"]:hover,
635
+ [part="row"][data-active="true"] {
636
+ background: var(--crtr-color-surface-hover);
637
+ }
638
+
639
+ [part="row"][data-state="selected"],
640
+ [part="row"][data-state="selected"]:hover {
641
+ background: color-mix(in srgb, var(--crtr-color-accent) 8%, transparent);
642
+ }
643
+
644
+ [part="row"]:focus-visible {
645
+ outline: 2px solid var(--crtr-color-focus);
646
+ outline-offset: -2px;
647
+ }
648
+
649
+ td {
650
+ padding: var(--crtr-space-2) var(--crtr-space-3);
651
+ vertical-align: middle;
652
+ }
653
+
654
+ td[data-align="right"] {
655
+ text-align: right;
656
+ font-variant-numeric: tabular-nums;
657
+ }
658
+
659
+ td[data-mono="true"] {
660
+ font-family: var(--crtr-font-mono);
661
+ font-size: 0.8125em;
662
+ }
663
+
664
+ [data-column-selected="true"] {
665
+ background: color-mix(in srgb, var(--crtr-color-accent) 6%, transparent);
666
+ }
667
+
668
+ [part="select-cell"],
669
+ [part="select-head"] {
670
+ width: 1px;
671
+ padding-right: 0;
672
+ }
673
+
674
+ [part="comment-cell"],
675
+ [part="comment-head"] {
676
+ width: 1px;
677
+ text-align: right;
678
+ padding-left: 0;
679
+ }
680
+
681
+ [part="row-control"],
682
+ [part="select-all"] {
683
+ accent-color: var(--crtr-color-accent);
684
+ margin: 0;
685
+ cursor: pointer;
686
+ }
687
+
688
+ [part="comment-trigger"] {
689
+ display: inline-flex;
690
+ align-items: center;
691
+ justify-content: center;
692
+ width: 1.5rem;
693
+ height: 1.5rem;
694
+ padding: 0;
695
+ color: var(--crtr-color-text-muted);
696
+ background: transparent;
697
+ border: none;
698
+ border-radius: var(--crtr-radius-small);
699
+ cursor: pointer;
700
+ opacity: 0;
701
+ transition: opacity 120ms ease;
702
+ }
703
+
704
+ [part="comment-trigger"] svg {
705
+ width: 0.875rem;
706
+ height: 0.875rem;
707
+ }
708
+
709
+ [part="comment-trigger"][data-has-comment="true"] {
710
+ color: var(--crtr-color-accent);
711
+ opacity: 1;
712
+ }
713
+
714
+ [part="comment-trigger"]:hover {
715
+ background: var(--crtr-color-surface-hover);
716
+ }
717
+
718
+ tr:hover [part="comment-trigger"],
719
+ tr:focus-within [part="comment-trigger"],
720
+ tr[data-active="true"] [part="comment-trigger"],
721
+ [part="comment-trigger"]:focus-visible,
722
+ [part="comment-trigger"][data-open="true"] {
723
+ opacity: 1;
724
+ }
725
+
726
+ [part="comment-editor"] {
727
+ position: absolute;
728
+ z-index: 2;
729
+ width: min(20rem, calc(100% - var(--crtr-space-4)));
730
+ display: grid;
731
+ gap: var(--crtr-space-2);
732
+ padding: var(--crtr-space-3);
733
+ background: var(--crtr-color-surface);
734
+ border: 1px solid var(--crtr-color-border);
735
+ border-radius: var(--crtr-radius-medium);
736
+ box-shadow: var(--crtr-shadow);
737
+ }
738
+
739
+ [part="comment-editor"][hidden] {
740
+ display: none;
741
+ }
742
+
743
+ [part="comment-target"] {
744
+ margin: 0;
745
+ font-family: var(--crtr-font-mono);
746
+ font-size: 0.75em;
747
+ text-transform: uppercase;
748
+ letter-spacing: 0.06em;
749
+ color: var(--crtr-color-text-muted);
750
+ }
751
+
752
+ [part="comment-input"] {
753
+ font: inherit;
754
+ color: var(--crtr-color-text);
755
+ background: var(--crtr-color-background);
756
+ border: 1px solid var(--crtr-color-border);
757
+ border-radius: var(--crtr-radius-small);
758
+ padding: var(--crtr-space-2);
759
+ min-height: 4rem;
760
+ resize: vertical;
761
+ }
762
+
763
+ [part="comment-input"]:focus-visible {
764
+ outline: 2px solid var(--crtr-color-focus);
765
+ outline-offset: -1px;
766
+ }
767
+
768
+ [part="comment-actions"] {
769
+ display: flex;
770
+ align-items: center;
771
+ justify-content: space-between;
772
+ gap: var(--crtr-space-2);
773
+ }
774
+
775
+ [part="comment-hint"] {
776
+ font-family: var(--crtr-font-mono);
777
+ font-size: 0.75em;
778
+ text-transform: uppercase;
779
+ letter-spacing: 0.06em;
780
+ color: var(--crtr-color-text-muted);
781
+ }
782
+
783
+ [part="comment-cancel"],
784
+ [part="comment-save"] {
785
+ font: inherit;
786
+ font-size: 0.875em;
787
+ padding: var(--crtr-space-1) var(--crtr-space-2);
788
+ border-radius: var(--crtr-radius-small);
789
+ border: 1px solid var(--crtr-color-border);
790
+ cursor: pointer;
791
+ }
792
+
793
+ [part="comment-cancel"] {
794
+ color: var(--crtr-color-text-muted);
795
+ background: transparent;
796
+ }
797
+
798
+ [part="comment-save"] {
799
+ color: var(--crtr-color-accent-contrast);
800
+ background: var(--crtr-color-accent);
801
+ border-color: var(--crtr-color-accent);
802
+ }
803
+
804
+ [part="comment-cancel"]:focus-visible,
805
+ [part="comment-save"]:focus-visible {
806
+ outline: 2px solid var(--crtr-color-focus);
807
+ outline-offset: 1px;
808
+ }
809
+
810
+ [part="status"],
811
+ [part="unavailable"] {
812
+ padding: var(--crtr-space-3);
813
+ color: var(--crtr-color-text-muted);
814
+ background: var(--crtr-color-surface);
815
+ border: 1px solid var(--crtr-color-border);
816
+ border-radius: var(--crtr-radius-medium);
817
+ box-shadow: var(--crtr-shadow);
818
+ }
819
+
820
+ [part="reason"] {
821
+ color: var(--crtr-color-text);
822
+ font-family: var(--crtr-font-mono);
823
+ }
824
+
825
+ [part="empty"] {
826
+ padding: var(--crtr-space-3);
827
+ color: var(--crtr-color-text-muted);
828
+ text-align: center;
829
+ }
830
+ `;function te(o){return o==null?"":typeof o=="string"?o:String(o)}function ot(o){return typeof o=="object"&&o!==null&&!Array.isArray(o)}function ee(o){let t=Array.isArray(o)?o:ot(o)&&Array.isArray(o.rows)?o.rows:void 0;if(t===void 0)return{status:"invalid",reason:"source data is not a list of rows"};let e=[];for(let r=0;r<t.length;r+=1){let n=t[r];if(!ot(n)||typeof n.id!="string"||n.id===""||!ot(n.cells))return{status:"invalid",reason:`source row #${r} is not { id, cells }`};let i={};for(let[a,s]of Object.entries(n.cells))if(s!==void 0){if(s!==null&&typeof s!="string"&&typeof s!="number"&&typeof s!="boolean")return{status:"invalid",reason:`source row "${n.id}" cell "${a}" is not a string, number, boolean or null`};i[a]=s}e.push({id:n.id,cells:i})}return{status:"ok",rows:e}}function re(){let o=document.createElementNS("http://www.w3.org/2000/svg","svg");o.setAttribute("viewBox","0 0 16 16"),o.setAttribute("aria-hidden","true"),o.setAttribute("focusable","false");let t=document.createElementNS("http://www.w3.org/2000/svg","path");return t.setAttribute("d",Zt),t.setAttribute("fill","none"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width","1.25"),t.setAttribute("stroke-linejoin","round"),o.append(t),o}function ne(o){return o instanceof HTMLElement?o.closest('input[type="text"], textarea, [contenteditable="true"]')!==null:!1}var it=class extends HTMLElement{#n;#d;#c;#t=[];#r=[];#e=[];#i=[];#l=null;#s=null;#a;#u=!1;#o;#p;#f;#m;#h;#v;#x=new Map;#E=new Map;#g;constructor(){super(),this.#n=this.attachShadow({mode:"open"})}connectedCallback(){this.#u=!0;let t=C(this);if(t.status!=="ok"){this.#L(t.reason);return}let e=t.config;if(!Array.isArray(e.columns)||e.columns.length===0){this.#L("table config has no columns");return}if(e.rows!==void 0&&e.source!==void 0){this.#L("table rows and source are mutually exclusive");return}if(this.#c=e,this.#d=$(this),e.source!==void 0){this.#_("Loading table data\u2026"),this.#w(e.source);return}if(!Array.isArray(e.rows)){this.#L("table config has neither rows nor source");return}this.#t=e.rows,this.#j()}disconnectedCallback(){this.#u=!1}async#w(t){let e=await P(t);if(!this.#u)return;if(e.status!=="ok"){this.#L(`table source "${t}" is ${e.status}: ${e.reason}`);return}let r=ee(e.data);if(r.status!=="ok"){this.#L(`table source "${t}": ${r.reason}`);return}this.#t=r.rows,this.#j()}get#y(){return this.#c?.rowSelect??"none"}get#C(){return this.#c?.columnSelect??"none"}#A(){return{selectedRowIds:[...this.#r],selectedColumnIds:[...this.#e],comments:[...this.#i]}}#b(){this.#$(),this.#d!==void 0&&R(this.#d,this.#A())}#k(t){return this.#t.map(e=>e.id).filter(e=>t.includes(e))}#T(t){return(this.#c?.columns??[]).map(e=>e.id).filter(e=>t.includes(e))}#H(t,e){let r=this.#y;r!=="none"&&(r==="single"?this.#r=e?[t]:[]:this.#r=this.#k(e?[...this.#r,t]:this.#r.filter(n=>n!==t)),this.#b())}#N(t){if(this.#y==="single"){this.#H(t,!0);return}this.#H(t,!this.#r.includes(t))}#M(t,e){let r=this.#C;r!=="none"&&(r==="single"?this.#e=e?[t]:[]:this.#e=this.#T(e?[...this.#e,t]:this.#e.filter(n=>n!==t)),this.#b())}#B(t){this.#M(t,!this.#e.includes(t))}#P(t){this.#y==="multi"&&(this.#r=t?this.#t.map(e=>e.id):[],this.#b())}#z(){this.#n.replaceChildren(),this.#x.clear(),this.#E.clear(),this.#o=void 0,this.#p=void 0,this.#a=void 0,this.#s=null,this.#v=void 0,this.#g=void 0;let t=document.createElement("style");t.textContent=Qt,this.#n.append(t)}#L(t){this.#z();let e=document.createElement("div");e.part.add("unavailable"),e.setAttribute("role","status");let r=document.createElement("span");r.part.add("reason"),r.textContent=t,e.append("Table unavailable: ",r),this.#n.append(e)}#_(t){this.#z();let e=document.createElement("div");e.part.add("status"),e.setAttribute("role","status"),e.textContent=t,this.#n.append(e)}#j(){let t=this.#c;if(t===void 0)return;this.#z();let e=document.createElement("div");e.part.add("container"),e.tabIndex=0,e.addEventListener("keydown",n=>this.#V(n)),e.addEventListener("focus",()=>{this.#l===null&&this.#t.length>0&&(this.#l=this.#t[0].id,this.#$())}),this.#o=e;let r=document.createElement("table");if(r.part.add("table"),t.caption!==void 0&&t.caption!==""){let n=document.createElement("caption");n.part.add("caption"),n.textContent=t.caption,r.append(n)}if(r.append(this.#F(t),this.#K(t)),e.append(r),this.#t.length===0){let n=document.createElement("div");n.part.add("empty"),n.textContent="No rows.",e.append(n)}e.append(this.#q()),this.#n.append(e),this.#$()}#F(t){let e=document.createElement("thead"),r=document.createElement("tr");if(r.part.add("header-row"),this.#y!=="none"){let i=document.createElement("th");if(i.part.add("select-head"),i.setAttribute("scope","col"),this.#y==="multi"){let a=document.createElement("input");a.type="checkbox",a.part.add("select-all"),a.setAttribute("aria-label","Select every row"),a.addEventListener("change",()=>this.#P(a.checked)),this.#v=a,i.append(a)}r.append(i)}for(let i of t.columns){let a=document.createElement("th");a.part.add("column-header"),a.setAttribute("scope","col"),a.dataset.columnHeader=i.id,i.align==="right"&&(a.dataset.align="right");let s=document.createElement("span");s.part.add("header-cell-inner");let c;if(this.#C==="none"){let u=document.createElement("span");u.textContent=i.label,s.append(u)}else c=document.createElement("button"),c.type="button",c.part.add("column-toggle"),c.dataset.columnToggle=i.id,c.setAttribute("aria-pressed","false"),c.setAttribute("aria-label",`Select the ${i.label} column`),c.textContent=i.label,c.addEventListener("click",()=>this.#B(i.id)),s.append(c);let d=this.#D({kind:"column",columnId:i.id},`the ${i.label} column`);s.append(d),a.append(s),r.append(a),this.#E.set(i.id,{toggle:c,comment:d,cells:[],head:a})}let n=document.createElement("th");return n.part.add("comment-head"),n.setAttribute("scope","col"),this.#g=this.#D({kind:"whole"},"this table"),n.append(this.#g),r.append(n),e.append(r),e}#K(t){let e=document.createElement("tbody");for(let r of this.#t){let n=document.createElement("tr");n.part.add("row"),n.dataset.rowId=r.id,n.tabIndex=-1,n.addEventListener("mouseenter",()=>this.#R(r.id)),n.addEventListener("focusin",()=>this.#R(r.id));let i;if(this.#y!=="none"){let c=document.createElement("td");c.part.add("select-cell");let d=document.createElement("input");d.type=this.#y==="single"?"radio":"checkbox",d.part.add("row-control"),this.#y==="single"&&(d.name=`${this.#d??"crtr-table"}-row`),d.value=r.id,d.setAttribute("aria-label",`Select row ${r.id}`),d.addEventListener("change",()=>this.#H(r.id,d.checked)),i=d,c.append(d),n.append(c)}for(let c of t.columns){let d=document.createElement("td");d.part.add("cell"),d.dataset.columnId=c.id,c.align==="right"&&(d.dataset.align="right"),c.mono===!0&&(d.dataset.mono="true"),d.textContent=te(r.cells[c.id]),n.append(d),this.#E.get(c.id)?.cells.push(d)}let a=document.createElement("td");a.part.add("comment-cell");let s=this.#D({kind:"row",rowId:r.id},`row ${r.id}`);a.append(s),n.append(a),e.append(n),this.#x.set(r.id,{tr:n,...i===void 0?{}:{control:i},comment:s})}return e}#D(t,e){let r=document.createElement("button");return r.type="button",r.part.add("comment-trigger"),r.setAttribute("aria-label",`Comment on ${e}`),r.dataset.commentTarget=e,r.append(re()),r.addEventListener("click",()=>this.#I(t,r)),r}#q(){let t=document.createElement("div");t.part.add("comment-editor"),t.hidden=!0,t.setAttribute("role","dialog"),t.setAttribute("aria-label","Comment");let e=document.createElement("p");e.part.add("comment-target"),t.append(e);let r=document.createElement("textarea");r.part.add("comment-input"),r.placeholder="What should the agent know about this?",r.addEventListener("keydown",d=>{d.key==="Enter"&&(d.metaKey||d.ctrlKey)?(d.preventDefault(),this.#G()):d.key==="Escape"&&(d.preventDefault(),this.#S())}),t.append(r);let n=document.createElement("div");n.part.add("comment-actions");let i=document.createElement("span");i.part.add("comment-hint"),n.append(i);let a=document.createElement("span"),s=document.createElement("button");s.type="button",s.part.add("comment-cancel"),s.textContent="Cancel",s.addEventListener("click",()=>this.#S());let c=document.createElement("button");return c.type="button",c.part.add("comment-save"),c.textContent="Save",c.addEventListener("click",()=>this.#G()),a.append(s," ",c),n.append(a),t.append(n),this.#p=t,this.#f=e,this.#m=r,this.#h=i,t}#I(t,e){let r=this.#p,n=this.#o;if(r===void 0||n===void 0)return;this.#s=t,this.#a=e;let i=x(this.#i,t);this.#m!==void 0&&(this.#m.value=i?.text??""),this.#f!==void 0&&(this.#f.textContent=`Comment on ${e.dataset.commentTarget??Z(t)}`),this.#h!==void 0&&(this.#h.textContent=i===void 0?"\u2318\u21B5 to save":"empty to delete");let a=n.getBoundingClientRect(),s=e.getBoundingClientRect();r.hidden=!1,r.style.top=`${Math.max(0,s.bottom-a.top+4)}px`,r.style.right=`${Math.max(0,a.right-s.right)}px`,this.#$(),this.#m?.focus()}#S(){let t=this.#a;this.#s=null,this.#a=void 0,this.#p!==void 0&&(this.#p.hidden=!0),this.#$(),t?.focus()}#G(){let t=this.#s;t!==null&&(this.#i=H(this.#i,t,this.#m?.value??""),this.#S(),this.#b())}#R(t){this.#l!==t&&(this.#l=t,this.#$())}#W(t){let e=this.#x.get(t);(e?.control??e?.tr)?.focus()}#V(t){if(t.metaKey||t.ctrlKey||t.altKey)return;let e=t.composedPath()[0]??t.target;if(ne(e))return;let r=t.key.toLowerCase();if(r!=="j"&&r!=="k"&&r!=="x"&&r!=="c")return;let n=e instanceof HTMLElement?e.closest("[data-column-header]")?.dataset.columnHeader:void 0;if(n!==void 0&&(r==="x"||r==="c")){if(t.preventDefault(),r==="x")this.#B(n);else{let c=this.#E.get(n);c!==void 0&&this.#I({kind:"column",columnId:n},c.comment)}return}let i=this.#t.map(c=>c.id);if(i.length===0)return;let a=this.#l??this.#r[this.#r.length-1]??i[0];if(r==="j"||r==="k"){t.preventDefault();let c=Math.max(0,i.indexOf(a)),d=i[(c+(r==="j"?1:-1)+i.length)%i.length];this.#R(d),this.#W(d);return}if(t.preventDefault(),r==="x"){this.#N(a);return}let s=this.#x.get(a);s!==void 0&&this.#I({kind:"row",rowId:a},s.comment)}#O(t,e){let r=x(this.#i,e),n=t.dataset.commentTarget??Z(e);t.dataset.hasComment=r===void 0?"false":"true",t.setAttribute("aria-label",r===void 0?`Comment on ${n}`:`Edit comment on ${n}`),t.title=r?.text??"",t.querySelector("path")?.setAttribute("fill",r===void 0?"none":"currentColor"),t.dataset.open=this.#U(e)?"true":"false"}#U(t){let e=this.#s;return e===null||e.kind!==t.kind?!1:e.kind==="row"&&t.kind==="row"?e.rowId===t.rowId:e.kind==="column"&&t.kind==="column"?e.columnId===t.columnId:e.kind==="whole"}#$(){for(let[t,e]of this.#x){let r=this.#r.includes(t);r?e.tr.dataset.state="selected":delete e.tr.dataset.state,e.tr.dataset.active=this.#l===t?"true":"false",e.tr.setAttribute("aria-selected",r?"true":"false"),e.control!==void 0&&(e.control.checked=r),this.#O(e.comment,{kind:"row",rowId:t})}for(let[t,e]of this.#E){let r=this.#e.includes(t);e.toggle?.setAttribute("aria-pressed",r?"true":"false"),e.head.dataset.columnSelected=r?"true":"false";for(let n of e.cells)n.dataset.columnSelected=r?"true":"false";this.#O(e.comment,{kind:"column",columnId:t})}if(this.#g!==void 0&&this.#O(this.#g,{kind:"whole"}),this.#v!==void 0){let t=this.#t.length>0&&this.#r.length===this.#t.length;this.#v.checked=t,this.#v.indeterminate=this.#r.length>0&&!t}}};b("crtr-table",it);var oe=`
831
+ :host {
832
+ display: block;
833
+ /* Column count answers the element's own width, not the viewport: a slot can sit in
834
+ a narrow rail on a wide screen. */
835
+ container-type: inline-size;
836
+ }
837
+
838
+ [part~="container"] {
839
+ display: flex;
840
+ flex-direction: column;
841
+ gap: var(--crtr-space-1);
842
+ }
843
+
844
+ [part~="grid"] {
845
+ display: grid;
846
+ grid-template-columns: minmax(0, 1fr);
847
+ gap: var(--crtr-space-3);
848
+ }
849
+
850
+ @container (min-width: 30rem) {
851
+ [part~="grid"] {
852
+ grid-template-columns: repeat(2, minmax(0, 1fr));
853
+ }
854
+
855
+ [part~="grid"][data-columns="3"] {
856
+ grid-template-columns: repeat(3, minmax(0, 1fr));
857
+ }
858
+ }
859
+
860
+ [part~="card"] {
861
+ display: flex;
862
+ flex-direction: column;
863
+ gap: var(--crtr-space-2);
864
+ padding: var(--crtr-space-3);
865
+ color: var(--crtr-color-text);
866
+ background: var(--crtr-color-surface);
867
+ border: 1px solid color-mix(in srgb, var(--crtr-color-border) 60%, transparent);
868
+ border-radius: var(--crtr-radius-medium);
869
+ transition: background-color 120ms ease, border-color 120ms ease;
870
+ }
871
+
872
+ [part~="card"]:hover,
873
+ [part~="card"][part~="active"] {
874
+ background: var(--crtr-color-surface-hover);
875
+ border-color: var(--crtr-color-border);
876
+ }
877
+
878
+ [part~="card"][part~="selected"] {
879
+ background: color-mix(in srgb, var(--crtr-color-accent) 7%, transparent);
880
+ border-color: color-mix(in srgb, var(--crtr-color-accent) 40%, transparent);
881
+ }
882
+
883
+ [part~="card"][part~="selected"]:hover,
884
+ [part~="card"][part~="selected"][part~="active"] {
885
+ background: color-mix(in srgb, var(--crtr-color-accent) 12%, transparent);
886
+ }
887
+
888
+ [part~="card-header"] {
889
+ display: flex;
890
+ align-items: flex-start;
891
+ gap: var(--crtr-space-2);
892
+ }
893
+
894
+ /* The label carries the click target, so the whole heading toggles the native control
895
+ the way the kit's Label does \u2014 and the comment button stays its own control. */
896
+ [part~="card-label"] {
897
+ display: flex;
898
+ flex: 1;
899
+ align-items: flex-start;
900
+ gap: var(--crtr-space-2);
901
+ min-width: 0;
902
+ font: inherit;
903
+ cursor: pointer;
904
+ }
905
+
906
+ [part~="control"] {
907
+ flex: none;
908
+ margin: 0;
909
+ margin-top: 0.2em;
910
+ accent-color: var(--crtr-color-accent);
911
+ }
912
+
913
+ [part~="control"]:focus-visible {
914
+ outline: 2px solid var(--crtr-color-focus);
915
+ outline-offset: 2px;
916
+ }
917
+
918
+ [part~="card-heading"] {
919
+ display: grid;
920
+ flex: 1;
921
+ gap: calc(var(--crtr-space-1) / 2);
922
+ min-width: 0;
923
+ }
924
+
925
+ [part~="card-title"] {
926
+ font-weight: 500;
927
+ line-height: 1.35;
928
+ }
929
+
930
+ [part~="card-subtitle"] {
931
+ color: var(--crtr-color-text-muted);
932
+ font-size: calc(var(--crtr-font-size) * 0.85);
933
+ }
934
+
935
+ [part~="card-body"] {
936
+ margin: 0;
937
+ color: var(--crtr-color-text-muted);
938
+ font-size: calc(var(--crtr-font-size) * 0.85);
939
+ line-height: 1.6;
940
+ }
941
+
942
+ [part~="tag"] {
943
+ align-self: flex-start;
944
+ padding: 0 var(--crtr-space-1);
945
+ color: var(--crtr-color-text-muted);
946
+ font-size: calc(var(--crtr-font-size) * 0.78);
947
+ line-height: 1.7;
948
+ border: 1px solid var(--crtr-color-border);
949
+ border-radius: var(--crtr-radius-small);
950
+ }
951
+
952
+ [part~="card"][part~="selected"] [part~="tag"] {
953
+ color: var(--crtr-color-accent);
954
+ background: color-mix(in srgb, var(--crtr-color-accent) 10%, transparent);
955
+ border-color: color-mix(in srgb, var(--crtr-color-accent) 40%, transparent);
956
+ }
957
+
958
+ /* The affordance is quiet until you reach for it, and stays visible once a note lives
959
+ there \u2014 that presence is the whole "there is a comment here" signal. */
960
+ [part~="comment-button"] {
961
+ flex: none;
962
+ display: flex;
963
+ align-items: center;
964
+ justify-content: center;
965
+ width: calc(var(--crtr-font-size) * 1.6);
966
+ height: calc(var(--crtr-font-size) * 1.6);
967
+ padding: 0;
968
+ color: var(--crtr-color-text-muted);
969
+ background: none;
970
+ border: none;
971
+ border-radius: var(--crtr-radius-small);
972
+ cursor: pointer;
973
+ opacity: 0;
974
+ transition: opacity 120ms ease, color 120ms ease, background-color 120ms ease;
975
+ }
976
+
977
+ [part~="comment-button"] svg {
978
+ width: calc(var(--crtr-font-size) * 0.95);
979
+ height: calc(var(--crtr-font-size) * 0.95);
980
+ /* The glyph is never the event target: a repaint that swaps it mid-press would
981
+ otherwise leave mousedown and mouseup on different nodes and eat the click. */
982
+ pointer-events: none;
983
+ }
984
+
985
+ [part~="comment-button"]:hover {
986
+ color: var(--crtr-color-text);
987
+ background: var(--crtr-color-surface-hover);
988
+ }
989
+
990
+ [part~="comment-button"][part~="has-comment"] {
991
+ color: var(--crtr-color-accent);
992
+ }
993
+
994
+ [part~="card"]:hover [part~="comment-button"],
995
+ [part~="card"]:focus-within [part~="comment-button"],
996
+ [part~="comment-button"]:focus-visible,
997
+ [part~="comment-button"][part~="has-comment"] {
998
+ opacity: 1;
999
+ }
1000
+
1001
+ [part~="comment-editor"] {
1002
+ display: grid;
1003
+ gap: var(--crtr-space-2);
1004
+ width: 100%;
1005
+ padding: var(--crtr-space-2);
1006
+ text-align: left;
1007
+ background: var(--crtr-color-background);
1008
+ border: 1px solid var(--crtr-color-border);
1009
+ border-radius: var(--crtr-radius-small);
1010
+ cursor: auto;
1011
+ }
1012
+
1013
+ [part~="comment-subject"],
1014
+ [part~="comment-hint"] {
1015
+ color: var(--crtr-color-text-muted);
1016
+ font-family: var(--crtr-font-mono);
1017
+ font-size: calc(var(--crtr-font-size) * 0.72);
1018
+ letter-spacing: 0.06em;
1019
+ text-transform: uppercase;
1020
+ }
1021
+
1022
+ [part~="comment-input"] {
1023
+ box-sizing: border-box;
1024
+ width: 100%;
1025
+ min-height: 4.5em;
1026
+ padding: var(--crtr-space-1) var(--crtr-space-2);
1027
+ color: var(--crtr-color-text);
1028
+ font: inherit;
1029
+ background: var(--crtr-color-background);
1030
+ border: 1px solid var(--crtr-color-border);
1031
+ border-radius: var(--crtr-radius-small);
1032
+ resize: vertical;
1033
+ }
1034
+
1035
+ [part~="comment-input"]:focus-visible {
1036
+ outline: 2px solid var(--crtr-color-focus);
1037
+ outline-offset: 1px;
1038
+ }
1039
+
1040
+ [part~="comment-actions"] {
1041
+ display: flex;
1042
+ align-items: center;
1043
+ justify-content: space-between;
1044
+ gap: var(--crtr-space-2);
1045
+ }
1046
+
1047
+ [part~="comment-buttons"] {
1048
+ display: flex;
1049
+ gap: var(--crtr-space-1);
1050
+ }
1051
+
1052
+ [part~="comment-cancel"],
1053
+ [part~="comment-save"] {
1054
+ padding: var(--crtr-space-1) var(--crtr-space-2);
1055
+ font: inherit;
1056
+ font-size: calc(var(--crtr-font-size) * 0.9);
1057
+ border-radius: var(--crtr-radius-small);
1058
+ cursor: pointer;
1059
+ }
1060
+
1061
+ [part~="comment-cancel"] {
1062
+ color: var(--crtr-color-text-muted);
1063
+ background: none;
1064
+ border: 1px solid transparent;
1065
+ }
1066
+
1067
+ [part~="comment-cancel"]:hover {
1068
+ color: var(--crtr-color-text);
1069
+ background: var(--crtr-color-surface-hover);
1070
+ }
1071
+
1072
+ [part~="comment-save"] {
1073
+ color: var(--crtr-color-accent-contrast);
1074
+ background: var(--crtr-color-accent);
1075
+ border: 1px solid var(--crtr-color-accent);
1076
+ }
1077
+
1078
+ [part~="unavailable"],
1079
+ [part~="empty"],
1080
+ [part~="loading"] {
1081
+ padding: var(--crtr-space-3);
1082
+ color: var(--crtr-color-text-muted);
1083
+ background: var(--crtr-color-surface);
1084
+ border: 1px solid var(--crtr-color-border);
1085
+ border-radius: var(--crtr-radius-medium);
1086
+ box-shadow: var(--crtr-shadow);
1087
+ }
1088
+
1089
+ [part~="kind"] {
1090
+ color: var(--crtr-color-text);
1091
+ font-family: var(--crtr-font-mono);
1092
+ }
1093
+
1094
+ [part~="reason"] {
1095
+ display: block;
1096
+ margin-top: var(--crtr-space-1);
1097
+ font-size: calc(var(--crtr-font-size) * 0.85);
1098
+ }
1099
+ `,ie=new Set(["id","title","subtitle","body","tag"]);function ae(o){if(o===null||typeof o!="object"||Array.isArray(o))return null;let t=o;if(typeof t.id!="string"||t.id===""||typeof t.title!="string"||t.title==="")return null;for(let e of["subtitle","body","tag"])if(t[e]!==void 0&&typeof t[e]!="string")return null;for(let e of Object.keys(t))if(!ie.has(e))return null;return{id:t.id,title:t.title,subtitle:t.subtitle,body:t.body,tag:t.tag}}function Lt(o){if(!Array.isArray(o))return null;let t=[],e=new Set;for(let r of o){let n=ae(r);if(n===null||e.has(n.id))return null;e.add(n.id),t.push(n)}return t}var se=new Set(["cards","source","mode","columns"]);function ce(o){for(let i of Object.keys(o))if(!se.has(i))return{status:"invalid",reason:`unknown config property "${i}"`};let t=o.mode;if(t!=="single"&&t!=="multi")return{status:"invalid",reason:'mode must be "single" or "multi"'};let e=o.source;if(e!==void 0&&typeof e!="string")return{status:"invalid",reason:"source must be a string"};let r=o.columns;if(r!==void 0&&r!==2&&r!==3)return{status:"invalid",reason:"columns must be 2 or 3"};let n;if(o.cards!==void 0){if(e!==void 0)return{status:"invalid",reason:"cards and source are mutually exclusive"};let i=Lt(o.cards);if(i===null)return{status:"invalid",reason:"cards must be a list of uniquely identified cards"};n=i}return{status:"ok",config:{cards:n,source:e,mode:t,columns:r}}}function de(o){return o instanceof HTMLTextAreaElement||o instanceof HTMLElement&&o.isContentEditable?!0:o instanceof HTMLInputElement?o.type!=="checkbox"&&o.type!=="radio":!1}var at="http://www.w3.org/2000/svg";function le(o){let t=document.createElementNS(at,"svg");t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width","2"),t.setAttribute("stroke-linecap","round"),t.setAttribute("stroke-linejoin","round"),t.setAttribute("aria-hidden","true");let e=document.createElementNS(at,"path");e.setAttribute("d","M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"),t.append(e);let r=o?[["7","9","17","9"],["7","13","13","13"]]:[["12","7","12","13"],["9","10","15","10"]];for(let[n,i,a,s]of r){let c=document.createElementNS(at,"line");c.setAttribute("x1",n??"0"),c.setAttribute("y1",i??"0"),c.setAttribute("x2",a??"0"),c.setAttribute("y2",s??"0"),t.append(c)}return t}var Mt=0,st=class extends HTMLElement{#n=document.createElement("div");#d;#c=null;#t=[];#r;#e=[];#i=[];#l=null;#s=new Map;#a=null;#u=null;#o=0;constructor(){super(),Mt+=1,this.#d=`crtr-cards-${Mt}`;let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=oe,this.#n.part.add("container"),this.#n.addEventListener("keydown",r=>this.#y(r)),t.append(e,this.#n)}connectedCallback(){this.#o+=1;let t=this.#o,e=C(this);if(e.status!=="ok"){this.#f(e.reason);return}let r=ce(e.config);if(r.status!=="ok"){this.#f(r.reason);return}this.#c=r.config,this.#r=$(this);let n=r.config.source;if(n===void 0){this.#t=r.config.cards??[],this.#h();return}this.#m("loading","Loading cards\u2026"),this.#p(n,t)}disconnectedCallback(){this.#o+=1}async#p(t,e){let r=await P(t);if(e!==this.#o)return;if(r.status!=="ok"){this.#f(r.reason);return}let n=Lt(r.data);if(n===null){this.#f(`source "${t}" is not a list of cards`);return}this.#t=n,this.#h()}#f(t){this.#s.clear(),this.#a=null,this.#u=null;let e=document.createElement("div");e.part.add("unavailable"),e.setAttribute("role","status");let r=document.createElement("span");r.part.add("kind"),r.textContent="cards";let n=document.createElement("span");n.part.add("reason"),n.textContent=t,e.append("Component unavailable: ",r,n),this.#n.replaceChildren(e)}#m(t,e){let r=document.createElement("div");r.part.add(t),r.setAttribute("role","status"),r.textContent=e,this.#n.replaceChildren(r)}#h(){let t=this.#c;if(t===null)return;this.#s.clear(),this.#a=null,this.#u=null;let e=new Set(this.#t.map(n=>n.id));if(this.#e=this.#e.filter(n=>e.has(n)),this.#i=this.#i.filter(n=>n.anchor.kind!=="card"||e.has(n.anchor.cardId)),this.#t.length===0){this.#m("empty","No cards to choose from.");return}let r=document.createElement("div");r.part.add("grid"),t.columns===3&&(r.dataset.columns="3"),r.append(...this.#t.map(n=>this.#v(n,t.mode,this.#d))),this.#n.replaceChildren(r),this.#x()}#v(t,e,r){let n=document.createElement("div");n.part.add("card"),n.dataset.cardId=t.id;let i=document.createElement("div");i.part.add("card-header");let a=document.createElement("label");a.part.add("card-label");let s=document.createElement("input");s.part.add("control"),s.type=e==="single"?"radio":"checkbox",s.name=r,s.value=t.id,s.addEventListener("change",()=>this.#w(t.id,s.checked)),s.addEventListener("focus",()=>this.#g(t.id,!1));let c=document.createElement("span");c.part.add("card-heading");let d=document.createElement("span");if(d.part.add("card-title"),d.textContent=t.title,c.append(d),t.subtitle!==void 0&&t.subtitle!==""){let m=document.createElement("span");m.part.add("card-subtitle"),m.textContent=t.subtitle,c.append(m)}let u=document.createElement("button");if(u.type="button",u.part.add("comment-button"),u.addEventListener("click",m=>{m.stopPropagation(),this.#g(t.id,!1),this.#C({kind:"card",cardId:t.id},t.title,n,null)}),a.append(s,c),i.append(a,u),n.append(i),t.body!==void 0&&t.body!==""){let m=document.createElement("p");m.part.add("card-body"),m.textContent=t.body,n.append(m)}let g=null;return t.tag!==void 0&&t.tag!==""&&(g=document.createElement("span"),g.part.add("tag"),g.textContent=t.tag,n.append(g)),n.addEventListener("mouseenter",()=>this.#g(t.id,!1)),n.addEventListener("mouseleave",()=>{this.#l===t.id&&this.#g(null,!1)}),n.addEventListener("focusin",()=>this.#g(t.id,!1)),this.#s.set(t.id,{root:n,control:s,commentButton:u,tag:g}),n}#x(){let t=this.#c?.mode??"multi",e=t==="single"?this.#e[0]??this.#t[0]?.id:void 0;for(let r of this.#t){let n=this.#s.get(r.id);if(n===void 0)continue;let i=this.#e.includes(r.id);n.root.part.toggle("selected",i),n.root.part.toggle("active",this.#l===r.id),n.control.checked=i,n.control.tabIndex=t==="single"&&r.id!==e?-1:0;let a=x(this.#i,{kind:"card",cardId:r.id});this.#E(n.commentButton,a,r.title)}}#E(t,e,r){let n=e!==void 0,i=t.part.contains("has-comment")!==n;t.part.toggle("has-comment",n),t.setAttribute("aria-label",n?`Edit comment on ${r}`:`Comment on ${r}`),n?t.title=e.text:t.removeAttribute("title"),(i||t.childElementCount===0)&&t.replaceChildren(le(n))}#g(t,e){this.#l===t&&!e||(this.#l=t,this.#x(),e&&t!==null&&this.#s.get(t)?.control.focus())}#w(t,e){if(this.#c!==null){if(this.#c.mode==="single")this.#e=[t];else{let r=e?[...this.#e,t]:this.#e.filter(n=>n!==t);this.#e=this.#t.map(n=>n.id).filter(n=>r.includes(n))}this.#x(),this.#H()}}#y(t){if(t.metaKey||t.ctrlKey||t.altKey||de(t.target))return;let e=this.#t.map(i=>i.id);if(e.length===0)return;let r=t.key.toLowerCase(),n=this.#l??this.#e[this.#e.length-1]??e[0]??"";if(r==="j"||r==="k"){t.preventDefault();let i=Math.max(0,e.indexOf(n)),s=e[(i+(r==="j"?1:-1)+e.length)%e.length];s!==void 0&&this.#g(s,!0);return}if(r==="x"){t.preventDefault(),this.#w(n,this.#c?.mode==="single"?!0:!this.#e.includes(n));return}if(r==="c"){t.preventDefault();let i=this.#t.find(s=>s.id===n),a=this.#s.get(n);if(i===void 0||a===void 0)return;this.#g(n,!1),this.#C({kind:"card",cardId:i.id},i.title,a.root,null)}}#C(t,e,r,n){if(r===null)return;let i=this.#a?.anchor,a=i!==void 0&&i.kind===t.kind&&(t.kind!=="card"||i.kind==="card"&&i.cardId===t.cardId);this.#b(!1),!a&&this.#A({anchor:t,target:e,mount:r,after:n})}#A(t){let e=document.createElement("div");e.part.add("comment-editor"),e.addEventListener("click",u=>u.stopPropagation());let r=document.createElement("p");r.part.add("comment-subject"),r.textContent=`Comment on ${t.target}`;let n=document.createElement("textarea");n.part.add("comment-input"),n.placeholder="What should the agent know about this?",n.value=x(this.#i,t.anchor)?.text??"";let i=document.createElement("div");i.part.add("comment-actions");let a=document.createElement("span");a.part.add("comment-hint"),a.textContent=x(this.#i,t.anchor)!==void 0?"empty to delete":"\u2318\u21B5 to save";let s=document.createElement("div");s.part.add("comment-buttons");let c=document.createElement("button");c.type="button",c.part.add("comment-cancel"),c.textContent="Cancel",c.addEventListener("click",()=>this.#b(!0));let d=document.createElement("button");d.type="button",d.part.add("comment-save"),d.textContent="Save",d.addEventListener("click",()=>this.#k(n.value)),s.append(c,d),i.append(a,s),n.addEventListener("keydown",u=>{if(u.key==="Enter"&&(u.metaKey||u.ctrlKey)){u.preventDefault(),this.#k(n.value);return}u.key==="Escape"&&(u.preventDefault(),this.#b(!0))}),e.append(r,n,i),t.after!==null?t.after.after(e):t.mount.append(e),this.#a=t,this.#u=e,n.focus()}#b(t){let e=this.#a;this.#u?.remove(),this.#u=null,this.#a=null,!(!t||e===null)&&e.anchor.kind==="card"&&this.#s.get(e.anchor.cardId)?.control.focus()}#k(t){let e=this.#a;e!==null&&(this.#i=H(this.#i,e.anchor,t),this.#b(!0),this.#x(),this.#H())}#T(){return{selectedCardIds:[...this.#e],comments:this.#i.map(t=>({...t}))}}#H(){this.#r!==void 0&&R(this.#r,this.#T())}};b("crtr-cards",st);var K=["var(--crtr-chart-1)","var(--crtr-chart-2)","var(--crtr-chart-3)","var(--crtr-chart-4)","var(--crtr-chart-5)"],ue="http://www.w3.org/2000/svg",G=260,St=12,pe=12,me=28,he=5,Ht=88,fe=5.8,Rt=14,ge=/^\d{4}-\d{2}-\d{2}(?:[T ]|$)/,be=/^\d{4}-\d{2}-\d{2}$/,ve=`
1100
+ :host {
1101
+ display: block;
1102
+ }
1103
+
1104
+ [part="container"] {
1105
+ display: flex;
1106
+ flex-direction: column;
1107
+ gap: var(--crtr-space-2);
1108
+ width: 100%;
1109
+ }
1110
+
1111
+ [part="title"] {
1112
+ color: var(--crtr-color-text);
1113
+ font-weight: 500;
1114
+ }
1115
+
1116
+ [part="legend"] {
1117
+ display: flex;
1118
+ flex-wrap: wrap;
1119
+ align-items: center;
1120
+ gap: var(--crtr-space-1) var(--crtr-space-4);
1121
+ color: var(--crtr-color-text-muted);
1122
+ font-size: calc(var(--crtr-font-size) * 0.85);
1123
+ }
1124
+
1125
+ [part="legend-item"] {
1126
+ display: flex;
1127
+ align-items: center;
1128
+ gap: var(--crtr-space-1);
1129
+ min-width: 0;
1130
+ }
1131
+
1132
+ [part="legend-swatch"] {
1133
+ flex: none;
1134
+ width: calc(var(--crtr-space-2) - 1px);
1135
+ height: calc(var(--crtr-space-2) - 1px);
1136
+ border-radius: 2px;
1137
+ }
1138
+
1139
+ [part="legend-label"] {
1140
+ overflow: hidden;
1141
+ text-overflow: ellipsis;
1142
+ white-space: nowrap;
1143
+ }
1144
+
1145
+ [part="plot"] {
1146
+ width: 100%;
1147
+ }
1148
+
1149
+ [part="chart"] {
1150
+ display: block;
1151
+ overflow: visible;
1152
+ }
1153
+
1154
+ [part="empty"] {
1155
+ display: flex;
1156
+ align-items: center;
1157
+ justify-content: center;
1158
+ padding: 0 var(--crtr-space-4);
1159
+ color: var(--crtr-color-text-muted);
1160
+ border: 1px dashed var(--crtr-color-border);
1161
+ border-radius: var(--crtr-radius-medium);
1162
+ }
1163
+
1164
+ [part="status"] {
1165
+ display: flex;
1166
+ align-items: center;
1167
+ justify-content: center;
1168
+ padding: 0 var(--crtr-space-4);
1169
+ color: var(--crtr-color-text-muted);
1170
+ border: 1px dashed var(--crtr-color-border);
1171
+ border-radius: var(--crtr-radius-medium);
1172
+ }
1173
+
1174
+ [part="unavailable"] {
1175
+ padding: var(--crtr-space-3);
1176
+ color: var(--crtr-color-text-muted);
1177
+ background: var(--crtr-color-surface);
1178
+ border: 1px solid var(--crtr-color-border);
1179
+ border-radius: var(--crtr-radius-medium);
1180
+ box-shadow: var(--crtr-shadow);
1181
+ }
1182
+
1183
+ [part="reason"] {
1184
+ color: var(--crtr-color-text);
1185
+ font-family: var(--crtr-font-mono);
1186
+ }
1187
+
1188
+ .grid {
1189
+ stroke: var(--crtr-color-border);
1190
+ stroke-width: 1;
1191
+ }
1192
+
1193
+ .tick {
1194
+ fill: var(--crtr-color-text-muted);
1195
+ font-size: calc(var(--crtr-font-size) * 0.72);
1196
+ }
1197
+ `;function xe(o){let t=o.kind;if(t!=="line"&&t!=="bar"&&t!=="area")return{status:"invalid",reason:"chart kind must be line, bar or area"};let e=o.x;if(typeof e!="string"||e==="")return{status:"invalid",reason:"chart config has no x field"};if(!Array.isArray(o.y)||o.y.length===0)return{status:"invalid",reason:"chart config has no y series"};let r=[];for(let[n,i]of o.y.entries()){if(i===null||typeof i!="object"||Array.isArray(i))return{status:"invalid",reason:`chart series #${n} is not { field, label? }`};let a=i;if(typeof a.field!="string"||a.field==="")return{status:"invalid",reason:`chart series #${n} has no field`};if(a.label!==void 0&&typeof a.label!="string")return{status:"invalid",reason:`chart series "${a.field}" label is not a string`};r.push({field:a.field,label:a.label})}return o.title!==void 0&&typeof o.title!="string"?{status:"invalid",reason:"chart title is not a string"}:o.source!==void 0&&typeof o.source!="string"?{status:"invalid",reason:"chart source is not a string"}:{status:"ok",config:{kind:t,x:e,y:r,title:o.title,data:o.data,source:o.source}}}function $t(o){return Array.isArray(o)&&o.every(t=>t!==null&&typeof t=="object"&&!Array.isArray(t))}function Nt(o,t){return t.split(".").reduce((e,r)=>{if(!(e==null||typeof e!="object"))return e[r]},o)}function ct(o){return o.includes(" ")?o:(o.includes(".")?o.split(".").pop()??o:o).replace(/[_-]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").split(/\s+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function ye(o){if(typeof o=="number")return Number.isFinite(o)?o:null;if(typeof o=="boolean")return o?1:0;if(typeof o=="bigint")return Number(o);if(typeof o=="string"){let t=o.replace(/[\s,_]/g,"").replace(/^[$£€¥]/,"").replace(/%$/,"");if(t===""||t==="-")return null;let e=Number(t);return Number.isFinite(e)?e:null}return null}function Ee(o){if(o==null)return"";if(o instanceof Date)return Number.isNaN(o.getTime())?"":o.toLocaleDateString(void 0,{month:"short",day:"numeric"});if(typeof o=="string"){let t=o.trim();if(ge.test(t)){let e=new Date(t);if(!Number.isNaN(e.getTime()))return e.toLocaleDateString(void 0,be.test(t)?{month:"short",day:"numeric",timeZone:"UTC"}:{month:"short",day:"numeric"})}return o}return typeof o=="object"?"":String(o)}function we(o){return o.length>Rt?`${o.slice(0,Rt-1)}\u2026`:o}function Ce(o,t,e){let r=t>=1?0:Math.min(4,Math.ceil(-Math.log10(t)));return new Intl.NumberFormat(void 0,{maximumFractionDigits:r,notation:e?"compact":"standard"}).format(o)}function It(o){return new Intl.NumberFormat(void 0,{maximumFractionDigits:4}).format(o)}function ke(o,t,e){let r=o,n=t;if((!Number.isFinite(r)||!Number.isFinite(n))&&(r=0,n=1),r===n){let m=Math.abs(r)>0?Math.abs(r)*.1:1;r-=m,n+=m}let i=(n-r)/Math.max(1,e),a=10**Math.floor(Math.log10(i)),s=i/a,c=(s<=1?1:s<=2?2:s<=5?5:10)*a,d=Math.floor(r/c)*c,u=Math.ceil(n/c)*c,g=[];for(let m=d;m<=u+c/2;m+=c)g.push(Number(m.toFixed(10)));return{ticks:g,domainMin:d,domainMax:u,step:c}}function Te(o){let t=[],e=[];for(let r of o){let n=e[e.length-1];if(n===void 0||r.index===n.index+1){e.push(r);continue}t.push(e),e=[r]}return e.length>0&&t.push(e),t}function k(o,t){let e=document.createElementNS(ue,o);return t!==void 0&&e.setAttribute("part",t),e}function N(o,t){for(let[e,r]of Object.entries(t))o.setAttribute(e,String(r))}function Ot(o){let t=k("title");return t.textContent=o,t}var dt=class extends HTMLElement{#n=document.createElement("div");#d=document.createElement("div");#c=document.createElement("div");#t=document.createElement("div");#r=null;#e=null;#i=null;#l=0;#s=0;constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=ve,this.#n.part.add("container"),this.#d.part.add("title"),this.#c.part.add("legend"),this.#t.part.add("plot"),t.append(e,this.#n)}connectedCallback(){let t=++this.#s;this.#r=null,this.#e=null;let e=C(this);if(e.status!=="ok"){this.#o(e.reason);return}let r=xe(e.config);if(r.status!=="ok"){this.#o(r.reason);return}this.#r=r.config,this.#f(),this.#u();let{data:n,source:i}=r.config;if(n!==void 0){if(!$t(n)){this.#o("chart data is not a list of rows");return}this.#e=n,this.#m();return}if(i===void 0||i===""){this.#e=[],this.#m();return}this.#p("Loading chart data\u2026"),this.#a(i,t)}disconnectedCallback(){this.#s+=1,this.#i?.disconnect(),this.#i=null}async#a(t,e){let r=await P(t);if(e===this.#s){if(r.status!=="ok"){this.#o(`chart source "${t}" is ${r.status}: ${r.reason}`);return}if(!$t(r.data)){this.#o(`chart source "${t}" is not a list of rows`);return}this.#e=r.data,this.#m()}}#u(){this.#i?.disconnect(),this.#l=this.#t.getBoundingClientRect().width;let t=new ResizeObserver(e=>{let r=e[0]?.contentRect.width??0;Math.abs(this.#l-r)<.5||(this.#l=r,this.#m())});t.observe(this.#t),this.#i=t}#o(t){this.#i?.disconnect(),this.#i=null;let e=document.createElement("div");e.part.add("unavailable"),e.setAttribute("role","status");let r=document.createElement("span");r.part.add("reason"),r.textContent=t,e.append("Chart unavailable: ",r),this.#n.replaceChildren(e)}#p(t){let e=document.createElement("div");e.part.add("status"),e.setAttribute("role","status"),e.style.height=`${G}px`,e.textContent=t,this.#t.replaceChildren(e)}#f(){let t=this.#r;if(t===null)return;let e=[],r=t.title?.trim();r!==void 0&&r.length>0&&(this.#d.textContent=r,e.push(this.#d)),t.y.length>1&&(this.#c.replaceChildren(...t.y.map((n,i)=>{let a=document.createElement("div");a.part.add("legend-item");let s=document.createElement("span");s.part.add("legend-swatch"),s.setAttribute("aria-hidden","true"),s.style.background=K[i%K.length]??K[0];let c=document.createElement("span");return c.part.add("legend-label"),c.textContent=n.label??ct(n.field),a.append(s,c),a})),e.push(this.#c)),e.push(this.#t),this.#n.replaceChildren(...e)}#m(){let t=this.#r,e=this.#e;if(t===null||e===null)return;let r=e.map(l=>Ee(Nt(l,t.x))),n=t.y.map((l,p)=>{let h=[];return e.forEach((f,v)=>{let E=ye(Nt(f,l.field));E!==null&&h.push({index:v,value:E})}),{label:l.label??ct(l.field),color:K[p%K.length]??K[0],points:h}}),i=0,a=0,s=0;for(let l of n)for(let p of l.points)i===0?(a=p.value,s=p.value):(p.value<a&&(a=p.value),p.value>s&&(s=p.value)),i+=1;if(t.kind!=="line"&&(a=Math.min(a,0),s=Math.max(s,0)),i===0||e.length===0){let l=document.createElement("div");l.part.add("empty"),l.style.height=`${G}px`,l.textContent="No data to chart",this.#t.replaceChildren(l);return}let c=this.#l;if(c<=0){let l=document.createElement("div");l.style.height=`${G}px`,this.#t.replaceChildren(l);return}let{ticks:d,domainMin:u,domainMax:g,step:m}=ke(a,s,he),W=Math.max(...d.map(l=>Math.abs(l)))>=1e4,D=d.map(l=>Ce(l,m,W)),A=Math.min(88,Math.max(36,Math.max(...D.map(l=>l.length))*6.4+12)),T=Math.max(0,c-A-pe),M=Math.max(0,G-St-me),y=St+M,J=r.length>0?T/r.length:T,j=l=>A+J*(l+.5),jt=g-u||1,I=l=>y-(l-u)/jt*M,mt=Math.min(Math.max(0,u),g),V=I(mt),O=k("svg","chart");N(O,{role:"img",width:c,height:G,viewBox:`0 0 ${c} ${G}`}),O.setAttribute("aria-label",`${t.kind} chart of ${n.map(l=>l.label).join(", ")} by ${ct(t.x)}`),d.forEach((l,p)=>{let h=k("line");h.setAttribute("class","grid"),N(h,{x1:A,x2:A+T,y1:I(l),y2:I(l),opacity:l===mt?.9:.45});let f=k("text");f.setAttribute("class","tick"),N(f,{x:A-8,y:I(l),"text-anchor":"end","dominant-baseline":"central"}),f.textContent=D[p]??"",O.append(h,f)});let z=[];if(r.length>0){let l=Math.max(2,Math.min(r.length,Math.floor(T/Ht)||1)),p=Math.max(1,Math.ceil((r.length-1)/(l-1)));for(let f=0;f<r.length;f+=p)z.push(f);let h=z[z.length-1]??0;h!==r.length-1&&((r.length-1-h)*J>=Ht?z.push(r.length-1):z[z.length-1]=r.length-1)}for(let l of z){let p=we(r[l]??""),h=j(l),f=p.length*fe/2,v=h-f<0?"start":h+f>c?"end":"middle",E=k("text");E.setAttribute("class","tick"),N(E,{x:v==="start"?0:v==="end"?c:h,y:y+16,"text-anchor":v,"dominant-baseline":"hanging"}),E.textContent=p,O.append(E)}if(t.kind==="bar"){let l=J*.72,p=l/n.length,h=Math.max(1,p-(p>4?1:0));n.forEach((f,v)=>{let E=k("g");for(let L of f.points){let F=I(L.value),S=k("rect","bar");N(S,{x:j(L.index)-l/2+v*p,y:Math.min(F,V),width:h,height:Math.max(1,Math.abs(V-F)),rx:Math.min(2,h/3)}),S.style.fill=f.color,S.append(Ot(`${f.label} \xB7 ${r[L.index]??L.index}: ${It(L.value)}`)),E.append(S)}O.append(E)})}else{let l=r.length<=40;for(let p of n){let h=k("g"),f=Te(p.points);for(let v of f){let E=v.map(w=>`${j(w.index)},${I(w.value)}`).join(" L "),L=v[0],F=v[v.length-1];if(t.kind==="area"&&L!==void 0&&F!==void 0){let w=k("path","area");N(w,{d:`M ${j(L.index)},${V} L ${E} L ${j(F.index)},${V} Z`,"fill-opacity":.18}),w.style.fill=p.color,h.append(w)}let S=k("path","line");if(N(S,{d:`M ${E}`,fill:"none","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"}),S.style.stroke=p.color,h.append(S),!(!l&&v.length>1))for(let w of v){let U=k("circle","point");N(U,{cx:j(w.index),cy:I(w.value),r:2.5}),U.style.fill=p.color,U.append(Ot(`${p.label} \xB7 ${r[w.index]??w.index}: ${It(w.value)}`)),h.append(U)}}O.append(h)}}this.#t.replaceChildren(O)}};b("crtr-chart",dt);function zt(){return window.crtr}var Dt="Submit is unavailable \u2014 this page is not connected to a host.",Ae=`
1198
+ :host {
1199
+ display: block;
1200
+ }
1201
+
1202
+ :host([hidden]) {
1203
+ display: none;
1204
+ }
1205
+
1206
+ [part="page"] {
1207
+ display: grid;
1208
+ gap: var(--crtr-space-3);
1209
+ }
1210
+
1211
+ [part="page"]:focus {
1212
+ outline: none;
1213
+ }
1214
+ `,Me=`
1215
+ :host {
1216
+ display: block;
1217
+ }
1218
+
1219
+ [part="container"] {
1220
+ display: grid;
1221
+ gap: var(--crtr-space-4);
1222
+ }
1223
+
1224
+ [part="chrome"] {
1225
+ display: flex;
1226
+ flex-wrap: wrap;
1227
+ align-items: center;
1228
+ justify-content: space-between;
1229
+ gap: var(--crtr-space-3);
1230
+ padding-top: var(--crtr-space-3);
1231
+ border-top: 1px solid var(--crtr-color-border);
1232
+ }
1233
+
1234
+ [part="container"][data-steps="1"] [part="chrome"] {
1235
+ justify-content: flex-end;
1236
+ }
1237
+
1238
+ [part="progress"] {
1239
+ display: flex;
1240
+ align-items: center;
1241
+ gap: var(--crtr-space-2);
1242
+ color: var(--crtr-color-text-muted);
1243
+ }
1244
+
1245
+ [part="progress-track"] {
1246
+ display: flex;
1247
+ align-items: center;
1248
+ gap: var(--crtr-space-1);
1249
+ }
1250
+
1251
+ [part="progress-step"] {
1252
+ width: var(--crtr-space-2);
1253
+ height: var(--crtr-space-1);
1254
+ border-radius: var(--crtr-radius-small);
1255
+ background: var(--crtr-color-border);
1256
+ }
1257
+
1258
+ [part="progress-step"][data-state="complete"] {
1259
+ background: var(--crtr-color-text-muted);
1260
+ }
1261
+
1262
+ [part="progress-step"][data-state="current"] {
1263
+ width: var(--crtr-space-4);
1264
+ background: var(--crtr-color-accent);
1265
+ }
1266
+
1267
+ [part="actions"] {
1268
+ display: flex;
1269
+ align-items: center;
1270
+ gap: var(--crtr-space-2);
1271
+ }
1272
+
1273
+ button {
1274
+ font: inherit;
1275
+ color: var(--crtr-color-text);
1276
+ background: var(--crtr-color-surface);
1277
+ border: 1px solid var(--crtr-color-border);
1278
+ border-radius: var(--crtr-radius-small);
1279
+ padding: var(--crtr-space-2) var(--crtr-space-3);
1280
+ cursor: pointer;
1281
+ }
1282
+
1283
+ button:hover:not(:disabled) {
1284
+ background: var(--crtr-color-surface-hover);
1285
+ }
1286
+
1287
+ button:focus-visible {
1288
+ outline: 2px solid var(--crtr-color-focus);
1289
+ outline-offset: 2px;
1290
+ }
1291
+
1292
+ button:disabled {
1293
+ cursor: not-allowed;
1294
+ opacity: 0.5;
1295
+ }
1296
+
1297
+ [part="submit"] {
1298
+ color: var(--crtr-color-accent-contrast);
1299
+ background: var(--crtr-color-accent);
1300
+ border-color: transparent;
1301
+ }
1302
+
1303
+ [part="submit"]:hover:not(:disabled) {
1304
+ background: var(--crtr-color-accent);
1305
+ filter: brightness(1.08);
1306
+ }
1307
+
1308
+ [part="notice"] {
1309
+ color: var(--crtr-color-text-muted);
1310
+ }
1311
+
1312
+ [part="notice"][data-state="error"] {
1313
+ color: var(--crtr-color-danger);
1314
+ }
1315
+
1316
+ [hidden] {
1317
+ display: none !important;
1318
+ }
1319
+ `,lt=class extends HTMLElement{constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=Ae;let r=document.createElement("div");r.part.add("page"),r.append(document.createElement("slot")),t.append(e,r)}},ut=class extends HTMLElement{static observedAttributes=["disabled","submit-label"];#n=[];#d=0;#c="idle";#t=null;#r=document.createElement("div");#e=document.createElement("div");#i=document.createElement("div");#l=document.createElement("span");#s=document.createElement("span");#a=document.createElement("div");#u=document.createElement("span");#o=document.createElement("button");#p=document.createElement("button");#f=document.createElement("button");#m=new MutationObserver(()=>{this.#h(),this.#w()});constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=Me;let r=document.createElement("div");r.part.add("steps"),r.append(document.createElement("slot")),this.#r.part.add("container"),this.#e.part.add("chrome"),this.#i.part.add("progress"),this.#i.setAttribute("role","status"),this.#i.setAttribute("aria-live","polite"),this.#l.part.add("progress-label"),this.#s.part.add("progress-track"),this.#s.setAttribute("aria-hidden","true"),this.#i.append(this.#l,this.#s),this.#o.part.add("prev"),this.#o.type="button",this.#o.textContent="Back",this.#o.addEventListener("click",()=>this.#x(-1)),this.#p.part.add("next"),this.#p.type="button",this.#p.textContent="Next",this.#p.addEventListener("click",()=>this.#x(1)),this.#f.part.add("submit"),this.#f.type="button",this.#f.addEventListener("click",()=>{this.#E()}),this.#u.part.add("notice"),this.#a.part.add("actions"),this.#a.append(this.#u,this.#o,this.#p,this.#f),this.#e.append(this.#i,this.#a),this.#r.append(r,this.#e),t.append(e,this.#r)}connectedCallback(){this.#h(),this.#m.observe(this,{childList:!0}),this.ownerDocument.addEventListener("keydown",this.#g),this.#w()}disconnectedCallback(){this.#m.disconnect(),this.ownerDocument.removeEventListener("keydown",this.#g)}attributeChangedCallback(){this.isConnected&&this.#w()}#h(){this.#n=[...this.children].filter(t=>t instanceof HTMLElement&&t.tagName==="CRTR-PAGE");for(let t of this.#n)t.hasAttribute("tabindex")||t.setAttribute("tabindex","-1");this.#d=Math.min(this.#d,Math.max(0,this.#n.length-1))}get#v(){return this.#d>=this.#n.length-1}#x(t,e=!0){let r=this.#d+t;r<0||r>=this.#n.length||r===this.#d||(this.#d=r,this.#t=null,this.#w(),e&&this.#n[this.#d]?.focus())}async#E(){if(this.#c!=="idle"||this.hasAttribute("disabled")||!this.#v)return;let t=zt();if(typeof t?.submit!="function"){this.#t=Dt,this.#w();return}this.#c="submitting",this.#t=null,this.#w();try{await t.submit(),this.#c="submitted"}catch(e){this.#c="idle",this.#t=e instanceof Error?e.message:"Submit failed."}this.#w()}#g=t=>{if(t.defaultPrevented)return;let e=t.composedPath();if(e.some(n=>n instanceof HTMLElement&&n.tagName==="CRTR-PAGES"&&n!==this))return;if((t.metaKey||t.ctrlKey)&&t.key==="Enter"){if(!this.#v)return;t.preventDefault(),this.#E();return}if(t.metaKey||t.ctrlKey||t.altKey||Le(e))return;let r=t.key.toLowerCase();r!=="n"&&r!=="p"||(t.preventDefault(),this.#x(r==="n"?1:-1))};#w(){let t=this.#n.length,e=t>1,r=Math.min(this.#d,Math.max(0,t-1));for(let[a,s]of this.#n.entries())s.toggleAttribute("hidden",a!==r);if(this.#r.dataset.steps=String(Math.max(1,t)),this.#r.dataset.step=String(r+1),this.#i.hidden=!e,e){let a=this.#n[r]?.getAttribute("label")?.trim();this.#l.textContent=a?`Step ${r+1} of ${t} \xB7 ${a}`:`Step ${r+1} of ${t}`,this.#s.replaceChildren(...this.#n.map((s,c)=>{let d=document.createElement("span");return d.part.add("progress-step"),d.dataset.state=c===r?"current":c<r?"complete":"upcoming",d}))}this.#o.hidden=!e,this.#o.disabled=r===0,this.#p.hidden=!e||this.#v,this.#p.disabled=!1,this.#f.hidden=!this.#v;let n=typeof zt()?.submit=="function";this.#f.disabled=!n||this.#c!=="idle"||this.hasAttribute("disabled"),this.#f.textContent=this.#c==="submitting"?"Submitting\u2026":this.#c==="submitted"?"Submitted":this.getAttribute("submit-label")?.trim()||"Submit";let i=this.#t??(this.#c==="submitted"?"Your response was submitted.":!n&&this.#v?Dt:null);this.#u.hidden=i===null,this.#u.textContent=i??"",this.#u.dataset.state=this.#t===null?"info":"error"}};function Le(o){return o.some(t=>t instanceof HTMLElement&&(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t.isContentEditable))}b("crtr-page",lt);b("crtr-pages",ut);var Se=`
1320
+ :host {
1321
+ display: block;
1322
+ }
1323
+
1324
+ [part="unavailable"] {
1325
+ padding: var(--crtr-space-3);
1326
+ color: var(--crtr-color-text-muted);
1327
+ background: var(--crtr-color-surface);
1328
+ border: 1px solid var(--crtr-color-border);
1329
+ border-radius: var(--crtr-radius-medium);
1330
+ box-shadow: var(--crtr-shadow);
1331
+ }
1332
+
1333
+ [part="unavailable"][hidden] {
1334
+ display: none;
1335
+ }
1336
+
1337
+ [part="kind"] {
1338
+ color: var(--crtr-color-text);
1339
+ font-family: var(--crtr-font-mono);
1340
+ }
1341
+
1342
+ [part="reason"] {
1343
+ display: block;
1344
+ margin-top: var(--crtr-space-1);
1345
+ font-size: 0.9em;
1346
+ }
1347
+ `,pt=class extends HTMLElement{#n=document.createElement("div");#d=document.createElement("span");#c=document.createElement("span");#t=document.createElement("div");#r=!1;constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=Se,this.#n.part.add("unavailable"),this.#n.setAttribute("role","status"),this.#d.part.add("kind"),this.#c.part.add("reason"),this.#n.append("Component unavailable: ",this.#d,this.#c),this.#n.hidden=!0,this.#t.part.add("mount"),t.append(e,document.createElement("slot"),this.#n)}connectedCallback(){if(this.#r)return;this.#r=!0;let t=this.getAttribute("kind")?.trim()??"";if(this.#d.textContent=t===""?"unknown":t,t===""){this.#i("This slot names no component kind.");return}let e=C(this);if(e.status!=="ok"){this.#i(e.reason);return}this.append(this.#t),this.#e(t,e.config)}async#e(t,e){await bt(this.#t,t,e)!=="mounted"&&(this.#t.remove(),this.#i("This page is open somewhere that cannot render it."))}#i(t){this.#c.textContent=t,this.#n.hidden=!1}};b("crtr-slot",pt);})();