@intentic/extension-ui 1.223.0 → 1.224.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/index.js +2 -0
- package/dist/types/extension-ui/src/index.d.ts +1 -1
- package/dist/types/ui/src/index.d.ts +1 -0
- package/dist/types/ui/src/lib/link.d.ts +5 -0
- package/names.mjs +2 -0
- package/package.json +1 -1
- package/src/format.ts +1 -1
- package/src/index.ts +29 -22
package/dist/index.js
CHANGED
|
@@ -64,6 +64,8 @@ export const StatusTally = m["StatusTally"];
|
|
|
64
64
|
export const StepSection = m["StepSection"];
|
|
65
65
|
export const TIME_WINDOWS = m["TIME_WINDOWS"];
|
|
66
66
|
export const ToggleSwitch = m["ToggleSwitch"];
|
|
67
|
+
export const appLink = m["appLink"];
|
|
68
|
+
export const browserOwnsClick = m["browserOwnsClick"];
|
|
67
69
|
export const clipboardOf = m["clipboardOf"];
|
|
68
70
|
export const errorMessage = m["errorMessage"];
|
|
69
71
|
export const formatBytes = m["formatBytes"];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { AgentRunButton, type AgentRunChoice, type AgentRunPicker, type ModelPicking, useAgentRunPick, AnchoredOverlay, Avatar, BarChart, BottomSheet, BrandMark, Card, clipboardOf, openForwardedPort, ChangeStatusMark, type ChangeStatus, ui, Code, CodeField, ConfirmDialog, ContextMenu, CopyButton, StatusTally, type TallyItem, DagEditor, DagGraph, type DagEdge, type DagNode, DiffStat, FilterBar, Icon, type IconName, ImageView, InfoDialog, InfoHint, InfoTable, isRenderableImage, Markdown, MarkdownFigure, Modal, type NavGroup, NavRail, NoteEditor, type NoteDraft, type NoteDraftOptions, useNoteDraft, type NoticeModel, type NoticeTone, type NoticeAction, Notice, NoticeStack, Page, PageAction, PageHeader, ScrollFrame, PersonaFace, type PersonaLike, Picker, type PickerGroup, type PickerOption, type PickerOptions, ProgressRing, RepoRail, type RepoRailAll, type RepoRailGroup, type RepoRailRow, ProseField, ResizeSeam, ResponsiveOverlay, Row, RowGroup, SearchBar, SegmentedControl, seriesColor, sinceOf, useLoadingReveal, SkeletonRows, SplitView, StatStrip, StatusBadge, type StatusVariant, StepSection, TIME_WINDOWS, type TimeWindow, timeWindowWords, useCompact, useDevice, useListNavigation, useNow, errorMessage, noticeFrom, noticeOf, useAsyncAction, useNarrow, useRailMemory, useTheme, } from "../../ui/src/index.js";
|
|
1
|
+
export { AgentRunButton, type AgentRunChoice, type AgentRunPicker, type ModelPicking, useAgentRunPick, AnchoredOverlay, Avatar, BarChart, BottomSheet, BrandMark, Card, clipboardOf, browserOwnsClick, appLink, openForwardedPort, ChangeStatusMark, type ChangeStatus, ui, Code, CodeField, ConfirmDialog, ContextMenu, CopyButton, StatusTally, type TallyItem, DagEditor, DagGraph, type DagEdge, type DagNode, DiffStat, FilterBar, Icon, type IconName, ImageView, InfoDialog, InfoHint, InfoTable, isRenderableImage, Markdown, MarkdownFigure, Modal, type NavGroup, NavRail, NoteEditor, type NoteDraft, type NoteDraftOptions, useNoteDraft, type NoticeModel, type NoticeTone, type NoticeAction, Notice, NoticeStack, Page, PageAction, PageHeader, ScrollFrame, PersonaFace, type PersonaLike, Picker, type PickerGroup, type PickerOption, type PickerOptions, ProgressRing, RepoRail, type RepoRailAll, type RepoRailGroup, type RepoRailRow, ProseField, ResizeSeam, ResponsiveOverlay, Row, RowGroup, SearchBar, SegmentedControl, seriesColor, sinceOf, useLoadingReveal, SkeletonRows, SplitView, StatStrip, StatusBadge, type StatusVariant, StepSection, TIME_WINDOWS, type TimeWindow, timeWindowWords, useCompact, useDevice, useListNavigation, useNow, errorMessage, noticeFrom, noticeOf, useAsyncAction, useNarrow, useRailMemory, useTheme, } from "../../ui/src/index.js";
|
|
2
2
|
export { formatBytes, formatDate, formatDateTime, formatDayMonth, formatTime, formatTimestamp, formatTokens, formatWeekdayTime, freshness, timeAgo, } from "./format.js";
|
|
3
3
|
export type { BarsFigure, BarsFigureItem, DagFigure, DagFigureEdge, DagFigureNode, Figure, FigureAccent, MermaidFigure, StatsFigure, StatsFigureItem, } from "../../ui/src/markdown/index.js";
|
|
4
4
|
export { default as Button } from "primevue/button";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { clipboardOf } from "./lib/clipboard.js";
|
|
2
|
+
export { appLink, browserOwnsClick } from "./lib/link.js";
|
|
2
3
|
export { openForwardedPort } from "./lib/portPreview.js";
|
|
3
4
|
export { ui } from "./lib/ui.js";
|
|
4
5
|
export { default as AgentRunButton } from "./components/AgentRunButton.vue";
|
package/names.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentic/extension-ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.224.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",
|
package/src/format.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* A SOURCE-level door, for in-repo extensions (whose code vite compiles into the app bundle) and their tests.
|
|
10
10
|
* A git-installed bundle resolves its bare specifiers through the import map in index.html, which carries the
|
|
11
|
-
* barrel alone
|
|
11
|
+
* barrel alone, so nothing is exported here that the barrel does not also export, and a third-party author
|
|
12
12
|
* reaching for `@intentic/extension-ui` is missing none of it. */
|
|
13
13
|
export {
|
|
14
14
|
formatBytes,
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* The UI kit extensions render with. This entrypoint is the package's ONE public surface (the repo's
|
|
2
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
|
|
3
|
+
* primitives extension views actually use. At runtime the kit is HOST-PROVIDED, the web app maps this module
|
|
4
4
|
* into its import map (extension-host/hostModules.ts), so third-party bundles marking it external get the
|
|
5
5
|
* shell's own component instances and theming; in-repo builtin extension packages bundle this same module and
|
|
6
6
|
* land on the same instances. Export names are mirrored in ../names.mjs (shim generation + drift assertion).
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
* <SplitView> is here for exactly the same reason one level up: five screens are an index beside a body, and the
|
|
15
15
|
* one implementation that had solved it (HubLayout) sat in the web app where no extension could import it. */
|
|
16
16
|
export {
|
|
17
|
-
/* <AgentRunButton> and its state ship because FOUR extensions start an agent for the user
|
|
18
|
-
* deployments, maintenance, acceptance
|
|
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
19
|
* choose what it spends: three had no control at all and named the model in a tooltip, the fourth grew a
|
|
20
20
|
* chip of its own. That is the same divergence <SplitView> and <Row> were shipped to end, arriving on the
|
|
21
21
|
* one control in the app where getting it wrong costs money rather than pixels. `useAgentRunPick` is the
|
|
@@ -27,14 +27,14 @@ export {
|
|
|
27
27
|
useAgentRunPick,
|
|
28
28
|
/* <AnchoredOverlay> ships because the alternative on this surface is PrimeVue's <Popover>, and six extension
|
|
29
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
|
|
30
|
+
* popped-out panel it opens off the bottom edge, over its own trigger, and cannot be clicked shut, the
|
|
31
31
|
* failure the kit's own tooltip directive exists to avoid. */
|
|
32
32
|
AnchoredOverlay,
|
|
33
33
|
Avatar,
|
|
34
34
|
BarChart,
|
|
35
35
|
BottomSheet,
|
|
36
36
|
/* <BrandMark> ships because the drafts queue is the second surface to draw a platform as its brand (the
|
|
37
|
-
* capability cards were the first)
|
|
37
|
+
* capability cards were the first), and because its fallback is the part a hand-roll skips: a platform
|
|
38
38
|
* with no installed connector still has to render as SOMETHING, and the monogram is that something. */
|
|
39
39
|
BrandMark,
|
|
40
40
|
Card,
|
|
@@ -43,15 +43,22 @@ export {
|
|
|
43
43
|
* the module-global navigator belongs to the opener, whose document isn't focused, so the write rejects
|
|
44
44
|
* and every call site swallows it. */
|
|
45
45
|
clipboardOf,
|
|
46
|
+
/* `browserOwnsClick` ships because every extension view that navigates has the same one-line decision to
|
|
47
|
+
make and no way to reach the app's answer: a row that is BOTH a link and a control must let a Ctrl/⌘,
|
|
48
|
+
Shift or Alt click belong to the browser, and do its own work only on the plain one. Three views had
|
|
49
|
+
hand-rolled a navigate() on a <button>, which is the version of that decision where the modifier keys
|
|
50
|
+
simply do not work. */
|
|
51
|
+
browserOwnsClick,
|
|
52
|
+
appLink,
|
|
46
53
|
/* `openForwardedPort` ships because the Ports view is the third surface to wait on a freshly-minted preview
|
|
47
|
-
* hostname and the second to open one in a tab
|
|
54
|
+
* hostname and the second to open one in a tab, and the two that had solved it (the preview panel's iframe
|
|
48
55
|
* gate, the terminal's Ctrl+click) both sat in the web app where no extension could import them. The
|
|
49
56
|
* duplicate was word-for-word, down to the sentence a user reads while DNS propagates. */
|
|
50
57
|
openForwardedPort,
|
|
51
58
|
/* The two halves of a changed-file row ship together because they are always drawn together, and they ship
|
|
52
59
|
* at all for the reason <SplitView> did: the git-history extension is the seventh surface to draw one, and
|
|
53
60
|
* the six that had solved it all sat in the web app where no extension could import them. <ChangeStatusMark>
|
|
54
|
-
* carries the fixed-width cell that keeps a column of paths aligned whatever letter lands in it
|
|
61
|
+
* carries the fixed-width cell that keeps a column of paths aligned whatever letter lands in it, the detail
|
|
55
62
|
* a hand-rolled copy gets subtly wrong. */
|
|
56
63
|
ChangeStatusMark,
|
|
57
64
|
type ChangeStatus,
|
|
@@ -77,7 +84,7 @@ export {
|
|
|
77
84
|
ImageView,
|
|
78
85
|
/* <InfoDialog> and <InfoTable> ship beside <ConfirmDialog> and <Row> for the reason everything else here
|
|
79
86
|
* does: an extension with something to EXPLAIN rather than confirm, or a block of label→value facts to lay
|
|
80
|
-
* out, would otherwise hand-roll a dialog shell and a two-column grid
|
|
87
|
+
* out, would otherwise hand-roll a dialog shell and a two-column grid, and the grid is where a hand-roll
|
|
81
88
|
* drifts, because keeping the value column aligned across rows is the whole of it. */
|
|
82
89
|
InfoDialog,
|
|
83
90
|
InfoHint,
|
|
@@ -87,13 +94,13 @@ export {
|
|
|
87
94
|
MarkdownFigure,
|
|
88
95
|
/* <Modal> ships for the reason <ConfirmDialog> and <InfoDialog> already do, and it is the one they were
|
|
89
96
|
* both missing: an extension whose dialog is neither a confirm nor an explainer had nothing to reach for
|
|
90
|
-
* but PrimeVue's Dialog and a width typed into a style attribute
|
|
97
|
+
* but PrimeVue's Dialog and a width typed into a style attribute, which is exactly how the app itself
|
|
91
98
|
* ended up with thirteen widths and one viewport clamp between seventeen dialogs. */
|
|
92
99
|
Modal,
|
|
93
100
|
type NavGroup,
|
|
94
101
|
NavRail,
|
|
95
102
|
/* <NoteEditor> and `useNoteDraft` ship because TWO extensions are a pane that reads a markdown file, lets
|
|
96
|
-
* somebody correct it and lets them delete it
|
|
103
|
+
* somebody correct it and lets them delete it, knowledge and memory, and they had built the same thing
|
|
97
104
|
* twice: the same Copy/Edit/Delete cluster, the same Cancel/Save pair, the same in-place confirmation, the
|
|
98
105
|
* same draft-or-file binding, the same read-and-write-on-one-surface rule. They had already drifted in the
|
|
99
106
|
* ways a second copy does: one cleared its confirmation when a write failed and the other did not, and
|
|
@@ -108,11 +115,11 @@ export {
|
|
|
108
115
|
* with several async actions needs somewhere for their failures to land that isn't one action's own row,
|
|
109
116
|
* and a hand-rolled error strip is the first thing to disagree with the app's about tone and dismissal.
|
|
110
117
|
*
|
|
111
|
-
* <Notice
|
|
118
|
+
* <Notice>. THE SINGLE ONE, was missing from that shipment, and it is the same mistake <Row>/<RowGroup>
|
|
112
119
|
* and <PageAction>/<PageHeader> each record one release earlier: the container went out without the thing
|
|
113
120
|
* that goes in it. Notice.vue's own comment says every view that hand-rolled `ui.alertDanger()` around an
|
|
114
121
|
* interpolated error string renders it instead, "which is what makes the app's failures sound like one
|
|
115
|
-
* product rather than like sixty throw sites"
|
|
122
|
+
* product rather than like sixty throw sites", and the app took that sweep, 107 call sites of it. The
|
|
116
123
|
* extensions could not: the kit handed out the stack and kept the row, so thirteen of them went on
|
|
117
124
|
* hand-rolling the strip. Most of a view's failures are ONE at a time; the stack is the rarer case. */
|
|
118
125
|
type NoticeModel,
|
|
@@ -128,7 +135,7 @@ export {
|
|
|
128
135
|
PageHeader,
|
|
129
136
|
ScrollFrame,
|
|
130
137
|
/* <PersonaFace> ships because the TWO surfaces in the whole app where you choose a persona are both out
|
|
131
|
-
* here
|
|
138
|
+
* here, an automation's "Runs as" and a workflow step's "Acts as", and neither could reach the drawing
|
|
132
139
|
* every surface that merely LISTS a persona already uses. So the one screen where you are picking a person
|
|
133
140
|
* by sight was the one screen showing a line of text. It is exported alongside <Picker>'s own `face` option
|
|
134
141
|
* field, which is what most callers actually want: hand the row a persona and the picker draws it. */
|
|
@@ -140,7 +147,7 @@ export {
|
|
|
140
147
|
type PickerOptions,
|
|
141
148
|
ProgressRing,
|
|
142
149
|
/* <RepoRail> ships for the reason <SplitView> did, one level in: two extensions scope a workspace-wide
|
|
143
|
-
* board to one repository
|
|
150
|
+
* board to one repository, maintenance and pipelines, and both had written the same column. Same pinned
|
|
144
151
|
* "All repositories" row outside every group, same one-number-per-row rule with the second fact as its
|
|
145
152
|
* colour, same swap to a <Picker> at the width the split folds at. What differs between them is the report
|
|
146
153
|
* behind it, which is why the rows arrive as data. */
|
|
@@ -149,7 +156,7 @@ export {
|
|
|
149
156
|
type RepoRailGroup,
|
|
150
157
|
type RepoRailRow,
|
|
151
158
|
/* The writing field and the drag seam ship for the same reason <SplitView> did: an extension view that
|
|
152
|
-
* wants prose typeset as a document, or a pane the reader can size, would otherwise hand-roll one
|
|
159
|
+
* wants prose typeset as a document, or a pane the reader can size, would otherwise hand-roll one, and
|
|
153
160
|
* both recipes have a failure mode (a replica that disagrees with its field; a drag bound to the window)
|
|
154
161
|
* that is invisible until it is in front of somebody. */
|
|
155
162
|
ProseField,
|
|
@@ -171,7 +178,7 @@ export {
|
|
|
171
178
|
useLoadingReveal,
|
|
172
179
|
/* <SkeletonRows> ships beside <RowGroup> for the third time this file makes the argument: the container
|
|
173
180
|
* without the WAIT is what made three extensions write their own. Pipelines, deployments and maintenance
|
|
174
|
-
* each hand-rolled a placeholder board, and the row-shaped half of all three is this component
|
|
181
|
+
* each hand-rolled a placeholder board, and the row-shaped half of all three is this component, same
|
|
175
182
|
* bars, same widths walked in order, same `aria-hidden` under the caller's one status region. What they
|
|
176
183
|
* could not get right by hand is the part that does not show up in a screenshot: a bar is thinner than the
|
|
177
184
|
* text it replaces, so an outline built out of divs is shorter than the list that lands and the page jumps
|
|
@@ -195,24 +202,24 @@ export {
|
|
|
195
202
|
* hand-roll leaves out (wrapping at the ends, keeping the active row in view) are invisible on a mouse. */
|
|
196
203
|
useListNavigation,
|
|
197
204
|
/* <useNow> and <useAsyncAction> ship because the drafts queue was the first extension with a live countdown
|
|
198
|
-
* and a page of mutations
|
|
205
|
+
* and a page of mutations, the two shapes every such view hand-rolls, one interval and one busy flag at a
|
|
199
206
|
* time, each subtly wrong (a clock that keeps ticking with nothing on screen; a double-click firing twice). */
|
|
200
207
|
useNow,
|
|
201
208
|
errorMessage,
|
|
202
209
|
noticeFrom,
|
|
203
210
|
noticeOf,
|
|
204
211
|
useAsyncAction,
|
|
205
|
-
/* "Is my own element too narrow for this layout"
|
|
212
|
+
/* "Is my own element too narrow for this layout", the question every extension view actually means, since it
|
|
206
213
|
* renders into a pane the reader can drag to half its width, not into the window. */
|
|
207
214
|
useNarrow,
|
|
208
215
|
/* Where the reader left a narrowing rail. Ships for the reason <SplitView> did: three extension views grew
|
|
209
216
|
* the same index column, all three keep the pick in the URL, and all three lost it the moment you clicked the
|
|
210
|
-
* tile again
|
|
217
|
+
* tile again, because a tile opens a view at its bare address. Solving that per extension would be three
|
|
211
218
|
* copies of one rule about what a link means versus what a memory is allowed to guess. */
|
|
212
219
|
useRailMemory,
|
|
213
220
|
useTheme,
|
|
214
221
|
} from "@intentic/ui";
|
|
215
|
-
// Also reachable as `@intentic/extension-ui/format
|
|
222
|
+
// Also reachable as `@intentic/extension-ui/format`, see the note there for why an extension's pure logic
|
|
216
223
|
// wants them without the components attached.
|
|
217
224
|
export {
|
|
218
225
|
formatBytes,
|
|
@@ -226,7 +233,7 @@ export {
|
|
|
226
233
|
freshness,
|
|
227
234
|
timeAgo,
|
|
228
235
|
} from "./format.js";
|
|
229
|
-
/* The figure vocabulary that <Markdown> renders from prose and <MarkdownFigure> renders from data. Types only
|
|
236
|
+
/* The figure vocabulary that <Markdown> renders from prose and <MarkdownFigure> renders from data. Types only,
|
|
230
237
|
* an extension needs them to BUILD a figure out of facts it already holds (a dependency graph, a staleness
|
|
231
238
|
* tally) rather than round-tripping through markdown to draw one. The parser and the document splitter stay out
|
|
232
239
|
* of the kit: they are the prose surface's job, and <Markdown> already does it. */
|
|
@@ -248,7 +255,7 @@ export type {
|
|
|
248
255
|
* different padding beside `ui.input`. Those two are gone — <Picker> and `ui.input()` are the spellings.
|
|
249
256
|
* <Dialog> was the third, and it is gone for the same reason: it stayed "until the kit has a general dialog
|
|
250
257
|
* shell", six extension views took it, and every one of them typed its own width into a style attribute with
|
|
251
|
-
* no viewport clamp
|
|
258
|
+
* no viewport clamp, the exact spread that <Modal> above now exists to end. The shell is here, so the raw one
|
|
252
259
|
* is not. <Popover> stays only because <ResponsiveOverlay>/<AnchoredOverlay> do not yet cover every menu shape,
|
|
253
260
|
* and it is on the same clock: those two are the ones that open in the right window when a panel is popped out. */
|
|
254
261
|
export { default as Button } from "primevue/button";
|