@intentic/extension-ui 1.247.0 → 1.249.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 (83) hide show
  1. package/README.md +14 -9
  2. package/dist/index.js +1 -0
  3. package/dist/types/extension-ui/src/format.d.ts +1 -1
  4. package/dist/types/extension-ui/src/index.d.ts +1 -1
  5. package/dist/types/ui/src/components/{MarkdownFigure.vue.d.ts → charts/MarkdownFigure.vue.d.ts} +1 -1
  6. package/dist/types/ui/src/components/{StatStrip.vue.d.ts → charts/StatStrip.vue.d.ts} +1 -1
  7. package/dist/types/ui/src/components/{StatusTally.vue.d.ts → charts/StatusTally.vue.d.ts} +1 -1
  8. package/dist/types/ui/src/components/{barChart.d.ts → charts/barChart.d.ts} +1 -1
  9. package/dist/types/ui/src/components/{seriesAccent.d.ts → charts/seriesAccent.d.ts} +1 -1
  10. package/dist/types/ui/src/components/{Notice.vue.d.ts → feedback/Notice.vue.d.ts} +1 -1
  11. package/dist/types/ui/src/components/{SkeletonRows.vue.d.ts → feedback/SkeletonRows.vue.d.ts} +1 -1
  12. package/dist/types/ui/src/components/{notice.d.ts → feedback/notice.d.ts} +1 -1
  13. package/dist/types/ui/src/components/{NoteEditor.vue.d.ts → forms/NoteEditor.vue.d.ts} +2 -3
  14. package/dist/types/ui/src/components/{Picker.vue.d.ts → forms/Picker.vue.d.ts} +1 -0
  15. package/dist/types/ui/src/components/{SegmentedControl.vue.d.ts → forms/SegmentedControl.vue.d.ts} +1 -1
  16. package/dist/types/ui/src/components/{picker.d.ts → forms/picker.d.ts} +2 -2
  17. package/dist/types/ui/src/components/{PageAction.vue.d.ts → layout/PageAction.vue.d.ts} +1 -1
  18. package/dist/types/ui/src/components/{ResizeSeam.vue.d.ts → layout/ResizeSeam.vue.d.ts} +1 -0
  19. package/dist/types/ui/src/components/{StepSection.vue.d.ts → layout/StepSection.vue.d.ts} +1 -1
  20. package/dist/types/ui/src/components/{navRail.d.ts → layout/navRail.d.ts} +1 -1
  21. package/dist/types/ui/src/components/{repoRail.d.ts → layout/repoRail.d.ts} +1 -1
  22. package/dist/types/ui/src/components/{Markdown.vue.d.ts → markdown/Markdown.vue.d.ts} +1 -1
  23. package/dist/types/ui/src/components/markdown/MarkdownDocument.vue.d.ts +47 -0
  24. package/dist/types/ui/src/components/markdown/markdownDocument.d.ts +18 -0
  25. package/dist/types/ui/src/components/{AnchoredOverlay.vue.d.ts → overlays/AnchoredOverlay.vue.d.ts} +1 -1
  26. package/dist/types/ui/src/components/{ConfirmDialog.vue.d.ts → overlays/ConfirmDialog.vue.d.ts} +1 -1
  27. package/dist/types/ui/src/components/{ResponsiveOverlay.vue.d.ts → overlays/ResponsiveOverlay.vue.d.ts} +1 -1
  28. package/dist/types/ui/src/components/{Icon.vue.d.ts → primitives/Icon.vue.d.ts} +1 -1
  29. package/dist/types/ui/src/components/{DisclosureRow.vue.d.ts → rows/DisclosureRow.vue.d.ts} +2 -2
  30. package/dist/types/ui/src/components/{Row.vue.d.ts → rows/Row.vue.d.ts} +16 -12
  31. package/dist/types/ui/src/components/{RowGroup.vue.d.ts → rows/RowGroup.vue.d.ts} +1 -0
  32. package/dist/types/ui/src/components/{row.d.ts → rows/row.d.ts} +4 -4
  33. package/dist/types/ui/src/components/{AgentRunButton.vue.d.ts → sandbox/AgentRunButton.vue.d.ts} +3 -6
  34. package/dist/types/ui/src/composables/useAgentRunPick.d.ts +7 -2
  35. package/dist/types/ui/src/composables/useAsyncAction.d.ts +1 -1
  36. package/dist/types/ui/src/icons/iconSets.d.ts +139 -2
  37. package/dist/types/ui/src/index.d.ts +63 -62
  38. package/dist/types/ui/src/lib/format.d.ts +15 -0
  39. package/dist/types/ui/src/markdown/edits.d.ts +15 -0
  40. package/dist/types/ui/src/markdown/history.d.ts +12 -0
  41. package/dist/types/ui/src/markdown/index.d.ts +3 -0
  42. package/dist/types/ui/src/markdown/sourceDom.d.ts +7 -0
  43. package/names.mjs +1 -0
  44. package/package.json +2 -2
  45. package/src/format.ts +4 -12
  46. package/src/index.ts +50 -159
  47. /package/dist/types/ui/src/components/{Avatar.vue.d.ts → brand/Avatar.vue.d.ts} +0 -0
  48. /package/dist/types/ui/src/components/{BrandMark.vue.d.ts → brand/BrandMark.vue.d.ts} +0 -0
  49. /package/dist/types/ui/src/components/{PersonaFace.vue.d.ts → brand/PersonaFace.vue.d.ts} +0 -0
  50. /package/dist/types/ui/src/components/{personaFace.d.ts → brand/personaFace.d.ts} +0 -0
  51. /package/dist/types/ui/src/components/{BarChart.vue.d.ts → charts/BarChart.vue.d.ts} +0 -0
  52. /package/dist/types/ui/src/components/{DagEditor.vue.d.ts → charts/DagEditor.vue.d.ts} +0 -0
  53. /package/dist/types/ui/src/components/{DagGraph.vue.d.ts → charts/DagGraph.vue.d.ts} +0 -0
  54. /package/dist/types/ui/src/components/{DiffStat.vue.d.ts → charts/DiffStat.vue.d.ts} +0 -0
  55. /package/dist/types/ui/src/components/{ProgressRing.vue.d.ts → charts/ProgressRing.vue.d.ts} +0 -0
  56. /package/dist/types/ui/src/components/{dagLayout.d.ts → charts/dagLayout.d.ts} +0 -0
  57. /package/dist/types/ui/src/components/{ChangeStatusMark.vue.d.ts → feedback/ChangeStatusMark.vue.d.ts} +0 -0
  58. /package/dist/types/ui/src/components/{InfoHint.vue.d.ts → feedback/InfoHint.vue.d.ts} +0 -0
  59. /package/dist/types/ui/src/components/{InfoTable.vue.d.ts → feedback/InfoTable.vue.d.ts} +0 -0
  60. /package/dist/types/ui/src/components/{NoticeStack.vue.d.ts → feedback/NoticeStack.vue.d.ts} +0 -0
  61. /package/dist/types/ui/src/components/{StatusBadge.vue.d.ts → feedback/StatusBadge.vue.d.ts} +0 -0
  62. /package/dist/types/ui/src/components/{changeStatus.d.ts → feedback/changeStatus.d.ts} +0 -0
  63. /package/dist/types/ui/src/components/{CodeField.vue.d.ts → forms/CodeField.vue.d.ts} +0 -0
  64. /package/dist/types/ui/src/components/{FilterBar.vue.d.ts → forms/FilterBar.vue.d.ts} +0 -0
  65. /package/dist/types/ui/src/components/{ProseField.vue.d.ts → forms/ProseField.vue.d.ts} +0 -0
  66. /package/dist/types/ui/src/components/{SearchBar.vue.d.ts → forms/SearchBar.vue.d.ts} +0 -0
  67. /package/dist/types/ui/src/components/{BottomSheet.vue.d.ts → layout/BottomSheet.vue.d.ts} +0 -0
  68. /package/dist/types/ui/src/components/{Card.vue.d.ts → layout/Card.vue.d.ts} +0 -0
  69. /package/dist/types/ui/src/components/{NavRail.vue.d.ts → layout/NavRail.vue.d.ts} +0 -0
  70. /package/dist/types/ui/src/components/{Page.vue.d.ts → layout/Page.vue.d.ts} +0 -0
  71. /package/dist/types/ui/src/components/{PageHeader.vue.d.ts → layout/PageHeader.vue.d.ts} +0 -0
  72. /package/dist/types/ui/src/components/{RepoRail.vue.d.ts → layout/RepoRail.vue.d.ts} +0 -0
  73. /package/dist/types/ui/src/components/{ScrollFrame.vue.d.ts → layout/ScrollFrame.vue.d.ts} +0 -0
  74. /package/dist/types/ui/src/components/{SplitView.vue.d.ts → layout/SplitView.vue.d.ts} +0 -0
  75. /package/dist/types/ui/src/components/{splitView.d.ts → layout/splitView.d.ts} +0 -0
  76. /package/dist/types/ui/src/components/{ContextMenu.vue.d.ts → overlays/ContextMenu.vue.d.ts} +0 -0
  77. /package/dist/types/ui/src/components/{InfoDialog.vue.d.ts → overlays/InfoDialog.vue.d.ts} +0 -0
  78. /package/dist/types/ui/src/components/{Modal.vue.d.ts → overlays/Modal.vue.d.ts} +0 -0
  79. /package/dist/types/ui/src/components/{Button.vue.d.ts → primitives/Button.vue.d.ts} +0 -0
  80. /package/dist/types/ui/src/components/{Code.vue.d.ts → primitives/Code.vue.d.ts} +0 -0
  81. /package/dist/types/ui/src/components/{CopyButton.vue.d.ts → primitives/CopyButton.vue.d.ts} +0 -0
  82. /package/dist/types/ui/src/components/{ImageView.vue.d.ts → primitives/ImageView.vue.d.ts} +0 -0
  83. /package/dist/types/ui/src/components/{imageView.d.ts → primitives/imageView.d.ts} +0 -0
@@ -2,72 +2,73 @@ export { clipboardOf } from "./lib/clipboard.js";
2
2
  export { appLink, browserOwnsClick } from "./lib/link.js";
3
3
  export { openForwardedPort } from "./lib/portPreview.js";
4
4
  export { ui } from "./lib/ui.js";
5
- export { default as AgentRunButton } from "./components/AgentRunButton.vue";
5
+ export { default as AgentRunButton } from "./components/sandbox/AgentRunButton.vue";
6
6
  export { type AgentRunChoice, type AgentRunPicker, type ModelPicking, useAgentRunPick } from "./composables/useAgentRunPick.js";
7
- export { default as AnchoredOverlay } from "./components/AnchoredOverlay.vue";
8
- export { default as Avatar } from "./components/Avatar.vue";
9
- export { default as BarChart } from "./components/BarChart.vue";
10
- export { default as BottomSheet } from "./components/BottomSheet.vue";
11
- export { default as BrandMark } from "./components/BrandMark.vue";
12
- export { default as Button } from "./components/Button.vue";
7
+ export { default as AnchoredOverlay } from "./components/overlays/AnchoredOverlay.vue";
8
+ export { default as Avatar } from "./components/brand/Avatar.vue";
9
+ export { default as BarChart } from "./components/charts/BarChart.vue";
10
+ export { default as BottomSheet } from "./components/layout/BottomSheet.vue";
11
+ export { default as BrandMark } from "./components/brand/BrandMark.vue";
12
+ export { default as Button } from "./components/primitives/Button.vue";
13
13
  export { vAction } from "./lib/pressAction.js";
14
- export { default as Card } from "./components/Card.vue";
15
- export { default as ChangeStatusMark } from "./components/ChangeStatusMark.vue";
16
- export { type ChangeStatus } from "./components/changeStatus.js";
17
- export { default as DiffStat } from "./components/DiffStat.vue";
18
- export { default as Code } from "./components/Code.vue";
19
- export { default as CodeField } from "./components/CodeField.vue";
20
- export { default as ConfirmDialog } from "./components/ConfirmDialog.vue";
21
- export { default as ContextMenu } from "./components/ContextMenu.vue";
22
- export { default as CopyButton } from "./components/CopyButton.vue";
23
- export { type TallyItem, default as StatusTally } from "./components/StatusTally.vue";
24
- export { default as DagEditor } from "./components/DagEditor.vue";
25
- export { default as DagGraph } from "./components/DagGraph.vue";
26
- export { default as DisclosureRow } from "./components/DisclosureRow.vue";
27
- export { type DagEdge, type DagNode } from "./components/dagLayout.js";
28
- export { default as FilterBar } from "./components/FilterBar.vue";
29
- export { default as Icon } from "./components/Icon.vue";
30
- export { default as ImageView } from "./components/ImageView.vue";
31
- export { isRenderableImage } from "./components/imageView.js";
32
- export { default as InfoDialog } from "./components/InfoDialog.vue";
33
- export { default as InfoHint } from "./components/InfoHint.vue";
34
- export { default as InfoTable } from "./components/InfoTable.vue";
35
- export { default as Markdown } from "./components/Markdown.vue";
36
- export { default as MarkdownFigure } from "./components/MarkdownFigure.vue";
37
- export { default as Modal } from "./components/Modal.vue";
38
- export { default as NavRail } from "./components/NavRail.vue";
39
- export { type NavGroup } from "./components/navRail.js";
40
- export { default as NoteEditor } from "./components/NoteEditor.vue";
14
+ export { default as Card } from "./components/layout/Card.vue";
15
+ export { default as ChangeStatusMark } from "./components/feedback/ChangeStatusMark.vue";
16
+ export { type ChangeStatus } from "./components/feedback/changeStatus.js";
17
+ export { default as DiffStat } from "./components/charts/DiffStat.vue";
18
+ export { default as Code } from "./components/primitives/Code.vue";
19
+ export { default as CodeField } from "./components/forms/CodeField.vue";
20
+ export { default as ConfirmDialog } from "./components/overlays/ConfirmDialog.vue";
21
+ export { default as ContextMenu } from "./components/overlays/ContextMenu.vue";
22
+ export { default as CopyButton } from "./components/primitives/CopyButton.vue";
23
+ export { type TallyItem, default as StatusTally } from "./components/charts/StatusTally.vue";
24
+ export { default as DagEditor } from "./components/charts/DagEditor.vue";
25
+ export { default as DagGraph } from "./components/charts/DagGraph.vue";
26
+ export { default as DisclosureRow } from "./components/rows/DisclosureRow.vue";
27
+ export { type DagEdge, type DagNode } from "./components/charts/dagLayout.js";
28
+ export { default as FilterBar } from "./components/forms/FilterBar.vue";
29
+ export { default as Icon } from "./components/primitives/Icon.vue";
30
+ export { default as ImageView } from "./components/primitives/ImageView.vue";
31
+ export { isRenderableImage } from "./components/primitives/imageView.js";
32
+ export { default as InfoDialog } from "./components/overlays/InfoDialog.vue";
33
+ export { default as InfoHint } from "./components/feedback/InfoHint.vue";
34
+ export { default as InfoTable } from "./components/feedback/InfoTable.vue";
35
+ export { default as Markdown } from "./components/markdown/Markdown.vue";
36
+ export { default as MarkdownDocument } from "./components/markdown/MarkdownDocument.vue";
37
+ export { default as MarkdownFigure } from "./components/charts/MarkdownFigure.vue";
38
+ export { default as Modal } from "./components/overlays/Modal.vue";
39
+ export { default as NavRail } from "./components/layout/NavRail.vue";
40
+ export { type NavGroup } from "./components/layout/navRail.js";
41
+ export { default as NoteEditor } from "./components/forms/NoteEditor.vue";
41
42
  export { type NoteDraft, type NoteDraftOptions, useNoteDraft } from "./composables/useNoteDraft.js";
42
43
  export { useKeyedDraft } from "./composables/useKeyedDraft.js";
43
- export { default as Notice } from "./components/Notice.vue";
44
- export { default as NoticeStack } from "./components/NoticeStack.vue";
45
- export { type NoticeAction, type NoticeModel, type NoticeTone } from "./components/notice.js";
46
- export { default as Page } from "./components/Page.vue";
47
- export { default as PageAction } from "./components/PageAction.vue";
48
- export { default as PageHeader } from "./components/PageHeader.vue";
49
- export { default as PersonaFace } from "./components/PersonaFace.vue";
50
- export { type PersonaLike } from "./components/personaFace.js";
51
- export { default as ScrollFrame } from "./components/ScrollFrame.vue";
52
- export { default as Picker } from "./components/Picker.vue";
53
- export { type PickerGroup, type PickerOption, type PickerOptions } from "./components/picker.js";
54
- export { default as ProgressRing } from "./components/ProgressRing.vue";
55
- export { default as ProseField } from "./components/ProseField.vue";
56
- export { default as RepoRail } from "./components/RepoRail.vue";
57
- export { type RepoRailAll, type RepoRailGroup, type RepoRailRow } from "./components/repoRail.js";
58
- export { default as ResizeSeam } from "./components/ResizeSeam.vue";
59
- export { default as ResponsiveOverlay } from "./components/ResponsiveOverlay.vue";
60
- export { default as Row } from "./components/Row.vue";
61
- export { default as RowGroup } from "./components/RowGroup.vue";
62
- export { default as SearchBar } from "./components/SearchBar.vue";
63
- export { default as SegmentedControl } from "./components/SegmentedControl.vue";
64
- export { seriesColor } from "./components/seriesAccent.js";
65
- export { default as SkeletonRows } from "./components/SkeletonRows.vue";
66
- export { default as SplitView } from "./components/SplitView.vue";
67
- export { useCompact } from "./components/splitView.js";
68
- export { default as StatStrip } from "./components/StatStrip.vue";
69
- export { default as StatusBadge, type StatusVariant } from "./components/StatusBadge.vue";
70
- export { default as StepSection } from "./components/StepSection.vue";
44
+ export { default as Notice } from "./components/feedback/Notice.vue";
45
+ export { default as NoticeStack } from "./components/feedback/NoticeStack.vue";
46
+ export { type NoticeAction, type NoticeModel, type NoticeTone } from "./components/feedback/notice.js";
47
+ export { default as Page } from "./components/layout/Page.vue";
48
+ export { default as PageAction } from "./components/layout/PageAction.vue";
49
+ export { default as PageHeader } from "./components/layout/PageHeader.vue";
50
+ export { default as PersonaFace } from "./components/brand/PersonaFace.vue";
51
+ export { type PersonaLike } from "./components/brand/personaFace.js";
52
+ export { default as ScrollFrame } from "./components/layout/ScrollFrame.vue";
53
+ export { default as Picker } from "./components/forms/Picker.vue";
54
+ export { type PickerGroup, type PickerOption, type PickerOptions } from "./components/forms/picker.js";
55
+ export { default as ProgressRing } from "./components/charts/ProgressRing.vue";
56
+ export { default as ProseField } from "./components/forms/ProseField.vue";
57
+ export { default as RepoRail } from "./components/layout/RepoRail.vue";
58
+ export { type RepoRailAll, type RepoRailGroup, type RepoRailRow } from "./components/layout/repoRail.js";
59
+ export { default as ResizeSeam } from "./components/layout/ResizeSeam.vue";
60
+ export { default as ResponsiveOverlay } from "./components/overlays/ResponsiveOverlay.vue";
61
+ export { default as Row } from "./components/rows/Row.vue";
62
+ export { default as RowGroup } from "./components/rows/RowGroup.vue";
63
+ export { default as SearchBar } from "./components/forms/SearchBar.vue";
64
+ export { default as SegmentedControl } from "./components/forms/SegmentedControl.vue";
65
+ export { seriesColor } from "./components/charts/seriesAccent.js";
66
+ export { default as SkeletonRows } from "./components/feedback/SkeletonRows.vue";
67
+ export { default as SplitView } from "./components/layout/SplitView.vue";
68
+ export { useCompact } from "./components/layout/splitView.js";
69
+ export { default as StatStrip } from "./components/charts/StatStrip.vue";
70
+ export { default as StatusBadge, type StatusVariant } from "./components/feedback/StatusBadge.vue";
71
+ export { default as StepSection } from "./components/layout/StepSection.vue";
71
72
  export { sinceOf, TIME_WINDOWS, type TimeWindow, timeWindowWords } from "./lib/timeWindow.js";
72
73
  export { type IconName } from "./icons/iconSets.js";
73
74
  export { useDevice } from "./composables/useDevice.js";
@@ -0,0 +1,15 @@
1
+ export declare const formatBytes: (bytes: number | undefined) => string;
2
+ export declare const formatTokens: (tokens: number) => string;
3
+ export declare const initialsOf: (name: string) => string | undefined;
4
+ export declare const formatDate: (at: number) => string;
5
+ export declare const formatDayMonth: (at: number) => string;
6
+ export declare const formatDateTime: (at: number) => string;
7
+ export declare const formatTimestamp: (at: number) => string;
8
+ export declare const formatTime: (at: number) => string;
9
+ export declare const formatClock: (at: number) => string;
10
+ export declare const formatWeekdayTime: (at: number) => string;
11
+ export declare const timeAgo: (at: number, { now, days }?: {
12
+ now?: number;
13
+ days?: boolean;
14
+ }) => string;
15
+ export declare const freshness: (at: number) => string;
@@ -0,0 +1,15 @@
1
+ export interface TextEdit {
2
+ readonly text: string;
3
+ readonly start: number;
4
+ readonly end: number;
5
+ }
6
+ export declare const toggleWrap: (text: string, start: number, end: number, marker: string) => TextEdit;
7
+ export declare const insertLink: (text: string, start: number, end: number) => TextEdit;
8
+ export declare const indentLines: (text: string, start: number, end: number) => TextEdit;
9
+ export declare const outdentLines: (text: string, start: number, end: number) => TextEdit;
10
+ export declare const onListLine: (text: string, offset: number) => boolean;
11
+ export interface ListEnter {
12
+ readonly edit: TextEdit;
13
+ readonly ended: boolean;
14
+ }
15
+ export declare const continueList: (text: string, offset: number) => ListEnter | undefined;
@@ -0,0 +1,12 @@
1
+ export type EditKind = "typing" | "deleting" | "structural";
2
+ export interface DocumentState {
3
+ readonly text: string;
4
+ readonly caret: number;
5
+ }
6
+ export interface MarkdownHistory {
7
+ readonly reset: (state: DocumentState) => void;
8
+ readonly record: (state: DocumentState, kind: EditKind, at: number) => void;
9
+ readonly undo: () => DocumentState | undefined;
10
+ readonly redo: () => DocumentState | undefined;
11
+ }
12
+ export declare const createMarkdownHistory: () => MarkdownHistory;
@@ -1,4 +1,7 @@
1
1
  export { blockAtOffset, type MarkdownBlock, type MarkdownBlocks, offsetOfLine, splitMarkdownBlocks } from "./blocks.js";
2
2
  export { type CodeBlock, codeBlockHtml, copyCodeFromEvent, escapeHtml } from "./code.js";
3
+ export { continueList, indentLines, insertLink, type ListEnter, onListLine, outdentLines, type TextEdit, toggleWrap } from "./edits.js";
4
+ export { createMarkdownHistory, type DocumentState, type EditKind, type MarkdownHistory } from "./history.js";
5
+ export { blockBody, buildBlockElement, caretAtOffset, offsetOfCaret } from "./sourceDom.js";
3
6
  export { type BarsFigure, type BarsFigureItem, type DagFigure, type DagFigureEdge, type DagFigureNode, type Figure, FIGURE_ACCENTS, type FigureAccent, FIGURE_LANGS, JSON_FIGURE_LANGS, type MarkdownSegment, MERMAID_LANG, type MermaidFigure, parseFigure, splitFigureSegments, type StatsFigure, type StatsFigureItem, } from "./figures.js";
4
7
  export { createStreamingMarkdown, lexBlocks, lexInline, type MarkdownDecorator, type MarkdownPart, markdownParseCount, type MarkdownToken, renderMarkdown, renderMarkdownParts, type RenderedMarkdown, settledEnd, type StreamingMarkdown, } from "./render.js";
@@ -0,0 +1,7 @@
1
+ export declare const blockBody: (element: Element) => string;
2
+ export declare const buildBlockElement: (source: string) => HTMLElement;
3
+ export declare const offsetOfCaret: (element: HTMLElement, node: Node, offset: number) => number;
4
+ export declare const caretAtOffset: (element: HTMLElement, offset: number) => {
5
+ readonly node: Node;
6
+ readonly offset: number;
7
+ } | undefined;
package/names.mjs CHANGED
@@ -43,6 +43,7 @@ export const extensionUiNames = [
43
43
  "InfoTable",
44
44
  "isRenderableImage",
45
45
  "Markdown",
46
+ "MarkdownDocument",
46
47
  "MarkdownFigure",
47
48
  "Modal",
48
49
  "NavRail",
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@intentic/extension-ui",
3
- "version": "1.247.0",
3
+ "version": "1.249.0",
4
4
  "description": "The UI kit intentic extensions render with, host-provided at runtime (the app's own components via the import map), so extension UI is always native to the shell",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "git+https://github.com/intentic/intentic.git",
10
- "directory": "_editor/extension-ui"
10
+ "directory": "_shared/extension-ui"
11
11
  },
12
12
  "files": [
13
13
  "dist",
package/src/format.ts CHANGED
@@ -1,15 +1,7 @@
1
- /* The kit's formatters, reachable WITHOUT the component barrel.
2
- *
3
- * `index.ts` pulls every .vue component in the kit, which is the right trade for an extension's own views but
4
- * the wrong one for its pure logic: a day-divider label is plain arithmetic on a number, and an extension's
5
- * node-environment tests run without a Vue plugin to parse SFCs with. Importing a formatter from the barrel
6
- * dragged the whole component library into those tests and broke them on the first `<template>` it hit. Same
7
- * split, and same reason, as `@intentic/ui`'s own `./path` and `./time` entry points.
8
- *
9
- * A SOURCE-level door, for in-repo extensions (whose code vite compiles into the app bundle) and their tests.
10
- * A git-installed bundle resolves its bare specifiers through the import map in index.html, which carries the
11
- * barrel alone, so nothing is exported here that the barrel does not also export, and a third-party author
12
- * reaching for `@intentic/extension-ui` is missing none of it. */
1
+ // The kit's formatters, reachable without the component barrel: `index.ts` pulls in every .vue component, which breaks
2
+ // an extension's node-environment tests that have no Vue plugin to parse SFCs with. A source-level door for in-repo
3
+ // extensions and their tests; a git-installed bundle resolves through the import map instead, which carries the same
4
+ // names.
13
5
  export {
14
6
  formatBytes,
15
7
  formatDate,
package/src/index.ts CHANGED
@@ -1,82 +1,44 @@
1
- /* The UI kit extensions render with. This entrypoint is the package's ONE public surface (the repo's
2
- * re-export exception): a curated slice of the app design system (@intentic/ui) plus the PrimeVue
3
- * primitives extension views actually use. At runtime the kit is HOST-PROVIDED, the web app maps this module
4
- * into its import map (extension-host/hostModules.ts), so third-party bundles marking it external get the
5
- * shell's own component instances and theming; in-repo builtin extension packages bundle this same module and
6
- * land on the same instances. Export names are mirrored in ../names.mjs (shim generation + drift assertion).
7
- * Publishing a typed npm artifact for out-of-repo authors is a marketplace-phase task. */
1
+ // The UI kit extensions render with: a curated slice of the app design system (@intentic/ui) plus the PrimeVue
2
+ // primitives extension views use. Host-provided at runtime, mapped into the import map so third-party and in-repo
3
+ // bundles share the same component instances.
8
4
 
9
- /* <Row> ships beside <RowGroup> because shipping the container WITHOUT the row is what made every extension
10
- * write its own: five views imported the group, found nothing to put in it, and hand-rolled a row body each.
11
- * The comment lives out here rather than beside the name because extensionUiNames.test.ts parses this brace
12
- * block for names, and reads a comment inside it as exports that do not exist.
13
- *
14
- * <SplitView> is here for exactly the same reason one level up: five screens are an index beside a body, and the
15
- * one implementation that had solved it (HubLayout) sat in the web app where no extension could import it. */
5
+ // Documents `<Row>`/`<RowGroup>`/`<SplitView>` together, here rather than by name: extensionUiNames.test.ts parses
6
+ // this block for names and would misread an attached comment as one.
16
7
  export {
17
- /* <AgentRunButton> and its state ship because FOUR extensions start an agent for the user, pipelines,
18
- * deployments, maintenance, acceptance, and each of them had reached a different answer about how you
19
- * choose what it spends: three had no control at all and named the model in a tooltip, the fourth grew a
20
- * chip of its own. That is the same divergence <SplitView> and <Row> were shipped to end, arriving on the
21
- * one control in the app where getting it wrong costs money rather than pixels. `useAgentRunPick` is the
22
- * half that needs `api.models` and takes it as an argument, so the kit stays free of the extension API. */
8
+ // `useAgentRunPick` takes `api.models` as an argument, so the kit itself stays free of the extension API.
23
9
  AgentRunButton,
24
10
  type AgentRunChoice,
25
11
  type AgentRunPicker,
26
12
  type ModelPicking,
27
13
  useAgentRunPick,
28
- /* <AnchoredOverlay> ships because the alternative on this surface is PrimeVue's <Popover>, and six extension
29
- * views had already reached for it. Popover measures and dismisses against the OPENER's window, so in a
30
- * popped-out panel it opens off the bottom edge, over its own trigger, and cannot be clicked shut, the
31
- * failure the kit's own tooltip directive exists to avoid. */
14
+ // Use over PrimeVue's Popover in a popped-out panel: Popover measures against the opener's window and can open
15
+ // off-screen, unclosable.
32
16
  AnchoredOverlay,
33
17
  Avatar,
34
- /* <Button> MOVED OUT OF THE RAW PRIMITIVES BELOW, and that one line is why every extension got the press
35
- * lock without touching a file of its own: a button whose click handler returns a promise now locks in the
36
- * same tick it was pressed and draws the wait if it outlives a beat. Extension actions are the slowest in
37
- * the app — a deployment, a workflow run, an agent — so they are exactly the ones an impatient second
38
- * click used to fire twice. `vAction` ships beside it as the same behaviour for a hand-styled control:
39
- * `<button v-action="run">`. Imported rather than left to the host's global registration on purpose, an
40
- * unresolved directive is a button that silently does nothing, which is a worse failure than a missing
41
- * tooltip and not one a reviewer would spot. */
18
+ // A click handler returning a promise auto-locks the button and shows a wait state; `vAction` is the same for a
19
+ // raw `<button v-action="run">`, imported explicitly since an unresolved directive silently does nothing.
42
20
  Button,
43
21
  vAction,
44
22
  BarChart,
45
23
  BottomSheet,
46
- /* <BrandMark> ships because the approvals queue is the second surface to draw a platform as its brand (the
47
- * capability cards were the first), and because its fallback is the part a hand-roll skips: a platform
48
- * with no installed connector still has to render as SOMETHING, and the monogram is that something. */
24
+ // Renders a platform's brand; falls back to a monogram when no connector for it is installed.
49
25
  BrandMark,
50
26
  Card,
51
- /* The window a copy has to go through. Missing from this surface is why git-history called
52
- * `navigator.clipboard` directly and copying a commit SHA out of a POPPED-OUT panel silently did nothing:
53
- * the module-global navigator belongs to the opener, whose document isn't focused, so the write rejects
54
- * and every call site swallows it. */
27
+ // Use over raw `navigator.clipboard`: in a popped-out panel it belongs to the unfocused opener, so a direct write
28
+ // rejects.
55
29
  clipboardOf,
56
- /* `browserOwnsClick` ships because every extension view that navigates has the same one-line decision to
57
- make and no way to reach the app's answer: a row that is BOTH a link and a control must let a Ctrl/⌘,
58
- Shift or Alt click belong to the browser, and do its own work only on the plain one. Three views had
59
- hand-rolled a navigate() on a <button>, which is the version of that decision where the modifier keys
60
- simply do not work. */
30
+ // A row that is both a link and a control: modifier clicks (Ctrl/⌘/Shift/Alt) fall through to the browser, a plain
31
+ // click acts.
61
32
  browserOwnsClick,
62
33
  appLink,
63
- /* `openForwardedPort` ships because the Ports view is the third surface to wait on a freshly-minted preview
64
- * hostname and the second to open one in a tab, and the two that had solved it (the preview panel's iframe
65
- * gate, the terminal's Ctrl+click) both sat in the web app where no extension could import them. The
66
- * duplicate was word-for-word, down to the sentence a user reads while DNS propagates. */
34
+ // Opens a freshly minted preview hostname in a tab once it is ready.
67
35
  openForwardedPort,
68
- /* The two halves of a changed-file row ship together because they are always drawn together, and they ship
69
- * at all for the reason <SplitView> did: the git-history extension is the seventh surface to draw one, and
70
- * the six that had solved it all sat in the web app where no extension could import them. <ChangeStatusMark>
71
- * carries the fixed-width cell that keeps a column of paths aligned whatever letter lands in it, the detail
72
- * a hand-rolled copy gets subtly wrong. */
36
+ // `ChangeStatusMark` is fixed-width, so a column of paths stays aligned whatever status letter lands in it.
73
37
  ChangeStatusMark,
74
38
  type ChangeStatus,
75
39
  ui,
76
40
  Code,
77
- /* <CodeField> ships beside <Code> because shipping the reader WITHOUT the writer is what made a note pane
78
- * put a bare grey <textarea> next to a coloured block of the very same file: the kit had no way
79
- * to say "this text, in its own colours, with a caret in it". */
41
+ // The editable counterpart to `Code`: syntax-coloured text with a caret in it.
80
42
  CodeField,
81
43
  ConfirmDialog,
82
44
  ContextMenu,
@@ -88,79 +50,47 @@ export {
88
50
  type DagEdge,
89
51
  type DagNode,
90
52
  DiffStat,
91
- /* <DisclosureRow> ships for the reason <Row> itself does, one turn of the screw further on: shipping the
92
- * row WITHOUT the expandable row is what made SIX extensions build their own — activity, maintenance,
93
- * acceptance (twice), automations, deployments, pipelines, preview — and no two of them drew the same
94
- * chevron, indented the opened block to the same column, or painted an open row the same colour. The
95
- * preview extension's ports list went furthest and used an `(i)` as the toggle, thirty pixels under a real
96
- * <InfoHint> whose `(i)` is a hover card: one glyph, two behaviours, one screen. */
53
+ // An expandable row; don't reuse `(i)` as its toggle glyph, `<InfoHint>` already uses `(i)` for a hover card.
97
54
  DisclosureRow,
98
55
  FilterBar,
99
56
  Icon,
100
57
  type IconName,
101
58
  ImageView,
102
- /* <InfoDialog> and <InfoTable> ship beside <ConfirmDialog> and <Row> for the reason everything else here
103
- * does: an extension with something to EXPLAIN rather than confirm, or a block of label→value facts to lay
104
- * out, would otherwise hand-roll a dialog shell and a two-column grid, and the grid is where a hand-roll
105
- * drifts, because keeping the value column aligned across rows is the whole of it. */
59
+ // For explaining, not confirming, or laying out label→value facts; keeps the value column aligned across rows.
106
60
  InfoDialog,
107
61
  InfoHint,
108
62
  InfoTable,
109
63
  isRenderableImage,
110
64
  Markdown,
65
+ // An editable markdown document (author-facing), unlike `Markdown`'s read-only render.
66
+ MarkdownDocument,
111
67
  MarkdownFigure,
112
- /* <Modal> ships for the reason <ConfirmDialog> and <InfoDialog> already do, and it is the one they were
113
- * both missing: an extension whose dialog is neither a confirm nor an explainer had nothing to reach for
114
- * but PrimeVue's Dialog and a width typed into a style attribute, which is exactly how the app itself
115
- * ended up with thirteen widths and one viewport clamp between seventeen dialogs. */
68
+ // For a dialog that is neither a confirm nor an explainer; clamps width to the viewport, unlike a raw PrimeVue
69
+ // Dialog.
116
70
  Modal,
117
71
  type NavGroup,
118
72
  NavRail,
119
- /* <NoteEditor> and `useNoteDraft` ship because "a pane that reads a markdown file, lets somebody correct it
120
- * and lets them delete it" is a shape an extension arrives at over and over, and the first two that did
121
- * built the same thing twice: the same Copy/Edit/Delete cluster, the same Cancel/Save pair, the same
122
- * in-place confirmation, the same draft-or-file binding, the same read-and-write-on-one-surface rule. They
123
- * had already drifted in the ways a second copy does: one cleared its confirmation when a write failed and
124
- * the other did not, and NEITHER caught a failing write, so the error strip filled in from the mutation
125
- * while the click handler's promise rejected into the console. The component is the chrome and the
126
- * composable is the lifecycle, separately, because what a note LOOKS like past the frame is exactly where
127
- * two panes differ. */
73
+ // `NoteEditor` is the chrome, `useNoteDraft` the lifecycle, kept separate since a note's look past the frame
74
+ // differs by pane.
128
75
  NoteEditor,
129
76
  type NoteDraft,
130
77
  type NoteDraftOptions,
131
78
  useNoteDraft,
132
- /* And the map those drafts live in, for the same pair of callers: the lifecycle deliberately does not own
133
- * the ref (an unsaved edit has to outlive the pane that shows it), so both views had written the same
134
- * keyed store above it, down to the `undefined` deletes rule the picker's "Unsaved" reads. */
79
+ // A keyed store of drafts that must outlive the pane showing them; deleting a key (`undefined`) is what a picker's
80
+ // "Unsaved" reads.
135
81
  useKeyedDraft,
136
- /* <NoticeStack> and its model ship beside <ConfirmDialog> for the same reason <InfoDialog> does: a view
137
- * with several async actions needs somewhere for their failures to land that isn't one action's own row,
138
- * and a hand-rolled error strip is the first thing to disagree with the app's about tone and dismissal.
139
- *
140
- * <Notice>. THE SINGLE ONE, was missing from that shipment, and it is the same mistake <Row>/<RowGroup>
141
- * and <PageAction>/<PageHeader> each record one release earlier: the container went out without the thing
142
- * that goes in it. Notice.vue's own comment says every view that hand-rolled `ui.alertDanger()` around an
143
- * interpolated error string renders it instead, "which is what makes the app's failures sound like one
144
- * product rather than like sixty throw sites", and the app took that sweep, 107 call sites of it. The
145
- * extensions could not: the kit handed out the stack and kept the row, so thirteen of them went on
146
- * hand-rolling the strip. Most of a view's failures are ONE at a time; the stack is the rarer case. */
82
+ // `NoticeStack` holds failures from several async actions; `Notice` is the single one, for the common one-at-a-time
83
+ // case.
147
84
  type NoticeModel,
148
85
  type NoticeTone,
149
86
  type NoticeAction,
150
87
  Notice,
151
88
  NoticeStack,
152
89
  Page,
153
- /* <PageAction> ships beside <PageHeader> for the same reason <Row> ships beside <RowGroup>: handing out the
154
- * container without the thing that goes in it is what made every view invent one. Five extensions filled
155
- * `#actions` with a raw PrimeVue <Button> and picked a different cell of its variant matrix each time. */
156
90
  PageAction,
157
91
  PageHeader,
158
92
  ScrollFrame,
159
- /* <PersonaFace> ships because the TWO surfaces in the whole app where you choose a persona are both out
160
- * here, an automation's "Runs as" and a workflow step's "Acts as", and neither could reach the drawing
161
- * every surface that merely LISTS a persona already uses. So the one screen where you are picking a person
162
- * by sight was the one screen showing a line of text. It is exported alongside <Picker>'s own `face` option
163
- * field, which is what most callers actually want: hand the row a persona and the picker draws it. */
93
+ // Also reachable via `Picker`'s `face` option: hand it a persona and the picker draws it.
164
94
  PersonaFace,
165
95
  type PersonaLike,
166
96
  Picker,
@@ -168,24 +98,15 @@ export {
168
98
  type PickerOption,
169
99
  type PickerOptions,
170
100
  ProgressRing,
171
- /* <RepoRail> ships for the reason <SplitView> did, one level in: two extensions scope a workspace-wide
172
- * board to one repository, maintenance and pipelines, and both had written the same column. Same pinned
173
- * "All repositories" row outside every group, same one-number-per-row rule with the second fact as its
174
- * colour, same swap to a <Picker> at the width the split folds at. What differs between them is the report
175
- * behind it, which is why the rows arrive as data. */
101
+ // A workspace board scoped to one repo; always includes a pinned "All repositories" row outside the groups.
176
102
  RepoRail,
177
103
  type RepoRailAll,
178
104
  type RepoRailGroup,
179
105
  type RepoRailRow,
180
- /* The writing field and the drag seam ship for the same reason <SplitView> did: an extension view that
181
- * wants prose typeset as a document, or a pane the reader can size, would otherwise hand-roll one, and
182
- * both recipes have a failure mode (a replica that disagrees with its field; a drag bound to the window)
183
- * that is invisible until it is in front of somebody. */
106
+ // Prose typeset as a document (`ProseField`) and a pane the reader can resize (`ResizeSeam`).
184
107
  ProseField,
185
108
  ResizeSeam,
186
- /* <ResponsiveOverlay> is the one to reach for over <AnchoredOverlay> above whenever the panel is a MENU: it
187
- * is the same anchored box on desktop and a thumb-reachable sheet on a phone, behind one open flag. Extension
188
- * views are read on both, and a popover pinned to a 24px trigger is not usable on a touch screen. */
109
+ // Use over `AnchoredOverlay` for a menu: anchored on desktop, a thumb-reachable sheet on a phone, one open flag.
189
110
  ResponsiveOverlay,
190
111
  Row,
191
112
  RowGroup,
@@ -193,18 +114,10 @@ export {
193
114
  SegmentedControl,
194
115
  seriesColor,
195
116
  sinceOf,
196
- /* The gate <SkeletonRows> and every hand-drawn outline go behind. It ships WITH the outline rather than
197
- * after it, because the three extensions that already drew one drew it ungated: a placeholder that flashes
198
- * for 90ms on a warm read is worse than no placeholder at all, and that is not a thing anybody notices in
199
- * the screenshot they ship. See its note in the kit for the two thresholds. */
117
+ // Gates a skeleton placeholder so a flash on a fast read never shows; see its own note in the kit for the two
118
+ // thresholds.
200
119
  useLoadingReveal,
201
- /* <SkeletonRows> ships beside <RowGroup> for the third time this file makes the argument: the container
202
- * without the WAIT is what made three extensions write their own. Pipelines, deployments and maintenance
203
- * each hand-rolled a placeholder board, and the row-shaped half of all three is this component, same
204
- * bars, same widths walked in order, same `aria-hidden` under the caller's one status region. What they
205
- * could not get right by hand is the part that does not show up in a screenshot: a bar is thinner than the
206
- * text it replaces, so an outline built out of divs is shorter than the list that lands and the page jumps
207
- * as it fills. This one renders REAL <Row>s, so it inherits the tier's padding and keeps the height. */
120
+ // Renders real `<Row>`s rather than divs, so its height matches what replaces it and the page doesn't jump.
208
121
  SkeletonRows,
209
122
  SplitView,
210
123
  StatStrip,
@@ -214,43 +127,29 @@ export {
214
127
  TIME_WINDOWS,
215
128
  type TimeWindow,
216
129
  timeWindowWords,
217
- /* Whether the <SplitView> above has folded its index above its body. What a rail asks before swapping itself
218
- * to a compact control, so the two halves of one screen change shape at one width. Outside a split it falls
219
- * back to the device, which is the only narrow case left. */
130
+ // Whether the enclosing `<SplitView>` has folded to compact; outside a split it falls back to device width.
220
131
  useCompact,
221
132
  useDevice,
222
- /* Arrow keys / Home / End / Enter over a list, with the wrap-around and the scroll-into-view already
223
- * decided. Ships because a keyboard-navigable list is the shape half these views are, and the parts a
224
- * hand-roll leaves out (wrapping at the ends, keeping the active row in view) are invisible on a mouse. */
133
+ // Arrow/Home/End/Enter navigation over a list, with wrap-around and scroll-into-view handled.
225
134
  useListNavigation,
226
- /* <useNow> and <useAsyncAction> ship because the drafts queue was the first extension with a live countdown
227
- * and a page of mutations, the two shapes every such view hand-rolls, one interval and one busy flag at a
228
- * time, each subtly wrong (a clock that keeps ticking with nothing on screen; a double-click firing twice). */
135
+ // A ticking clock (`useNow`) and a busy/error flag for one mutation at a time (`useAsyncAction`).
229
136
  useNow,
230
137
  errorMessage,
231
138
  noticeFrom,
232
139
  noticeOf,
233
140
  useAsyncAction,
234
- /* "Is my own element too narrow for this layout", the question every extension view actually means, since it
235
- * renders into a pane the reader can drag to half its width, not into the window. */
141
+ // Whether the element itself is narrow, not the window; views render into a resizable pane.
236
142
  useNarrow,
237
- /* Where the reader left a narrowing rail. Ships for the reason <SplitView> did: three extension views grew
238
- * the same index column, all three keep the pick in the URL, and all three lost it the moment you clicked the
239
- * tile again, because a tile opens a view at its bare address. Solving that per extension would be three
240
- * copies of one rule about what a link means versus what a memory is allowed to guess. */
143
+ // Remembers a rail's last pick across reopening a tile, which otherwise opens at the view's bare address.
241
144
  useRailMemory,
242
- /* The other half of `scroll="page"`. A view whose rail SELECTS something (a note, a package page) hands the
243
- * page scrollport a position that stops meaning anything the moment the selection moves, and every such
244
- * view would otherwise re-derive the same answer: find the shell's scroller, put it back at the top. */
145
+ // Resets the page scrollport to top when a rail selection changes; the other half of `scroll="page"`.
245
146
  useScrollReset,
246
- /* And what the next pinned thing under it has to clear, since a page-scrolling view that pins a filter bar
247
- * over its content is the shape three of these sections now are. */
147
+ // Height the next pinned element must clear, for a page-scrolling view stacking pinned bars.
248
148
  type StickyTop,
249
149
  useStickyTop,
250
150
  useTheme,
251
151
  } from "@intentic/ui";
252
- // Also reachable as `@intentic/extension-ui/format`, see the note there for why an extension's pure logic
253
- // wants them without the components attached.
152
+ // Also reachable as `@intentic/extension-ui/format`, without the components attached.
254
153
  export {
255
154
  formatBytes,
256
155
  formatDate,
@@ -263,10 +162,8 @@ export {
263
162
  freshness,
264
163
  timeAgo,
265
164
  } from "./format.js";
266
- /* The figure vocabulary that <Markdown> renders from prose and <MarkdownFigure> renders from data. Types only,
267
- * an extension needs them to BUILD a figure out of facts it already holds (a dependency graph, a staleness
268
- * tally) rather than round-tripping through markdown to draw one. The parser and the document splitter stay out
269
- * of the kit: they are the prose surface's job, and <Markdown> already does it. */
165
+ // Types only, so an extension can build a figure straight from facts it holds instead of round-tripping through
166
+ // markdown. The parser and document splitter stay in `<Markdown>`, not here.
270
167
  export type {
271
168
  BarsFigure,
272
169
  BarsFigureItem,
@@ -279,15 +176,9 @@ export type {
279
176
  StatsFigure,
280
177
  StatsFigureItem,
281
178
  } from "@intentic/ui/markdown";
282
- /* The raw primitives, kept deliberately short. Handing out a primitive the KIT already wraps is how an
283
- * extension screen ends up wearing OS chrome next to the app's own: `Select` and `InputText` used to ship here
284
- * and four views took them, so a dropdown with a different focus ring sat beside <Picker> and a text field with
285
- * different padding beside `ui.input`. Those two are gone: <Picker> and `ui.input()` are the spellings.
286
- * <Dialog> was the third, and it is gone for the same reason: it stayed "until the kit has a general dialog
287
- * shell", six extension views took it, and every one of them typed its own width into a style attribute with
288
- * no viewport clamp, the exact spread that <Modal> above now exists to end. The shell is here, so the raw one
289
- * is not. <Popover> stays only because <ResponsiveOverlay>/<AnchoredOverlay> do not yet cover every menu shape,
290
- * and it is on the same clock: those two are the ones that open in the right window when a panel is popped out. */
179
+ // Raw PrimeVue primitives kept deliberately few: prefer `Picker`/`ui.input()`/`Modal` over
180
+ // `Select`/`InputText`/`Dialog`.
181
+ // `Popover` stays only where `AnchoredOverlay`/`ResponsiveOverlay` don't yet cover a menu shape.
291
182
  export { default as Checkbox } from "primevue/checkbox";
292
183
  export type { MenuItem } from "primevue/menuitem";
293
184
  export { default as Popover } from "primevue/popover";