@intentic/extension-ui 1.176.3 → 1.209.1

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 (34) hide show
  1. package/dist/format.js +1 -0
  2. package/dist/index.js +11 -6
  3. package/dist/types/extension-ui/src/format.d.ts +1 -1
  4. package/dist/types/extension-ui/src/index.d.ts +2 -3
  5. package/dist/types/ui/src/components/AnchoredOverlay.vue.d.ts +1 -1
  6. package/dist/types/ui/src/components/BrandMark.vue.d.ts +2 -0
  7. package/dist/types/ui/src/components/Code.vue.d.ts +1 -1
  8. package/dist/types/ui/src/components/CodeField.vue.d.ts +1 -1
  9. package/dist/types/ui/src/components/ConfirmDialog.vue.d.ts +1 -1
  10. package/dist/types/ui/src/components/Modal.vue.d.ts +34 -0
  11. package/dist/types/ui/src/components/NoteEditor.vue.d.ts +52 -0
  12. package/dist/types/ui/src/components/Notice.vue.d.ts +16 -3
  13. package/dist/types/ui/src/components/Picker.vue.d.ts +0 -4
  14. package/dist/types/ui/src/components/RepoRail.vue.d.ts +17 -0
  15. package/dist/types/ui/src/components/ResponsiveOverlay.vue.d.ts +1 -1
  16. package/dist/types/ui/src/components/{CountBar.vue.d.ts → StatusTally.vue.d.ts} +2 -2
  17. package/dist/types/ui/src/components/repoRail.d.ts +21 -0
  18. package/dist/types/ui/src/composables/useNoteDraft.d.ts +23 -0
  19. package/dist/types/ui/src/composables/useRailMemory.d.ts +2 -0
  20. package/dist/types/ui/src/icons/iconSets.d.ts +1 -1
  21. package/dist/types/ui/src/index.d.ts +13 -7
  22. package/dist/types/ui/src/{cmp.d.ts → lib/ui.d.ts} +1 -4
  23. package/names.mjs +12 -7
  24. package/package.json +3 -3
  25. package/src/format.ts +1 -0
  26. package/src/index.ts +45 -12
  27. package/dist/types/ui/src/format.d.ts +0 -14
  28. /package/dist/types/ui/src/components/{Panel.vue.d.ts → ScrollFrame.vue.d.ts} +0 -0
  29. /package/dist/types/ui/src/components/{Segmented.vue.d.ts → SegmentedControl.vue.d.ts} +0 -0
  30. /package/dist/types/ui/src/components/{StatRow.vue.d.ts → StatStrip.vue.d.ts} +0 -0
  31. /package/dist/types/ui/src/{composables → lib}/anchorPlacement.d.ts +0 -0
  32. /package/dist/types/ui/src/{clipboard.d.ts → lib/clipboard.d.ts} +0 -0
  33. /package/dist/types/ui/src/{composables → lib}/shikiLangs.d.ts +0 -0
  34. /package/dist/types/ui/src/{timeWindow.d.ts → lib/timeWindow.d.ts} +0 -0
package/dist/format.js CHANGED
@@ -13,4 +13,5 @@ export const formatTime = m["formatTime"];
13
13
  export const formatTimestamp = m["formatTimestamp"];
14
14
  export const formatTokens = m["formatTokens"];
15
15
  export const formatWeekdayTime = m["formatWeekdayTime"];
16
+ export const freshness = m["freshness"];
16
17
  export const timeAgo = m["timeAgo"];
package/dist/index.js CHANGED
@@ -24,10 +24,8 @@ export const CodeField = m["CodeField"];
24
24
  export const ConfirmDialog = m["ConfirmDialog"];
25
25
  export const ContextMenu = m["ContextMenu"];
26
26
  export const CopyButton = m["CopyButton"];
27
- export const CountBar = m["CountBar"];
28
27
  export const DagEditor = m["DagEditor"];
29
28
  export const DagGraph = m["DagGraph"];
30
- export const Dialog = m["Dialog"];
31
29
  export const DiffStat = m["DiffStat"];
32
30
  export const FilterBar = m["FilterBar"];
33
31
  export const Icon = m["Icon"];
@@ -37,31 +35,34 @@ export const InfoHint = m["InfoHint"];
37
35
  export const InfoTable = m["InfoTable"];
38
36
  export const Markdown = m["Markdown"];
39
37
  export const MarkdownFigure = m["MarkdownFigure"];
38
+ export const Modal = m["Modal"];
40
39
  export const NavRail = m["NavRail"];
40
+ export const NoteEditor = m["NoteEditor"];
41
41
  export const Notice = m["Notice"];
42
42
  export const NoticeStack = m["NoticeStack"];
43
43
  export const Page = m["Page"];
44
44
  export const PageAction = m["PageAction"];
45
45
  export const PageHeader = m["PageHeader"];
46
- export const Panel = m["Panel"];
47
46
  export const Picker = m["Picker"];
48
47
  export const Popover = m["Popover"];
49
48
  export const ProgressRing = m["ProgressRing"];
50
49
  export const ProseField = m["ProseField"];
50
+ export const RepoRail = m["RepoRail"];
51
51
  export const ResizeSeam = m["ResizeSeam"];
52
52
  export const ResponsiveOverlay = m["ResponsiveOverlay"];
53
53
  export const Row = m["Row"];
54
54
  export const RowGroup = m["RowGroup"];
55
+ export const ScrollFrame = m["ScrollFrame"];
55
56
  export const SearchBar = m["SearchBar"];
56
- export const Segmented = m["Segmented"];
57
+ export const SegmentedControl = m["SegmentedControl"];
57
58
  export const SplitView = m["SplitView"];
58
- export const StatRow = m["StatRow"];
59
+ export const StatStrip = m["StatStrip"];
59
60
  export const StatusBadge = m["StatusBadge"];
61
+ export const StatusTally = m["StatusTally"];
60
62
  export const StepSection = m["StepSection"];
61
63
  export const TIME_WINDOWS = m["TIME_WINDOWS"];
62
64
  export const ToggleSwitch = m["ToggleSwitch"];
63
65
  export const clipboardOf = m["clipboardOf"];
64
- export const cmp = m["cmp"];
65
66
  export const errorMessage = m["errorMessage"];
66
67
  export const formatBytes = m["formatBytes"];
67
68
  export const formatDate = m["formatDate"];
@@ -71,6 +72,7 @@ export const formatTime = m["formatTime"];
71
72
  export const formatTimestamp = m["formatTimestamp"];
72
73
  export const formatTokens = m["formatTokens"];
73
74
  export const formatWeekdayTime = m["formatWeekdayTime"];
75
+ export const freshness = m["freshness"];
74
76
  export const isRenderableImage = m["isRenderableImage"];
75
77
  export const noticeFrom = m["noticeFrom"];
76
78
  export const noticeOf = m["noticeOf"];
@@ -78,11 +80,14 @@ export const seriesColor = m["seriesColor"];
78
80
  export const sinceOf = m["sinceOf"];
79
81
  export const timeAgo = m["timeAgo"];
80
82
  export const timeWindowWords = m["timeWindowWords"];
83
+ export const ui = m["ui"];
81
84
  export const useAgentRunPick = m["useAgentRunPick"];
82
85
  export const useAsyncAction = m["useAsyncAction"];
83
86
  export const useCompact = m["useCompact"];
84
87
  export const useDevice = m["useDevice"];
85
88
  export const useListNavigation = m["useListNavigation"];
86
89
  export const useNarrow = m["useNarrow"];
90
+ export const useNoteDraft = m["useNoteDraft"];
87
91
  export const useNow = m["useNow"];
92
+ export const useRailMemory = m["useRailMemory"];
88
93
  export const useTheme = m["useTheme"];
@@ -1 +1 @@
1
- export { formatBytes, formatDate, formatDateTime, formatDayMonth, formatTime, formatTimestamp, formatTokens, formatWeekdayTime, timeAgo, } from "../../ui/src/format.js";
1
+ export { formatBytes, formatDate, formatDateTime, formatDayMonth, formatTime, formatTimestamp, formatTokens, formatWeekdayTime, freshness, timeAgo, } from "../../ui/src/format/index.js";
@@ -1,9 +1,8 @@
1
- export { AgentRunButton, type AgentRunChoice, type AgentRunPicker, type ModelPicking, useAgentRunPick, AnchoredOverlay, Avatar, BarChart, BottomSheet, BrandMark, Card, clipboardOf, ChangeStatusMark, type ChangeStatus, cmp, Code, CodeField, ConfirmDialog, ContextMenu, CopyButton, CountBar, type CountItem, DagEditor, DagGraph, type DagEdge, type DagNode, DiffStat, FilterBar, Icon, type IconName, ImageView, InfoDialog, InfoHint, InfoTable, isRenderableImage, Markdown, MarkdownFigure, type NavGroup, NavRail, type NoticeModel, type NoticeTone, type NoticeAction, Notice, NoticeStack, Page, PageAction, PageHeader, Panel, Picker, type PickerGroup, type PickerOption, type PickerOptions, ProgressRing, ProseField, ResizeSeam, ResponsiveOverlay, Row, RowGroup, SearchBar, Segmented, seriesColor, sinceOf, SplitView, StatRow, StatusBadge, type StatusVariant, StepSection, TIME_WINDOWS, type TimeWindow, timeWindowWords, useCompact, useDevice, useListNavigation, useNow, errorMessage, noticeFrom, noticeOf, useAsyncAction, useNarrow, useTheme, } from "../../ui/src/index.js";
2
- export { formatBytes, formatDate, formatDateTime, formatDayMonth, formatTime, formatTimestamp, formatTokens, formatWeekdayTime, timeAgo, } from "./format.js";
1
+ export { AgentRunButton, type AgentRunChoice, type AgentRunPicker, type ModelPicking, useAgentRunPick, AnchoredOverlay, Avatar, BarChart, BottomSheet, BrandMark, Card, clipboardOf, 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, Picker, type PickerGroup, type PickerOption, type PickerOptions, ProgressRing, RepoRail, type RepoRailAll, type RepoRailGroup, type RepoRailRow, ProseField, ResizeSeam, ResponsiveOverlay, Row, RowGroup, SearchBar, SegmentedControl, seriesColor, sinceOf, 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
+ 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";
5
5
  export { default as Checkbox } from "primevue/checkbox";
6
- export { default as Dialog } from "primevue/dialog";
7
6
  export type { MenuItem } from "primevue/menuitem";
8
7
  export { default as Popover } from "primevue/popover";
9
8
  export { default as ToggleSwitch } from "primevue/toggleswitch";
@@ -1,4 +1,4 @@
1
- import { type Cross, type Side } from "../composables/anchorPlacement.js";
1
+ import { type Cross, type Side } from "../lib/anchorPlacement.js";
2
2
  type __VLS_Props = {
3
3
  anchor: HTMLElement | undefined;
4
4
  side?: Side;
@@ -1,9 +1,11 @@
1
1
  type __VLS_Props = {
2
2
  size: number;
3
3
  name: string;
4
+ art?: string | undefined;
4
5
  logo?: string | undefined;
5
6
  icon?: string | undefined;
6
7
  idle?: boolean;
8
+ flush?: boolean;
7
9
  };
8
10
  declare const __VLS_export: 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>;
9
11
  declare const _default: typeof __VLS_export;
@@ -1,4 +1,4 @@
1
- import type { ShikiLang } from "../composables/shikiLangs.js";
1
+ import type { ShikiLang } from "../lib/shikiLangs.js";
2
2
  type __VLS_Props = {
3
3
  code: string;
4
4
  lang?: ShikiLang;
@@ -1,4 +1,4 @@
1
- import type { ShikiLang } from "../composables/shikiLangs.js";
1
+ import type { ShikiLang } from "../lib/shikiLangs.js";
2
2
  type __VLS_Props = {
3
3
  lang?: ShikiLang;
4
4
  readonly?: boolean;
@@ -8,7 +8,7 @@ declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_se
8
8
  items?: readonly T[];
9
9
  destructive?: boolean;
10
10
  loading?: boolean;
11
- width?: number;
11
+ size?: `sm` | `md` | `lg` | `xl` | `full`;
12
12
  appendTo?: HTMLElement | string;
13
13
  } & {
14
14
  onCancel?: (() => any) | undefined;
@@ -0,0 +1,34 @@
1
+ type __VLS_Props = {
2
+ size?: `sm` | `md` | `lg` | `xl` | `full`;
3
+ header?: string;
4
+ chrome?: boolean;
5
+ scroll?: boolean;
6
+ dismissable?: boolean;
7
+ position?: `center` | `top`;
8
+ appendTo?: HTMLElement | string;
9
+ };
10
+ declare var __VLS_12: {}, __VLS_14: {}, __VLS_17: {};
11
+ type __VLS_Slots = {} & {
12
+ header?: (props: typeof __VLS_12) => any;
13
+ } & {
14
+ default?: (props: typeof __VLS_14) => any;
15
+ } & {
16
+ footer?: (props: typeof __VLS_17) => any;
17
+ };
18
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
19
+ show: () => any;
20
+ hide: () => any;
21
+ "update:open": (value: boolean) => any;
22
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
23
+ onShow?: (() => any) | undefined;
24
+ onHide?: (() => any) | undefined;
25
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
26
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
27
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
28
+ declare const _default: typeof __VLS_export;
29
+ export default _default;
30
+ type __VLS_WithSlots<T, S> = T & {
31
+ new (): {
32
+ $slots: S;
33
+ };
34
+ };
@@ -0,0 +1,52 @@
1
+ type __VLS_Props = {
2
+ title: string;
3
+ raw: string;
4
+ editing: boolean;
5
+ showSource?: boolean;
6
+ loading?: boolean;
7
+ saving?: boolean;
8
+ removing?: boolean;
9
+ error?: string;
10
+ verb?: string;
11
+ };
12
+ declare var __VLS_9: {}, __VLS_12: {}, __VLS_20: {}, __VLS_23: {}, __VLS_47: {}, __VLS_65: {}, __VLS_67: {}, __VLS_92: {};
13
+ type __VLS_Slots = {} & {
14
+ lead?: (props: typeof __VLS_9) => any;
15
+ } & {
16
+ badges?: (props: typeof __VLS_12) => any;
17
+ } & {
18
+ description?: (props: typeof __VLS_20) => any;
19
+ } & {
20
+ meta?: (props: typeof __VLS_23) => any;
21
+ } & {
22
+ actions?: (props: typeof __VLS_47) => any;
23
+ } & {
24
+ strips?: (props: typeof __VLS_65) => any;
25
+ } & {
26
+ confirm?: (props: typeof __VLS_67) => any;
27
+ } & {
28
+ default?: (props: typeof __VLS_92) => any;
29
+ };
30
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
31
+ save: () => any;
32
+ cancel: () => any;
33
+ remove: () => any;
34
+ edit: () => any;
35
+ "update:source": (value: string) => any;
36
+ "update:confirming": (value: boolean) => any;
37
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
38
+ onSave?: (() => any) | undefined;
39
+ onCancel?: (() => any) | undefined;
40
+ onRemove?: (() => any) | undefined;
41
+ onEdit?: (() => any) | undefined;
42
+ "onUpdate:source"?: ((value: string) => any) | undefined;
43
+ "onUpdate:confirming"?: ((value: boolean) => any) | undefined;
44
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
45
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
46
+ declare const _default: typeof __VLS_export;
47
+ export default _default;
48
+ type __VLS_WithSlots<T, S> = T & {
49
+ new (): {
50
+ $slots: S;
51
+ };
52
+ };
@@ -1,12 +1,25 @@
1
- import { type NoticeModel } from "./notice.js";
1
+ import { type NoticeModel, type NoticeTone } from "./notice.js";
2
+ import type { IconName } from "../icons/iconSets.js";
2
3
  type __VLS_Props = {
3
- of: NoticeModel;
4
+ of?: NoticeModel;
5
+ tone?: NoticeTone;
6
+ icon?: IconName;
4
7
  dismissLabel?: string;
5
8
  };
6
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
+ declare var __VLS_6: {};
10
+ type __VLS_Slots = {} & {
11
+ default?: (props: typeof __VLS_6) => any;
12
+ };
13
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
7
14
  dismiss: () => any;
8
15
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
9
16
  onDismiss?: (() => any) | undefined;
10
17
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
11
19
  declare const _default: typeof __VLS_export;
12
20
  export default _default;
21
+ type __VLS_WithSlots<T, S> = T & {
22
+ new (): {
23
+ $slots: S;
24
+ };
25
+ };
@@ -25,10 +25,6 @@ declare const __VLS_export: <T extends string>(__VLS_props: NonNullable<Awaited<
25
25
  icon?: (props: {
26
26
  option: PickerOption<T>;
27
27
  }) => any;
28
- } & {
29
- icon?: (props: {
30
- option: PickerOption<T>;
31
- }) => any;
32
28
  };
33
29
  emit: (event: "update:modelValue", value: T | undefined) => void;
34
30
  }>) => import("vue").VNode & {
@@ -0,0 +1,17 @@
1
+ import type { RepoRailAll, RepoRailGroup } from "./repoRail.js";
2
+ type __VLS_Props = {
3
+ groups: readonly RepoRailGroup[];
4
+ all: RepoRailAll;
5
+ memory: string;
6
+ };
7
+ type __VLS_ModelProps = {
8
+ modelValue?: string | undefined;
9
+ };
10
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
11
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
12
+ "update:modelValue": (value: string | undefined) => any;
13
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
14
+ "onUpdate:modelValue"?: ((value: string | undefined) => any) | undefined;
15
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
+ declare const _default: typeof __VLS_export;
17
+ export default _default;
@@ -1,4 +1,4 @@
1
- import { type Cross, type Side } from "../composables/anchorPlacement.js";
1
+ import { type Cross, type Side } from "../lib/anchorPlacement.js";
2
2
  type __VLS_Props = {
3
3
  anchor: HTMLElement | undefined;
4
4
  header?: string;
@@ -1,5 +1,5 @@
1
1
  import type { StatusVariant } from "./StatusBadge.vue";
2
- export interface CountItem {
2
+ export interface TallyItem {
3
3
  readonly label: string;
4
4
  readonly value: number;
5
5
  readonly variant: StatusVariant;
@@ -7,7 +7,7 @@ export interface CountItem {
7
7
  readonly pulse?: boolean;
8
8
  }
9
9
  type __VLS_Props = {
10
- items: readonly CountItem[];
10
+ items: readonly TallyItem[];
11
11
  };
12
12
  declare var __VLS_1: {};
13
13
  type __VLS_Slots = {} & {
@@ -0,0 +1,21 @@
1
+ import type { IconName } from "../icons/iconSets.js";
2
+ export interface RepoRailRow {
3
+ readonly value: string;
4
+ readonly label: string;
5
+ readonly icon: IconName;
6
+ readonly meta: string;
7
+ readonly tone?: string;
8
+ readonly tooltip?: string;
9
+ readonly mono?: boolean;
10
+ }
11
+ export interface RepoRailGroup {
12
+ readonly key: string;
13
+ readonly label?: string;
14
+ readonly rows: readonly RepoRailRow[];
15
+ }
16
+ export interface RepoRailAll {
17
+ readonly icon: IconName;
18
+ readonly meta: string;
19
+ readonly tone?: string;
20
+ readonly tooltip?: string;
21
+ }
@@ -0,0 +1,23 @@
1
+ import { type ComputedRef, type Ref, type WritableComputedRef } from "vue";
2
+ export interface NoteDraftOptions {
3
+ readonly draft: Ref<string | undefined>;
4
+ readonly raw: () => string;
5
+ readonly save: (content: string) => Promise<unknown>;
6
+ readonly remove: () => Promise<unknown>;
7
+ readonly note?: () => unknown;
8
+ readonly onLeave?: () => void;
9
+ readonly onRemoved?: () => void;
10
+ }
11
+ export interface NoteDraft {
12
+ readonly source: WritableComputedRef<string>;
13
+ readonly editing: ComputedRef<boolean>;
14
+ readonly confirming: Ref<boolean>;
15
+ readonly error: Readonly<Ref<string | undefined>>;
16
+ readonly saving: Readonly<Ref<boolean>>;
17
+ readonly removing: Readonly<Ref<boolean>>;
18
+ readonly startEdit: () => void;
19
+ readonly cancelEdit: () => void;
20
+ readonly saveDraft: () => Promise<void>;
21
+ readonly forget: () => Promise<void>;
22
+ }
23
+ export declare function useNoteDraft({ draft, raw, save, remove, note, onLeave, onRemoved }: NoteDraftOptions): NoteDraft;
@@ -0,0 +1,2 @@
1
+ import { type Ref } from "vue";
2
+ export declare function useRailMemory(id: string, choice: Ref<string | undefined>, options: () => readonly string[]): void;
@@ -1,3 +1,3 @@
1
- export type IconName = "align-left" | "angle-right" | "arrow-circle-up" | "arrow-down-left" | "arrow-left" | "arrow-right" | "arrow-up-right" | "arrows-h" | "backward" | "bars" | "bolt" | "book" | "box" | "check" | "check-circle" | "check-square" | "chevron-down" | "chevron-right" | "chevron-up" | "circle" | "circle-fill" | "clock" | "clone" | "cloud" | "cloud-upload" | "code" | "cog" | "collapse-all" | "comments" | "compress" | "copy" | "credit-card" | "database" | "desktop" | "download" | "ellipsis" | "envelope" | "eraser" | "exclamation-circle" | "exclamation-triangle" | "expand" | "external-link" | "eye" | "eye-slash" | "file" | "file-edit" | "file-pdf" | "file-tree" | "filter" | "folder" | "folder-open" | "fork" | "forward" | "github" | "gitlab" | "globe" | "google" | "history" | "image" | "info-circle" | "key" | "link" | "list-check" | "lock" | "microphone" | "moon" | "palette" | "paperclip" | "pause" | "pencil" | "picture-in-picture" | "play" | "plus" | "plus-circle" | "question-circle" | "refresh" | "repeat" | "robot" | "save" | "search" | "send" | "server" | "shield" | "sign-in" | "sign-out" | "sitemap" | "slack" | "sliders-h" | "sparkles" | "spinner" | "square" | "star" | "star-fill" | "stop" | "sun" | "sync" | "terminal" | "th-large" | "times" | "trash" | "undo" | "unlock" | "upload" | "user" | "users" | "volume-off" | "volume-up" | "wave-pulse" | "wifi" | "window-maximize" | "window-minimize" | "wrench";
1
+ export type IconName = "align-left" | "angle-right" | "arrow-circle-up" | "arrow-down-left" | "arrow-left" | "arrow-right" | "arrow-up-right" | "arrows-h" | "backward" | "bars" | "bolt" | "book" | "box" | "check" | "check-circle" | "check-square" | "chevron-down" | "chevron-right" | "chevron-up" | "circle" | "circle-fill" | "clock" | "clone" | "cloud" | "cloud-upload" | "code" | "cog" | "collapse-all" | "comments" | "compress" | "copy" | "credit-card" | "database" | "desktop" | "download" | "ellipsis" | "envelope" | "eraser" | "exclamation-circle" | "exclamation-triangle" | "expand" | "external-link" | "eye" | "eye-slash" | "file" | "file-edit" | "file-pdf" | "file-tree" | "filter" | "folder" | "folder-open" | "fork" | "forward" | "github" | "gitlab" | "globe" | "google" | "hammer" | "history" | "image" | "info-circle" | "key" | "layout-left" | "link" | "link-broken" | "list-check" | "lock" | "microphone" | "moon" | "palette" | "paperclip" | "pause" | "pencil" | "picture-in-picture" | "play" | "plus" | "plus-circle" | "question-circle" | "refresh" | "repeat" | "robot" | "save" | "search" | "send" | "server" | "shield" | "sign-in" | "sign-out" | "sitemap" | "slack" | "sliders-h" | "sparkles" | "spinner" | "square" | "star" | "star-fill" | "stop" | "sun" | "sync" | "terminal" | "th-large" | "times" | "trash" | "undo" | "unlock" | "upload" | "user" | "users" | "volume-off" | "volume-up" | "wave-pulse" | "wifi" | "window-maximize" | "window-minimize" | "wrench";
2
2
  export declare const ICONS: Record<IconName, string>;
3
3
  export declare const isIconName: (name: string) => name is IconName;
@@ -1,5 +1,5 @@
1
- export { clipboardOf } from "./clipboard.js";
2
- export { cmp } from "./cmp.js";
1
+ export { clipboardOf } from "./lib/clipboard.js";
2
+ export { ui } from "./lib/ui.js";
3
3
  export { default as AgentRunButton } from "./components/AgentRunButton.vue";
4
4
  export { type AgentRunChoice, type AgentRunPicker, type ModelPicking, useAgentRunPick } from "./composables/useAgentRunPick.js";
5
5
  export { default as AnchoredOverlay } from "./components/AnchoredOverlay.vue";
@@ -16,7 +16,7 @@ export { default as CodeField } from "./components/CodeField.vue";
16
16
  export { default as ConfirmDialog } from "./components/ConfirmDialog.vue";
17
17
  export { default as ContextMenu } from "./components/ContextMenu.vue";
18
18
  export { default as CopyButton } from "./components/CopyButton.vue";
19
- export { type CountItem, default as CountBar } from "./components/CountBar.vue";
19
+ export { type TallyItem, default as StatusTally } from "./components/StatusTally.vue";
20
20
  export { default as DagEditor } from "./components/DagEditor.vue";
21
21
  export { default as DagGraph } from "./components/DagGraph.vue";
22
22
  export { type DagEdge, type DagNode } from "./components/dagLayout.js";
@@ -29,36 +29,42 @@ export { default as InfoHint } from "./components/InfoHint.vue";
29
29
  export { default as InfoTable } from "./components/InfoTable.vue";
30
30
  export { default as Markdown } from "./components/Markdown.vue";
31
31
  export { default as MarkdownFigure } from "./components/MarkdownFigure.vue";
32
+ export { default as Modal } from "./components/Modal.vue";
32
33
  export { default as NavRail } from "./components/NavRail.vue";
33
34
  export { type NavGroup } from "./components/navRail.js";
35
+ export { default as NoteEditor } from "./components/NoteEditor.vue";
36
+ export { type NoteDraft, type NoteDraftOptions, useNoteDraft } from "./composables/useNoteDraft.js";
34
37
  export { default as Notice } from "./components/Notice.vue";
35
38
  export { default as NoticeStack } from "./components/NoticeStack.vue";
36
39
  export { type NoticeAction, type NoticeModel, type NoticeTone } from "./components/notice.js";
37
40
  export { default as Page } from "./components/Page.vue";
38
41
  export { default as PageAction } from "./components/PageAction.vue";
39
42
  export { default as PageHeader } from "./components/PageHeader.vue";
40
- export { default as Panel } from "./components/Panel.vue";
43
+ export { default as ScrollFrame } from "./components/ScrollFrame.vue";
41
44
  export { default as Picker } from "./components/Picker.vue";
42
45
  export { type PickerGroup, type PickerOption, type PickerOptions } from "./components/picker.js";
43
46
  export { default as ProgressRing } from "./components/ProgressRing.vue";
44
47
  export { default as ProseField } from "./components/ProseField.vue";
48
+ export { default as RepoRail } from "./components/RepoRail.vue";
49
+ export { type RepoRailAll, type RepoRailGroup, type RepoRailRow } from "./components/repoRail.js";
45
50
  export { default as ResizeSeam } from "./components/ResizeSeam.vue";
46
51
  export { default as ResponsiveOverlay } from "./components/ResponsiveOverlay.vue";
47
52
  export { default as Row } from "./components/Row.vue";
48
53
  export { default as RowGroup } from "./components/RowGroup.vue";
49
54
  export { default as SearchBar } from "./components/SearchBar.vue";
50
- export { default as Segmented } from "./components/Segmented.vue";
55
+ export { default as SegmentedControl } from "./components/SegmentedControl.vue";
51
56
  export { seriesColor } from "./components/seriesAccent.js";
52
57
  export { default as SplitView } from "./components/SplitView.vue";
53
58
  export { useCompact } from "./components/splitView.js";
54
- export { default as StatRow } from "./components/StatRow.vue";
59
+ export { default as StatStrip } from "./components/StatStrip.vue";
55
60
  export { default as StatusBadge, type StatusVariant } from "./components/StatusBadge.vue";
56
61
  export { default as StepSection } from "./components/StepSection.vue";
57
- export { sinceOf, TIME_WINDOWS, type TimeWindow, timeWindowWords } from "./timeWindow.js";
62
+ export { sinceOf, TIME_WINDOWS, type TimeWindow, timeWindowWords } from "./lib/timeWindow.js";
58
63
  export { type IconName } from "./icons/iconSets.js";
59
64
  export { useDevice } from "./composables/useDevice.js";
60
65
  export { useNarrow } from "./composables/useNarrow.js";
61
66
  export { useListNavigation } from "./composables/useListNavigation.js";
67
+ export { useRailMemory } from "./composables/useRailMemory.js";
62
68
  export { useNow } from "./composables/useNow.js";
63
69
  export { errorMessage, noticeFrom, noticeOf, useAsyncAction } from "./composables/useAsyncAction.js";
64
70
  export { useTheme } from "./composables/useTheme.js";
@@ -1,10 +1,7 @@
1
- export declare const cmp: {
1
+ export declare const ui: {
2
2
  iconButton: (...twClasses: string[]) => string;
3
3
  linkButton: (...twClasses: string[]) => string;
4
4
  input: (...twClasses: string[]) => string;
5
- alertDanger: (...twClasses: string[]) => string;
6
- alertWarning: (...twClasses: string[]) => string;
7
- alertInfo: (...twClasses: string[]) => string;
8
5
  emptyState: (...twClasses: string[]) => string;
9
6
  addTile: (...twClasses: string[]) => string;
10
7
  sectionLabel: (...twClasses: string[]) => string;
package/names.mjs CHANGED
@@ -13,16 +13,14 @@ export const extensionUiNames = [
13
13
  "ChangeStatusMark",
14
14
  "Checkbox",
15
15
  "clipboardOf",
16
- "cmp",
16
+ "ui",
17
17
  "Code",
18
18
  "CodeField",
19
19
  "ConfirmDialog",
20
20
  "ContextMenu",
21
21
  "CopyButton",
22
- "CountBar",
23
22
  "DagEditor",
24
23
  "DagGraph",
25
- "Dialog",
26
24
  "DiffStat",
27
25
  "errorMessage",
28
26
  "FilterBar",
@@ -34,6 +32,7 @@ export const extensionUiNames = [
34
32
  "formatTimestamp",
35
33
  "formatTokens",
36
34
  "formatWeekdayTime",
35
+ "freshness",
37
36
  "Icon",
38
37
  "ImageView",
39
38
  "InfoDialog",
@@ -42,30 +41,34 @@ export const extensionUiNames = [
42
41
  "isRenderableImage",
43
42
  "Markdown",
44
43
  "MarkdownFigure",
44
+ "Modal",
45
45
  "NavRail",
46
+ "NoteEditor",
47
+ "Notice",
46
48
  "noticeFrom",
47
49
  "noticeOf",
48
- "Notice",
49
50
  "NoticeStack",
50
51
  "Page",
51
52
  "PageAction",
52
53
  "PageHeader",
53
- "Panel",
54
54
  "Picker",
55
55
  "Popover",
56
56
  "ProgressRing",
57
57
  "ProseField",
58
+ "RepoRail",
58
59
  "ResizeSeam",
59
60
  "ResponsiveOverlay",
60
61
  "Row",
61
62
  "RowGroup",
63
+ "ScrollFrame",
62
64
  "SearchBar",
63
- "Segmented",
65
+ "SegmentedControl",
64
66
  "seriesColor",
65
67
  "sinceOf",
66
68
  "SplitView",
67
- "StatRow",
69
+ "StatStrip",
68
70
  "StatusBadge",
71
+ "StatusTally",
69
72
  "StepSection",
70
73
  "TIME_WINDOWS",
71
74
  "timeAgo",
@@ -77,6 +80,8 @@ export const extensionUiNames = [
77
80
  "useDevice",
78
81
  "useListNavigation",
79
82
  "useNarrow",
83
+ "useNoteDraft",
80
84
  "useNow",
85
+ "useRailMemory",
81
86
  "useTheme",
82
87
  ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentic/extension-ui",
3
- "version": "1.176.3",
3
+ "version": "1.209.1",
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",
@@ -40,8 +40,8 @@
40
40
  "typescript": "5.9.3",
41
41
  "vue": "3.5.40",
42
42
  "vue-tsc": "3.3.9",
43
- "@intentic/tsconfig": "0.0.0",
44
- "@intentic/ui": "0.0.0"
43
+ "@intentic/ui": "0.0.0",
44
+ "@intentic/tsconfig": "0.0.0"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "vue": "3"
package/src/format.ts CHANGED
@@ -19,5 +19,6 @@ export {
19
19
  formatTimestamp,
20
20
  formatTokens,
21
21
  formatWeekdayTime,
22
+ freshness,
22
23
  timeAgo,
23
24
  } from "@intentic/ui/format";
package/src/index.ts CHANGED
@@ -50,7 +50,7 @@ export {
50
50
  * a hand-rolled copy gets subtly wrong. */
51
51
  ChangeStatusMark,
52
52
  type ChangeStatus,
53
- cmp,
53
+ ui,
54
54
  Code,
55
55
  /* <CodeField> ships beside <Code> because shipping the reader WITHOUT the writer is what made the memory
56
56
  * extension put a bare grey <textarea> next to a coloured block of the very same file: the kit had no way
@@ -59,8 +59,8 @@ export {
59
59
  ConfirmDialog,
60
60
  ContextMenu,
61
61
  CopyButton,
62
- CountBar,
63
- type CountItem,
62
+ StatusTally,
63
+ type TallyItem,
64
64
  DagEditor,
65
65
  DagGraph,
66
66
  type DagEdge,
@@ -80,15 +80,32 @@ export {
80
80
  isRenderableImage,
81
81
  Markdown,
82
82
  MarkdownFigure,
83
+ /* <Modal> ships for the reason <ConfirmDialog> and <InfoDialog> already do, and it is the one they were
84
+ * both missing: an extension whose dialog is neither a confirm nor an explainer had nothing to reach for
85
+ * but PrimeVue's Dialog and a width typed into a style attribute — which is exactly how the app itself
86
+ * ended up with thirteen widths and one viewport clamp between seventeen dialogs. */
87
+ Modal,
83
88
  type NavGroup,
84
89
  NavRail,
90
+ /* <NoteEditor> and `useNoteDraft` ship because TWO extensions are a pane that reads a markdown file, lets
91
+ * somebody correct it and lets them delete it — knowledge and memory — and they had built the same thing
92
+ * twice: the same Copy/Edit/Delete cluster, the same Cancel/Save pair, the same in-place confirmation, the
93
+ * same draft-or-file binding, the same read-and-write-on-one-surface rule. They had already drifted in the
94
+ * ways a second copy does: one cleared its confirmation when a write failed and the other did not, and
95
+ * NEITHER caught a failing write, so the error strip filled in from the mutation while the click handler's
96
+ * promise rejected into the console. The component is the chrome and the composable is the lifecycle,
97
+ * separately, because what a note LOOKS like past the frame is exactly where the two panes differ. */
98
+ NoteEditor,
99
+ type NoteDraft,
100
+ type NoteDraftOptions,
101
+ useNoteDraft,
85
102
  /* <NoticeStack> and its model ship beside <ConfirmDialog> for the same reason <InfoDialog> does: a view
86
103
  * with several async actions needs somewhere for their failures to land that isn't one action's own row,
87
104
  * and a hand-rolled error strip is the first thing to disagree with the app's about tone and dismissal.
88
105
  *
89
106
  * <Notice> — THE SINGLE ONE — was missing from that shipment, and it is the same mistake <Row>/<RowGroup>
90
107
  * and <PageAction>/<PageHeader> each record one release earlier: the container went out without the thing
91
- * that goes in it. Notice.vue's own comment says every view that hand-rolled `cmp.alertDanger()` around an
108
+ * that goes in it. Notice.vue's own comment says every view that hand-rolled `ui.alertDanger()` around an
92
109
  * interpolated error string renders it instead, "which is what makes the app's failures sound like one
93
110
  * product rather than like sixty throw sites" — and the app took that sweep, 107 call sites of it. The
94
111
  * extensions could not: the kit handed out the stack and kept the row, so thirteen of them went on
@@ -104,12 +121,21 @@ export {
104
121
  * `#actions` with a raw PrimeVue <Button> and picked a different cell of its variant matrix each time. */
105
122
  PageAction,
106
123
  PageHeader,
107
- Panel,
124
+ ScrollFrame,
108
125
  Picker,
109
126
  type PickerGroup,
110
127
  type PickerOption,
111
128
  type PickerOptions,
112
129
  ProgressRing,
130
+ /* <RepoRail> ships for the reason <SplitView> did, one level in: two extensions scope a workspace-wide
131
+ * board to one repository — maintenance and pipelines — and both had written the same column. Same pinned
132
+ * "All repositories" row outside every group, same one-number-per-row rule with the second fact as its
133
+ * colour, same swap to a <Picker> at the width the split folds at. What differs between them is the report
134
+ * behind it, which is why the rows arrive as data. */
135
+ RepoRail,
136
+ type RepoRailAll,
137
+ type RepoRailGroup,
138
+ type RepoRailRow,
113
139
  /* The writing field and the drag seam ship for the same reason <SplitView> did: an extension view that
114
140
  * wants prose typeset as a document, or a pane the reader can size, would otherwise hand-roll one — and
115
141
  * both recipes have a failure mode (a replica that disagrees with its field; a drag bound to the window)
@@ -123,11 +149,11 @@ export {
123
149
  Row,
124
150
  RowGroup,
125
151
  SearchBar,
126
- Segmented,
152
+ SegmentedControl,
127
153
  seriesColor,
128
154
  sinceOf,
129
155
  SplitView,
130
- StatRow,
156
+ StatStrip,
131
157
  StatusBadge,
132
158
  type StatusVariant,
133
159
  StepSection,
@@ -154,6 +180,11 @@ export {
154
180
  /* "Is my own element too narrow for this layout" — the question every extension view actually means, since it
155
181
  * renders into a pane the reader can drag to half its width, not into the window. */
156
182
  useNarrow,
183
+ /* Where the reader left a narrowing rail. Ships for the reason <SplitView> did: three extension views grew
184
+ * the same index column, all three keep the pick in the URL, and all three lost it the moment you clicked the
185
+ * tile again — because a tile opens a view at its bare address. Solving that per extension would be three
186
+ * copies of one rule about what a link means versus what a memory is allowed to guess. */
187
+ useRailMemory,
157
188
  useTheme,
158
189
  } from "@intentic/ui";
159
190
  // Also reachable as `@intentic/extension-ui/format` — see the note there for why an extension's pure logic
@@ -167,6 +198,7 @@ export {
167
198
  formatTimestamp,
168
199
  formatTokens,
169
200
  formatWeekdayTime,
201
+ freshness,
170
202
  timeAgo,
171
203
  } from "./format.js";
172
204
  /* The figure vocabulary that <Markdown> renders from prose and <MarkdownFigure> renders from data. Types only —
@@ -188,13 +220,14 @@ export type {
188
220
  /* The raw primitives, kept deliberately short. Handing out a primitive the KIT already wraps is how an
189
221
  * extension screen ends up wearing OS chrome next to the app's own: `Select` and `InputText` used to ship here
190
222
  * and four views took them, so a dropdown with a different focus ring sat beside <Picker> and a text field with
191
- * different padding beside `cmp.input`. Those two are gone — <Picker> and `cmp.input()` are the spellings.
192
- * <Dialog> stays until the kit has a general dialog shell: <ConfirmDialog> and <InfoDialog> are both narrower
193
- * than the five views using it need. <Popover> stays for the same reason, but <AnchoredOverlay> above is the
194
- * one to reach for — it is the only one of the two that opens in the right window when a panel is popped out. */
223
+ * different padding beside `ui.input`. Those two are gone — <Picker> and `ui.input()` are the spellings.
224
+ * <Dialog> was the third, and it is gone for the same reason: it stayed "until the kit has a general dialog
225
+ * shell", six extension views took it, and every one of them typed its own width into a style attribute with
226
+ * no viewport clamp — the exact spread that <Modal> above now exists to end. The shell is here, so the raw one
227
+ * is not. <Popover> stays only because <ResponsiveOverlay>/<AnchoredOverlay> do not yet cover every menu shape,
228
+ * and it is on the same clock: those two are the ones that open in the right window when a panel is popped out. */
195
229
  export { default as Button } from "primevue/button";
196
230
  export { default as Checkbox } from "primevue/checkbox";
197
- export { default as Dialog } from "primevue/dialog";
198
231
  export type { MenuItem } from "primevue/menuitem";
199
232
  export { default as Popover } from "primevue/popover";
200
233
  export { default as ToggleSwitch } from "primevue/toggleswitch";
@@ -1,14 +0,0 @@
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;