@heyramzi/ui 3.1.0 → 3.2.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/dist/lib/sliding-pill.js +2 -2
- package/dist/record/measure-clamp.js +23 -0
- package/dist/shadcn/button-group/index.js +6 -0
- package/dist/shadcn/checkbox/checkbox-box.js +3 -0
- package/dist/shadcn/input-group/index.js +9 -0
- package/dist/shadcn/item/index.js +13 -0
- package/dist/shadcn/native-select/index.js +6 -0
- package/dist/shadcn/pagination/index.js +12 -0
- package/package.json +1 -1
- package/scripts/sync-shadcn.mjs +0 -5
- package/src/ai/generation-progress/GenerationProgress.svelte +14 -12
- package/src/canvas/pen/PenOverlay.svelte +1 -30
- package/src/canvas/screen/PartView.svelte +13 -8
- package/src/canvas/screen/ScreenBody.svelte +18 -11
- package/src/canvas/ui/BarTooltip.svelte +46 -0
- package/src/canvas/ui/BarTooltip.svelte.d.ts +17 -0
- package/src/canvas/ui/CanvasToolbar.svelte +170 -156
- package/src/canvas/ui/StylePanel.svelte +179 -102
- package/src/canvas/ui/canvas-ui.css +12 -76
- package/src/charts/dashboard/data-table.svelte +80 -80
- package/src/charts/dashboard/hint.svelte +34 -0
- package/src/charts/dashboard/hint.svelte.d.ts +10 -0
- package/src/charts/dashboard/rating-chip.svelte +4 -3
- package/src/charts/legend.css +0 -8
- package/src/charts/legend.svelte +26 -30
- package/src/components/copy/copy-button.svelte +10 -2
- package/src/components/copy/copy-button.test.ts +7 -0
- package/src/components/data-table/table-skeleton.svelte +15 -7
- package/src/components/data-table/table-skeleton.svelte.d.ts +4 -0
- package/src/components/docs/on-this-page.svelte +2 -2
- package/src/components/hold-to-confirm/hold-to-confirm.svelte +2 -1
- package/src/components/list-page/filter-item.svelte +20 -7
- package/src/components/list-page/filter-popover.svelte +41 -16
- package/src/components/list-page/filter-popover.svelte.d.ts +1 -1
- package/src/components/list-page/grouped-list.svelte +41 -23
- package/src/components/picker/picker.svelte +8 -3
- package/src/components/picker/picker.svelte.d.ts +2 -1
- package/src/components/segmented/segmented-filter.svelte +19 -10
- package/src/components/segmented/segmented-track.svelte +11 -3
- package/src/components/table-view/table-view.svelte +22 -6
- package/src/components/tags-input/tags-input.svelte +94 -77
- package/src/components/toolbar/toolbar.svelte +2 -1
- package/src/components/toolbar/toolbar.test.ts +5 -4
- package/src/components/work-parts/group-head.svelte +28 -9
- package/src/components/work-parts/group-head.svelte.d.ts +5 -2
- package/src/editor/editor-toolbar.svelte +223 -193
- package/src/editor/editor.svelte +56 -38
- package/src/editor/image-toolbar.svelte +99 -37
- package/src/editor/image-toolbar.svelte.d.ts +4 -5
- package/src/editor/url-dialog.svelte +96 -0
- package/src/editor/url-dialog.svelte.d.ts +15 -0
- package/src/effects/theme-toggle/ThemeToggle.css +8 -8
- package/src/effects/theme-toggle/ThemeToggle.svelte +20 -6
- package/src/inbox/thread-inbox.svelte +9 -1
- package/src/lib/live-region.svelte +12 -4
- package/src/lib/live-region.svelte.d.ts +5 -1
- package/src/lib/sliding-pill.ts +3 -2
- package/src/record/info-list.svelte +33 -59
- package/src/record/measure-clamp.ts +31 -0
- package/src/record/record-shell.svelte +38 -39
- package/src/record/record-timeline.svelte +10 -5
- package/src/record/steps-rail.svelte +50 -36
- package/src/record/where-we-are.svelte +5 -19
- package/src/shadcn/button-group/button-group-separator.svelte +23 -0
- package/src/shadcn/button-group/button-group-separator.svelte.d.ts +13 -0
- package/src/shadcn/button-group/button-group-text.svelte +28 -0
- package/src/shadcn/button-group/button-group-text.svelte.d.ts +11 -0
- package/src/shadcn/button-group/button-group.svelte +46 -0
- package/src/shadcn/button-group/button-group.svelte.d.ts +16 -0
- package/src/shadcn/button-group/index.ts +15 -0
- package/src/shadcn/checkbox/checkbox-box.ts +4 -0
- package/src/shadcn/checkbox/checkbox.svelte +2 -4
- package/src/shadcn/input-group/index.ts +22 -0
- package/src/shadcn/input-group/input-group-addon.svelte +51 -0
- package/src/shadcn/input-group/input-group-addon.svelte.d.ts +18 -0
- package/src/shadcn/input-group/input-group-button.svelte +49 -0
- package/src/shadcn/input-group/input-group-button.svelte.d.ts +18 -0
- package/src/shadcn/input-group/input-group-input.svelte +20 -0
- package/src/shadcn/input-group/input-group-input.svelte.d.ts +11 -0
- package/src/shadcn/input-group/input-group-text.svelte +19 -0
- package/src/shadcn/input-group/input-group-text.svelte.d.ts +5 -0
- package/src/shadcn/input-group/input-group-textarea.svelte +20 -0
- package/src/shadcn/input-group/input-group-textarea.svelte.d.ts +3 -0
- package/src/shadcn/input-group/input-group.svelte +24 -0
- package/src/shadcn/input-group/input-group.svelte.d.ts +5 -0
- package/src/shadcn/item/index.ts +34 -0
- package/src/shadcn/item/item-actions.svelte +20 -0
- package/src/shadcn/item/item-actions.svelte.d.ts +5 -0
- package/src/shadcn/item/item-content.svelte +23 -0
- package/src/shadcn/item/item-content.svelte.d.ts +5 -0
- package/src/shadcn/item/item-description.svelte +23 -0
- package/src/shadcn/item/item-description.svelte.d.ts +5 -0
- package/src/shadcn/item/item-footer.svelte +20 -0
- package/src/shadcn/item/item-footer.svelte.d.ts +5 -0
- package/src/shadcn/item/item-group.svelte +21 -0
- package/src/shadcn/item/item-group.svelte.d.ts +5 -0
- package/src/shadcn/item/item-header.svelte +20 -0
- package/src/shadcn/item/item-header.svelte.d.ts +5 -0
- package/src/shadcn/item/item-media.svelte +42 -0
- package/src/shadcn/item/item-media.svelte.d.ts +17 -0
- package/src/shadcn/item/item-separator.svelte +19 -0
- package/src/shadcn/item/item-separator.svelte.d.ts +13 -0
- package/src/shadcn/item/item-title.svelte +20 -0
- package/src/shadcn/item/item-title.svelte.d.ts +5 -0
- package/src/shadcn/item/item.svelte +61 -0
- package/src/shadcn/item/item.svelte.d.ts +28 -0
- package/src/shadcn/native-select/index.ts +13 -0
- package/src/shadcn/native-select/native-select-opt-group.svelte +20 -0
- package/src/shadcn/native-select/native-select-opt-group.svelte.d.ts +5 -0
- package/src/shadcn/native-select/native-select-option.svelte +20 -0
- package/src/shadcn/native-select/native-select-option.svelte.d.ts +5 -0
- package/src/shadcn/native-select/native-select.svelte +45 -0
- package/src/shadcn/native-select/native-select.svelte.d.ts +8 -0
- package/src/shadcn/pagination/index.ts +31 -0
- package/src/shadcn/pagination/pagination-content.svelte +20 -0
- package/src/shadcn/pagination/pagination-content.svelte.d.ts +5 -0
- package/src/shadcn/pagination/pagination-ellipsis.svelte +22 -0
- package/src/shadcn/pagination/pagination-ellipsis.svelte.d.ts +5 -0
- package/src/shadcn/pagination/pagination-item.svelte +14 -0
- package/src/shadcn/pagination/pagination-item.svelte.d.ts +5 -0
- package/src/shadcn/pagination/pagination-link.svelte +41 -0
- package/src/shadcn/pagination/pagination-link.svelte.d.ts +9 -0
- package/src/shadcn/pagination/pagination-next-button.svelte +34 -0
- package/src/shadcn/pagination/pagination-next-button.svelte.d.ts +4 -0
- package/src/shadcn/pagination/pagination-next.svelte +26 -0
- package/src/shadcn/pagination/pagination-next.svelte.d.ts +4 -0
- package/src/shadcn/pagination/pagination-prev-button.svelte +34 -0
- package/src/shadcn/pagination/pagination-prev-button.svelte.d.ts +4 -0
- package/src/shadcn/pagination/pagination-previous.svelte +30 -0
- package/src/shadcn/pagination/pagination-previous.svelte.d.ts +4 -0
- package/src/shadcn/pagination/pagination.svelte +27 -0
- package/src/shadcn/pagination/pagination.svelte.d.ts +4 -0
- package/src/slides/Controls.svelte +39 -36
- package/src/slides/Deck.svelte +11 -8
- package/src/thread/thread.svelte +15 -8
- package/src/work/detail/task-detail.svelte +1 -1
- package/src/work/gantt/gantt-task-row.svelte +3 -6
- package/src/work/inbox/inbox-card.svelte +7 -5
- package/src/work/inbox/inbox-trace.svelte +14 -10
- package/src/work/kanban-board.svelte +40 -25
- package/src/work/kanban-hidden-rail.svelte +67 -65
- package/src/work/task-list.svelte +145 -124
- package/src/work/task-list.svelte.test.ts +5 -2
- package/src/work/time/time-tracker.svelte +35 -10
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script lang="ts" generics="T">
|
|
2
2
|
import type { Snippet } from "svelte";
|
|
3
|
+
import { Meter } from "bits-ui";
|
|
3
4
|
import { cn } from "../../lib/utils.js";
|
|
4
5
|
import { initial } from "../../lib/initials.js";
|
|
5
6
|
import { TONE_COLOR, TONE_TEXT } from "../../lib/tone.js";
|
|
@@ -84,6 +85,10 @@
|
|
|
84
85
|
|
|
85
86
|
let labels = $derived({ ...DEFAULT_TIME_LABELS, ...labelOverrides });
|
|
86
87
|
|
|
88
|
+
const uid = $props.id();
|
|
89
|
+
const invalidId = `${uid}-invalid`;
|
|
90
|
+
const loggedId = `${uid}-logged`;
|
|
91
|
+
|
|
87
92
|
// ---- timer
|
|
88
93
|
let now = $state(Date.now());
|
|
89
94
|
let open = $state(false);
|
|
@@ -143,7 +148,7 @@
|
|
|
143
148
|
let note = $state("");
|
|
144
149
|
let saving = $state(false);
|
|
145
150
|
let invalid = $state(false);
|
|
146
|
-
let durationInput = $state<HTMLInputElement>();
|
|
151
|
+
let durationInput = $state<HTMLInputElement | null>(null);
|
|
147
152
|
let parsed = $derived(parseMinutes(duration));
|
|
148
153
|
let preview = $derived(
|
|
149
154
|
parsed !== null && parsed >= 1 && parsed <= 1440 ? formatMinutes(parsed) : "",
|
|
@@ -170,6 +175,14 @@
|
|
|
170
175
|
|
|
171
176
|
// ---- summary
|
|
172
177
|
let total = $derived(entries.reduce((sum, entry) => sum + getMinutes(entry), 0));
|
|
178
|
+
// What the trigger shows, so its name holds it (WCAG 2.5.3, label in name).
|
|
179
|
+
let shown = $derived(
|
|
180
|
+
running
|
|
181
|
+
? `${clock.hours}:${clock.minutes}:${clock.seconds}`
|
|
182
|
+
: total > 0
|
|
183
|
+
? `${formatMinutes(total)}${estimate ? ` / ${formatMinutes(estimate)}` : ""}`
|
|
184
|
+
: labels.timer,
|
|
185
|
+
);
|
|
173
186
|
let liveTotal = $derived(total + elapsedMinutes);
|
|
174
187
|
let tone = $derived(budgetTone(liveTotal, estimate));
|
|
175
188
|
let percent = $derived(estimate ? Math.round((liveTotal / estimate) * 100) : 0);
|
|
@@ -245,7 +258,7 @@
|
|
|
245
258
|
buttonVariants({ variant: "ghost", size: "sm" }),
|
|
246
259
|
"time-open gap-1.5 ps-1 pe-2 text-(length:--text-control) tabular-nums data-[state=open]:bg-muted",
|
|
247
260
|
)}
|
|
248
|
-
aria-label={labels.title}
|
|
261
|
+
aria-label="{labels.title}: {shown}"
|
|
249
262
|
>
|
|
250
263
|
{#if running}
|
|
251
264
|
<TimeDot running size={6} />
|
|
@@ -278,7 +291,7 @@
|
|
|
278
291
|
placeholder={labels.durationPlaceholder}
|
|
279
292
|
aria-label={labels.duration}
|
|
280
293
|
aria-invalid={invalid}
|
|
281
|
-
aria-describedby={invalid ?
|
|
294
|
+
aria-describedby={invalid ? invalidId : undefined}
|
|
282
295
|
autocomplete="off"
|
|
283
296
|
inputmode="text"
|
|
284
297
|
class={cn(
|
|
@@ -313,20 +326,33 @@
|
|
|
313
326
|
</Button>
|
|
314
327
|
</form>
|
|
315
328
|
{#if invalid}
|
|
316
|
-
<p id=
|
|
329
|
+
<p id={invalidId} class="text-xs text-destructive-ink" role="alert">{labels.invalid}</p>
|
|
317
330
|
{/if}
|
|
318
331
|
|
|
319
332
|
{#if entries.length > 0 || estimate}
|
|
320
333
|
<div class="flex flex-col gap-2 border-t border-border/60 pt-3">
|
|
321
334
|
<div class="flex items-baseline justify-between gap-2">
|
|
322
|
-
<span class="text-xs font-medium text-muted-foreground"
|
|
335
|
+
<span id={loggedId} class="text-xs font-medium text-muted-foreground"
|
|
336
|
+
>{labels.logged}</span
|
|
337
|
+
>
|
|
323
338
|
{#key total}
|
|
324
339
|
<span class="time-pop font-medium tabular-nums">{formatMinutes(total)}</span>
|
|
325
340
|
{/key}
|
|
326
341
|
</div>
|
|
327
342
|
{#if estimate}
|
|
343
|
+
{@const budget =
|
|
344
|
+
liveTotal > estimate
|
|
345
|
+
? labels.over(formatMinutes(liveTotal - estimate), formatMinutes(estimate))
|
|
346
|
+
: labels.remaining(formatMinutes(estimate - liveTotal), formatMinutes(estimate))}
|
|
328
347
|
<div class="flex flex-col gap-1">
|
|
329
|
-
|
|
348
|
+
<!-- The meter speaks the budget line, so the line below stays out of the reading order. -->
|
|
349
|
+
<Meter.Root
|
|
350
|
+
value={Math.min(liveTotal, estimate)}
|
|
351
|
+
max={estimate}
|
|
352
|
+
aria-labelledby={loggedId}
|
|
353
|
+
aria-valuetext={budget}
|
|
354
|
+
class={cn("h-1 overflow-hidden bg-muted", ganttLooks.track)}
|
|
355
|
+
>
|
|
330
356
|
<div
|
|
331
357
|
class={cn("time-segment h-full", ganttLooks.track)}
|
|
332
358
|
style:background={tone === "neutral"
|
|
@@ -334,16 +360,15 @@
|
|
|
334
360
|
: TONE_COLOR[tone]}
|
|
335
361
|
style:width="{Math.min(100, percent)}%"
|
|
336
362
|
></div>
|
|
337
|
-
</
|
|
363
|
+
</Meter.Root>
|
|
338
364
|
<p
|
|
339
365
|
class={cn(
|
|
340
366
|
"text-xs tabular-nums",
|
|
341
367
|
tone === "neutral" ? "text-muted-foreground" : TONE_TEXT[tone],
|
|
342
368
|
)}
|
|
369
|
+
aria-hidden="true"
|
|
343
370
|
>
|
|
344
|
-
{
|
|
345
|
-
? labels.over(formatMinutes(liveTotal - estimate), formatMinutes(estimate))
|
|
346
|
-
: labels.remaining(formatMinutes(estimate - liveTotal), formatMinutes(estimate))}
|
|
371
|
+
{budget}
|
|
347
372
|
</p>
|
|
348
373
|
</div>
|
|
349
374
|
{/if}
|