@joewinke/jatui 0.38.5 → 0.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +32 -1
- package/THIRD_PARTY_NOTICES.md +51 -0
- package/dist/components/BulkActionBar.svelte +32 -2
- package/dist/components/BulkActionBar.svelte.d.ts +5 -1
- package/dist/components/FloatingActionBar.svelte +102 -34
- package/dist/components/FloatingActionBar.svelte.d.ts +9 -0
- package/dist/components/MediaExplorer.svelte +249 -0
- package/dist/components/MediaExplorer.svelte.d.ts +37 -0
- package/dist/components/NotificationCenter.svelte +481 -0
- package/dist/components/NotificationCenter.svelte.d.ts +29 -0
- package/dist/components/SearchDropdown.svelte +54 -8
- package/dist/components/SearchDropdown.svelte.d.ts +12 -0
- package/dist/components/VideoPlayer.svelte +269 -3
- package/dist/components/agent/AgentLog.svelte +217 -0
- package/dist/components/agent/AgentLog.svelte.d.ts +72 -0
- package/dist/components/agent/AgentLogRow.svelte +281 -0
- package/dist/components/agent/AgentLogRow.svelte.d.ts +21 -0
- package/dist/components/agent/AgentTaskList.svelte +607 -0
- package/dist/components/agent/AgentTaskList.svelte.d.ts +40 -0
- package/dist/components/agent/AgentThinking.svelte +280 -0
- package/dist/components/agent/AgentThinking.svelte.d.ts +22 -0
- package/dist/components/agent/ComposerGlow.svelte +265 -0
- package/dist/components/agent/ComposerGlow.svelte.d.ts +18 -0
- package/dist/components/agent/ContextMeter.svelte +277 -0
- package/dist/components/agent/ContextMeter.svelte.d.ts +21 -0
- package/dist/components/agent/Questionnaire.svelte +767 -0
- package/dist/components/agent/Questionnaire.svelte.d.ts +29 -0
- package/dist/components/agent/ShimmerText.svelte +100 -0
- package/dist/components/agent/ShimmerText.svelte.d.ts +19 -0
- package/dist/components/agent/StreamedText.svelte +135 -0
- package/dist/components/agent/StreamedText.svelte.d.ts +13 -0
- package/dist/components/agent/agentLog.d.ts +22 -0
- package/dist/components/agent/agentLog.js +26 -0
- package/dist/components/agent/agentTaskList.d.ts +90 -0
- package/dist/components/agent/agentTaskList.js +93 -0
- package/dist/components/agent/agentThinking.d.ts +46 -0
- package/dist/components/agent/agentThinking.js +78 -0
- package/dist/components/agent/contextMeter.d.ts +97 -0
- package/dist/components/agent/contextMeter.js +156 -0
- package/dist/components/agent/questionnaire.d.ts +104 -0
- package/dist/components/agent/questionnaire.js +225 -0
- package/dist/components/agent/revealCore.d.ts +74 -0
- package/dist/components/agent/revealCore.js +160 -0
- package/dist/components/agent/revealTicker.d.ts +34 -0
- package/dist/components/agent/revealTicker.js +73 -0
- package/dist/components/agent/streamedText.d.ts +28 -0
- package/dist/components/agent/streamedText.js +59 -0
- package/dist/components/messaging/MessageInput.svelte +34 -4
- package/dist/components/messaging/MessageInput.svelte.d.ts +7 -0
- package/dist/components/messaging/MessageItem.svelte +2 -2
- package/dist/components/notificationCenter.d.ts +65 -0
- package/dist/components/notificationCenter.js +110 -0
- package/dist/components/progress/Steps.svelte +269 -5
- package/dist/components/progress/Steps.svelte.d.ts +16 -1
- package/dist/components/progress/stepsSummary.d.ts +14 -0
- package/dist/components/progress/stepsSummary.js +32 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +29 -0
- package/dist/selection/clickSelection.d.ts +89 -0
- package/dist/selection/clickSelection.js +152 -0
- package/dist/selection/createClickSelection.d.ts +79 -0
- package/dist/selection/createClickSelection.js +134 -0
- package/dist/video/keys.d.ts +5 -5
- package/dist/video/keys.js +9 -5
- package/dist/video/transcriptSearch.d.ts +80 -0
- package/dist/video/transcriptSearch.js +153 -0
- package/package.json +3 -2
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
AgentLogRow — one row of an AgentLog: the grow-in reveal, the soft clipping
|
|
3
|
+
edge that keeps it from being cut as it grows, and the stretch of tree guide
|
|
4
|
+
that belongs to it.
|
|
5
|
+
|
|
6
|
+
Adapted from BoardUI's agent-log (LogRow / RowConnector / useRevealMask):
|
|
7
|
+
MIT License — Copyright (c) 2026 Mertcan Dundar Esmergul (BoardUI)
|
|
8
|
+
What changed in the port: the `motion` library is replaced by CSS — height
|
|
9
|
+
0 → auto is a grid-template-rows 0fr → 1fr keyframe, the soft edge is a
|
|
10
|
+
registered `--jatui-reveal-fade` length animated inside a mask gradient,
|
|
11
|
+
the branch draws with stroke-dashoffset on pathLength=1 and the trunk with
|
|
12
|
+
a scaleY. Durations come from --motion-* tokens (so data-motion levels
|
|
13
|
+
rescale them) with glide easing; the guide pen stays linear on purpose so
|
|
14
|
+
junctions don't stall. Rows present on the log's first render rest instead
|
|
15
|
+
of animating.
|
|
16
|
+
|
|
17
|
+
At rest a row carries no mask, no blur, no overflow clip and no
|
|
18
|
+
compositing layer. Under prefers-reduced-motion it always renders at rest.
|
|
19
|
+
-->
|
|
20
|
+
<script lang="ts">
|
|
21
|
+
import type { Snippet } from 'svelte';
|
|
22
|
+
import { prefersReducedMotion } from '../../motion/level';
|
|
23
|
+
import { BRANCH_PATH, BRANCH_WIDTH, BRANCH_Y, getAgentLogContext } from './agentLog';
|
|
24
|
+
|
|
25
|
+
interface Props {
|
|
26
|
+
/** First row of its list: its branch starts with the row (no tail above to wait for). */
|
|
27
|
+
first?: boolean;
|
|
28
|
+
/** Last row of its list: no trunk below the elbow, so the guide ends on the corner. */
|
|
29
|
+
last?: boolean;
|
|
30
|
+
/** Draw the tree guide. false for rows that are not findings (e.g. the working row). */
|
|
31
|
+
guide?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Force the grow-in on or off. Default: animate when the row is added after
|
|
34
|
+
* its AgentLog's first render (always, when used outside an AgentLog).
|
|
35
|
+
*/
|
|
36
|
+
animate?: boolean;
|
|
37
|
+
/** Element to render: `li` inside a list, `div` elsewhere. */
|
|
38
|
+
as?: 'li' | 'div';
|
|
39
|
+
class?: string;
|
|
40
|
+
children: Snippet;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
let {
|
|
44
|
+
first = false,
|
|
45
|
+
last = false,
|
|
46
|
+
guide = true,
|
|
47
|
+
animate,
|
|
48
|
+
as = 'li',
|
|
49
|
+
class: className = '',
|
|
50
|
+
children
|
|
51
|
+
}: Props = $props();
|
|
52
|
+
|
|
53
|
+
const ctx = getAgentLogContext();
|
|
54
|
+
const reduced = prefersReducedMotion();
|
|
55
|
+
// Decided once, at mount: a row never starts animating later.
|
|
56
|
+
// svelte-ignore state_referenced_locally
|
|
57
|
+
const live = !reduced && (animate ?? ctx?.isLive() ?? true);
|
|
58
|
+
// svelte-ignore state_referenced_locally
|
|
59
|
+
const waitForTail = !first || (first && !!ctx?.bridged);
|
|
60
|
+
|
|
61
|
+
let entering = $state(live);
|
|
62
|
+
|
|
63
|
+
$effect(() => {
|
|
64
|
+
if (!entering) return;
|
|
65
|
+
// Backstop in case animationend never arrives (a hidden ancestor, a host
|
|
66
|
+
// stylesheet overriding the animation).
|
|
67
|
+
const id = setTimeout(() => (entering = false), 2000);
|
|
68
|
+
return () => clearTimeout(id);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
function onAnimationEnd(e: AnimationEvent) {
|
|
72
|
+
if (e.animationName.endsWith('al-fade')) entering = false;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Trunk/branch draw only for rows (or trunks) that arrive live. */
|
|
76
|
+
function trunkLive(): boolean {
|
|
77
|
+
return !reduced && (animate ?? ctx?.isLive() ?? true);
|
|
78
|
+
}
|
|
79
|
+
</script>
|
|
80
|
+
|
|
81
|
+
<svelte:element
|
|
82
|
+
this={as}
|
|
83
|
+
class="al-row {className}"
|
|
84
|
+
class:is-entering={entering}
|
|
85
|
+
onanimationend={onAnimationEnd}
|
|
86
|
+
>
|
|
87
|
+
<div class="al-clip">
|
|
88
|
+
<div class="al-body" class:has-guide={guide}>
|
|
89
|
+
{#if guide}
|
|
90
|
+
<span class="al-guide" aria-hidden="true">
|
|
91
|
+
<svg
|
|
92
|
+
class="al-svg"
|
|
93
|
+
width={BRANCH_WIDTH}
|
|
94
|
+
height={BRANCH_Y + 1}
|
|
95
|
+
viewBox="0 0 {BRANCH_WIDTH} {BRANCH_Y + 1}"
|
|
96
|
+
fill="none"
|
|
97
|
+
>
|
|
98
|
+
<path
|
|
99
|
+
class="al-branch"
|
|
100
|
+
class:is-drawing={live}
|
|
101
|
+
class:waits={waitForTail}
|
|
102
|
+
d={BRANCH_PATH}
|
|
103
|
+
pathLength="1"
|
|
104
|
+
stroke="currentColor"
|
|
105
|
+
stroke-width="1"
|
|
106
|
+
/>
|
|
107
|
+
</svg>
|
|
108
|
+
{#if !last}
|
|
109
|
+
<span class="al-trunk" class:is-drawing={trunkLive()}></span>
|
|
110
|
+
{/if}
|
|
111
|
+
</span>
|
|
112
|
+
{/if}
|
|
113
|
+
{@render children()}
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
</svelte:element>
|
|
117
|
+
|
|
118
|
+
<style>
|
|
119
|
+
@property --jatui-reveal-fade {
|
|
120
|
+
syntax: '<length>';
|
|
121
|
+
inherits: false;
|
|
122
|
+
initial-value: 0px;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.al-row {
|
|
126
|
+
/* Timings: lengths of the BoardUI reveal, expressed on motion tokens. */
|
|
127
|
+
--al-grow-d: calc(var(--motion-move, 300ms) * 1.27);
|
|
128
|
+
--al-in-d: calc(var(--motion-move, 300ms) * 1.4);
|
|
129
|
+
--al-fade-d: calc(var(--motion-move, 300ms) * 1.47);
|
|
130
|
+
/* One pen speed (~160px/s): the tail above, then this row's branch. */
|
|
131
|
+
--al-tail-d: calc(var(--motion-fast, 150ms) * 0.8);
|
|
132
|
+
--al-branch-d: calc(var(--motion-fast, 150ms) * 0.93);
|
|
133
|
+
|
|
134
|
+
position: relative;
|
|
135
|
+
display: grid;
|
|
136
|
+
grid-template-rows: 1fr;
|
|
137
|
+
list-style: none;
|
|
138
|
+
margin: 0;
|
|
139
|
+
padding: 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.al-clip {
|
|
143
|
+
position: relative;
|
|
144
|
+
min-height: 0;
|
|
145
|
+
min-width: 0;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.al-body {
|
|
149
|
+
position: relative;
|
|
150
|
+
min-width: 0;
|
|
151
|
+
}
|
|
152
|
+
.al-body.has-guide {
|
|
153
|
+
padding-inline-start: 1rem;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* ── grow-in ──────────────────────────────────────────────────────── */
|
|
157
|
+
.al-row.is-entering {
|
|
158
|
+
animation: al-grow var(--al-grow-d) var(--motion-glide, ease-out) both;
|
|
159
|
+
}
|
|
160
|
+
.al-row.is-entering > .al-clip {
|
|
161
|
+
overflow: hidden;
|
|
162
|
+
/* Mask stops are alpha only (not a theme colour). The transparent stop
|
|
163
|
+
sits 1px past the box: two stops at exactly 100% make a degenerate
|
|
164
|
+
gradient that softens the last pixel row and breaks the guide where
|
|
165
|
+
rows meet. */
|
|
166
|
+
-webkit-mask-image: linear-gradient(
|
|
167
|
+
to bottom,
|
|
168
|
+
black calc(100% - var(--jatui-reveal-fade)),
|
|
169
|
+
transparent calc(100% + 1px)
|
|
170
|
+
);
|
|
171
|
+
mask-image: linear-gradient(
|
|
172
|
+
to bottom,
|
|
173
|
+
black calc(100% - var(--jatui-reveal-fade)),
|
|
174
|
+
transparent calc(100% + 1px)
|
|
175
|
+
);
|
|
176
|
+
animation:
|
|
177
|
+
al-in var(--al-in-d) var(--motion-glide, ease-out) both,
|
|
178
|
+
al-fade var(--al-fade-d) var(--motion-glide, ease-out) both;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
@keyframes al-grow {
|
|
182
|
+
from {
|
|
183
|
+
grid-template-rows: 0fr;
|
|
184
|
+
}
|
|
185
|
+
to {
|
|
186
|
+
grid-template-rows: 1fr;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
@keyframes al-in {
|
|
190
|
+
from {
|
|
191
|
+
opacity: 0;
|
|
192
|
+
translate: 0 calc(var(--motion-travel, 16px) * 0.25);
|
|
193
|
+
filter: blur(6px);
|
|
194
|
+
}
|
|
195
|
+
to {
|
|
196
|
+
opacity: 1;
|
|
197
|
+
translate: 0 0;
|
|
198
|
+
filter: blur(0);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/* Longer than a text line, so a row is faintest exactly where it is clipped. */
|
|
202
|
+
@keyframes al-fade {
|
|
203
|
+
from {
|
|
204
|
+
--jatui-reveal-fade: 22px;
|
|
205
|
+
}
|
|
206
|
+
to {
|
|
207
|
+
--jatui-reveal-fade: 0px;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/* ── tree guide ───────────────────────────────────────────────────── */
|
|
212
|
+
.al-guide {
|
|
213
|
+
pointer-events: none;
|
|
214
|
+
position: absolute;
|
|
215
|
+
inset-block: 0;
|
|
216
|
+
inset-inline-start: 0;
|
|
217
|
+
width: 0.75rem;
|
|
218
|
+
color: color-mix(in oklab, var(--color-base-content) 24%, transparent);
|
|
219
|
+
}
|
|
220
|
+
.al-svg {
|
|
221
|
+
position: absolute;
|
|
222
|
+
top: 0;
|
|
223
|
+
inset-inline-start: 0;
|
|
224
|
+
overflow: visible;
|
|
225
|
+
}
|
|
226
|
+
.al-svg:dir(rtl) {
|
|
227
|
+
scale: -1 1;
|
|
228
|
+
}
|
|
229
|
+
.al-branch.is-drawing {
|
|
230
|
+
stroke-dasharray: 1;
|
|
231
|
+
stroke-dashoffset: 1;
|
|
232
|
+
animation: al-draw var(--al-branch-d) linear forwards;
|
|
233
|
+
}
|
|
234
|
+
.al-branch.is-drawing.waits {
|
|
235
|
+
animation-delay: var(--al-tail-d);
|
|
236
|
+
}
|
|
237
|
+
@keyframes al-draw {
|
|
238
|
+
to {
|
|
239
|
+
stroke-dashoffset: 0;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.al-trunk {
|
|
244
|
+
position: absolute;
|
|
245
|
+
inset-inline-start: 0;
|
|
246
|
+
top: 8px; /* BRANCH_Y - BRANCH_RADIUS */
|
|
247
|
+
bottom: 0;
|
|
248
|
+
width: 1px;
|
|
249
|
+
background: currentColor;
|
|
250
|
+
transform-origin: top;
|
|
251
|
+
}
|
|
252
|
+
.al-trunk.is-drawing {
|
|
253
|
+
animation: al-scale var(--al-tail-d) linear both;
|
|
254
|
+
}
|
|
255
|
+
@keyframes al-scale {
|
|
256
|
+
from {
|
|
257
|
+
transform: scaleY(0);
|
|
258
|
+
}
|
|
259
|
+
to {
|
|
260
|
+
transform: scaleY(1);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* Reduced motion: final state — no growth, no mask, no blur, no draw. */
|
|
265
|
+
@media (prefers-reduced-motion: reduce) {
|
|
266
|
+
.al-row.is-entering,
|
|
267
|
+
.al-row.is-entering > .al-clip,
|
|
268
|
+
.al-branch.is-drawing,
|
|
269
|
+
.al-trunk.is-drawing {
|
|
270
|
+
animation: none;
|
|
271
|
+
}
|
|
272
|
+
.al-row.is-entering > .al-clip {
|
|
273
|
+
overflow: visible;
|
|
274
|
+
-webkit-mask-image: none;
|
|
275
|
+
mask-image: none;
|
|
276
|
+
}
|
|
277
|
+
.al-branch.is-drawing {
|
|
278
|
+
stroke-dashoffset: 0;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
</style>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
interface Props {
|
|
3
|
+
/** First row of its list: its branch starts with the row (no tail above to wait for). */
|
|
4
|
+
first?: boolean;
|
|
5
|
+
/** Last row of its list: no trunk below the elbow, so the guide ends on the corner. */
|
|
6
|
+
last?: boolean;
|
|
7
|
+
/** Draw the tree guide. false for rows that are not findings (e.g. the working row). */
|
|
8
|
+
guide?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Force the grow-in on or off. Default: animate when the row is added after
|
|
11
|
+
* its AgentLog's first render (always, when used outside an AgentLog).
|
|
12
|
+
*/
|
|
13
|
+
animate?: boolean;
|
|
14
|
+
/** Element to render: `li` inside a list, `div` elsewhere. */
|
|
15
|
+
as?: 'li' | 'div';
|
|
16
|
+
class?: string;
|
|
17
|
+
children: Snippet;
|
|
18
|
+
}
|
|
19
|
+
declare const AgentLogRow: import("svelte").Component<Props, {}, "">;
|
|
20
|
+
type AgentLogRow = ReturnType<typeof AgentLogRow>;
|
|
21
|
+
export default AgentLogRow;
|