@intentic/extension-ui 1.326.0 → 1.328.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 (48) hide show
  1. package/README.md +5 -2
  2. package/dist/format.js +7 -0
  3. package/dist/i18n.js +1 -0
  4. package/dist/index.js +19 -0
  5. package/dist/tone.js +16 -0
  6. package/dist/types/extension-ui/src/format.d.ts +1 -1
  7. package/dist/types/extension-ui/src/index.d.ts +4 -3
  8. package/dist/types/extension-ui/src/tone.d.ts +1 -0
  9. package/dist/types/ui/src/components/charts/StatusTally.vue.d.ts +2 -2
  10. package/dist/types/ui/src/components/charts/dagLayout.d.ts +1 -0
  11. package/dist/types/ui/src/components/feedback/Notice.vue.d.ts +6 -4
  12. package/dist/types/ui/src/components/feedback/SkeletonSnapshot.vue.d.ts +2 -2
  13. package/dist/types/ui/src/components/feedback/changeStatus.d.ts +2 -1
  14. package/dist/types/ui/src/components/feedback/notice.d.ts +6 -1
  15. package/dist/types/ui/src/components/feedback/statusBadge.d.ts +2 -1
  16. package/dist/types/ui/src/components/forms/AddressField.vue.d.ts +19 -0
  17. package/dist/types/ui/src/components/forms/NoteEditor.vue.d.ts +9 -9
  18. package/dist/types/ui/src/components/layout/BottomSheet.vue.d.ts +2 -2
  19. package/dist/types/ui/src/components/layout/Page.vue.d.ts +1 -1
  20. package/dist/types/ui/src/components/layout/SplitView.vue.d.ts +7 -7
  21. package/dist/types/ui/src/components/markdown/MarkdownDocument.vue.d.ts +3 -3
  22. package/dist/types/ui/src/components/overlays/InfoDialog.vue.d.ts +1 -0
  23. package/dist/types/ui/src/components/overlays/Modal.vue.d.ts +5 -5
  24. package/dist/types/ui/src/components/overlays/ResponsiveOverlay.vue.d.ts +3 -3
  25. package/dist/types/ui/src/components/primitives/Button.vue.d.ts +8 -1
  26. package/dist/types/ui/src/components/primitives/button.d.ts +14 -0
  27. package/dist/types/ui/src/components/rows/Row.vue.d.ts +11 -11
  28. package/dist/types/ui/src/components/rows/row.d.ts +1 -7
  29. package/dist/types/ui/src/components/sandbox/AgentRunButton.vue.d.ts +3 -0
  30. package/dist/types/ui/src/composables/useAsyncAction.d.ts +1 -1
  31. package/dist/types/ui/src/composables/useRailMemory.d.ts +2 -2
  32. package/dist/types/ui/src/icons/iconSets.d.ts +15 -6
  33. package/dist/types/ui/src/index.d.ts +4 -2
  34. package/dist/types/ui/src/lib/clipboard.d.ts +10 -0
  35. package/dist/types/ui/src/lib/format.d.ts +11 -1
  36. package/dist/types/ui/src/lib/textDiff.d.ts +1 -1
  37. package/dist/types/ui/src/lib/tone.d.ts +15 -0
  38. package/dist/types/ui/src/lib/tooltip.d.ts +2 -1
  39. package/dist/types/ui/src/lib/ui.d.ts +40 -12
  40. package/dist/types/ui/src/markdown/edits.d.ts +1 -0
  41. package/dist/types/ui/src/markdown/index.d.ts +2 -2
  42. package/dist/types/ui/src/markdown/render.d.ts +8 -0
  43. package/dist/types/ui/src/markdown/sourceDom.d.ts +1 -0
  44. package/names.mjs +20 -1
  45. package/package.json +7 -2
  46. package/src/format.ts +6 -0
  47. package/src/index.ts +42 -2
  48. package/src/tone.ts +19 -0
package/README.md CHANGED
@@ -19,9 +19,12 @@ flowchart LR
19
19
  - `scripts/build.mjs` compiles the published package from `_editor/ui`'s sources: declarations pruned to what the kit
20
20
  re-exports, and a `dist/index.js` bridge that throws when loaded outside an intentic host.
21
21
  - `names.mjs` lists the runtime export names by hand, because the `.vue` graph cannot load in Node. The editor's shim
22
- generator reads it, and a dev-time assertion in `hostModules.ts` catches drift.
22
+ generator reads it, a dev-time assertion in `hostModules.ts` catches drift, and `extensionUiNames.test.ts` fails it.
23
23
  - `./diff`, `./format`, `./i18n` and `./worker` skip the component barrel, for extension tests that run without a Vue
24
- compiler. `./worker` is also what a worker module imports `serveWorkerCall` from. A worker has no host bridge, so an
24
+ compiler. Each is published as a bridge holding what `src/index.ts` re-exports from that file, so a name a subpath
25
+ file exports must also be re-exported from the barrel and listed in `names.mjs`, or an extension installed from git
26
+ fails to link it; `extensionUiNames.test.ts` reads every subpath in `package.json`'s `exports` and fails the one left
27
+ out. `registerExtensionMessages` is left out on purpose: mounting a catalog is the host's job. `./worker` is also what a worker module imports `serveWorkerCall` from. A worker has no host bridge, so an
25
28
  extension built outside this repository bundles that module into its worker instead of marking it external.
26
29
 
27
30
  ## Key files
package/dist/format.js CHANGED
@@ -6,11 +6,18 @@ if (host === undefined) {
6
6
  }
7
7
  const m = host.modules["@intentic/extension-ui"];
8
8
  export const formatBytes = m["formatBytes"];
9
+ export const formatClock = m["formatClock"];
10
+ export const formatCompact = m["formatCompact"];
11
+ export const formatCount = m["formatCount"];
9
12
  export const formatDate = m["formatDate"];
13
+ export const formatDateLong = m["formatDateLong"];
10
14
  export const formatDateTime = m["formatDateTime"];
11
15
  export const formatDayMonth = m["formatDayMonth"];
12
16
  export const formatDayMonthTime = m["formatDayMonthTime"];
13
17
  export const formatDuration = m["formatDuration"];
18
+ export const formatElapsed = m["formatElapsed"];
19
+ export const formatMoney = m["formatMoney"];
20
+ export const formatPercent = m["formatPercent"];
14
21
  export const formatTime = m["formatTime"];
15
22
  export const formatTimestamp = m["formatTimestamp"];
16
23
  export const formatTokens = m["formatTokens"];
package/dist/i18n.js CHANGED
@@ -6,4 +6,5 @@ if (host === undefined) {
6
6
  }
7
7
  const m = host.modules["@intentic/extension-ui"];
8
8
  export const activeLocale = m["activeLocale"];
9
+ export const extensionI18n = m["extensionI18n"];
9
10
  export const extensionT = m["extensionT"];
package/dist/index.js CHANGED
@@ -10,6 +10,7 @@ if (host === undefined) {
10
10
  }
11
11
  const m = host.modules["@intentic/extension-ui"];
12
12
  export const ActionSheet = m["ActionSheet"];
13
+ export const AddressField = m["AddressField"];
13
14
  export const AgentRunButton = m["AgentRunButton"];
14
15
  export const AnchoredOverlay = m["AnchoredOverlay"];
15
16
  export const Avatar = m["Avatar"];
@@ -75,23 +76,33 @@ export const appLink = m["appLink"];
75
76
  export const browserOwnsClick = m["browserOwnsClick"];
76
77
  export const clipboardOf = m["clipboardOf"];
77
78
  export const createWorkerCall = m["createWorkerCall"];
79
+ export const diffMark = m["diffMark"];
78
80
  export const diffSequence = m["diffSequence"];
79
81
  export const errorMessage = m["errorMessage"];
82
+ export const extensionI18n = m["extensionI18n"];
80
83
  export const extensionT = m["extensionT"];
81
84
  export const fixStanceLook = m["fixStanceLook"];
82
85
  export const formatBytes = m["formatBytes"];
86
+ export const formatClock = m["formatClock"];
87
+ export const formatCompact = m["formatCompact"];
88
+ export const formatCount = m["formatCount"];
83
89
  export const formatDate = m["formatDate"];
90
+ export const formatDateLong = m["formatDateLong"];
84
91
  export const formatDateTime = m["formatDateTime"];
85
92
  export const formatDayMonth = m["formatDayMonth"];
86
93
  export const formatDayMonthTime = m["formatDayMonthTime"];
87
94
  export const formatDuration = m["formatDuration"];
95
+ export const formatElapsed = m["formatElapsed"];
96
+ export const formatMoney = m["formatMoney"];
88
97
  export const formatOf = m["formatOf"];
98
+ export const formatPercent = m["formatPercent"];
89
99
  export const formatTime = m["formatTime"];
90
100
  export const formatTimestamp = m["formatTimestamp"];
91
101
  export const formatTokens = m["formatTokens"];
92
102
  export const formatWeekdayTime = m["formatWeekdayTime"];
93
103
  export const formatWhen = m["formatWhen"];
94
104
  export const freshness = m["freshness"];
105
+ export const messageOr = m["messageOr"];
95
106
  export const noticeFrom = m["noticeFrom"];
96
107
  export const noticeOf = m["noticeOf"];
97
108
  export const openForwardedPort = m["openForwardedPort"];
@@ -103,6 +114,14 @@ export const sinceOf = m["sinceOf"];
103
114
  export const timeAgo = m["timeAgo"];
104
115
  export const timeWindowWords = m["timeWindowWords"];
105
116
  export const timeWindows = m["timeWindows"];
117
+ export const toneDot = m["toneDot"];
118
+ export const toneFill = m["toneFill"];
119
+ export const toneHover = m["toneHover"];
120
+ export const toneInk = m["toneInk"];
121
+ export const tonePlate = m["tonePlate"];
122
+ export const toneRim = m["toneRim"];
123
+ export const toneTint = m["toneTint"];
124
+ export const toneWash = m["toneWash"];
106
125
  export const ui = m["ui"];
107
126
  export const useAgentRunPick = m["useAgentRunPick"];
108
127
  export const useAsyncAction = m["useAsyncAction"];
package/dist/tone.js ADDED
@@ -0,0 +1,16 @@
1
+ // Generated by scripts/build.mjs: do not edit.
2
+ // The kit's tone entry point, off the same host bridge as ./index.js.
3
+ const host = globalThis.__intenticHost;
4
+ if (host === undefined) {
5
+ throw new Error("@intentic/extension-ui was loaded outside an intentic host: its helpers come from the app, not from this package.");
6
+ }
7
+ const m = host.modules["@intentic/extension-ui"];
8
+ export const diffMark = m["diffMark"];
9
+ export const toneDot = m["toneDot"];
10
+ export const toneFill = m["toneFill"];
11
+ export const toneHover = m["toneHover"];
12
+ export const toneInk = m["toneInk"];
13
+ export const tonePlate = m["tonePlate"];
14
+ export const toneRim = m["toneRim"];
15
+ export const toneTint = m["toneTint"];
16
+ export const toneWash = m["toneWash"];
@@ -1 +1 @@
1
- export { formatBytes, formatDate, formatDateLong, formatDateTime, formatDayMonth, formatDayMonthTime, formatDuration, formatTime, formatTimestamp, formatTokens, formatWeekdayTime, formatWhen, freshness, timeAgo, } from "../../ui/src/lib/format.js";
1
+ export { formatBytes, formatClock, formatCompact, formatCount, formatDate, formatDateLong, formatDateTime, formatDayMonth, formatDayMonthTime, formatDuration, formatElapsed, formatMoney, formatPercent, formatTime, formatTimestamp, formatTokens, formatWeekdayTime, formatWhen, freshness, timeAgo, } from "../../ui/src/lib/format.js";
@@ -1,8 +1,9 @@
1
- export { AgentRunButton, type AgentRunAttempt, type AgentRunChoice, type AgentRunPicker, type ModelPicking, useAgentRunPick, type FixStanceLook, fixStanceLook, AnchoredOverlay, Avatar, Button, vAction, BarChart, BottomSheet, BrandMark, Card, clipboardOf, browserOwnsClick, appLink, openForwardedPort, ChangeStatusMark, type ChangeStatus, ui, Code, CodeField, ConfirmDialog, ContextMenu, OverflowActions, ActionSheet, type ActionItem, CopyButton, StatusTally, type TallyItem, DagEditor, DagGraph, type DagEdge, type DagNode, DiffStat, DisclosureRow, FilterBar, Icon, type IconName, ImageView, InfoDialog, InfoHint, InfoTable, type FileFormat, formatOf, Markdown, MarkdownDocument, 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, ProjectChip, 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, SkeletonSnapshot, vSkeletonSource, SplitView, StatStrip, StatusBadge, type StatusVariant, StepSection, timeWindows, type TimeWindow, timeWindowWords, useCompact, useDevice, useListNavigation, useNow, useLatest, errorMessage, noticeFrom, noticeOf, useAsyncAction, useNarrow, useRailMemory, useScrollReset, type StickyTop, useStickyTop, useTheme, } from "../../ui/src/index.js";
2
- export { formatBytes, formatDate, formatDateTime, formatDayMonth, formatDayMonthTime, formatDuration, formatTime, formatTimestamp, formatTokens, formatWeekdayTime, formatWhen, freshness, timeAgo, } from "./format.js";
1
+ export { AgentRunButton, type AgentRunAttempt, type AgentRunChoice, type AgentRunPicker, type ModelPicking, useAgentRunPick, type FixStanceLook, fixStanceLook, AnchoredOverlay, Avatar, Button, vAction, BarChart, BottomSheet, BrandMark, Card, clipboardOf, browserOwnsClick, appLink, openForwardedPort, ChangeStatusMark, type ChangeStatus, ui, type IconButtonVariants, type TextButtonVariants, type InputVariants, type ChipVariants, type SectionLabelVariants, type ButtonTier, type ButtonTone, Code, CodeField, ConfirmDialog, ContextMenu, OverflowActions, ActionSheet, type ActionItem, CopyButton, AddressField, StatusTally, type TallyItem, DagEditor, DagGraph, type DagEdge, type DagNode, DiffStat, DisclosureRow, FilterBar, Icon, type IconName, ImageView, InfoDialog, InfoHint, InfoTable, type FileFormat, formatOf, Markdown, MarkdownDocument, 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, ProjectChip, 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, SkeletonSnapshot, vSkeletonSource, SplitView, StatStrip, StatusBadge, type StatusVariant, StepSection, timeWindows, type TimeWindow, timeWindowWords, useCompact, useDevice, useListNavigation, useNow, useLatest, messageOr, messageOr as errorMessage, noticeFrom, noticeOf, useAsyncAction, useNarrow, useRailMemory, useScrollReset, type StickyTop, useStickyTop, useTheme, } from "../../ui/src/index.js";
2
+ export { formatBytes, formatClock, formatCompact, formatCount, formatDate, formatDateLong, formatDateTime, formatDayMonth, formatDayMonthTime, formatDuration, formatElapsed, formatMoney, formatPercent, formatTime, formatTimestamp, formatTokens, formatWeekdayTime, formatWhen, freshness, timeAgo, } from "./format.js";
3
+ export { type DiffMark, diffMark, type Signal, type TintWeight, type Tone, toneDot, toneFill, toneHover, toneInk, tonePlate, toneRim, toneTint, toneWash, } from "./tone.js";
3
4
  export { diffSequence, pairEdits, similarity, wordDiff } from "./diff.js";
4
5
  export { createWorkerCall, serveWorkerCall, WorkerCallError } from "./worker.js";
5
- export { activeLocale, extensionT } from "./i18n.js";
6
+ export { activeLocale, extensionI18n, extensionT } from "./i18n.js";
6
7
  export type { BarsFigure, BarsFigureItem, DagFigure, DagFigureEdge, DagFigureNode, Figure, FigureAccent, MermaidFigure, StatsFigure, StatsFigureItem, } from "../../ui/src/markdown/index.js";
7
8
  export { default as Checkbox } from "primevue/checkbox";
8
9
  export type { MenuItem } from "primevue/menuitem";
@@ -0,0 +1 @@
1
+ export { type DiffMark, diffMark, type Signal, type TintWeight, type Tone, toneDot, toneFill, toneHover, toneInk, tonePlate, toneRim, toneTint, toneWash, } from "../../ui/src/lib/tone.js";
@@ -9,9 +9,9 @@ type __VLS_Props = {
9
9
  items?: readonly TallyItem[];
10
10
  skeleton?: number;
11
11
  };
12
- declare var __VLS_1: {};
12
+ declare var __VLS_3: {};
13
13
  type __VLS_Slots = {} & {
14
- default?: (props: typeof __VLS_1) => any;
14
+ default?: (props: typeof __VLS_3) => any;
15
15
  };
16
16
  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>;
17
17
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -6,6 +6,7 @@ export interface DagNode<T = unknown> {
6
6
  readonly dimmed?: boolean;
7
7
  readonly width?: number;
8
8
  readonly height?: number;
9
+ readonly order?: number;
9
10
  }
10
11
  export interface DagEdge {
11
12
  readonly from: string;
@@ -1,14 +1,16 @@
1
- import { type NoticeModel, type NoticeTone } from "./notice.js";
1
+ import { type NoticeModel, type NoticeSize, type NoticeTone } from "./notice.js";
2
2
  import type { IconName } from "../../icons/iconSets.js";
3
3
  type __VLS_Props = {
4
4
  of?: NoticeModel;
5
5
  tone?: NoticeTone;
6
6
  icon?: IconName;
7
+ size?: NoticeSize;
8
+ strip?: boolean;
7
9
  dismissLabel?: string;
8
10
  };
9
- declare var __VLS_6: {};
10
- type __VLS_Slots = {} & {
11
- default?: (props: typeof __VLS_6) => any;
11
+ type __VLS_Slots = {
12
+ default?: () => unknown;
13
+ actions?: () => unknown;
12
14
  };
13
15
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
16
  dismiss: () => any;
@@ -2,9 +2,9 @@ type __VLS_Props = {
2
2
  of: string;
3
3
  label?: string;
4
4
  };
5
- declare var __VLS_7: {};
5
+ declare var __VLS_6: {};
6
6
  type __VLS_Slots = {} & {
7
- default?: (props: typeof __VLS_7) => any;
7
+ default?: (props: typeof __VLS_6) => any;
8
8
  };
9
9
  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>;
10
10
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,3 +1,4 @@
1
- export type ChangeStatus = "added" | "modified" | "deleted" | "renamed" | "type-changed" | "conflicted";
1
+ import type { ChangeStatus } from "@intentic/sandbox-contract";
2
+ export type { ChangeStatus };
2
3
  export declare const STATUS_LETTER: Record<ChangeStatus, string>;
3
4
  export declare const STATUS_CLASS: Record<ChangeStatus, string>;
@@ -11,7 +11,12 @@ export interface NoticeModel {
11
11
  readonly action?: NoticeAction;
12
12
  readonly key?: string;
13
13
  }
14
- export declare const NOTICE_BOX: Record<NoticeTone, string>;
14
+ export type NoticeSize = "xs" | "sm" | "md" | "lg";
15
+ export declare const noticeLook: (tone: NoticeTone, size: NoticeSize, actions: boolean, strip?: boolean) => {
16
+ readonly box: (own?: string) => string;
17
+ readonly icon: string;
18
+ };
19
+ export declare const noticeBox: (tone: NoticeTone, size: NoticeSize, actions: boolean, strip?: boolean) => string;
15
20
  export declare const NOTICE_ICON: Record<NoticeTone, IconName>;
16
21
  export declare const noticeKey: (notice: NoticeModel) => string;
17
22
  export declare const rankNotices: (notices: readonly NoticeModel[]) => readonly NoticeModel[];
@@ -1 +1,2 @@
1
- export type StatusVariant = `success` | `danger` | `warning` | `info` | `neutral` | `primary`;
1
+ import type { Tone } from "../../lib/tone.js";
2
+ export type StatusVariant = Tone;
@@ -0,0 +1,19 @@
1
+ type __VLS_Props = {
2
+ value: string;
3
+ editable?: boolean;
4
+ placeholder?: string;
5
+ copyLabel?: string;
6
+ openLabel?: string;
7
+ openable?: boolean;
8
+ };
9
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
10
+ focus: () => void;
11
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
12
+ cancel: () => any;
13
+ submit: (text: string) => any;
14
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
15
+ onCancel?: (() => any) | undefined;
16
+ onSubmit?: ((text: string) => any) | undefined;
17
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ declare const _default: typeof __VLS_export;
19
+ export default _default;
@@ -9,23 +9,23 @@ type __VLS_Props = {
9
9
  verb?: string;
10
10
  paged?: boolean;
11
11
  };
12
- declare var __VLS_9: {}, __VLS_12: {}, __VLS_20: {}, __VLS_23: {}, __VLS_47: {}, __VLS_65: {}, __VLS_67: {}, __VLS_88: {};
12
+ declare var __VLS_8: {}, __VLS_11: {}, __VLS_19: {}, __VLS_22: {}, __VLS_46: {}, __VLS_64: {}, __VLS_66: {}, __VLS_93: {};
13
13
  type __VLS_Slots = {} & {
14
- lead?: (props: typeof __VLS_9) => any;
14
+ lead?: (props: typeof __VLS_8) => any;
15
15
  } & {
16
- badges?: (props: typeof __VLS_12) => any;
16
+ badges?: (props: typeof __VLS_11) => any;
17
17
  } & {
18
- description?: (props: typeof __VLS_20) => any;
18
+ description?: (props: typeof __VLS_19) => any;
19
19
  } & {
20
- meta?: (props: typeof __VLS_23) => any;
20
+ meta?: (props: typeof __VLS_22) => any;
21
21
  } & {
22
- actions?: (props: typeof __VLS_47) => any;
22
+ actions?: (props: typeof __VLS_46) => any;
23
23
  } & {
24
- strips?: (props: typeof __VLS_65) => any;
24
+ strips?: (props: typeof __VLS_64) => any;
25
25
  } & {
26
- confirm?: (props: typeof __VLS_67) => any;
26
+ confirm?: (props: typeof __VLS_66) => any;
27
27
  } & {
28
- default?: (props: typeof __VLS_88) => any;
28
+ default?: (props: typeof __VLS_93) => any;
29
29
  };
30
30
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
31
31
  cancel: () => any;
@@ -5,9 +5,9 @@ type __VLS_ModelProps = {
5
5
  modelValue: boolean;
6
6
  };
7
7
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
8
- declare var __VLS_8: {};
8
+ declare var __VLS_7: {};
9
9
  type __VLS_Slots = {} & {
10
- default?: (props: typeof __VLS_8) => any;
10
+ default?: (props: typeof __VLS_7) => any;
11
11
  };
12
12
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
13
  "update:modelValue": (value: boolean) => any;
@@ -6,7 +6,7 @@ type __VLS_Slots = {} & {
6
6
  default?: (props: typeof __VLS_1) => any;
7
7
  };
8
8
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
9
- width: `content` | `wide` | `full`;
9
+ width: "full" | "content" | "wide";
10
10
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
11
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
12
12
  declare const _default: typeof __VLS_export;
@@ -6,21 +6,21 @@ type __VLS_Props = {
6
6
  scroll?: `panes` | `page`;
7
7
  scrollKey?: unknown;
8
8
  };
9
- declare var __VLS_15: {}, __VLS_18: {}, __VLS_20: {}, __VLS_22: {}, __VLS_24: {}, __VLS_26: {
9
+ declare var __VLS_14: {}, __VLS_17: {}, __VLS_19: {}, __VLS_21: {}, __VLS_23: {}, __VLS_25: {
10
10
  compact: boolean;
11
11
  };
12
12
  type __VLS_Slots = {} & {
13
- info?: (props: typeof __VLS_15) => any;
13
+ info?: (props: typeof __VLS_14) => any;
14
14
  } & {
15
- actions?: (props: typeof __VLS_18) => any;
15
+ actions?: (props: typeof __VLS_17) => any;
16
16
  } & {
17
- strips?: (props: typeof __VLS_20) => any;
17
+ strips?: (props: typeof __VLS_19) => any;
18
18
  } & {
19
- compact?: (props: typeof __VLS_22) => any;
19
+ compact?: (props: typeof __VLS_21) => any;
20
20
  } & {
21
- rail?: (props: typeof __VLS_24) => any;
21
+ rail?: (props: typeof __VLS_23) => any;
22
22
  } & {
23
- detail?: (props: typeof __VLS_26) => any;
23
+ detail?: (props: typeof __VLS_25) => any;
24
24
  };
25
25
  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>;
26
26
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -17,11 +17,11 @@ type __VLS_ModelProps = {
17
17
  modelValue: string;
18
18
  };
19
19
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
20
- declare var __VLS_25: {}, __VLS_27: {};
20
+ declare var __VLS_23: {}, __VLS_25: {};
21
21
  type __VLS_Slots = {} & {
22
- note?: (props: typeof __VLS_25) => any;
22
+ note?: (props: typeof __VLS_23) => any;
23
23
  } & {
24
- actions?: (props: typeof __VLS_27) => any;
24
+ actions?: (props: typeof __VLS_25) => any;
25
25
  };
26
26
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
27
27
  text: () => string;
@@ -1,5 +1,6 @@
1
1
  type __VLS_Props = {
2
2
  title: string;
3
+ size?: `md` | `lg`;
3
4
  };
4
5
  declare var __VLS_12: {};
5
6
  type __VLS_Slots = {} & {
@@ -8,15 +8,15 @@ type __VLS_Props = {
8
8
  labelledBy?: string;
9
9
  appendTo?: HTMLElement | string;
10
10
  };
11
- declare var __VLS_12: {
11
+ declare var __VLS_11: {
12
12
  titleClass: string;
13
- }, __VLS_14: {}, __VLS_17: {};
13
+ }, __VLS_13: {}, __VLS_16: {};
14
14
  type __VLS_Slots = {} & {
15
- header?: (props: typeof __VLS_12) => any;
15
+ header?: (props: typeof __VLS_11) => any;
16
16
  } & {
17
- default?: (props: typeof __VLS_14) => any;
17
+ default?: (props: typeof __VLS_13) => any;
18
18
  } & {
19
- footer?: (props: typeof __VLS_17) => any;
19
+ footer?: (props: typeof __VLS_16) => any;
20
20
  };
21
21
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
22
22
  show: () => any;
@@ -10,11 +10,11 @@ type __VLS_ModelProps = {
10
10
  modelValue: boolean;
11
11
  };
12
12
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
13
- declare var __VLS_8: {}, __VLS_17: {};
13
+ declare var __VLS_7: {}, __VLS_15: {};
14
14
  type __VLS_Slots = {} & {
15
- default?: (props: typeof __VLS_8) => any;
15
+ default?: (props: typeof __VLS_7) => any;
16
16
  } & {
17
- default?: (props: typeof __VLS_17) => any;
17
+ default?: (props: typeof __VLS_15) => any;
18
18
  };
19
19
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
20
20
  "update:modelValue": (value: boolean) => any;
@@ -1,3 +1,10 @@
1
+ import { type ButtonTier, type ButtonTone } from "./button.js";
2
+ type __VLS_Props = {
3
+ tier?: ButtonTier;
4
+ tone?: ButtonTone;
5
+ gilded?: boolean;
6
+ thumb?: boolean;
7
+ };
1
8
  declare var __VLS_12: string, __VLS_13: any, __VLS_22: {
2
9
  class: string;
3
10
  }, __VLS_25: {}, __VLS_32: {};
@@ -10,7 +17,7 @@ type __VLS_Slots = {} & {
10
17
  } & {
11
18
  default?: (props: typeof __VLS_32) => any;
12
19
  };
13
- declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
20
+ 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
21
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
15
22
  declare const _default: typeof __VLS_export;
16
23
  export default _default;
@@ -0,0 +1,14 @@
1
+ export type ButtonTier = `loud` | `accent` | `boring` | `quiet`;
2
+ export type ButtonTone = `accent` | `danger` | `warning` | `success`;
3
+ export interface ButtonLook {
4
+ readonly tier?: ButtonTier | undefined;
5
+ readonly tone?: ButtonTone | undefined;
6
+ readonly gilded?: boolean | undefined;
7
+ readonly thumb?: boolean | undefined;
8
+ }
9
+ export interface PrimeLook {
10
+ readonly severity: string | undefined;
11
+ readonly text: boolean;
12
+ readonly class: string;
13
+ }
14
+ export declare const primeLook: ({ tier, tone, gilded, thumb }: ButtonLook) => PrimeLook;
@@ -22,29 +22,29 @@ type __VLS_Props = {
22
22
  headlineGuard?: boolean;
23
23
  indent?: boolean;
24
24
  };
25
- declare var __VLS_16: {
25
+ declare var __VLS_15: {
26
26
  mark: 22 | 18 | 28 | 36;
27
27
  iconClass: "text-xl" | "text-lg" | "text-base";
28
- }, __VLS_29: {}, __VLS_31: {}, __VLS_33: {}, __VLS_35: {}, __VLS_42: {
28
+ }, __VLS_28: {}, __VLS_30: {}, __VLS_32: {}, __VLS_34: {}, __VLS_41: {
29
29
  mark: 22 | 18 | 28 | 36;
30
30
  iconClass: "text-xl" | "text-lg" | "text-base";
31
- }, __VLS_49: {}, __VLS_51: {};
31
+ }, __VLS_48: {}, __VLS_50: {};
32
32
  type __VLS_Slots = {} & {
33
- lead?: (props: typeof __VLS_16) => any;
33
+ lead?: (props: typeof __VLS_15) => any;
34
34
  } & {
35
- title?: (props: typeof __VLS_29) => any;
35
+ title?: (props: typeof __VLS_28) => any;
36
36
  } & {
37
- description?: (props: typeof __VLS_31) => any;
37
+ description?: (props: typeof __VLS_30) => any;
38
38
  } & {
39
- meta?: (props: typeof __VLS_33) => any;
39
+ meta?: (props: typeof __VLS_32) => any;
40
40
  } & {
41
- control?: (props: typeof __VLS_35) => any;
41
+ control?: (props: typeof __VLS_34) => any;
42
42
  } & {
43
- lead?: (props: typeof __VLS_42) => any;
43
+ lead?: (props: typeof __VLS_41) => any;
44
44
  } & {
45
- below?: (props: typeof __VLS_49) => any;
45
+ below?: (props: typeof __VLS_48) => any;
46
46
  } & {
47
- below?: (props: typeof __VLS_51) => any;
47
+ below?: (props: typeof __VLS_50) => any;
48
48
  };
49
49
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
50
50
  headerClick: (event: MouseEvent) => any;
@@ -33,13 +33,7 @@ export declare const ROW_TIERS: {
33
33
  readonly mark: 18;
34
34
  };
35
35
  };
36
- export declare const ROW_TONES: {
37
- readonly default: "text-muted";
38
- readonly danger: "text-danger";
39
- readonly warning: "text-warning";
40
- readonly success: "text-success";
41
- readonly info: "text-link";
42
- };
36
+ export declare const ROW_TONES: Record<RowTone, string>;
43
37
  export declare const ROW_TOGGLE_GAPS: {
44
38
  readonly comfortable: "gap-2.5";
45
39
  readonly compact: "gap-2";
@@ -1,9 +1,12 @@
1
+ import type { ButtonTier, ButtonTone } from "../primitives/button.js";
1
2
  import type { AgentRunPicker } from "../../composables/useAgentRunPick.js";
2
3
  import type { IconName } from "../../icons/iconSets.js";
3
4
  import type { TooltipValue } from "../../lib/tooltip.js";
4
5
  type __VLS_Props = {
5
6
  label: string;
6
7
  picker: AgentRunPicker;
8
+ tier?: ButtonTier | undefined;
9
+ tone?: ButtonTone | undefined;
7
10
  severity?: string | undefined;
8
11
  size?: string;
9
12
  text?: boolean;
@@ -1,5 +1,5 @@
1
1
  import type { NoticeModel, NoticeTone } from "../components/feedback/notice.js";
2
- export declare const errorMessage: (error: unknown, fallback: string) => string;
2
+ export declare const messageOr: (error: unknown, fallback: string) => string;
3
3
  interface NoticeOptions {
4
4
  readonly tone?: NoticeTone;
5
5
  readonly action?: NoticeModel[`action`];
@@ -1,2 +1,2 @@
1
- import { type Ref } from "vue";
2
- export declare function useRailMemory(id: string, choice: Ref<string | undefined>, options: () => readonly string[]): void;
1
+ import { type Ref, type WritableComputedRef } from "vue";
2
+ export declare function useRailMemory<T extends string | undefined>(id: string, choice: Ref<T>, options: () => readonly string[]): WritableComputedRef<T>;
@@ -11,6 +11,9 @@ export declare const ICONS: {
11
11
  "arrow-circle-up": {
12
12
  outline: string;
13
13
  };
14
+ "arrow-down": {
15
+ outline: string;
16
+ };
14
17
  "arrow-down-left": {
15
18
  outline: string;
16
19
  };
@@ -20,6 +23,9 @@ export declare const ICONS: {
20
23
  "arrow-right": {
21
24
  outline: string;
22
25
  };
26
+ "arrow-up": {
27
+ outline: string;
28
+ };
23
29
  "arrow-up-right": {
24
30
  outline: string;
25
31
  };
@@ -90,6 +96,9 @@ export declare const ICONS: {
90
96
  cloud: {
91
97
  outline: string;
92
98
  };
99
+ "cloud-download": {
100
+ outline: string;
101
+ };
93
102
  "cloud-upload": {
94
103
  outline: string;
95
104
  };
@@ -261,6 +270,9 @@ export declare const ICONS: {
261
270
  microphone: {
262
271
  outline: string;
263
272
  };
273
+ mobile: {
274
+ outline: string;
275
+ };
264
276
  moon: {
265
277
  outline: string;
266
278
  };
@@ -314,6 +326,9 @@ export declare const ICONS: {
314
326
  save: {
315
327
  outline: string;
316
328
  };
329
+ screen: {
330
+ outline: string;
331
+ };
317
332
  search: {
318
333
  outline: string;
319
334
  };
@@ -508,12 +523,6 @@ export declare const ICONS: {
508
523
  "code-parameter": {
509
524
  outline: string;
510
525
  };
511
- "arrow-down": {
512
- outline: string;
513
- };
514
- "arrow-up": {
515
- outline: string;
516
- };
517
526
  ban: {
518
527
  outline: string;
519
528
  };
@@ -1,7 +1,7 @@
1
1
  export { clipboardOf } from "./lib/clipboard.js";
2
2
  export { appLink, browserOwnsClick } from "./lib/link.js";
3
3
  export { openForwardedPort } from "./lib/portPreview.js";
4
- export { ui } from "./lib/ui.js";
4
+ export { type ChipVariants, type IconButtonVariants, type InputVariants, type SectionLabelVariants, type TextButtonVariants, ui } from "./lib/ui.js";
5
5
  export { default as AgentRunButton } from "./components/sandbox/AgentRunButton.vue";
6
6
  export { type AgentRunAttempt, type AgentRunChoice, type AgentRunPicker, type ModelPicking, useAgentRunPick } from "./composables/useAgentRunPick.js";
7
7
  export { type FixStanceLook, fixStanceLook } from "./composables/fixStanceLook.js";
@@ -11,6 +11,7 @@ export { default as BarChart } from "./components/charts/BarChart.vue";
11
11
  export { default as BottomSheet } from "./components/layout/BottomSheet.vue";
12
12
  export { default as BrandMark } from "./components/brand/BrandMark.vue";
13
13
  export { default as Button } from "./components/primitives/Button.vue";
14
+ export { type ButtonTier, type ButtonTone } from "./components/primitives/button.js";
14
15
  export { vAction } from "./lib/pressAction.js";
15
16
  export { default as Card } from "./components/layout/Card.vue";
16
17
  export { default as ChangeStatusMark } from "./components/feedback/ChangeStatusMark.vue";
@@ -24,6 +25,7 @@ export { default as OverflowActions } from "./components/overlays/OverflowAction
24
25
  export { default as ActionSheet } from "./components/overlays/ActionSheet.vue";
25
26
  export { type ActionItem } from "./components/overlays/actionItem.js";
26
27
  export { default as CopyButton } from "./components/primitives/CopyButton.vue";
28
+ export { default as AddressField } from "./components/forms/AddressField.vue";
27
29
  export { type TallyItem, default as StatusTally } from "./components/charts/StatusTally.vue";
28
30
  export { default as DisclosureRow } from "./components/rows/DisclosureRow.vue";
29
31
  export { type DagEdge, type DagNode } from "./components/charts/dagLayout.js";
@@ -85,5 +87,5 @@ export { useRailMemory } from "./composables/useRailMemory.js";
85
87
  export { useNow } from "./composables/useNow.js";
86
88
  export { useLatest } from "./composables/useLatest.js";
87
89
  export { useLoadingReveal } from "./composables/loadingReveal.js";
88
- export { errorMessage, noticeFrom, noticeOf, useAsyncAction } from "./composables/useAsyncAction.js";
90
+ export { messageOr, noticeFrom, noticeOf, useAsyncAction } from "./composables/useAsyncAction.js";
89
91
  export { useTheme } from "./composables/useTheme.js";
@@ -1 +1,11 @@
1
+ import { type Ref } from "vue";
1
2
  export declare const clipboardOf: (element: Element | null | undefined) => Clipboard;
3
+ export declare const writeClipboard: (text: string, from?: Element | null) => Promise<boolean>;
4
+ export declare const readClipboard: (from?: Element | null) => Promise<string | undefined>;
5
+ export declare const COPIED_MS = 1500;
6
+ export interface Copied {
7
+ readonly copied: Readonly<Ref<boolean>>;
8
+ readonly copy: (text: string, from?: Element | null) => Promise<boolean>;
9
+ readonly reset: () => void;
10
+ }
11
+ export declare const useCopied: (holdMs?: number) => Copied;
@@ -1,12 +1,12 @@
1
1
  export declare const formatBytes: (bytes: number | undefined) => string;
2
2
  export declare const formatDuration: (seconds: number) => string;
3
- export declare const formatTokens: (tokens: number) => string;
4
3
  export declare const initialsOf: (name: string) => string | undefined;
5
4
  export declare const formatFixed: (value: number, digits: number) => string;
6
5
  export declare const setFormatLocale: (tag: string) => void;
7
6
  export declare const formatPercent: (percent: number) => string;
8
7
  export declare const formatDate: (at: number) => string;
9
8
  export declare const formatDateLong: (at: number | string) => string;
9
+ export declare const formatMonth: (at: number) => string;
10
10
  export declare const formatDayMonth: (at: number) => string;
11
11
  export declare const formatDateTime: (at: number) => string;
12
12
  export declare const formatTimestamp: (at: number) => string;
@@ -20,3 +20,13 @@ export declare const timeAgo: (at: number, { now, days }?: {
20
20
  days?: boolean;
21
21
  }) => string;
22
22
  export declare const freshness: (at: number) => string;
23
+ export declare const formatCount: (value: number) => string;
24
+ export declare const formatCompact: (value: number) => string;
25
+ export declare const formatTokens: (tokens: number) => string;
26
+ export declare const formatList: (items: readonly string[], type?: Intl.ListFormatType) => string;
27
+ export declare const formatMoney: (usd: number, { compact }?: {
28
+ compact?: boolean;
29
+ }) => string;
30
+ export declare const formatElapsed: (seconds: number, { largest }?: {
31
+ largest?: `days` | `hours`;
32
+ }) => string;
@@ -11,7 +11,7 @@ export type Op<T> = {
11
11
  readonly kind: "added" | "removed";
12
12
  readonly item: T;
13
13
  };
14
- export declare const diffSequence: <T>(before: readonly T[], after: readonly T[], equal: (left: T, right: T) => boolean) => Op<T>[] | undefined;
14
+ export declare const diffSequence: <T>(before: readonly T[], after: readonly T[], equal: (left: T, right: T) => boolean, maxCells?: number) => Op<T>[] | undefined;
15
15
  export declare const wordDiff: (before: string, after: string) => Segment[];
16
16
  export declare const similarity: (before: string, after: string) => number;
17
17
  export type Edit<T> = {
@@ -0,0 +1,15 @@
1
+ export type Tone = `success` | `warning` | `danger` | `info` | `neutral` | `primary`;
2
+ export type Signal = Exclude<Tone, `neutral` | `primary`>;
3
+ export type TintWeight = `strong` | `soft`;
4
+ type ClassArg = string | false | null | undefined;
5
+ export declare const toneInk: (tone: Tone, ...classes: ClassArg[]) => string;
6
+ export declare const toneDot: (tone: Tone, ...classes: ClassArg[]) => string;
7
+ export declare const toneWash: (tone: Tone, ...classes: ClassArg[]) => string;
8
+ export declare const toneTint: (tone: Tone, weight?: TintWeight, ...classes: ClassArg[]) => string;
9
+ export declare const toneRim: (tone: Tone, weight?: TintWeight, ...classes: ClassArg[]) => string;
10
+ export declare const toneFill: (tone: Tone, weight?: TintWeight, ...classes: ClassArg[]) => string;
11
+ export declare const tonePlate: (tone: Tone, ...classes: ClassArg[]) => string;
12
+ export declare const toneHover: (tone: Tone, ...classes: ClassArg[]) => string;
13
+ export type DiffMark = `added` | `removed` | `changed`;
14
+ export declare const diffMark: (mark: DiffMark, as?: `inline` | `rule`, ...classes: ClassArg[]) => string;
15
+ export {};
@@ -1,7 +1,8 @@
1
1
  import type { Directive } from "vue";
2
2
  import { type Side } from "./anchorPlacement.js";
3
+ import type { Signal } from "./tone.js";
3
4
  type Modifier = Side | "overflow" | "lines";
4
- export type TipTone = "info" | "ok" | "warn" | "danger";
5
+ export type TipTone = Signal;
5
6
  export interface TipRow {
6
7
  readonly label: string;
7
8
  readonly value: string | number;
@@ -1,14 +1,42 @@
1
+ export type ClassArg = string | false | null | undefined;
2
+ export type Recipe<V> = (variants?: V | ClassArg, ...classes: ClassArg[]) => string;
3
+ export interface IconButtonVariants {
4
+ size?: `xs` | `sm` | `md` | `lg` | `xl`;
5
+ tone?: `muted` | `subtle` | `danger`;
6
+ round?: boolean;
7
+ on?: boolean;
8
+ }
9
+ export interface TextButtonVariants {
10
+ tone?: `link` | `quiet` | `subtle` | `danger`;
11
+ size?: `xs` | `sm`;
12
+ flush?: boolean;
13
+ }
14
+ export interface InputVariants {
15
+ size?: `md` | `sm` | `inline`;
16
+ }
17
+ export interface ChipVariants {
18
+ on?: boolean;
19
+ }
20
+ export interface SectionLabelVariants {
21
+ size?: `sm` | `xs`;
22
+ tone?: `neutral` | `danger` | `warning` | `success`;
23
+ }
24
+ export interface TabVariants {
25
+ active?: boolean;
26
+ }
1
27
  export declare const ui: {
2
- iconButton: (...twClasses: string[]) => string;
3
- linkButton: (...twClasses: string[]) => string;
4
- textAction: (...twClasses: string[]) => string;
5
- input: (...twClasses: string[]) => string;
6
- inputSm: (...twClasses: string[]) => string;
7
- inputInline: (...twClasses: string[]) => string;
8
- emptyState: (...twClasses: string[]) => string;
9
- addTile: (...twClasses: string[]) => string;
10
- overlayChip: (...twClasses: string[]) => string;
11
- sectionLabel: (...twClasses: string[]) => string;
12
- sectionLabelSm: (...twClasses: string[]) => string;
13
- tab: (active: boolean, ...twClasses: string[]) => string;
28
+ iconButton: Recipe<IconButtonVariants>;
29
+ textButton: Recipe<TextButtonVariants>;
30
+ linkButton: (...classes: ClassArg[]) => string;
31
+ textAction: (...classes: ClassArg[]) => string;
32
+ input: Recipe<InputVariants>;
33
+ inputSm: (...classes: ClassArg[]) => string;
34
+ inputInline: (...classes: ClassArg[]) => string;
35
+ emptyState: Recipe<object>;
36
+ addTile: Recipe<object>;
37
+ chip: Recipe<ChipVariants>;
38
+ overlayChip: Recipe<object>;
39
+ sectionLabel: Recipe<SectionLabelVariants>;
40
+ sectionLabelSm: (...classes: ClassArg[]) => string;
41
+ tab: (active: boolean | TabVariants, ...classes: ClassArg[]) => string;
14
42
  };
@@ -8,6 +8,7 @@ export declare const insertLink: (text: string, start: number, end: number) => T
8
8
  export declare const indentLines: (text: string, start: number, end: number) => TextEdit;
9
9
  export declare const outdentLines: (text: string, start: number, end: number) => TextEdit;
10
10
  export declare const onListLine: (text: string, offset: number) => boolean;
11
+ export declare const newlineInCode: (text: string, start: number, end: number) => TextEdit;
11
12
  export interface ListEnter {
12
13
  readonly edit: TextEdit;
13
14
  readonly ended: boolean;
@@ -1,8 +1,8 @@
1
1
  export { blockAtOffset, type MarkdownBlock, type MarkdownBlocks, offsetOfLine, splitMarkdownBlocks } from "./blocks.js";
2
2
  export { type CodeBlock, codeBlockHtml, copyCodeFromEvent, escapeHtml, highlightInWorker } from "./code.js";
3
- export { continueList, indentLines, insertLink, type ListEnter, onListLine, outdentLines, type TextEdit, toggleWrap } from "./edits.js";
3
+ export { continueList, indentLines, insertLink, type ListEnter, newlineInCode, onListLine, outdentLines, type TextEdit, toggleWrap } from "./edits.js";
4
4
  export { createMarkdownHistory, type DocumentState, type EditKind, type MarkdownHistory } from "./history.js";
5
- export { blockBody, buildBlockElement, caretAtOffset, offsetOfCaret } from "./sourceDom.js";
5
+ export { blockBody, buildBlockElement, caretAtOffset, offsetOfCaret, RENDERED } from "./sourceDom.js";
6
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";
7
7
  export { type Frontmatter, type FrontmatterField, frontmatterHtml, splitFrontmatter } from "./frontmatter.js";
8
8
  export { createStreamingMarkdown, lexBlocks, lexInline, type MarkdownDecorator, type MarkdownPart, markdownParseCount, type MarkdownToken, parseMarkdownParts, type ParsedMarkdown, renderMarkdown, renderMarkdownParts, renderParsedMarkdown, type RenderedMarkdown, settledEnd, type StreamingMarkdown, } from "./render.js";
@@ -4,7 +4,15 @@ export interface MarkdownToken {
4
4
  readonly type: string;
5
5
  readonly raw: string;
6
6
  readonly tokens?: readonly MarkdownToken[];
7
+ readonly href?: string;
8
+ readonly items?: readonly MarkdownToken[];
9
+ readonly header?: readonly MarkdownCell[];
10
+ readonly rows?: readonly (readonly MarkdownCell[])[];
7
11
  }
12
+ export interface MarkdownCell {
13
+ readonly tokens: readonly MarkdownToken[];
14
+ }
15
+ export declare const lexedSource: (source: string) => string;
8
16
  export declare const lexBlocks: (source: string) => readonly MarkdownToken[] | undefined;
9
17
  export declare const lexInline: (source: string) => readonly MarkdownToken[] | undefined;
10
18
  export type MarkdownDecorator = (fragment: DocumentFragment) => void;
@@ -1,5 +1,6 @@
1
1
  export declare const blockBody: (element: Element) => string;
2
2
  export declare const FIGURE_HOLDER = "md-code-figure";
3
+ export declare const RENDERED = "md-rendered";
3
4
  export declare const buildBlockElement: (source: string) => HTMLElement;
4
5
  export declare const offsetOfCaret: (element: HTMLElement, node: Node, offset: number) => number;
5
6
  export declare const caretAtOffset: (element: HTMLElement, offset: number) => {
package/names.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  // The kit's export names: the single source consumed by the web app's shim generator
2
2
  // (_editor/web/scripts/generate-ext-shims.mjs) and hostModules' dev-time coverage assertion. Update alongside
3
- // src/index.ts; the assertion catches drift on the next dev boot.
3
+ // src/index.ts; the assertion catches drift on the next dev boot, and extensionUiNames.test.ts fails it in CI.
4
4
  export const extensionUiNames = [
5
5
  "AgentRunButton",
6
6
  "AnchoredOverlay",
@@ -16,6 +16,15 @@ export const extensionUiNames = [
16
16
  "browserOwnsClick",
17
17
  "appLink",
18
18
  "ui",
19
+ "toneInk",
20
+ "toneDot",
21
+ "toneWash",
22
+ "toneTint",
23
+ "toneRim",
24
+ "toneFill",
25
+ "tonePlate",
26
+ "toneHover",
27
+ "diffMark",
19
28
  "Code",
20
29
  "CodeField",
21
30
  "ConfirmDialog",
@@ -23,6 +32,7 @@ export const extensionUiNames = [
23
32
  "OverflowActions",
24
33
  "ActionSheet",
25
34
  "CopyButton",
35
+ "AddressField",
26
36
  "DagEditor",
27
37
  "DagGraph",
28
38
  "DiffStat",
@@ -33,8 +43,15 @@ export const extensionUiNames = [
33
43
  "FilterBar",
34
44
  "fixStanceLook",
35
45
  "formatBytes",
46
+ "formatClock",
47
+ "formatCompact",
48
+ "formatCount",
49
+ "formatElapsed",
50
+ "formatMoney",
51
+ "formatPercent",
36
52
  "formatOf",
37
53
  "formatDate",
54
+ "formatDateLong",
38
55
  "formatDateTime",
39
56
  "formatDayMonth",
40
57
  "formatDayMonthTime",
@@ -48,6 +65,7 @@ export const extensionUiNames = [
48
65
  "serveWorkerCall",
49
66
  "WorkerCallError",
50
67
  "activeLocale",
68
+ "extensionI18n",
51
69
  "extensionT",
52
70
  "Icon",
53
71
  "ImageView",
@@ -57,6 +75,7 @@ export const extensionUiNames = [
57
75
  "Markdown",
58
76
  "MarkdownDocument",
59
77
  "MarkdownFigure",
78
+ "messageOr",
60
79
  "Modal",
61
80
  "NavRail",
62
81
  "NoteEditor",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentic/extension-ui",
3
- "version": "1.326.0",
3
+ "version": "1.328.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",
@@ -36,6 +36,11 @@
36
36
  "types": "./dist/types/extension-ui/src/format.d.ts",
37
37
  "default": "./dist/format.js"
38
38
  },
39
+ "./tone": {
40
+ "@intentic/src": "./src/tone.ts",
41
+ "types": "./dist/types/extension-ui/src/tone.d.ts",
42
+ "default": "./dist/tone.js"
43
+ },
39
44
  "./worker": {
40
45
  "@intentic/src": "./src/worker.ts",
41
46
  "types": "./dist/types/extension-ui/src/worker.d.ts",
@@ -56,7 +61,7 @@
56
61
  "@intentic/ui": "0.0.0",
57
62
  "typescript": "6.0.3",
58
63
  "vue": "3.5.43",
59
- "vue-tsc": "3.3.11"
64
+ "vue-tsc": "3.3.12"
60
65
  },
61
66
  "peerDependencies": {
62
67
  "vue": "3"
package/src/format.ts CHANGED
@@ -4,12 +4,18 @@
4
4
  // names.
5
5
  export {
6
6
  formatBytes,
7
+ formatClock,
8
+ formatCompact,
9
+ formatCount,
7
10
  formatDate,
8
11
  formatDateLong,
9
12
  formatDateTime,
10
13
  formatDayMonth,
11
14
  formatDayMonthTime,
12
15
  formatDuration,
16
+ formatElapsed,
17
+ formatMoney,
18
+ formatPercent,
13
19
  formatTime,
14
20
  formatTimestamp,
15
21
  formatTokens,
package/src/index.ts CHANGED
@@ -41,7 +41,16 @@ export {
41
41
  // `ChangeStatusMark` is fixed-width, so a column of paths stays aligned whatever status letter lands in it.
42
42
  ChangeStatusMark,
43
43
  type ChangeStatus,
44
+ // The kit's recipes: a variant is chosen by name (`ui.iconButton({ size: "lg", tone: "danger" })`), never by
45
+ // overriding the recipe's own classes.
44
46
  ui,
47
+ type IconButtonVariants,
48
+ type TextButtonVariants,
49
+ type InputVariants,
50
+ type ChipVariants,
51
+ type SectionLabelVariants,
52
+ type ButtonTier,
53
+ type ButtonTone,
45
54
  Code,
46
55
  // The editable counterpart to `Code`: syntax-coloured text with a caret in it.
47
56
  CodeField,
@@ -53,6 +62,8 @@ export {
53
62
  ActionSheet,
54
63
  type ActionItem,
55
64
  CopyButton,
65
+ // A lone URL to read, copy or open; `editable` turns the same box into an address bar.
66
+ AddressField,
56
67
  StatusTally,
57
68
  type TallyItem,
58
69
  DagEditor,
@@ -154,7 +165,10 @@ export {
154
165
  useNow,
155
166
  // Drops an answer a newer request has superseded: `const current = begin(); …; if (!current()) return;`.
156
167
  useLatest,
157
- errorMessage,
168
+ // The thrown thing's message, or a fallback when it has none.
169
+ messageOr,
170
+ // Deprecated: the old name of `messageOr`, kept so extensions built against it still link.
171
+ messageOr as errorMessage,
158
172
  noticeFrom,
159
173
  noticeOf,
160
174
  useAsyncAction,
@@ -172,11 +186,18 @@ export {
172
186
  // Also reachable as `@intentic/extension-ui/format`, without the components attached.
173
187
  export {
174
188
  formatBytes,
189
+ formatClock,
190
+ formatCompact,
191
+ formatCount,
175
192
  formatDate,
193
+ formatDateLong,
176
194
  formatDateTime,
177
195
  formatDayMonth,
178
196
  formatDayMonthTime,
179
197
  formatDuration,
198
+ formatElapsed,
199
+ formatMoney,
200
+ formatPercent,
180
201
  formatTime,
181
202
  formatTimestamp,
182
203
  formatTokens,
@@ -185,6 +206,23 @@ export {
185
206
  freshness,
186
207
  timeAgo,
187
208
  } from "./format.js";
209
+ // Also reachable as `@intentic/extension-ui/tone`: the one tone vocabulary (ink, dot, wash, tint, plate, hover, and a
210
+ // diff's three marks), so an extension's "danger" is the shell's.
211
+ export {
212
+ type DiffMark,
213
+ diffMark,
214
+ type Signal,
215
+ type TintWeight,
216
+ type Tone,
217
+ toneDot,
218
+ toneFill,
219
+ toneHover,
220
+ toneInk,
221
+ tonePlate,
222
+ toneRim,
223
+ toneTint,
224
+ toneWash,
225
+ } from "./tone.js";
188
226
  // Also reachable as `@intentic/extension-ui/diff`: the edit scripts a viewer marks two versions of a file with.
189
227
  export { diffSequence, pairEdits, similarity, wordDiff } from "./diff.js";
190
228
  // Also reachable as `@intentic/extension-ui/worker`: work moved off the page, with the page as its fallback.
@@ -193,7 +231,9 @@ export { createWorkerCall, serveWorkerCall, WorkerCallError } from "./worker.js"
193
231
  // `messages` export; `activeLocale` is the language on screen, for a contribution that formats something itself.
194
232
  // The `Locale` type comes off `@intentic/extension-ui/i18n`, not from here: this file's re-exports become runtime
195
233
  // bindings on the host bridge, and a type has none.
196
- export { activeLocale, extensionT } from "./i18n.js";
234
+ // `extensionI18n` is the one-call form of the same translator. `registerExtensionMessages` stays off: mounting a
235
+ // catalog is the host's job, and on the bridge it would let one extension overwrite another's words.
236
+ export { activeLocale, extensionI18n, extensionT } from "./i18n.js";
197
237
  // Types only, so an extension can build a figure straight from facts it holds instead of round-tripping through
198
238
  // markdown. The parser and document splitter stay in `<Markdown>`, not here.
199
239
  export type {
package/src/tone.ts ADDED
@@ -0,0 +1,19 @@
1
+ // The kit's tone vocabulary, reachable without the component barrel: `index.ts` pulls in every .vue component, which
2
+ // breaks an extension's node-environment tests, and a status table in a plain module (a pipeline's stage colours) is
3
+ // exactly what such a test reads. A source-level door for in-repo extensions and their tests; a git-installed bundle
4
+ // resolves through the import map instead, which carries the same names.
5
+ export {
6
+ type DiffMark,
7
+ diffMark,
8
+ type Signal,
9
+ type TintWeight,
10
+ type Tone,
11
+ toneDot,
12
+ toneFill,
13
+ toneHover,
14
+ toneInk,
15
+ tonePlate,
16
+ toneRim,
17
+ toneTint,
18
+ toneWash,
19
+ } from "@intentic/ui/tone";