@joewinke/jatui 0.36.3 → 0.38.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/artifact-blocks/AttachmentChip.svelte +66 -0
- package/dist/artifact-blocks/AttachmentChip.svelte.d.ts +7 -0
- package/dist/artifact-blocks/BlockComments.svelte +309 -0
- package/dist/artifact-blocks/BlockComments.svelte.d.ts +33 -0
- package/dist/artifact-blocks/BlockRenderer.svelte +674 -0
- package/dist/artifact-blocks/BlockRenderer.svelte.d.ts +55 -0
- package/dist/artifact-blocks/BlockVerdict.svelte +151 -0
- package/dist/artifact-blocks/BlockVerdict.svelte.d.ts +13 -0
- package/dist/artifact-blocks/BlocksArtifactView.svelte +1616 -0
- package/dist/artifact-blocks/BlocksArtifactView.svelte.d.ts +113 -0
- package/dist/artifact-blocks/CONTRACT.md +225 -0
- package/dist/artifact-blocks/CommentPill.svelte +49 -0
- package/dist/artifact-blocks/CommentPill.svelte.d.ts +16 -0
- package/dist/artifact-blocks/FoldedRounds.svelte +95 -0
- package/dist/artifact-blocks/FoldedRounds.svelte.d.ts +9 -0
- package/dist/artifact-blocks/Glyph.svelte +54 -0
- package/dist/artifact-blocks/Glyph.svelte.d.ts +10 -0
- package/dist/artifact-blocks/HistoryScrubber.svelte +500 -0
- package/dist/artifact-blocks/HistoryScrubber.svelte.d.ts +15 -0
- package/dist/artifact-blocks/Markdown.svelte +186 -0
- package/dist/artifact-blocks/Markdown.svelte.d.ts +30 -0
- package/dist/artifact-blocks/NoteComposer.svelte +31 -0
- package/dist/artifact-blocks/NoteComposer.svelte.d.ts +8 -0
- package/dist/artifact-blocks/PlainComposer.svelte +200 -0
- package/dist/artifact-blocks/PlainComposer.svelte.d.ts +15 -0
- package/dist/artifact-blocks/SectionTools.svelte +102 -0
- package/dist/artifact-blocks/SectionTools.svelte.d.ts +19 -0
- package/dist/artifact-blocks/adapter.d.ts +13 -0
- package/dist/artifact-blocks/adapter.js +31 -0
- package/dist/artifact-blocks/autoSend.d.ts +49 -0
- package/dist/artifact-blocks/autoSend.js +103 -0
- package/dist/artifact-blocks/blocks/actions/ActionsBlock.svelte +557 -0
- package/dist/artifact-blocks/blocks/actions/ActionsBlock.svelte.d.ts +48 -0
- package/dist/artifact-blocks/blocks/actions/block.d.ts +8 -0
- package/dist/artifact-blocks/blocks/actions/block.js +74 -0
- package/dist/artifact-blocks/blocks/actions/requests.d.ts +62 -0
- package/dist/artifact-blocks/blocks/actions/requests.js +26 -0
- package/dist/artifact-blocks/blocks/actions/schema.d.ts +168 -0
- package/dist/artifact-blocks/blocks/actions/schema.js +253 -0
- package/dist/artifact-blocks/blocks/callout/CalloutBlock.svelte +779 -0
- package/dist/artifact-blocks/blocks/callout/CalloutBlock.svelte.d.ts +40 -0
- package/dist/artifact-blocks/blocks/callout/block.d.ts +7 -0
- package/dist/artifact-blocks/blocks/callout/block.js +39 -0
- package/dist/artifact-blocks/blocks/callout/schema.d.ts +72 -0
- package/dist/artifact-blocks/blocks/callout/schema.js +115 -0
- package/dist/artifact-blocks/blocks/chart/ChartBlock.svelte +875 -0
- package/dist/artifact-blocks/blocks/chart/ChartBlock.svelte.d.ts +59 -0
- package/dist/artifact-blocks/blocks/chart/block.d.ts +9 -0
- package/dist/artifact-blocks/blocks/chart/block.js +70 -0
- package/dist/artifact-blocks/blocks/chart/schema.d.ts +171 -0
- package/dist/artifact-blocks/blocks/chart/schema.js +498 -0
- package/dist/artifact-blocks/blocks/chart/thumb.d.ts +2 -0
- package/dist/artifact-blocks/blocks/chart/thumb.js +201 -0
- package/dist/artifact-blocks/blocks/checklist/ChecklistBlock.svelte +1048 -0
- package/dist/artifact-blocks/blocks/checklist/ChecklistBlock.svelte.d.ts +16 -0
- package/dist/artifact-blocks/blocks/checklist/Icon.svelte +105 -0
- package/dist/artifact-blocks/blocks/checklist/Icon.svelte.d.ts +17 -0
- package/dist/artifact-blocks/blocks/checklist/block.d.ts +10 -0
- package/dist/artifact-blocks/blocks/checklist/block.js +63 -0
- package/dist/artifact-blocks/blocks/checklist/itemReview.d.ts +16 -0
- package/dist/artifact-blocks/blocks/checklist/itemReview.js +63 -0
- package/dist/artifact-blocks/blocks/checklist/labels.d.ts +62 -0
- package/dist/artifact-blocks/blocks/checklist/labels.js +96 -0
- package/dist/artifact-blocks/blocks/checklist/retest.d.ts +43 -0
- package/dist/artifact-blocks/blocks/checklist/retest.js +68 -0
- package/dist/artifact-blocks/blocks/checklist/schema.d.ts +84 -0
- package/dist/artifact-blocks/blocks/checklist/schema.js +91 -0
- package/dist/artifact-blocks/blocks/code/CodeBlock.svelte +128 -0
- package/dist/artifact-blocks/blocks/code/CodeBlock.svelte.d.ts +12 -0
- package/dist/artifact-blocks/blocks/code/block.d.ts +8 -0
- package/dist/artifact-blocks/blocks/code/block.js +31 -0
- package/dist/artifact-blocks/blocks/code/highlight.d.ts +34 -0
- package/dist/artifact-blocks/blocks/code/highlight.js +280 -0
- package/dist/artifact-blocks/blocks/code/schema.d.ts +32 -0
- package/dist/artifact-blocks/blocks/code/schema.js +39 -0
- package/dist/artifact-blocks/blocks/collage/CollageBlock.svelte +290 -0
- package/dist/artifact-blocks/blocks/collage/CollageBlock.svelte.d.ts +29 -0
- package/dist/artifact-blocks/blocks/collage/block.d.ts +9 -0
- package/dist/artifact-blocks/blocks/collage/block.js +29 -0
- package/dist/artifact-blocks/blocks/collage/schema.d.ts +52 -0
- package/dist/artifact-blocks/blocks/collage/schema.js +86 -0
- package/dist/artifact-blocks/blocks/compare/CompareBlock.svelte +484 -0
- package/dist/artifact-blocks/blocks/compare/CompareBlock.svelte.d.ts +25 -0
- package/dist/artifact-blocks/blocks/compare/block.d.ts +9 -0
- package/dist/artifact-blocks/blocks/compare/block.js +32 -0
- package/dist/artifact-blocks/blocks/compare/schema.d.ts +74 -0
- package/dist/artifact-blocks/blocks/compare/schema.js +148 -0
- package/dist/artifact-blocks/blocks/diagram/DiagramBlock.svelte +392 -0
- package/dist/artifact-blocks/blocks/diagram/DiagramBlock.svelte.d.ts +30 -0
- package/dist/artifact-blocks/blocks/diagram/block.d.ts +9 -0
- package/dist/artifact-blocks/blocks/diagram/block.js +50 -0
- package/dist/artifact-blocks/blocks/diagram/constants.d.ts +48 -0
- package/dist/artifact-blocks/blocks/diagram/constants.js +53 -0
- package/dist/artifact-blocks/blocks/diagram/schema.d.ts +161 -0
- package/dist/artifact-blocks/blocks/diagram/schema.js +621 -0
- package/dist/artifact-blocks/blocks/diagram/thumb.d.ts +2 -0
- package/dist/artifact-blocks/blocks/diagram/thumb.js +157 -0
- package/dist/artifact-blocks/blocks/diagram/types.d.ts +74 -0
- package/dist/artifact-blocks/blocks/diagram/types.js +1 -0
- package/dist/artifact-blocks/blocks/diff/DiffBlock.svelte +81 -0
- package/dist/artifact-blocks/blocks/diff/DiffBlock.svelte.d.ts +10 -0
- package/dist/artifact-blocks/blocks/diff/block.d.ts +7 -0
- package/dist/artifact-blocks/blocks/diff/block.js +36 -0
- package/dist/artifact-blocks/blocks/diff/schema.d.ts +18 -0
- package/dist/artifact-blocks/blocks/diff/schema.js +35 -0
- package/dist/artifact-blocks/blocks/diff-review/DiffReviewBlock.svelte +1055 -0
- package/dist/artifact-blocks/blocks/diff-review/DiffReviewBlock.svelte.d.ts +5 -0
- package/dist/artifact-blocks/blocks/diff-review/block.d.ts +15 -0
- package/dist/artifact-blocks/blocks/diff-review/block.js +64 -0
- package/dist/artifact-blocks/blocks/diff-review/decisions.d.ts +57 -0
- package/dist/artifact-blocks/blocks/diff-review/decisions.js +80 -0
- package/dist/artifact-blocks/blocks/diff-review/schema.d.ts +13 -0
- package/dist/artifact-blocks/blocks/diff-review/schema.js +84 -0
- package/dist/artifact-blocks/blocks/diff-review/types.d.ts +35 -0
- package/dist/artifact-blocks/blocks/diff-review/types.js +1 -0
- package/dist/artifact-blocks/blocks/explainer/ExplainerBlock.svelte +145 -0
- package/dist/artifact-blocks/blocks/explainer/ExplainerBlock.svelte.d.ts +5 -0
- package/dist/artifact-blocks/blocks/explainer/block.d.ts +8 -0
- package/dist/artifact-blocks/blocks/explainer/block.js +21 -0
- package/dist/artifact-blocks/blocks/explainer/schema.d.ts +26 -0
- package/dist/artifact-blocks/blocks/explainer/schema.js +69 -0
- package/dist/artifact-blocks/blocks/group-content.d.ts +10 -0
- package/dist/artifact-blocks/blocks/group-content.js +16 -0
- package/dist/artifact-blocks/blocks/group-data.d.ts +10 -0
- package/dist/artifact-blocks/blocks/group-data.js +7 -0
- package/dist/artifact-blocks/blocks/group-review.d.ts +10 -0
- package/dist/artifact-blocks/blocks/group-review.js +12 -0
- package/dist/artifact-blocks/blocks/group-visual.d.ts +17 -0
- package/dist/artifact-blocks/blocks/group-visual.js +14 -0
- package/dist/artifact-blocks/blocks/map/MapBlock.svelte +413 -0
- package/dist/artifact-blocks/blocks/map/MapBlock.svelte.d.ts +53 -0
- package/dist/artifact-blocks/blocks/map/block.d.ts +9 -0
- package/dist/artifact-blocks/blocks/map/block.js +62 -0
- package/dist/artifact-blocks/blocks/map/schema.d.ts +123 -0
- package/dist/artifact-blocks/blocks/map/schema.js +113 -0
- package/dist/artifact-blocks/blocks/map/thumb.d.ts +2 -0
- package/dist/artifact-blocks/blocks/map/thumb.js +69 -0
- package/dist/artifact-blocks/blocks/markdown/MarkdownBlock.svelte +33 -0
- package/dist/artifact-blocks/blocks/markdown/MarkdownBlock.svelte.d.ts +15 -0
- package/dist/artifact-blocks/blocks/markdown/block.d.ts +7 -0
- package/dist/artifact-blocks/blocks/markdown/block.js +28 -0
- package/dist/artifact-blocks/blocks/markdown/render.d.ts +17 -0
- package/dist/artifact-blocks/blocks/markdown/render.js +115 -0
- package/dist/artifact-blocks/blocks/markdown/schema.d.ts +10 -0
- package/dist/artifact-blocks/blocks/markdown/schema.js +23 -0
- package/dist/artifact-blocks/blocks/media-picker/MediaPickerBlock.svelte +2112 -0
- package/dist/artifact-blocks/blocks/media-picker/MediaPickerBlock.svelte.d.ts +5 -0
- package/dist/artifact-blocks/blocks/media-picker/block.d.ts +24 -0
- package/dist/artifact-blocks/blocks/media-picker/block.js +137 -0
- package/dist/artifact-blocks/blocks/media-picker/choices.d.ts +28 -0
- package/dist/artifact-blocks/blocks/media-picker/choices.js +35 -0
- package/dist/artifact-blocks/blocks/media-picker/decisions.d.ts +51 -0
- package/dist/artifact-blocks/blocks/media-picker/decisions.js +75 -0
- package/dist/artifact-blocks/blocks/media-picker/schema.d.ts +7 -0
- package/dist/artifact-blocks/blocks/media-picker/schema.js +199 -0
- package/dist/artifact-blocks/blocks/media-picker/types.d.ts +92 -0
- package/dist/artifact-blocks/blocks/media-picker/types.js +1 -0
- package/dist/artifact-blocks/blocks/media-picker/versions.d.ts +51 -0
- package/dist/artifact-blocks/blocks/media-picker/versions.js +118 -0
- package/dist/artifact-blocks/blocks/mockup/MockupBlock.svelte +213 -0
- package/dist/artifact-blocks/blocks/mockup/MockupBlock.svelte.d.ts +5 -0
- package/dist/artifact-blocks/blocks/mockup/block.d.ts +26 -0
- package/dist/artifact-blocks/blocks/mockup/block.js +52 -0
- package/dist/artifact-blocks/blocks/mockup/doc.d.ts +24 -0
- package/dist/artifact-blocks/blocks/mockup/doc.js +44 -0
- package/dist/artifact-blocks/blocks/mockup/sandbox.d.ts +21 -0
- package/dist/artifact-blocks/blocks/mockup/sandbox.js +27 -0
- package/dist/artifact-blocks/blocks/mockup/schema.d.ts +7 -0
- package/dist/artifact-blocks/blocks/mockup/schema.js +90 -0
- package/dist/artifact-blocks/blocks/mockup/types.d.ts +36 -0
- package/dist/artifact-blocks/blocks/mockup/types.js +17 -0
- package/dist/artifact-blocks/blocks/program/ProgramBlock.svelte +359 -0
- package/dist/artifact-blocks/blocks/program/ProgramBlock.svelte.d.ts +32 -0
- package/dist/artifact-blocks/blocks/program/block.d.ts +35 -0
- package/dist/artifact-blocks/blocks/program/block.js +68 -0
- package/dist/artifact-blocks/blocks/program/schema.d.ts +132 -0
- package/dist/artifact-blocks/blocks/program/schema.js +268 -0
- package/dist/artifact-blocks/blocks/stats/StatsBlock.svelte +315 -0
- package/dist/artifact-blocks/blocks/stats/StatsBlock.svelte.d.ts +24 -0
- package/dist/artifact-blocks/blocks/stats/block.d.ts +7 -0
- package/dist/artifact-blocks/blocks/stats/block.js +49 -0
- package/dist/artifact-blocks/blocks/stats/schema.d.ts +82 -0
- package/dist/artifact-blocks/blocks/stats/schema.js +43 -0
- package/dist/artifact-blocks/blocks/stats/thumb.d.ts +2 -0
- package/dist/artifact-blocks/blocks/stats/thumb.js +102 -0
- package/dist/artifact-blocks/blocks/table/TableBlock.svelte +490 -0
- package/dist/artifact-blocks/blocks/table/TableBlock.svelte.d.ts +28 -0
- package/dist/artifact-blocks/blocks/table/block.d.ts +9 -0
- package/dist/artifact-blocks/blocks/table/block.js +100 -0
- package/dist/artifact-blocks/blocks/table/schema.d.ts +143 -0
- package/dist/artifact-blocks/blocks/table/schema.js +278 -0
- package/dist/artifact-blocks/blocks/timeline/TimelineBlock.svelte +347 -0
- package/dist/artifact-blocks/blocks/timeline/TimelineBlock.svelte.d.ts +42 -0
- package/dist/artifact-blocks/blocks/timeline/block.d.ts +9 -0
- package/dist/artifact-blocks/blocks/timeline/block.js +96 -0
- package/dist/artifact-blocks/blocks/timeline/constants.d.ts +26 -0
- package/dist/artifact-blocks/blocks/timeline/constants.js +27 -0
- package/dist/artifact-blocks/blocks/timeline/schema.d.ts +102 -0
- package/dist/artifact-blocks/blocks/timeline/schema.js +405 -0
- package/dist/artifact-blocks/blocks/timeline/thumb.d.ts +2 -0
- package/dist/artifact-blocks/blocks/timeline/thumb.js +117 -0
- package/dist/artifact-blocks/blocks/timeline/types.d.ts +66 -0
- package/dist/artifact-blocks/blocks/timeline/types.js +1 -0
- package/dist/artifact-blocks/blocks/transcript/TranscriptBlock.svelte +169 -0
- package/dist/artifact-blocks/blocks/transcript/TranscriptBlock.svelte.d.ts +26 -0
- package/dist/artifact-blocks/blocks/transcript/block.d.ts +9 -0
- package/dist/artifact-blocks/blocks/transcript/block.js +86 -0
- package/dist/artifact-blocks/blocks/transcript/schema.d.ts +114 -0
- package/dist/artifact-blocks/blocks/transcript/schema.js +126 -0
- package/dist/artifact-blocks/builtins.d.ts +40 -0
- package/dist/artifact-blocks/builtins.js +22 -0
- package/dist/artifact-blocks/contractBlocks.d.ts +92 -0
- package/dist/artifact-blocks/contractBlocks.js +279 -0
- package/dist/artifact-blocks/history.d.ts +140 -0
- package/dist/artifact-blocks/history.js +363 -0
- package/dist/artifact-blocks/index.d.ts +40 -0
- package/dist/artifact-blocks/index.js +46 -0
- package/dist/artifact-blocks/listen/context.d.ts +30 -0
- package/dist/artifact-blocks/listen/context.js +30 -0
- package/dist/artifact-blocks/liveData.d.ts +78 -0
- package/dist/artifact-blocks/liveData.js +137 -0
- package/dist/artifact-blocks/liveDataPoller.d.ts +41 -0
- package/dist/artifact-blocks/liveDataPoller.js +140 -0
- package/dist/artifact-blocks/openNav.d.ts +46 -0
- package/dist/artifact-blocks/openNav.js +106 -0
- package/dist/artifact-blocks/pageReviewKeys.d.ts +17 -0
- package/dist/artifact-blocks/pageReviewKeys.js +115 -0
- package/dist/artifact-blocks/params.d.ts +98 -0
- package/dist/artifact-blocks/params.js +159 -0
- package/dist/artifact-blocks/registry.d.ts +27 -0
- package/dist/artifact-blocks/registry.js +83 -0
- package/dist/artifact-blocks/review/BlockIcon.svelte +99 -0
- package/dist/artifact-blocks/review/BlockIcon.svelte.d.ts +17 -0
- package/dist/artifact-blocks/review/BulkRejectForm.svelte +94 -0
- package/dist/artifact-blocks/review/BulkRejectForm.svelte.d.ts +11 -0
- package/dist/artifact-blocks/review/BulkUndoBar.svelte +40 -0
- package/dist/artifact-blocks/review/BulkUndoBar.svelte.d.ts +9 -0
- package/dist/artifact-blocks/review/ItemNote.svelte +193 -0
- package/dist/artifact-blocks/review/ItemNote.svelte.d.ts +33 -0
- package/dist/artifact-blocks/review/NoteToggle.svelte +52 -0
- package/dist/artifact-blocks/review/NoteToggle.svelte.d.ts +12 -0
- package/dist/artifact-blocks/review/TeamChip.svelte +71 -0
- package/dist/artifact-blocks/review/TeamChip.svelte.d.ts +8 -0
- package/dist/artifact-blocks/review/attachments.d.ts +10 -0
- package/dist/artifact-blocks/review/attachments.js +37 -0
- package/dist/artifact-blocks/review/bulk.d.ts +52 -0
- package/dist/artifact-blocks/review/bulk.js +61 -0
- package/dist/artifact-blocks/review/itemReview.d.ts +33 -0
- package/dist/artifact-blocks/review/itemReview.js +112 -0
- package/dist/artifact-blocks/review/roundLines.d.ts +14 -0
- package/dist/artifact-blocks/review/roundLines.js +20 -0
- package/dist/artifact-blocks/review/rounds.d.ts +86 -0
- package/dist/artifact-blocks/review/rounds.js +302 -0
- package/dist/artifact-blocks/review/saver.d.ts +23 -0
- package/dist/artifact-blocks/review/saver.js +48 -0
- package/dist/artifact-blocks/review/team.d.ts +31 -0
- package/dist/artifact-blocks/review/team.js +42 -0
- package/dist/artifact-blocks/review/visualOrder.d.ts +29 -0
- package/dist/artifact-blocks/review/visualOrder.js +66 -0
- package/dist/artifact-blocks/review.d.ts +180 -0
- package/dist/artifact-blocks/review.js +716 -0
- package/dist/artifact-blocks/thumb-kit.d.ts +80 -0
- package/dist/artifact-blocks/thumb-kit.js +149 -0
- package/dist/artifact-blocks/types.d.ts +513 -0
- package/dist/artifact-blocks/types.js +1 -0
- package/dist/components/Button.svelte +8 -0
- package/dist/components/TextInput.svelte +39 -6
- package/dist/components/TextInput.svelte.d.ts +15 -7
- package/dist/components/basic/Checkbox.svelte +52 -14
- package/dist/components/basic/Checkbox.svelte.d.ts +11 -1
- package/package.json +11 -2
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { BlocksSpec, HostAdapter } from "./types.js";
|
|
2
|
+
interface Props {
|
|
3
|
+
spec: BlocksSpec;
|
|
4
|
+
artifactId: string;
|
|
5
|
+
version: number;
|
|
6
|
+
/** This viewer's saved per-block state: blockId → its saved blob. */
|
|
7
|
+
savedBlocks?: Record<string, unknown> | null;
|
|
8
|
+
/**
|
|
9
|
+
* Persist the WHOLE per-block state map (debounced here). Omit on a
|
|
10
|
+
* read-only surface — blocks then get ctx.saveState === undefined. The
|
|
11
|
+
* renderer owns the merge: it posts its current map (the touched block's
|
|
12
|
+
* new state plus every other block's latest), so a host page can POST it
|
|
13
|
+
* verbatim and never hold a stale copy.
|
|
14
|
+
*/
|
|
15
|
+
onSaveBlock?: (payload: {
|
|
16
|
+
kind: "blocks";
|
|
17
|
+
blocks: Record<string, unknown>;
|
|
18
|
+
}) => Promise<void>;
|
|
19
|
+
/** True on the public share route — blocks must not show viewer chrome. */
|
|
20
|
+
readonly?: boolean;
|
|
21
|
+
/** Live data published for the artifact; {} when none. */
|
|
22
|
+
data?: Record<string, unknown>;
|
|
23
|
+
/** Save-status changes, for the host page's header indicator. */
|
|
24
|
+
onStatus?: (status: "idle" | "saving" | "saved" | "failed") => void;
|
|
25
|
+
/**
|
|
26
|
+
* Per-block comment threads (mos-kib2f). Undefined on the read-only
|
|
27
|
+
* share surface — blocks render with no viewer chrome, per the contract.
|
|
28
|
+
*/
|
|
29
|
+
comments?: {
|
|
30
|
+
enabled: boolean;
|
|
31
|
+
/** Unresolved counts per block (server-rendered). */
|
|
32
|
+
counts: Record<string, number>;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Per-block approve / needs-a-pass / note (mos-wywa3): on for a page
|
|
36
|
+
* linked to a jat task, where "Finish review" answers that task. Each
|
|
37
|
+
* verdict saves under the block's `review:<blockId>` key.
|
|
38
|
+
*/
|
|
39
|
+
review?: boolean;
|
|
40
|
+
/** Every change to the local state map, for the host's Finish review. */
|
|
41
|
+
onLocalChange?: (blocks: Record<string, unknown>) => void;
|
|
42
|
+
/**
|
|
43
|
+
* The host's services (comments, composer, listen, block services…).
|
|
44
|
+
* Omit inside BlocksArtifactView (it provides its own); set it when
|
|
45
|
+
* mounting the renderer alone.
|
|
46
|
+
*/
|
|
47
|
+
adapter?: HostAdapter;
|
|
48
|
+
}
|
|
49
|
+
declare const BlockRenderer: import("svelte").Component<Props, {
|
|
50
|
+
revealBlock: (blockId: string) => boolean;
|
|
51
|
+
flush: () => Promise<void>;
|
|
52
|
+
failedSaveBlocks: () => string[];
|
|
53
|
+
}, "">;
|
|
54
|
+
type BlockRenderer = ReturnType<typeof BlockRenderer>;
|
|
55
|
+
export default BlockRenderer;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* BlockVerdict (origin mos-wywa3) — the per-block approve / needs-a-pass /
|
|
4
|
+
* note strip a review page shows under each block that takes a verdict.
|
|
5
|
+
*
|
|
6
|
+
* Pure chrome: it renders the saved verdict and hands every change to the
|
|
7
|
+
* renderer, which saves it under the block's reserved `review:<blockId>`
|
|
8
|
+
* key (review.ts). Nothing here talks to the network. The verdicts are
|
|
9
|
+
* drafts until the viewer presses "Finish review", which sends them as ONE
|
|
10
|
+
* answer to the linked task.
|
|
11
|
+
*
|
|
12
|
+
* The verdict is jatui VerdictControl at size xs, the same control every
|
|
13
|
+
* review block uses — a repeat press of the active verdict does nothing;
|
|
14
|
+
* clearing is the explicit Undo. The note survives an Undo. The note is
|
|
15
|
+
* the host's composer (NoteComposer → HostAdapter.composer).
|
|
16
|
+
*/
|
|
17
|
+
import VerdictControl from "../components/review/VerdictControl.svelte"
|
|
18
|
+
import type { VerdictOption } from "../actions/reviewKeys"
|
|
19
|
+
import NoteComposer from "./NoteComposer.svelte"
|
|
20
|
+
import type { BlockReviewState, NoteAttachment } from "./types.js"
|
|
21
|
+
|
|
22
|
+
type Verdict = NonNullable<BlockReviewState["verdict"]>
|
|
23
|
+
const VERDICTS: VerdictOption[] = [
|
|
24
|
+
{ id: "approved", label: "Approve", tone: "success", key: "a" },
|
|
25
|
+
{
|
|
26
|
+
id: "needs-pass",
|
|
27
|
+
label: "Needs a pass",
|
|
28
|
+
tone: "warning",
|
|
29
|
+
key: "x",
|
|
30
|
+
opensNote: true,
|
|
31
|
+
},
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
interface Props {
|
|
35
|
+
/** The artifact this page serves — the composer's upload leg targets it. */
|
|
36
|
+
artifactId: string
|
|
37
|
+
blockId: string
|
|
38
|
+
blockLabel: string
|
|
39
|
+
saved: BlockReviewState | null
|
|
40
|
+
/** Undefined on a surface that cannot save: the strip renders disabled. */
|
|
41
|
+
onChange?: (next: BlockReviewState) => void
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
let {
|
|
45
|
+
artifactId,
|
|
46
|
+
blockId,
|
|
47
|
+
blockLabel,
|
|
48
|
+
saved,
|
|
49
|
+
onChange = undefined,
|
|
50
|
+
}: Props = $props()
|
|
51
|
+
|
|
52
|
+
const verdict = $derived(saved?.verdict ?? null)
|
|
53
|
+
let noteOpen = $state(false)
|
|
54
|
+
let draft = $state("")
|
|
55
|
+
/** The note's attachments — descriptors of clips the host already stored. */
|
|
56
|
+
let clips = $state<NoteAttachment[]>([])
|
|
57
|
+
$effect(() => {
|
|
58
|
+
draft = saved?.note ?? ""
|
|
59
|
+
})
|
|
60
|
+
$effect(() => {
|
|
61
|
+
clips = saved?.attachments ?? []
|
|
62
|
+
})
|
|
63
|
+
const hasNote = $derived(Boolean(saved?.note) || clips.length > 0)
|
|
64
|
+
|
|
65
|
+
/** VerdictControl only calls this with a NEW verdict, never the active one. */
|
|
66
|
+
function setVerdict(next: Verdict) {
|
|
67
|
+
if (!onChange) return
|
|
68
|
+
const out: BlockReviewState = { verdict: next }
|
|
69
|
+
if (saved?.note) out.note = saved.note
|
|
70
|
+
if (clips.length) out.attachments = clips
|
|
71
|
+
onChange(out)
|
|
72
|
+
if (next === "needs-pass" && !saved?.note) noteOpen = true
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function undoVerdict() {
|
|
76
|
+
if (!onChange) return
|
|
77
|
+
const out: BlockReviewState = {}
|
|
78
|
+
if (saved?.note) out.note = saved.note
|
|
79
|
+
if (clips.length) out.attachments = clips
|
|
80
|
+
onChange(out)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Save the note text + its current attachments (the composer's clip
|
|
84
|
+
* change fires it; blur flushes a pending text edit). */
|
|
85
|
+
function saveNote(text: string, nextClips: NoteAttachment[]) {
|
|
86
|
+
if (!onChange) return
|
|
87
|
+
const note = text.trim().slice(0, 2000)
|
|
88
|
+
if (
|
|
89
|
+
note === (saved?.note ?? "") &&
|
|
90
|
+
JSON.stringify(nextClips) === JSON.stringify(saved?.attachments ?? [])
|
|
91
|
+
)
|
|
92
|
+
return
|
|
93
|
+
const out: BlockReviewState = {}
|
|
94
|
+
if (verdict) out.verdict = verdict
|
|
95
|
+
if (note) out.note = note
|
|
96
|
+
if (nextClips.length) out.attachments = nextClips
|
|
97
|
+
onChange(out)
|
|
98
|
+
}
|
|
99
|
+
</script>
|
|
100
|
+
|
|
101
|
+
<div
|
|
102
|
+
class="border-base-content/10 mt-2 flex flex-wrap items-center gap-2 border-t pt-2"
|
|
103
|
+
role="group"
|
|
104
|
+
aria-label={`Your verdict on ${blockLabel}`}
|
|
105
|
+
data-block-verdict={blockId}
|
|
106
|
+
>
|
|
107
|
+
<VerdictControl
|
|
108
|
+
options={VERDICTS}
|
|
109
|
+
value={verdict}
|
|
110
|
+
size="xs"
|
|
111
|
+
label={`Verdict on ${blockLabel}`}
|
|
112
|
+
undoLabel="Undo"
|
|
113
|
+
disabled={!onChange}
|
|
114
|
+
onVerdict={(v) => setVerdict(v as Verdict)}
|
|
115
|
+
onUndo={undoVerdict}
|
|
116
|
+
/>
|
|
117
|
+
<button
|
|
118
|
+
type="button"
|
|
119
|
+
class="btn btn-xs btn-ghost rounded-field"
|
|
120
|
+
aria-expanded={noteOpen}
|
|
121
|
+
aria-controls={`verdict-note-${blockId}`}
|
|
122
|
+
disabled={!onChange}
|
|
123
|
+
onclick={() => (noteOpen = !noteOpen)}
|
|
124
|
+
>
|
|
125
|
+
{hasNote ? "Edit note" : "Add note"}
|
|
126
|
+
</button>
|
|
127
|
+
{#if hasNote && !noteOpen}
|
|
128
|
+
<span class="text-base-content/60 min-w-0 flex-1 truncate text-xs">
|
|
129
|
+
“{saved?.note}”
|
|
130
|
+
</span>
|
|
131
|
+
{/if}
|
|
132
|
+
{#if noteOpen}
|
|
133
|
+
<div id={`verdict-note-${blockId}`} class="w-full">
|
|
134
|
+
<!-- The ONE composer: whatever the host's composer offers (MOS: voice /
|
|
135
|
+
video / screen capture, file picker, paste and drag-drop). Saving
|
|
136
|
+
rides the draft-until-Finish semantics — no submit row here. -->
|
|
137
|
+
<NoteComposer
|
|
138
|
+
{artifactId}
|
|
139
|
+
bind:text={draft}
|
|
140
|
+
bind:clips
|
|
141
|
+
onClipsChange={(next) => saveNote(draft, next)}
|
|
142
|
+
onBlur={() => saveNote(draft, clips)}
|
|
143
|
+
rows={2}
|
|
144
|
+
maxLength={2000}
|
|
145
|
+
placeholder="What should change?"
|
|
146
|
+
label={`Note on ${blockLabel}`}
|
|
147
|
+
autofocus
|
|
148
|
+
/>
|
|
149
|
+
</div>
|
|
150
|
+
{/if}
|
|
151
|
+
</div>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BlockReviewState } from "./types.js";
|
|
2
|
+
interface Props {
|
|
3
|
+
/** The artifact this page serves — the composer's upload leg targets it. */
|
|
4
|
+
artifactId: string;
|
|
5
|
+
blockId: string;
|
|
6
|
+
blockLabel: string;
|
|
7
|
+
saved: BlockReviewState | null;
|
|
8
|
+
/** Undefined on a surface that cannot save: the strip renders disabled. */
|
|
9
|
+
onChange?: (next: BlockReviewState) => void;
|
|
10
|
+
}
|
|
11
|
+
declare const BlockVerdict: import("svelte").Component<Props, {}, "">;
|
|
12
|
+
type BlockVerdict = ReturnType<typeof BlockVerdict>;
|
|
13
|
+
export default BlockVerdict;
|