weasel-icons 0.16.0 → 0.17.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.
Files changed (136) hide show
  1. package/README.md +8 -0
  2. package/dist/icons/agent-handoff/agent-handoff-icon.d.ts +5 -0
  3. package/dist/icons/agent-handoff/agent-handoff-icon.js +9 -0
  4. package/dist/icons/agent-handoff/agent-handoff-rig.d.ts +62 -0
  5. package/dist/icons/agent-handoff/agent-handoff-rig.js +74 -0
  6. package/dist/icons/agent-loop/agent-loop-icon.d.ts +5 -0
  7. package/dist/icons/agent-loop/agent-loop-icon.js +9 -0
  8. package/dist/icons/agent-loop/agent-loop-rig.d.ts +83 -0
  9. package/dist/icons/agent-loop/agent-loop-rig.js +85 -0
  10. package/dist/icons/agent-orchestrator/agent-orchestrator-icon.d.ts +5 -0
  11. package/dist/icons/agent-orchestrator/agent-orchestrator-icon.js +9 -0
  12. package/dist/icons/agent-orchestrator/agent-orchestrator-rig.d.ts +98 -0
  13. package/dist/icons/agent-orchestrator/agent-orchestrator-rig.js +84 -0
  14. package/dist/icons/beam-search/beam-search-icon.d.ts +5 -0
  15. package/dist/icons/beam-search/beam-search-icon.js +9 -0
  16. package/dist/icons/beam-search/beam-search-rig.d.ts +72 -0
  17. package/dist/icons/beam-search/beam-search-rig.js +88 -0
  18. package/dist/icons/causal-mask/causal-mask-icon.d.ts +5 -0
  19. package/dist/icons/causal-mask/causal-mask-icon.js +9 -0
  20. package/dist/icons/causal-mask/causal-mask-rig.d.ts +64 -0
  21. package/dist/icons/causal-mask/causal-mask-rig.js +75 -0
  22. package/dist/icons/chunking/chunking-icon.d.ts +5 -0
  23. package/dist/icons/chunking/chunking-icon.js +9 -0
  24. package/dist/icons/chunking/chunking-rig.d.ts +76 -0
  25. package/dist/icons/chunking/chunking-rig.js +91 -0
  26. package/dist/icons/code-sandbox/code-sandbox-icon.d.ts +5 -0
  27. package/dist/icons/code-sandbox/code-sandbox-icon.js +9 -0
  28. package/dist/icons/code-sandbox/code-sandbox-rig.d.ts +94 -0
  29. package/dist/icons/code-sandbox/code-sandbox-rig.js +74 -0
  30. package/dist/icons/entity-extraction/entity-extraction-icon.d.ts +5 -0
  31. package/dist/icons/entity-extraction/entity-extraction-icon.js +9 -0
  32. package/dist/icons/entity-extraction/entity-extraction-rig.d.ts +199 -0
  33. package/dist/icons/entity-extraction/entity-extraction-rig.js +162 -0
  34. package/dist/icons/eval-suite/eval-suite-icon.d.ts +5 -0
  35. package/dist/icons/eval-suite/eval-suite-icon.js +9 -0
  36. package/dist/icons/eval-suite/eval-suite-rig.d.ts +147 -0
  37. package/dist/icons/eval-suite/eval-suite-rig.js +105 -0
  38. package/dist/icons/graph-rag/graph-rag-icon.d.ts +5 -0
  39. package/dist/icons/graph-rag/graph-rag-icon.js +9 -0
  40. package/dist/icons/graph-rag/graph-rag-rig.d.ts +13 -0
  41. package/dist/icons/graph-rag/graph-rag-rig.js +122 -0
  42. package/dist/icons/grounded-citation/grounded-citation-icon.d.ts +5 -0
  43. package/dist/icons/grounded-citation/grounded-citation-icon.js +9 -0
  44. package/dist/icons/grounded-citation/grounded-citation-rig.d.ts +80 -0
  45. package/dist/icons/grounded-citation/grounded-citation-rig.js +69 -0
  46. package/dist/icons/guardrail/guardrail-icon.d.ts +5 -0
  47. package/dist/icons/guardrail/guardrail-icon.js +9 -0
  48. package/dist/icons/guardrail/guardrail-rig.d.ts +71 -0
  49. package/dist/icons/guardrail/guardrail-rig.js +83 -0
  50. package/dist/icons/human-approval/human-approval-icon.d.ts +5 -0
  51. package/dist/icons/human-approval/human-approval-icon.js +9 -0
  52. package/dist/icons/human-approval/human-approval-rig.d.ts +48 -0
  53. package/dist/icons/human-approval/human-approval-rig.js +57 -0
  54. package/dist/icons/knowledge-triple/knowledge-triple-icon.d.ts +5 -0
  55. package/dist/icons/knowledge-triple/knowledge-triple-icon.js +9 -0
  56. package/dist/icons/knowledge-triple/knowledge-triple-rig.d.ts +150 -0
  57. package/dist/icons/knowledge-triple/knowledge-triple-rig.js +143 -0
  58. package/dist/icons/mcp-connector/mcp-connector-icon.d.ts +5 -0
  59. package/dist/icons/mcp-connector/mcp-connector-icon.js +9 -0
  60. package/dist/icons/mcp-connector/mcp-connector-rig.d.ts +175 -0
  61. package/dist/icons/mcp-connector/mcp-connector-rig.js +141 -0
  62. package/dist/icons/mixture-of-experts/mixture-of-experts-icon.d.ts +5 -0
  63. package/dist/icons/mixture-of-experts/mixture-of-experts-icon.js +9 -0
  64. package/dist/icons/mixture-of-experts/mixture-of-experts-rig.d.ts +15 -0
  65. package/dist/icons/mixture-of-experts/mixture-of-experts-rig.js +163 -0
  66. package/dist/icons/multi-head-attention/multi-head-attention-icon.d.ts +5 -0
  67. package/dist/icons/multi-head-attention/multi-head-attention-icon.js +9 -0
  68. package/dist/icons/multi-head-attention/multi-head-attention-rig.d.ts +52 -0
  69. package/dist/icons/multi-head-attention/multi-head-attention-rig.js +96 -0
  70. package/dist/icons/next-token/next-token-icon.d.ts +5 -0
  71. package/dist/icons/next-token/next-token-icon.js +9 -0
  72. package/dist/icons/next-token/next-token-rig.d.ts +118 -0
  73. package/dist/icons/next-token/next-token-rig.js +107 -0
  74. package/dist/icons/positional-encoding/positional-encoding-icon.d.ts +5 -0
  75. package/dist/icons/positional-encoding/positional-encoding-icon.js +9 -0
  76. package/dist/icons/positional-encoding/positional-encoding-rig.d.ts +77 -0
  77. package/dist/icons/positional-encoding/positional-encoding-rig.js +104 -0
  78. package/dist/icons/rag-retrieve/rag-retrieve-icon.d.ts +5 -0
  79. package/dist/icons/rag-retrieve/rag-retrieve-icon.js +9 -0
  80. package/dist/icons/rag-retrieve/rag-retrieve-rig.d.ts +133 -0
  81. package/dist/icons/rag-retrieve/rag-retrieve-rig.js +116 -0
  82. package/dist/icons/reranker/reranker-icon.d.ts +5 -0
  83. package/dist/icons/reranker/reranker-icon.js +9 -0
  84. package/dist/icons/reranker/reranker-rig.d.ts +150 -0
  85. package/dist/icons/reranker/reranker-rig.js +131 -0
  86. package/dist/icons/residual-stream/residual-stream-icon.d.ts +5 -0
  87. package/dist/icons/residual-stream/residual-stream-icon.js +9 -0
  88. package/dist/icons/residual-stream/residual-stream-rig.d.ts +107 -0
  89. package/dist/icons/residual-stream/residual-stream-rig.js +160 -0
  90. package/dist/icons/sampling-temperature/sampling-temperature-icon.d.ts +5 -0
  91. package/dist/icons/sampling-temperature/sampling-temperature-icon.js +9 -0
  92. package/dist/icons/sampling-temperature/sampling-temperature-rig.d.ts +34 -0
  93. package/dist/icons/sampling-temperature/sampling-temperature-rig.js +44 -0
  94. package/dist/icons/self-attention/self-attention-icon.d.ts +5 -0
  95. package/dist/icons/self-attention/self-attention-icon.js +9 -0
  96. package/dist/icons/self-attention/self-attention-rig.d.ts +16 -0
  97. package/dist/icons/self-attention/self-attention-rig.js +101 -0
  98. package/dist/icons/semantic-cache/semantic-cache-icon.d.ts +5 -0
  99. package/dist/icons/semantic-cache/semantic-cache-icon.js +9 -0
  100. package/dist/icons/semantic-cache/semantic-cache-rig.d.ts +111 -0
  101. package/dist/icons/semantic-cache/semantic-cache-rig.js +90 -0
  102. package/dist/icons/text-embedding/text-embedding-icon.d.ts +5 -0
  103. package/dist/icons/text-embedding/text-embedding-icon.js +9 -0
  104. package/dist/icons/text-embedding/text-embedding-rig.d.ts +88 -0
  105. package/dist/icons/text-embedding/text-embedding-rig.js +95 -0
  106. package/dist/icons/tool-call/tool-call-icon.d.ts +5 -0
  107. package/dist/icons/tool-call/tool-call-icon.js +9 -0
  108. package/dist/icons/tool-call/tool-call-rig.d.ts +47 -0
  109. package/dist/icons/tool-call/tool-call-rig.js +69 -0
  110. package/dist/icons/top-k-sampling/top-k-sampling-icon.d.ts +5 -0
  111. package/dist/icons/top-k-sampling/top-k-sampling-icon.js +9 -0
  112. package/dist/icons/top-k-sampling/top-k-sampling-rig.d.ts +106 -0
  113. package/dist/icons/top-k-sampling/top-k-sampling-rig.js +113 -0
  114. package/dist/icons/top-p-sampling/top-p-sampling-icon.d.ts +5 -0
  115. package/dist/icons/top-p-sampling/top-p-sampling-icon.js +9 -0
  116. package/dist/icons/top-p-sampling/top-p-sampling-rig.d.ts +79 -0
  117. package/dist/icons/top-p-sampling/top-p-sampling-rig.js +98 -0
  118. package/dist/icons/trace-spans/trace-spans-icon.d.ts +5 -0
  119. package/dist/icons/trace-spans/trace-spans-icon.js +9 -0
  120. package/dist/icons/trace-spans/trace-spans-rig.d.ts +13 -0
  121. package/dist/icons/trace-spans/trace-spans-rig.js +121 -0
  122. package/dist/icons/transformer-block/transformer-block-icon.d.ts +5 -0
  123. package/dist/icons/transformer-block/transformer-block-icon.js +9 -0
  124. package/dist/icons/transformer-block/transformer-block-rig.d.ts +17 -0
  125. package/dist/icons/transformer-block/transformer-block-rig.js +154 -0
  126. package/dist/icons/vector-search/vector-search-icon.d.ts +5 -0
  127. package/dist/icons/vector-search/vector-search-icon.js +9 -0
  128. package/dist/icons/vector-search/vector-search-rig.d.ts +137 -0
  129. package/dist/icons/vector-search/vector-search-rig.js +119 -0
  130. package/dist/index.d.ts +32 -0
  131. package/dist/index.js +32 -0
  132. package/dist/shared/icon-colors.d.ts +32 -0
  133. package/dist/source.json +1 -1
  134. package/package.json +161 -1
  135. package/skill-data/customize/SKILL.md +1 -1
  136. package/skill-data/customize/references/review.md +6 -2
@@ -0,0 +1,88 @@
1
+ /**
2
+ * A decoding tree read left to right with beam width 2. Idle shows the two beams solid among
3
+ * faint pruned alternatives. Searching rescoring: the alternatives wither back
4
+ * toward their parent and stay as cut stubs (while alive they sprout and wither again as
5
+ * they are rescored). Decoded traces the highest-scoring sequence in accent.
6
+ */
7
+ export const beamSearchStates = ['idle', 'searching', 'decoded'];
8
+ const NODE = 0.75; // stroked, so the painted node is about 3.15 units across
9
+ /** An edge that ends in its node, one stroke, so withering retracts the node first. */
10
+ const branch = (from, to) => `M${from[0]} ${from[1]}L${to[0] - NODE} ${to[1]}a${NODE} ${NODE} 0 1 0 ${2 * NODE} 0a${NODE} ${NODE} 0 1 0 ${-2 * NODE} 0`;
11
+ const R = [3.2, 12];
12
+ const A = [10.8, 7]; // kept
13
+ const B = [10.8, 17]; // kept
14
+ const C = [10.8, 12]; // pruned
15
+ const A1 = [19.4, 3.6]; // kept, best
16
+ const A2 = [19.4, 9.6]; // pruned
17
+ const B1 = [19.4, 14.4]; // kept
18
+ const B2 = [19.4, 20.4]; // pruned
19
+ const STUB = 0.45;
20
+ /** Rescoring: the candidate sprouts to full length, then withers back to its stub. */
21
+ const rescore = (delay) => ({
22
+ duration: 2.6,
23
+ repeatAfter: 3.4,
24
+ frames: [
25
+ { at: 0 },
26
+ { at: 0.06 + delay },
27
+ { at: 0.36 + delay, draw: 1 - STUB, opacity: 0.4 },
28
+ { at: 0.5 + delay, draw: 1 - STUB, opacity: 0.4 },
29
+ { at: 0.86 + delay * 0.5 },
30
+ { at: 1 },
31
+ ],
32
+ });
33
+ export const beamSearchArt = {
34
+ name: 'beam-search',
35
+ parts: [
36
+ {
37
+ name: 'pruned-step-1',
38
+ paths: [branch(R, C)],
39
+ traceLength: 14,
40
+ poses: [{ opacity: 0.28 }, { draw: STUB, opacity: 0.5 }, { draw: 0, opacity: 0 }],
41
+ gestures: [null, rescore(0), null],
42
+ },
43
+ {
44
+ name: 'pruned-step-2',
45
+ paths: [branch(A, A2), branch(B, B2)],
46
+ traceLength: 14,
47
+ poses: [{ opacity: 0.28 }, { draw: STUB, opacity: 0.5 }, { draw: 0, opacity: 0 }],
48
+ gestures: [null, rescore(0.12), null],
49
+ },
50
+ {
51
+ name: 'beams-step-1',
52
+ paths: [branch(R, A), branch(R, B)],
53
+ poses: [{}, {}, { opacity: 0.4 }],
54
+ },
55
+ {
56
+ name: 'beams-step-2',
57
+ paths: [branch(A, A1), branch(B, B1)],
58
+ poses: [{}, {}, { opacity: 0.4 }],
59
+ },
60
+ {
61
+ name: 'root',
62
+ paths: [`M${R[0] - 2} ${R[1]}a2 2 0 1 0 4 0a2 2 0 1 0 -4 0Z`],
63
+ fillOnly: 'ink',
64
+ poses: [{}, {}, {}],
65
+ },
66
+ {
67
+ // The highest-scoring sequence, traced from the prompt to its final token.
68
+ name: 'best-beam',
69
+ paths: [
70
+ `M${R[0]} ${R[1]}L${A[0] - NODE} ${A[1]}a${NODE} ${NODE} 0 1 0 ${2 * NODE} 0a${NODE} ${NODE} 0 1 0 ${-2 * NODE} 0` +
71
+ `L${A1[0] - NODE} ${A1[1]}a${NODE} ${NODE} 0 1 0 ${2 * NODE} 0a${NODE} ${NODE} 0 1 0 ${-2 * NODE} 0`,
72
+ ],
73
+ accent: true,
74
+ traceLength: 28.5,
75
+ poses: [{ draw: 0, opacity: 0 }, { draw: 0, opacity: 0 }, {}],
76
+ gestures: [
77
+ null,
78
+ null,
79
+ {
80
+ duration: 1.3,
81
+ repeatAfter: 1.3,
82
+ loop: false,
83
+ frames: [{ at: 0, draw: -1 }, { at: 0.15, draw: -1 }, { at: 0.85 }, { at: 1 }],
84
+ },
85
+ ],
86
+ },
87
+ ],
88
+ };
@@ -0,0 +1,5 @@
1
+ import type { StatefulIconProps } from "../../shared/icon-types.js";
2
+ import { type CausalMaskState } from "./causal-mask-rig.js";
3
+ export { causalMaskStates, type CausalMaskState } from "./causal-mask-rig.js";
4
+ export type CausalMaskIconProps = StatefulIconProps<CausalMaskState>;
5
+ export declare const CausalMaskIcon: import("react").NamedExoticComponent<CausalMaskIconProps>;
@@ -0,0 +1,9 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { memo } from 'react';
4
+ import { ArticulatedIcon } from "../../shared/articulated-icon.js";
5
+ import { causalMaskArt, causalMaskStates } from "./causal-mask-rig.js";
6
+ export { causalMaskStates } from "./causal-mask-rig.js";
7
+ export const CausalMaskIcon = memo(function CausalMaskIcon(props) {
8
+ return _jsx(ArticulatedIcon, { art: causalMaskArt, states: causalMaskStates, ...props });
9
+ });
@@ -0,0 +1,64 @@
1
+ /**
2
+ * The attention matrix as a framed 4×4 grid of cells. Each query row holds cells only up to its
3
+ * own column, so the cells form a lower-triangular staircase and the future (upper right) stays
4
+ * blank. Lifting the mask grows the missing cells in place.
5
+ */
6
+ export declare const causalMaskStates: readonly ["masked", "decoding", "bidirectional"];
7
+ export type CausalMaskState = (typeof causalMaskStates)[number];
8
+ export declare const causalMaskArt: {
9
+ name: string;
10
+ parts: ({
11
+ name: string;
12
+ paths: string[];
13
+ poses: {}[];
14
+ pathOffsets?: undefined;
15
+ fillOnly?: undefined;
16
+ accent?: undefined;
17
+ gestures?: undefined;
18
+ } | {
19
+ poses: ({
20
+ opacity?: undefined;
21
+ } | {
22
+ opacity: number;
23
+ })[];
24
+ name: string;
25
+ paths: string[];
26
+ pathStates: string[][];
27
+ fillOnly: "ink";
28
+ pathOffsets?: undefined;
29
+ accent?: undefined;
30
+ gestures?: undefined;
31
+ } | {
32
+ name: string;
33
+ paths: string[];
34
+ pathOffsets: number[][];
35
+ fillOnly: "ink";
36
+ accent: true;
37
+ poses: ({
38
+ opacity: number;
39
+ } | {
40
+ opacity?: undefined;
41
+ })[];
42
+ gestures: ({
43
+ duration: number;
44
+ repeatAfter: number;
45
+ frames: ({
46
+ at: number;
47
+ opacity?: undefined;
48
+ flex?: undefined;
49
+ } | {
50
+ at: number;
51
+ opacity: number;
52
+ flex?: undefined;
53
+ } | {
54
+ at: number;
55
+ opacity: number;
56
+ flex: number;
57
+ } | {
58
+ at: number;
59
+ flex: number;
60
+ opacity?: undefined;
61
+ })[];
62
+ } | null)[];
63
+ })[];
64
+ };
@@ -0,0 +1,75 @@
1
+ /**
2
+ * The attention matrix as a framed 4×4 grid of cells. Each query row holds cells only up to its
3
+ * own column, so the cells form a lower-triangular staircase and the future (upper right) stays
4
+ * blank. Lifting the mask grows the missing cells in place.
5
+ */
6
+ export const causalMaskStates = ['masked', 'decoding', 'bidirectional'];
7
+ const left = 5.5;
8
+ const size = 2.35;
9
+ const gap = 1.2;
10
+ const pitch = size + gap;
11
+ const f = (n) => +n.toFixed(2);
12
+ const square = (x1, x2, row) => {
13
+ const top = f(left + pitch * (row - 1));
14
+ return `M${f(x1)} ${top}H${f(x2)}V${f(top + size)}H${f(x1)}Z`;
15
+ };
16
+ /** Cells 1..4 of a row; cells beyond `reach` are collapsed to zero width at their own left edge. */
17
+ const cells = (row, reach) => [1, 2, 3, 4]
18
+ .map((j) => {
19
+ const x = left + pitch * (j - 1);
20
+ return square(x, j <= reach ? x + size : x, row);
21
+ })
22
+ .join('');
23
+ const row = (index) => ({
24
+ name: `row-${index}`,
25
+ paths: [cells(index, index)],
26
+ pathStates: [[cells(index, index)], [cells(index, index)], [cells(index, 4)]],
27
+ fillOnly: 'ink',
28
+ poses: [{}, {}, {}],
29
+ });
30
+ // Query row flex: 1 collapses cells 2–4 to zero width in place; 0 is the full row.
31
+ const queryOffsets = [1, 2, 3, 4].flatMap((j) => (j === 1 ? [0, 0, 0, 0, 0] : [0, 0, -size, 0, 0]));
32
+ export const causalMaskArt = {
33
+ name: 'causal-mask',
34
+ parts: [
35
+ {
36
+ name: 'matrix-frame',
37
+ paths: [
38
+ 'M5 3.5H19C19.8 3.5 20.5 4.2 20.5 5V19C20.5 19.8 19.8 20.5 19 20.5H5C4.2 20.5 3.5 19.8 3.5 19V5C3.5 4.2 4.2 3.5 5 3.5Z',
39
+ ],
40
+ poses: [{}, {}, {}],
41
+ },
42
+ row(1),
43
+ row(2),
44
+ row(3),
45
+ {
46
+ ...row(4),
47
+ poses: [{}, { opacity: 0 }, {}],
48
+ },
49
+ {
50
+ // The query row being generated: accent while decoding; its key cells fill in from zero width.
51
+ name: 'query-row',
52
+ paths: [cells(4, 4)],
53
+ pathOffsets: [queryOffsets],
54
+ fillOnly: 'ink',
55
+ accent: true,
56
+ poses: [{ opacity: 0 }, {}, { opacity: 0 }],
57
+ gestures: [
58
+ null,
59
+ {
60
+ duration: 2.8,
61
+ repeatAfter: 3.6,
62
+ frames: [
63
+ { at: 0 },
64
+ { at: 0.16, opacity: -1 },
65
+ { at: 0.22, opacity: -1, flex: 1 },
66
+ { at: 0.36, flex: 1 },
67
+ { at: 0.82 },
68
+ { at: 1 },
69
+ ],
70
+ },
71
+ null,
72
+ ],
73
+ },
74
+ ],
75
+ };
@@ -0,0 +1,5 @@
1
+ import type { StatefulIconProps } from "../../shared/icon-types.js";
2
+ import { type ChunkingState } from "./chunking-rig.js";
3
+ export { chunkingStates, type ChunkingState } from "./chunking-rig.js";
4
+ export type ChunkingIconProps = StatefulIconProps<ChunkingState>;
5
+ export declare const ChunkingIcon: import("react").NamedExoticComponent<ChunkingIconProps>;
@@ -0,0 +1,9 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { memo } from 'react';
4
+ import { ArticulatedIcon } from "../../shared/articulated-icon.js";
5
+ import { chunkingArt, chunkingStates } from "./chunking-rig.js";
6
+ export { chunkingStates } from "./chunking-rig.js";
7
+ export const ChunkingIcon = memo(function ChunkingIcon(props) {
8
+ return _jsx(ArticulatedIcon, { art: chunkingArt, states: chunkingStates, ...props });
9
+ });
@@ -0,0 +1,76 @@
1
+ /**
2
+ * A page is cut twice, so the top and bottom pieces both keep the middle line between the
3
+ * cuts: two chunks that overlap by one shared line.
4
+ */
5
+ export declare const chunkingStates: readonly ["document", "splitting", "chunked"];
6
+ export type ChunkingState = (typeof chunkingStates)[number];
7
+ export declare const chunkingArt: {
8
+ name: string;
9
+ parts: ({
10
+ name: string;
11
+ paths: string[];
12
+ poses: {}[];
13
+ gestures: ({
14
+ duration: number;
15
+ repeatAfter: number;
16
+ loop: false;
17
+ frames: ({
18
+ at: number;
19
+ x: number;
20
+ y: number;
21
+ opacity: number;
22
+ } | {
23
+ at: number;
24
+ x?: undefined;
25
+ y?: undefined;
26
+ opacity?: undefined;
27
+ })[];
28
+ } | null)[];
29
+ } | {
30
+ name: string;
31
+ paths: string[];
32
+ pathStates: string[][];
33
+ detail: boolean;
34
+ accent: boolean;
35
+ traceLength: number;
36
+ poses: ({
37
+ opacity: number;
38
+ draw: number;
39
+ } | {
40
+ opacity?: undefined;
41
+ draw?: undefined;
42
+ } | {
43
+ opacity: number;
44
+ x: number;
45
+ y: number;
46
+ draw?: undefined;
47
+ })[];
48
+ gestures: ({
49
+ duration: number;
50
+ repeatAfter: number;
51
+ loop: false;
52
+ frames: ({
53
+ at: number;
54
+ x: number;
55
+ y: number;
56
+ opacity: number;
57
+ } | {
58
+ at: number;
59
+ x?: undefined;
60
+ y?: undefined;
61
+ opacity?: undefined;
62
+ })[];
63
+ } | {
64
+ duration: number;
65
+ repeatAfter: number;
66
+ interpolation: "continuous";
67
+ frames: ({
68
+ at: number;
69
+ x?: undefined;
70
+ } | {
71
+ at: number;
72
+ x: number;
73
+ })[];
74
+ } | null)[];
75
+ })[];
76
+ };
@@ -0,0 +1,91 @@
1
+ /**
2
+ * A page is cut twice, so the top and bottom pieces both keep the middle line between the
3
+ * cuts: two chunks that overlap by one shared line.
4
+ */
5
+ export const chunkingStates = ['document', 'splitting', 'chunked'];
6
+ const L = 7.9;
7
+ const R = 16.1;
8
+ const CUT_TOP = 9.5; // top edge of the lower chunk
9
+ const CUT_BOTTOM = 14.5; // bottom edge of the upper chunk
10
+ // Side by side with a 2.8-unit gutter between the facing edges.
11
+ const UP = { x: -5.5, y: -1.6 };
12
+ const DOWN = { x: 5.5, y: 1.6 };
13
+ /**
14
+ * Pieces wait until the cuts exist, then slide apart along the diagonal. `fade` crossfades a
15
+ * coincident accent cut into the piece's ink edge while it travels (+1 fades out, -1 in).
16
+ */
17
+ const separate = (to, fade = 0) => ({
18
+ duration: 1.4,
19
+ repeatAfter: 1.4,
20
+ loop: false,
21
+ frames: [
22
+ { at: 0, x: -to.x, y: -to.y, opacity: fade },
23
+ { at: 0.3, x: -to.x, y: -to.y, opacity: fade },
24
+ { at: 0.85 },
25
+ { at: 1 },
26
+ ],
27
+ });
28
+ const piece = (name, path, to, extra = {}) => ({
29
+ name,
30
+ paths: [path],
31
+ poses: [{}, {}, { ...to }],
32
+ gestures: [null, null, separate(to)],
33
+ ...extra,
34
+ });
35
+ const cut = (name, y, to, sign) => {
36
+ const short = `M${L} ${y}H${R}`;
37
+ const long = `M${L - 2} ${y}H${R + 2}`;
38
+ return {
39
+ name,
40
+ paths: [short],
41
+ pathStates: [[short], [long], [short]],
42
+ // Thinner than the outline so cut, shared line and cut stay separate at 24 px.
43
+ detail: true,
44
+ accent: true,
45
+ traceLength: 13,
46
+ // In the chunked state the accent cut hands over to the piece's ink edge.
47
+ poses: [{ opacity: 0, draw: 0 }, {}, { ...to, opacity: 0 }],
48
+ gestures: [
49
+ null,
50
+ {
51
+ // Pending cut: the two blades saw in opposite directions.
52
+ duration: 2,
53
+ repeatAfter: 2.8,
54
+ interpolation: 'continuous',
55
+ frames: [{ at: 0 }, { at: 0.3, x: 0.9 * sign }, { at: 0.7, x: -0.9 * sign }, { at: 1 }],
56
+ },
57
+ separate(to, 1),
58
+ ],
59
+ };
60
+ };
61
+ /** The cut becomes an ordinary closed edge of its chunk. */
62
+ const edge = (name, y, to) => ({
63
+ name,
64
+ paths: [`M${L} ${y}H${R}`],
65
+ poses: [{ opacity: 0 }, { opacity: 0 }, { ...to }],
66
+ gestures: [null, null, separate(to, -1)],
67
+ });
68
+ export const chunkingArt = {
69
+ name: 'chunking',
70
+ parts: [
71
+ piece('upper-piece', `M${L} ${CUT_BOTTOM}V5.3C${L} 4.75 8.35 4.3 8.9 4.3H15.1C15.65 4.3 ${R} 4.75 ${R} 5.3V${CUT_BOTTOM}`, UP),
72
+ piece('lower-piece', `M${L} ${CUT_TOP}V18.7C${L} 19.25 8.35 19.7 8.9 19.7H15.1C15.65 19.7 ${R} 19.25 ${R} 18.7V${CUT_TOP}`, DOWN),
73
+ piece('upper-lines', 'M9.9 7H14.1M9.9 12H14.1', UP, { detail: true }),
74
+ piece('lower-line', 'M9.9 17H13', DOWN, { detail: true }),
75
+ edge('upper-edge', CUT_BOTTOM, UP),
76
+ edge('lower-edge', CUT_TOP, DOWN),
77
+ // The shared line is copied into both pieces: the overlap.
78
+ piece('shared-upper', 'M9.9 12H14.1', UP, {
79
+ detail: true,
80
+ accent: true,
81
+ poses: [{ opacity: 0 }, {}, { ...UP }],
82
+ }),
83
+ piece('shared-lower', 'M9.9 12H14.1', DOWN, {
84
+ detail: true,
85
+ accent: true,
86
+ poses: [{ opacity: 0 }, {}, { ...DOWN }],
87
+ }),
88
+ cut('upper-cut', CUT_BOTTOM, UP, 1),
89
+ cut('lower-cut', CUT_TOP, DOWN, -1),
90
+ ],
91
+ };
@@ -0,0 +1,5 @@
1
+ import type { StatefulIconProps } from "../../shared/icon-types.js";
2
+ import { type CodeSandboxState } from "./code-sandbox-rig.js";
3
+ export { codeSandboxStates, type CodeSandboxState } from "./code-sandbox-rig.js";
4
+ export type CodeSandboxIconProps = StatefulIconProps<CodeSandboxState>;
5
+ export declare const CodeSandboxIcon: import("react").NamedExoticComponent<CodeSandboxIconProps>;
@@ -0,0 +1,9 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { memo } from 'react';
4
+ import { ArticulatedIcon } from "../../shared/articulated-icon.js";
5
+ import { codeSandboxArt, codeSandboxStates } from "./code-sandbox-rig.js";
6
+ export { codeSandboxStates } from "./code-sandbox-rig.js";
7
+ export const CodeSandboxIcon = memo(function CodeSandboxIcon(props) {
8
+ return _jsx(ArticulatedIcon, { art: codeSandboxArt, states: codeSandboxStates, ...props });
9
+ });
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Agent-written code runs inside a double isolation wall: the running process ricochets off
3
+ * the inner wall and never leaves; on exit it lands as an output line inside the boundary.
4
+ */
5
+ export declare const codeSandboxStates: readonly ["idle", "running", "exited"];
6
+ export type CodeSandboxState = (typeof codeSandboxStates)[number];
7
+ export declare const codeSandboxArt: {
8
+ name: string;
9
+ parts: ({
10
+ name: string;
11
+ paths: string[];
12
+ poses: {}[];
13
+ detail?: undefined;
14
+ fillOnly?: undefined;
15
+ accent?: undefined;
16
+ pivot?: undefined;
17
+ gestures?: undefined;
18
+ traceLength?: undefined;
19
+ } | {
20
+ name: string;
21
+ paths: string[];
22
+ detail: true;
23
+ poses: ({
24
+ opacity?: undefined;
25
+ } | {
26
+ opacity: number;
27
+ })[];
28
+ fillOnly?: undefined;
29
+ accent?: undefined;
30
+ pivot?: undefined;
31
+ gestures?: undefined;
32
+ traceLength?: undefined;
33
+ } | {
34
+ name: string;
35
+ paths: string[];
36
+ fillOnly: "ink";
37
+ accent: true;
38
+ pivot: [number, number];
39
+ poses: ({
40
+ opacity: number;
41
+ x?: undefined;
42
+ y?: undefined;
43
+ } | {
44
+ opacity?: undefined;
45
+ x?: undefined;
46
+ y?: undefined;
47
+ } | {
48
+ x: number;
49
+ y: number;
50
+ opacity: number;
51
+ })[];
52
+ gestures: ({
53
+ duration: number;
54
+ repeatAfter: number;
55
+ interpolation: "continuous";
56
+ frames: ({
57
+ at: number;
58
+ x?: undefined;
59
+ y?: undefined;
60
+ } | {
61
+ at: number;
62
+ x: number;
63
+ y: number;
64
+ })[];
65
+ } | null)[];
66
+ detail?: undefined;
67
+ traceLength?: undefined;
68
+ } | {
69
+ name: string;
70
+ paths: string[];
71
+ detail: true;
72
+ accent: true;
73
+ traceLength: number;
74
+ poses: ({
75
+ opacity: number;
76
+ } | {
77
+ opacity?: undefined;
78
+ })[];
79
+ gestures: ({
80
+ duration: number;
81
+ repeatAfter: number;
82
+ loop: false;
83
+ frames: ({
84
+ at: number;
85
+ draw: number;
86
+ } | {
87
+ at: number;
88
+ draw?: undefined;
89
+ })[];
90
+ } | null)[];
91
+ fillOnly?: undefined;
92
+ pivot?: undefined;
93
+ })[];
94
+ };
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Agent-written code runs inside a double isolation wall: the running process ricochets off
3
+ * the inner wall and never leaves; on exit it lands as an output line inside the boundary.
4
+ */
5
+ export const codeSandboxStates = ['idle', 'running', 'exited'];
6
+ const rounded = (x1, y1, x2, y2, r) => `M${x1 + r} ${y1}H${x2 - r}A${r} ${r} 0 0 1 ${x2} ${y1 + r}V${y2 - r}A${r} ${r} 0 0 1 ${x2 - r} ${y2}H${x1 + r}A${r} ${r} 0 0 1 ${x1} ${y2 - r}V${y1 + r}A${r} ${r} 0 0 1 ${x1 + r} ${y1}Z`;
7
+ export const codeSandboxArt = {
8
+ name: 'code-sandbox',
9
+ parts: [
10
+ {
11
+ name: 'outer-wall',
12
+ paths: [rounded(2.6, 2.6, 21.4, 21.4, 3)],
13
+ poses: [{}, {}, {}],
14
+ },
15
+ {
16
+ name: 'inner-wall',
17
+ paths: [rounded(5.5, 5.5, 18.5, 18.5, 1.6)],
18
+ detail: true,
19
+ poses: [{}, {}, {}],
20
+ },
21
+ {
22
+ name: 'code',
23
+ paths: ['M10.4 8.2L8.2 10.6L10.4 13', 'M13.6 8.2L15.8 10.6L13.6 13'],
24
+ detail: true,
25
+ poses: [{}, { opacity: 0.3 }, {}],
26
+ },
27
+ {
28
+ name: 'process',
29
+ paths: ['M10.8 10.6a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0 -2.4 0Z'],
30
+ fillOnly: 'ink',
31
+ accent: true,
32
+ pivot: [12, 10.6],
33
+ // On exit the process travels down to where its output line begins.
34
+ poses: [{ opacity: 0 }, {}, { x: -4.1, y: 5, opacity: 0 }],
35
+ gestures: [
36
+ null,
37
+ {
38
+ // Each landmark is an inner-wall contact: right, bottom, left, top, then back to centre.
39
+ duration: 2.8,
40
+ repeatAfter: 3.6,
41
+ interpolation: 'continuous',
42
+ frames: [
43
+ { at: 0 },
44
+ { at: 0.2, x: 4.3, y: 1.8 },
45
+ { at: 0.42, x: 1.2, y: 5.6 },
46
+ { at: 0.64, x: -4.3, y: 2.4 },
47
+ { at: 0.84, x: -1.4, y: -2.8 },
48
+ { at: 1 },
49
+ ],
50
+ },
51
+ null,
52
+ ],
53
+ },
54
+ {
55
+ // Left-aligned like a line of program output (a centred line would read as a mouth).
56
+ name: 'output',
57
+ paths: ['M7.9 15.6H12.6'],
58
+ detail: true,
59
+ accent: true,
60
+ traceLength: 5,
61
+ poses: [{ opacity: 0 }, { opacity: 0 }, {}],
62
+ gestures: [
63
+ null,
64
+ null,
65
+ {
66
+ duration: 0.8,
67
+ repeatAfter: 0.8,
68
+ loop: false,
69
+ frames: [{ at: 0, draw: -1 }, { at: 0.2, draw: -1 }, { at: 0.9 }, { at: 1 }],
70
+ },
71
+ ],
72
+ },
73
+ ],
74
+ };
@@ -0,0 +1,5 @@
1
+ import type { StatefulIconProps } from "../../shared/icon-types.js";
2
+ import { type EntityExtractionState } from "./entity-extraction-rig.js";
3
+ export { entityExtractionStates, type EntityExtractionState } from "./entity-extraction-rig.js";
4
+ export type EntityExtractionIconProps = StatefulIconProps<EntityExtractionState>;
5
+ export declare const EntityExtractionIcon: import("react").NamedExoticComponent<EntityExtractionIconProps>;
@@ -0,0 +1,9 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { memo } from 'react';
4
+ import { ArticulatedIcon } from "../../shared/articulated-icon.js";
5
+ import { entityExtractionArt, entityExtractionStates, } from "./entity-extraction-rig.js";
6
+ export { entityExtractionStates } from "./entity-extraction-rig.js";
7
+ export const EntityExtractionIcon = memo(function EntityExtractionIcon(props) {
8
+ return _jsx(ArticulatedIcon, { art: entityExtractionArt, states: entityExtractionStates, ...props });
9
+ });