@intentic/extension-ui 1.230.3 → 1.232.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 CHANGED
@@ -27,6 +27,7 @@ export const CopyButton = m["CopyButton"];
27
27
  export const DagEditor = m["DagEditor"];
28
28
  export const DagGraph = m["DagGraph"];
29
29
  export const DiffStat = m["DiffStat"];
30
+ export const DisclosureRow = m["DisclosureRow"];
30
31
  export const FilterBar = m["FilterBar"];
31
32
  export const Icon = m["Icon"];
32
33
  export const ImageView = m["ImageView"];
@@ -90,6 +91,7 @@ export const useAgentRunPick = m["useAgentRunPick"];
90
91
  export const useAsyncAction = m["useAsyncAction"];
91
92
  export const useCompact = m["useCompact"];
92
93
  export const useDevice = m["useDevice"];
94
+ export const useKeyedDraft = m["useKeyedDraft"];
93
95
  export const useListNavigation = m["useListNavigation"];
94
96
  export const useLoadingReveal = m["useLoadingReveal"];
95
97
  export const useNarrow = m["useNarrow"];
@@ -1,4 +1,4 @@
1
- export { AgentRunButton, type AgentRunChoice, type AgentRunPicker, type ModelPicking, useAgentRunPick, AnchoredOverlay, Avatar, Button, vAction, 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";
1
+ export { AgentRunButton, type AgentRunChoice, type AgentRunPicker, type ModelPicking, useAgentRunPick, AnchoredOverlay, Avatar, Button, vAction, 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, DisclosureRow, FilterBar, Icon, type IconName, ImageView, InfoDialog, InfoHint, InfoTable, isRenderableImage, Markdown, MarkdownFigure, Modal, type NavGroup, NavRail, NoteEditor, type NoteDraft, type NoteDraftOptions, useNoteDraft, useKeyedDraft, 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 Checkbox } from "primevue/checkbox";
@@ -0,0 +1,47 @@
1
+ import type { IconName } from "../icons/iconSets.js";
2
+ import { type RowDensity, type RowTone } from "./row.js";
3
+ type __VLS_Props = {
4
+ open?: boolean;
5
+ density?: RowDensity;
6
+ hit?: `header` | `pair` | `row`;
7
+ body?: `rail` | `drawer`;
8
+ icon?: IconName;
9
+ title?: string;
10
+ description?: string;
11
+ wideControl?: boolean;
12
+ tone?: RowTone;
13
+ disabled?: boolean;
14
+ };
15
+ declare var __VLS_1: {}, __VLS_26: {}, __VLS_29: {}, __VLS_32: {}, __VLS_35: {}, __VLS_38: {}, __VLS_46: {}, __VLS_48: {}, __VLS_50: {};
16
+ type __VLS_Slots = {} & {
17
+ before?: (props: typeof __VLS_1) => any;
18
+ } & {
19
+ lead?: (props: typeof __VLS_26) => any;
20
+ } & {
21
+ title?: (props: typeof __VLS_29) => any;
22
+ } & {
23
+ description?: (props: typeof __VLS_32) => any;
24
+ } & {
25
+ meta?: (props: typeof __VLS_35) => any;
26
+ } & {
27
+ control?: (props: typeof __VLS_38) => any;
28
+ } & {
29
+ lead?: (props: typeof __VLS_46) => any;
30
+ } & {
31
+ below?: (props: typeof __VLS_48) => any;
32
+ } & {
33
+ below?: (props: typeof __VLS_50) => any;
34
+ };
35
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
36
+ "update:open": (open: boolean) => any;
37
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
38
+ "onUpdate:open"?: ((open: boolean) => any) | undefined;
39
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
40
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
41
+ declare const _default: typeof __VLS_export;
42
+ export default _default;
43
+ type __VLS_WithSlots<T, S> = T & {
44
+ new (): {
45
+ $slots: S;
46
+ };
47
+ };
@@ -2,13 +2,13 @@ type __VLS_Props = {
2
2
  title: string;
3
3
  description?: string;
4
4
  };
5
- declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {};
5
+ declare var __VLS_6: {}, __VLS_8: {}, __VLS_10: {};
6
6
  type __VLS_Slots = {} & {
7
- info?: (props: typeof __VLS_1) => any;
7
+ info?: (props: typeof __VLS_6) => any;
8
8
  } & {
9
- actions?: (props: typeof __VLS_3) => any;
9
+ actions?: (props: typeof __VLS_8) => any;
10
10
  } & {
11
- description?: (props: typeof __VLS_5) => any;
11
+ description?: (props: typeof __VLS_10) => any;
12
12
  };
13
13
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
14
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,4 +1,5 @@
1
1
  import { type IconName } from "../icons/iconSets.js";
2
+ import { type RowDensity, type RowTone } from "./row.js";
2
3
  type __VLS_Props = {
3
4
  icon?: IconName;
4
5
  title?: string;
@@ -7,29 +8,37 @@ type __VLS_Props = {
7
8
  as?: `div` | `label` | `button`;
8
9
  interactive?: boolean;
9
10
  chevron?: boolean;
10
- tone?: `default` | `danger` | `warning` | `success` | `info`;
11
- density?: `comfortable` | `compact` | `dense`;
11
+ tone?: RowTone;
12
+ density?: RowDensity;
12
13
  selected?: boolean;
13
14
  heading?: 2 | 3;
14
15
  spin?: boolean;
15
16
  flush?: boolean;
16
17
  wideControl?: boolean;
18
+ headerButton?: boolean;
19
+ headerExpanded?: boolean;
20
+ headerControls?: string;
21
+ headlineGuard?: boolean;
17
22
  };
18
- declare var __VLS_8: {}, __VLS_21: {}, __VLS_23: {}, __VLS_25: {}, __VLS_27: {}, __VLS_34: {};
23
+ declare var __VLS_16: {}, __VLS_29: {}, __VLS_31: {}, __VLS_33: {}, __VLS_35: {}, __VLS_42: {};
19
24
  type __VLS_Slots = {} & {
20
- lead?: (props: typeof __VLS_8) => any;
25
+ lead?: (props: typeof __VLS_16) => any;
21
26
  } & {
22
- title?: (props: typeof __VLS_21) => any;
27
+ title?: (props: typeof __VLS_29) => any;
23
28
  } & {
24
- description?: (props: typeof __VLS_23) => any;
29
+ description?: (props: typeof __VLS_31) => any;
25
30
  } & {
26
- meta?: (props: typeof __VLS_25) => any;
31
+ meta?: (props: typeof __VLS_33) => any;
27
32
  } & {
28
- control?: (props: typeof __VLS_27) => any;
33
+ control?: (props: typeof __VLS_35) => any;
29
34
  } & {
30
- below?: (props: typeof __VLS_34) => any;
35
+ below?: (props: typeof __VLS_42) => any;
31
36
  };
32
- declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
37
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
38
+ headerClick: (event: MouseEvent) => any;
39
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
40
+ onHeaderClick?: ((event: MouseEvent) => any) | undefined;
41
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
33
42
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
34
43
  declare const _default: typeof __VLS_export;
35
44
  export default _default;
@@ -7,7 +7,8 @@ export interface TallyItem {
7
7
  readonly pulse?: boolean;
8
8
  }
9
9
  type __VLS_Props = {
10
- items: readonly TallyItem[];
10
+ items?: readonly TallyItem[];
11
+ skeleton?: number;
11
12
  };
12
13
  declare var __VLS_1: {};
13
14
  type __VLS_Slots = {} & {
@@ -0,0 +1,42 @@
1
+ export type RowDensity = `comfortable` | `compact` | `dense`;
2
+ export type RowTone = `default` | `danger` | `warning` | `success` | `info`;
3
+ export declare const ROW_TIERS: {
4
+ readonly comfortable: {
5
+ readonly pad: "px-4.5 py-3.5";
6
+ readonly gap: "gap-3";
7
+ readonly icon: "text-lg";
8
+ readonly title: "font-semibold leading-tight";
9
+ readonly description: "text-xs";
10
+ };
11
+ readonly compact: {
12
+ readonly pad: "px-4 py-2.5";
13
+ readonly gap: "gap-3";
14
+ readonly icon: "text-sm";
15
+ readonly title: "text-sm font-medium leading-tight";
16
+ readonly description: "text-2xs";
17
+ };
18
+ readonly dense: {
19
+ readonly pad: "px-2.5 py-2";
20
+ readonly gap: "gap-2.5";
21
+ readonly icon: "text-xs";
22
+ readonly title: "text-xs font-medium leading-tight";
23
+ readonly description: "text-2xs";
24
+ };
25
+ };
26
+ export declare const ROW_TONES: {
27
+ readonly default: "text-subtle";
28
+ readonly danger: "text-danger";
29
+ readonly warning: "text-warning";
30
+ readonly success: "text-success";
31
+ readonly info: "text-link";
32
+ };
33
+ export declare const ROW_TOGGLE_GAPS: {
34
+ readonly comfortable: "gap-2.5";
35
+ readonly compact: "gap-2";
36
+ readonly dense: "gap-1.5";
37
+ };
38
+ export declare const ROW_TOGGLE_SIZES: {
39
+ readonly comfortable: "text-xs";
40
+ readonly compact: "text-2xs";
41
+ readonly dense: "text-2xs";
42
+ };
@@ -0,0 +1,5 @@
1
+ import { type Ref, type WritableComputedRef } from "vue";
2
+ export declare const useKeyedDraft: (selected: Ref<string | undefined>) => {
3
+ draft: WritableComputedRef<string | undefined>;
4
+ hasDraft: (key: string) => boolean;
5
+ };
@@ -23,6 +23,7 @@ export { default as CopyButton } from "./components/CopyButton.vue";
23
23
  export { type TallyItem, default as StatusTally } from "./components/StatusTally.vue";
24
24
  export { default as DagEditor } from "./components/DagEditor.vue";
25
25
  export { default as DagGraph } from "./components/DagGraph.vue";
26
+ export { default as DisclosureRow } from "./components/DisclosureRow.vue";
26
27
  export { type DagEdge, type DagNode } from "./components/dagLayout.js";
27
28
  export { default as FilterBar } from "./components/FilterBar.vue";
28
29
  export { default as Icon } from "./components/Icon.vue";
@@ -38,6 +39,7 @@ export { default as NavRail } from "./components/NavRail.vue";
38
39
  export { type NavGroup } from "./components/navRail.js";
39
40
  export { default as NoteEditor } from "./components/NoteEditor.vue";
40
41
  export { type NoteDraft, type NoteDraftOptions, useNoteDraft } from "./composables/useNoteDraft.js";
42
+ export { useKeyedDraft } from "./composables/useKeyedDraft.js";
41
43
  export { default as Notice } from "./components/Notice.vue";
42
44
  export { default as NoticeStack } from "./components/NoticeStack.vue";
43
45
  export { type NoticeAction, type NoticeModel, type NoticeTone } from "./components/notice.js";
@@ -1,9 +1,22 @@
1
- export type ProbeOutcome = "reachable" | "gaveUp" | "abandoned";
1
+ export type PreviewState = "serving" | "starting" | "several" | "stopped" | "unforwarded";
2
+ export interface PreviewServer {
3
+ readonly port: number;
4
+ readonly dir?: string;
5
+ }
6
+ export type PreviewProbe = {
7
+ readonly outcome: "reached";
8
+ readonly state: PreviewState;
9
+ readonly servers: readonly PreviewServer[];
10
+ } | {
11
+ readonly outcome: "unreachable";
12
+ } | {
13
+ readonly outcome: "abandoned";
14
+ };
2
15
  export interface ProbeOptions {
3
16
  readonly onWaiting?: (elapsedMs: number, slow: boolean) => void;
4
17
  readonly stillWanted?: () => boolean;
5
18
  }
6
- export declare const probeUntilReachable: (url: string, options?: ProbeOptions) => Promise<ProbeOutcome>;
19
+ export declare const probePreview: (url: string, options?: ProbeOptions) => Promise<PreviewProbe>;
7
20
  export interface ForwardedPortTab {
8
21
  readonly port: number;
9
22
  readonly path?: string;
package/names.mjs CHANGED
@@ -24,6 +24,7 @@ export const extensionUiNames = [
24
24
  "DagEditor",
25
25
  "DagGraph",
26
26
  "DiffStat",
27
+ "DisclosureRow",
27
28
  "errorMessage",
28
29
  "FilterBar",
29
30
  "formatBytes",
@@ -83,6 +84,7 @@ export const extensionUiNames = [
83
84
  "useAsyncAction",
84
85
  "useCompact",
85
86
  "useDevice",
87
+ "useKeyedDraft",
86
88
  "useListNavigation",
87
89
  "useLoadingReveal",
88
90
  "useNarrow",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentic/extension-ui",
3
- "version": "1.230.3",
3
+ "version": "1.232.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/index.ts CHANGED
@@ -88,6 +88,13 @@ export {
88
88
  type DagEdge,
89
89
  type DagNode,
90
90
  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. */
97
+ DisclosureRow,
91
98
  FilterBar,
92
99
  Icon,
93
100
  type IconName,
@@ -121,6 +128,10 @@ export {
121
128
  type NoteDraft,
122
129
  type NoteDraftOptions,
123
130
  useNoteDraft,
131
+ /* And the map those drafts live in, for the same pair of callers: the lifecycle deliberately does not own
132
+ * the ref (an unsaved edit has to outlive the pane that shows it), so both views had written the same
133
+ * keyed store above it, down to the `undefined` deletes rule the picker's "Unsaved" reads. */
134
+ useKeyedDraft,
124
135
  /* <NoticeStack> and its model ship beside <ConfirmDialog> for the same reason <InfoDialog> does: a view
125
136
  * with several async actions needs somewhere for their failures to land that isn't one action's own row,
126
137
  * and a hand-rolled error strip is the first thing to disagree with the app's about tone and dismissal.