@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,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChartBlock — SVG line / bar / area / scatter renderer (block type "chart").
|
|
3
|
+
*
|
|
4
|
+
* Hand-rolled SVG, no chart dependency: scales, ticks and stacking live in
|
|
5
|
+
* ./schema.ts (pure, unit-tested); this file is the render layer.
|
|
6
|
+
*
|
|
7
|
+
* Dataviz discipline (the ruby-kim-soak rules):
|
|
8
|
+
* - recessive grid (base-content/10, horizontal only),
|
|
9
|
+
* - honest axes (value axis always includes 0 for bar/area — an explicit
|
|
10
|
+
* yMin/yMax can extend the domain but never truncate it),
|
|
11
|
+
* - identity never by color alone (series name in the legend chips, in the
|
|
12
|
+
* direct end-labels, in the tooltip, and in the data-table fallback).
|
|
13
|
+
*
|
|
14
|
+
* Colors are tokens only: series strokes come from the `--chart-series-1..6`
|
|
15
|
+
* contract (src/lib/theme-bridge/layerchart.css, mapped to DaisyUI palette
|
|
16
|
+
* tokens) — this wrapper carries the `lc-root-container` class so those vars
|
|
17
|
+
* resolve, with `var(--color-primary)` as the fallback.
|
|
18
|
+
*/
|
|
19
|
+
import type { BlockProps } from "../../types.js";
|
|
20
|
+
declare const ChartBlock: import("svelte").Component<BlockProps<{
|
|
21
|
+
chartType: "area" | "line" | "bar" | "scatter";
|
|
22
|
+
xType: "number" | "time" | "category";
|
|
23
|
+
series: {
|
|
24
|
+
label: string;
|
|
25
|
+
axis: "left" | "right";
|
|
26
|
+
points: {
|
|
27
|
+
x: string | number;
|
|
28
|
+
y: number;
|
|
29
|
+
}[];
|
|
30
|
+
}[];
|
|
31
|
+
stacked: boolean;
|
|
32
|
+
goalLines: {
|
|
33
|
+
value: number;
|
|
34
|
+
axis: "left" | "right";
|
|
35
|
+
label?: string | undefined;
|
|
36
|
+
}[];
|
|
37
|
+
annotations: {
|
|
38
|
+
kind: "range" | "point";
|
|
39
|
+
x: string | number;
|
|
40
|
+
label: string;
|
|
41
|
+
x2?: string | number | undefined;
|
|
42
|
+
y?: number | undefined;
|
|
43
|
+
}[];
|
|
44
|
+
yFormat: "raw" | "compact" | "currency" | "percent";
|
|
45
|
+
currency: string;
|
|
46
|
+
showLegend: boolean;
|
|
47
|
+
endLabels: boolean;
|
|
48
|
+
height: number;
|
|
49
|
+
title?: string | undefined;
|
|
50
|
+
subtitle?: string | undefined;
|
|
51
|
+
xLabel?: string | undefined;
|
|
52
|
+
yLabel?: string | undefined;
|
|
53
|
+
y2Label?: string | undefined;
|
|
54
|
+
yMin?: number | undefined;
|
|
55
|
+
yMax?: number | undefined;
|
|
56
|
+
dataKey?: string | undefined;
|
|
57
|
+
}>, {}, "">;
|
|
58
|
+
type ChartBlock = ReturnType<typeof ChartBlock>;
|
|
59
|
+
export default ChartBlock;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chart block definition (block type "chart").
|
|
3
|
+
* Contract: src/lib/artifact-blocks/CONTRACT.md — registry.ts discovers this
|
|
4
|
+
* folder; nothing else registers a block.
|
|
5
|
+
*/
|
|
6
|
+
import type { ArtifactBlockDef } from "../../types.js";
|
|
7
|
+
import { type ChartParams } from "./schema.js";
|
|
8
|
+
declare const def: ArtifactBlockDef<ChartParams>;
|
|
9
|
+
export default def;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { chartSchema } from "./schema.js";
|
|
2
|
+
import ChartBlock from "./ChartBlock.svelte";
|
|
3
|
+
const def = {
|
|
4
|
+
type: "chart",
|
|
5
|
+
title: "Chart",
|
|
6
|
+
description: "Line, bar (grouped/stacked), area or scatter chart from series data. " +
|
|
7
|
+
"xType 'time' reads x as ISO dates ('2026-01-15', or epoch ms) for trends; " +
|
|
8
|
+
"xType 'number' for numeric relationships; xType 'category' reads x as labels " +
|
|
9
|
+
"in the order you list them (bars want few distinct x values). Each series is " +
|
|
10
|
+
"{label, points:[{x,y}]} — values must be finite numbers; caps 20 series and " +
|
|
11
|
+
"5000 points total. All series share one value axis; set series.axis='right' " +
|
|
12
|
+
"ONLY when a second unit genuinely differs (e.g. visitors vs revenue) and name " +
|
|
13
|
+
"it with y2Label. goalLines draw dashed horizontal targets; annotations mark a " +
|
|
14
|
+
"point (vertical line + label, optional dot) or a range (shaded band + label); " +
|
|
15
|
+
"annotation x uses the same x format as the points. stacked (bar/area only) " +
|
|
16
|
+
"sums series cumulatively. Honest axes: bar/area always include 0 — yMin/yMax " +
|
|
17
|
+
"can extend the domain but never truncate it (line/scatter may zoom). Series " +
|
|
18
|
+
"identity is carried by text (legend + direct end-labels), never color alone. " +
|
|
19
|
+
"An accessible data table is built in (screen readers get it always; sighted " +
|
|
20
|
+
"readers via 'View data') — don't pair a chart with a duplicate data table. " +
|
|
21
|
+
"Tip: keep series at 8 or fewer so direct end-labels fit; use yFormat " +
|
|
22
|
+
"('compact' for big counts, 'percent'/'currency' with currency) for readable ticks.",
|
|
23
|
+
schema: chartSchema,
|
|
24
|
+
component: ChartBlock,
|
|
25
|
+
// mos-8fvt9: the section's Listen + comment sit on the heading row.
|
|
26
|
+
hostsTools: (p) => Boolean(p.title),
|
|
27
|
+
example: {
|
|
28
|
+
chartType: "line",
|
|
29
|
+
title: "Monthly revenue",
|
|
30
|
+
subtitle: "Actual vs cost",
|
|
31
|
+
xType: "time",
|
|
32
|
+
xLabel: "Month",
|
|
33
|
+
yLabel: "Revenue",
|
|
34
|
+
yFormat: "currency",
|
|
35
|
+
series: [
|
|
36
|
+
{
|
|
37
|
+
label: "Revenue",
|
|
38
|
+
points: [
|
|
39
|
+
{ x: "2026-07-01", y: 8200 },
|
|
40
|
+
{ x: "2026-08-01", y: 9100 },
|
|
41
|
+
{ x: "2026-09-01", y: 10400 },
|
|
42
|
+
{ x: "2026-10-01", y: 9980 },
|
|
43
|
+
{ x: "2026-11-01", y: 12300 },
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
label: "Cost",
|
|
48
|
+
points: [
|
|
49
|
+
{ x: "2026-07-01", y: 5100 },
|
|
50
|
+
{ x: "2026-08-01", y: 5300 },
|
|
51
|
+
{ x: "2026-09-01", y: 5750 },
|
|
52
|
+
{ x: "2026-10-01", y: 6100 },
|
|
53
|
+
{ x: "2026-11-01", y: 6350 },
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
goalLines: [{ value: 12000, label: "Target" }],
|
|
58
|
+
annotations: [
|
|
59
|
+
{ kind: "point", x: "2026-09-01", y: 10400, label: "Price change" },
|
|
60
|
+
],
|
|
61
|
+
yFormat: "currency",
|
|
62
|
+
currency: "USD",
|
|
63
|
+
showLegend: true,
|
|
64
|
+
endLabels: true,
|
|
65
|
+
height: 280,
|
|
66
|
+
stacked: false,
|
|
67
|
+
},
|
|
68
|
+
dataParam: "dataKey",
|
|
69
|
+
};
|
|
70
|
+
export default def;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chart block — params schema, normalization and geometry helpers.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions only (no DOM) so `block.test.ts` can exercise the math and
|
|
5
|
+
* `ChartBlock.svelte` stays a thin renderer. Colors NEVER appear here — the
|
|
6
|
+
* renderer addresses the `--chart-series-N` token contract from
|
|
7
|
+
* `src/lib/theme-bridge/layerchart.css` (which maps them to DaisyUI palette
|
|
8
|
+
* tokens), so every tenant theme reskins the chart for free.
|
|
9
|
+
*
|
|
10
|
+
* Untrusted input rules (CONTRACT.md): text params are length-capped strings,
|
|
11
|
+
* numbers are finite, arrays are capped. Series/point caps exist so one
|
|
12
|
+
* artifact can't ship a 50MB SVG: 20 series, 5000 points total.
|
|
13
|
+
*/
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
declare const X_TYPES: readonly ["time", "category", "number"];
|
|
16
|
+
/** Series count past which direct end-labels stop being readable. */
|
|
17
|
+
export declare const END_LABEL_SERIES_LIMIT = 8;
|
|
18
|
+
export declare const chartSchema: z.ZodObject<{
|
|
19
|
+
chartType: z.ZodDefault<z.ZodEnum<{
|
|
20
|
+
area: "area";
|
|
21
|
+
line: "line";
|
|
22
|
+
bar: "bar";
|
|
23
|
+
scatter: "scatter";
|
|
24
|
+
}>>;
|
|
25
|
+
title: z.ZodOptional<z.ZodString>;
|
|
26
|
+
subtitle: z.ZodOptional<z.ZodString>;
|
|
27
|
+
xLabel: z.ZodOptional<z.ZodString>;
|
|
28
|
+
yLabel: z.ZodOptional<z.ZodString>;
|
|
29
|
+
y2Label: z.ZodOptional<z.ZodString>;
|
|
30
|
+
xType: z.ZodDefault<z.ZodEnum<{
|
|
31
|
+
number: "number";
|
|
32
|
+
time: "time";
|
|
33
|
+
category: "category";
|
|
34
|
+
}>>;
|
|
35
|
+
series: z.ZodArray<z.ZodObject<{
|
|
36
|
+
label: z.ZodString;
|
|
37
|
+
axis: z.ZodDefault<z.ZodEnum<{
|
|
38
|
+
left: "left";
|
|
39
|
+
right: "right";
|
|
40
|
+
}>>;
|
|
41
|
+
points: z.ZodArray<z.ZodObject<{
|
|
42
|
+
x: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
43
|
+
y: z.ZodNumber;
|
|
44
|
+
}, z.core.$strip>>;
|
|
45
|
+
}, z.core.$strip>>;
|
|
46
|
+
stacked: z.ZodDefault<z.ZodBoolean>;
|
|
47
|
+
goalLines: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
48
|
+
value: z.ZodNumber;
|
|
49
|
+
label: z.ZodOptional<z.ZodString>;
|
|
50
|
+
axis: z.ZodDefault<z.ZodEnum<{
|
|
51
|
+
left: "left";
|
|
52
|
+
right: "right";
|
|
53
|
+
}>>;
|
|
54
|
+
}, z.core.$strip>>>;
|
|
55
|
+
annotations: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
56
|
+
kind: z.ZodEnum<{
|
|
57
|
+
range: "range";
|
|
58
|
+
point: "point";
|
|
59
|
+
}>;
|
|
60
|
+
x: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
61
|
+
x2: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
62
|
+
y: z.ZodOptional<z.ZodNumber>;
|
|
63
|
+
label: z.ZodString;
|
|
64
|
+
}, z.core.$strip>>>;
|
|
65
|
+
yFormat: z.ZodDefault<z.ZodEnum<{
|
|
66
|
+
raw: "raw";
|
|
67
|
+
compact: "compact";
|
|
68
|
+
currency: "currency";
|
|
69
|
+
percent: "percent";
|
|
70
|
+
}>>;
|
|
71
|
+
currency: z.ZodDefault<z.ZodString>;
|
|
72
|
+
showLegend: z.ZodDefault<z.ZodBoolean>;
|
|
73
|
+
endLabels: z.ZodDefault<z.ZodBoolean>;
|
|
74
|
+
height: z.ZodDefault<z.ZodNumber>;
|
|
75
|
+
yMin: z.ZodOptional<z.ZodNumber>;
|
|
76
|
+
yMax: z.ZodOptional<z.ZodNumber>;
|
|
77
|
+
dataKey: z.ZodOptional<z.ZodString>;
|
|
78
|
+
}, z.core.$strip>;
|
|
79
|
+
export type ChartParams = z.infer<typeof chartSchema>;
|
|
80
|
+
export type ChartSeriesInput = ChartParams["series"][number];
|
|
81
|
+
export type ChartGoalLine = ChartParams["goalLines"][number];
|
|
82
|
+
export type ChartAnnotation = ChartParams["annotations"][number];
|
|
83
|
+
/** ISO date-only strings are parsed as LOCAL midnight so a viewer's
|
|
84
|
+
* timezone can't shift which day a tick names (a UTC parse + local format
|
|
85
|
+
* renders "Jan 4" for the 5th west of Greenwich). Full ISO timestamps and
|
|
86
|
+
* epoch milliseconds parse normally. */
|
|
87
|
+
export declare function parseTimeX(x: string | number): number;
|
|
88
|
+
export interface NormalizedPoint {
|
|
89
|
+
xNum: number;
|
|
90
|
+
y: number;
|
|
91
|
+
}
|
|
92
|
+
export interface NormalizedSeries {
|
|
93
|
+
label: string;
|
|
94
|
+
axis: "left" | "right";
|
|
95
|
+
points: NormalizedPoint[];
|
|
96
|
+
}
|
|
97
|
+
export interface NormalizedChart {
|
|
98
|
+
xType: (typeof X_TYPES)[number];
|
|
99
|
+
/** Category labels in first-appearance order (category mode). */
|
|
100
|
+
categories: string[];
|
|
101
|
+
/** Sorted unique x positions across all series. */
|
|
102
|
+
xNums: number[];
|
|
103
|
+
series: NormalizedSeries[];
|
|
104
|
+
/** Any series on a second (right) value axis. */
|
|
105
|
+
dual: boolean;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Normalize params for rendering: parse x per axis type, drop unparseable
|
|
109
|
+
* points, sort each series by x, and dedupe repeated x values keeping the
|
|
110
|
+
* LAST write (an agent re-sending a corrected value reads as an update).
|
|
111
|
+
*/
|
|
112
|
+
export declare function normalizeChart(params: ChartParams): NormalizedChart;
|
|
113
|
+
/** d3-style "nice" linear ticks: a round step whose multiples enclose
|
|
114
|
+
* [min, max]. Returns the ticks and the enclosing domain. */
|
|
115
|
+
export declare function linearTicks(min: number, max: number, count?: number): {
|
|
116
|
+
ticks: number[];
|
|
117
|
+
domain: [number, number];
|
|
118
|
+
};
|
|
119
|
+
/** Value-axis domain for a chart. `valueAxis` marks charts that encode
|
|
120
|
+
* magnitude (bar/area): their domain always includes 0 — an explicit
|
|
121
|
+
* yMin/yMax may extend it downward/upward but never truncate. */
|
|
122
|
+
export declare function valueDomain(values: number[], chartType: ChartParams["chartType"], opts?: {
|
|
123
|
+
yMin?: number;
|
|
124
|
+
yMax?: number;
|
|
125
|
+
}): [number, number];
|
|
126
|
+
/** Calendar-aware tick positions for a time axis: ~`target` ticks, snapped
|
|
127
|
+
* to real hour/day/week/month/year boundaries (never "Jan 31 15:37").
|
|
128
|
+
* Picks the step whose tick count is CLOSEST to the target — "first step
|
|
129
|
+
* above the ideal" jumps from a week to a month the moment a span crosses
|
|
130
|
+
* 7·target days, collapsing 7 good ticks into 2. */
|
|
131
|
+
export declare function timeTicks(minMs: number, maxMs: number, target?: number): number[];
|
|
132
|
+
/** A tick formatter that says what the span needs (no redundant year in a
|
|
133
|
+
* same-year span; hours get their date so a 3-day hourly chart reads). */
|
|
134
|
+
export declare function timeTickFormat(minMs: number, maxMs: number): (ms: number) => string;
|
|
135
|
+
/** Fixed en-US so a chart reads identically for every viewer and every
|
|
136
|
+
* snapshot/test; the locale is a formatting choice, not user data. */
|
|
137
|
+
export declare function formatYValue(v: number, fmt: ChartParams["yFormat"], currency: string): string;
|
|
138
|
+
/** Compact axis ticks stay round ("2k", "2M") — maximumFractionDigits 0. */
|
|
139
|
+
export declare function formatYTick(v: number, fmt: ChartParams["yFormat"], currency: string): string;
|
|
140
|
+
/** The data-table fallback always shows FULL precision — it exists to give
|
|
141
|
+
* exact values (screen readers, copy/paste); compact notation belongs to the
|
|
142
|
+
* chart marks and tooltip. */
|
|
143
|
+
export declare function formatTableValue(v: number, fmt: ChartParams["yFormat"], currency: string): string;
|
|
144
|
+
/** Index of the value closest to `target` (the crosshair's x pick). */
|
|
145
|
+
export declare function nearestIndex(values: number[], target: number): number;
|
|
146
|
+
/** Stack series into cumulative [y0, y1] segments per shared x. Missing
|
|
147
|
+
* points contribute 0 (later series still stack in their lane). Points at
|
|
148
|
+
* the same x within one series are summed (dedupe already keeps the last,
|
|
149
|
+
* so this only fires when an agent stacks pre-aggregated data). */
|
|
150
|
+
export declare function stackByX(series: NormalizedPoint[][]): {
|
|
151
|
+
xNum: number;
|
|
152
|
+
y0: number;
|
|
153
|
+
y1: number;
|
|
154
|
+
}[][];
|
|
155
|
+
/** Push apart y positions so series labels at line ends never overlap:
|
|
156
|
+
* forward pass pushes down, backward pass pulls the overflow back up.
|
|
157
|
+
* Positions are clamped inside [top, bottom]. */
|
|
158
|
+
export declare function layoutEndLabels(items: {
|
|
159
|
+
label: string;
|
|
160
|
+
y: number;
|
|
161
|
+
}[], top: number, bottom: number, gap?: number): number[];
|
|
162
|
+
/** Per-series x → y lookup (O(points) build; the render loop hits it per
|
|
163
|
+
* slot, so a `.find()` per cell would be quadratic on 5000-point charts). */
|
|
164
|
+
export declare function valueMap(points: NormalizedPoint[]): Map<number, number>;
|
|
165
|
+
/** One row per shared x; series values aligned by x (null = not present). */
|
|
166
|
+
export declare function dataTableRows(chart: NormalizedChart): {
|
|
167
|
+
x: number;
|
|
168
|
+
xLabel: string;
|
|
169
|
+
values: (number | null)[];
|
|
170
|
+
}[];
|
|
171
|
+
export {};
|