@harborclient/sdk 1.3.6 → 1.3.8

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 (46) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/components/Breadcrumb/SegmentShell.d.ts +2 -2
  3. package/dist/components/Breadcrumb/SegmentShell.d.ts.map +1 -1
  4. package/dist/components/Breadcrumb/SegmentShell.js +5 -5
  5. package/dist/components/Breadcrumb/index.d.ts +2 -2
  6. package/dist/components/Breadcrumb/index.d.ts.map +1 -1
  7. package/dist/components/Breadcrumb/index.js +3 -5
  8. package/dist/components/FloatingDialog/index.d.ts +0 -4
  9. package/dist/components/FloatingDialog/index.d.ts.map +1 -1
  10. package/dist/components/FloatingDialog/index.js +1 -5
  11. package/dist/components/FooterPanel/index.d.ts +6 -1
  12. package/dist/components/FooterPanel/index.d.ts.map +1 -1
  13. package/dist/components/FooterPanel/index.js +2 -2
  14. package/dist/components/Resizable/Resizable.d.ts +6 -1
  15. package/dist/components/Resizable/Resizable.d.ts.map +1 -1
  16. package/dist/components/Resizable/Resizable.js +2 -2
  17. package/dist/components/Sidebar/index.d.ts +9 -1
  18. package/dist/components/Sidebar/index.d.ts.map +1 -1
  19. package/dist/components/Sidebar/index.js +2 -2
  20. package/dist/components/SidebarItem/SidebarWebsiteItem.d.ts +49 -0
  21. package/dist/components/SidebarItem/SidebarWebsiteItem.d.ts.map +1 -0
  22. package/dist/components/SidebarItem/SidebarWebsiteItem.js +41 -0
  23. package/dist/components/SidebarItem/index.d.ts +1 -0
  24. package/dist/components/SidebarItem/index.d.ts.map +1 -1
  25. package/dist/components/SidebarItem/index.js +1 -0
  26. package/dist/components/SidebarRail/SidebarRailItem.d.ts +66 -0
  27. package/dist/components/SidebarRail/SidebarRailItem.d.ts.map +1 -0
  28. package/dist/components/SidebarRail/SidebarRailItem.js +59 -0
  29. package/dist/components/SidebarRail/SidebarRailSeparator.d.ts +11 -0
  30. package/dist/components/SidebarRail/SidebarRailSeparator.d.ts.map +1 -0
  31. package/dist/components/SidebarRail/SidebarRailSeparator.js +12 -0
  32. package/dist/components/SidebarRail/index.d.ts +49 -0
  33. package/dist/components/SidebarRail/index.d.ts.map +1 -0
  34. package/dist/components/SidebarRail/index.js +66 -0
  35. package/dist/components/TabBar/TabContextMenu.d.ts +5 -1
  36. package/dist/components/TabBar/TabContextMenu.d.ts.map +1 -1
  37. package/dist/components/TabBar/TabContextMenu.js +2 -2
  38. package/dist/components/classes.js +2 -2
  39. package/dist/components/index.d.ts +3 -1
  40. package/dist/components/index.d.ts.map +1 -1
  41. package/dist/components/index.js +2 -1
  42. package/dist/runtime/createBridgedPluginContext.js +58 -1
  43. package/dist/snippets.d.ts +6 -0
  44. package/dist/types.d.ts +143 -5
  45. package/dist/types.d.ts.map +1 -1
  46. package/package.json +2 -2
@@ -0,0 +1,49 @@
1
+ import { type ComponentPropsWithoutRef, type JSX } from 'react';
2
+ import { type SidebarRailItemData } from './SidebarRailItem.js';
3
+ export type { SidebarRailItemData };
4
+ interface Props extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'aria-label' | 'onSelect'> {
5
+ /**
6
+ * Navigation entries rendered top-to-bottom in the rail.
7
+ */
8
+ items: SidebarRailItemData[];
9
+ /**
10
+ * Id of the currently selected rail item.
11
+ */
12
+ activeId: string;
13
+ /**
14
+ * Called when the user selects a different rail item.
15
+ *
16
+ * @param id - Selected item id from {@link SidebarRailItemData.id}.
17
+ */
18
+ onSelect: (id: string) => void;
19
+ /**
20
+ * When true, shows labels beside icons and uses the expanded width.
21
+ */
22
+ expanded: boolean;
23
+ /**
24
+ * Called when the user toggles the rail between collapsed and expanded.
25
+ *
26
+ * @param expanded - Next expanded state.
27
+ */
28
+ onExpandedChange: (expanded: boolean) => void;
29
+ /**
30
+ * Accessible name for the vertical tablist of sidebar modes.
31
+ */
32
+ ariaLabel?: string;
33
+ /**
34
+ * Id of the sidebar panel controlled by each rail tab (`aria-controls`).
35
+ */
36
+ panelId?: string;
37
+ }
38
+ /**
39
+ * Vertical activity rail for switching sidebar modes.
40
+ *
41
+ * Collapsed shows icons only; expanded shows icons with labels. Each item is a
42
+ * full-width tab section with an edge-to-edge separator after it (including the
43
+ * last item, so the list has a bottom border before the footer); active chrome
44
+ * uses the sidebar-rail-active token. Items form a vertical tablist with
45
+ * roving tabindex; Arrow keys move focus and selection; Home/End jump to the
46
+ * first/last item. Expand/collapse sits outside the tablist as its own Tab stop.
47
+ */
48
+ export declare function SidebarRail({ items, activeId, onSelect, expanded, onExpandedChange, ariaLabel, panelId, className, ...props }: Props): JSX.Element;
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SidebarRail/index.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,GAAG,EAIT,MAAM,OAAO,CAAC;AAGf,OAAO,EAAmB,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGjF,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAQpC,UAAU,KAAM,SAAQ,IAAI,CAC1B,wBAAwB,CAAC,KAAK,CAAC,EAC/B,UAAU,GAAG,YAAY,GAAG,UAAU,CACvC;IACC;;OAEG;IACH,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAE7B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAE/B;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAE9C;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,SAA2B,EAC3B,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAyGrB"}
@@ -0,0 +1,66 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@harborclient/sdk/jsx-runtime";
2
+ import { faAnglesLeft, faAnglesRight } from '@fortawesome/free-solid-svg-icons';
3
+ import { useCallback, useRef } from 'react';
4
+ import { FaIcon } from '../FaIcon/index.js';
5
+ import { cn, resolveTabListKeyAction } from '../utils.js';
6
+ import { SidebarRailItem } from './SidebarRailItem.js';
7
+ import { SidebarRailSeparator } from './SidebarRailSeparator.js';
8
+ /**
9
+ * Shared focus-visible outline for the expand/collapse control.
10
+ */
11
+ const railExpandFocusVisible = 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-accent';
12
+ /**
13
+ * Vertical activity rail for switching sidebar modes.
14
+ *
15
+ * Collapsed shows icons only; expanded shows icons with labels. Each item is a
16
+ * full-width tab section with an edge-to-edge separator after it (including the
17
+ * last item, so the list has a bottom border before the footer); active chrome
18
+ * uses the sidebar-rail-active token. Items form a vertical tablist with
19
+ * roving tabindex; Arrow keys move focus and selection; Home/End jump to the
20
+ * first/last item. Expand/collapse sits outside the tablist as its own Tab stop.
21
+ */
22
+ export function SidebarRail({ items, activeId, onSelect, expanded, onExpandedChange, ariaLabel = 'Sidebar modes', panelId, className, ...props }) {
23
+ const itemRefs = useRef([]);
24
+ /**
25
+ * Focuses the item button at the given index when it exists.
26
+ *
27
+ * @param index - Zero-based item index to focus.
28
+ */
29
+ const focusItemAt = useCallback((index) => {
30
+ const clamped = Math.max(0, Math.min(index, itemRefs.current.length - 1));
31
+ itemRefs.current[clamped]?.focus();
32
+ }, []);
33
+ /**
34
+ * Handles tablist keyboard navigation: arrows/Home/End move focus and select.
35
+ *
36
+ * @param event - Keyboard event from the focused item.
37
+ * @param index - Index of the item that received the event.
38
+ */
39
+ const handleItemKeyDown = useCallback((event, index) => {
40
+ const nextIndex = resolveTabListKeyAction(event.key, index, items.length);
41
+ if (nextIndex === null) {
42
+ return;
43
+ }
44
+ event.preventDefault();
45
+ const nextItem = items[nextIndex];
46
+ if (nextItem == null) {
47
+ return;
48
+ }
49
+ onSelect(nextItem.id);
50
+ focusItemAt(nextIndex);
51
+ }, [focusItemAt, items, onSelect]);
52
+ /**
53
+ * Toggles the rail between collapsed and expanded density.
54
+ */
55
+ const handleToggleExpanded = useCallback(() => {
56
+ onExpandedChange(!expanded);
57
+ }, [expanded, onExpandedChange]);
58
+ const expandLabel = expanded ? 'Collapse' : 'Expand';
59
+ const expandAriaLabel = expanded ? 'Collapse sidebar rail' : 'Expand sidebar rail';
60
+ return (_jsxs("div", { ...props, className: cn('hc-sidebar-rail app-no-drag flex h-full shrink-0 flex-col bg-sidebar-rail text-sidebar-rail-text', expanded ? 'w-[168px]' : 'w-18', 'transition-[width] duration-200 ease-out motion-reduce:transition-none', className), children: [_jsx("div", { role: "tablist", "aria-orientation": "vertical", "aria-label": ariaLabel, className: "hc-sidebar-rail-items flex min-h-0 flex-1 flex-col items-stretch overflow-x-hidden overflow-y-auto", children: items.flatMap((item, index) => [
61
+ _jsx(SidebarRailItem, { item: item, active: item.id === activeId, expanded: expanded, tabIndex: item.id === activeId ? 0 : -1, panelId: panelId, onSelect: () => onSelect(item.id), onKeyDown: (event) => handleItemKeyDown(event, index), buttonRef: (node) => {
62
+ itemRefs.current[index] = node;
63
+ } }, item.id),
64
+ _jsx(SidebarRailSeparator, {}, `${item.id}-separator`)
65
+ ]) }), _jsx("div", { className: "hc-sidebar-rail-footer shrink-0", children: _jsxs("button", { type: "button", className: cn('hc-sidebar-rail-expand app-no-drag inline-flex min-h-12 w-full cursor-pointer items-center rounded-none border-none bg-transparent py-3 text-sidebar-rail-text', expanded ? 'gap-2 px-3' : 'justify-center', 'hover:bg-sidebar-rail-active', railExpandFocusVisible), "aria-label": expanded ? undefined : expandAriaLabel, "aria-expanded": expanded, title: expandLabel, onClick: handleToggleExpanded, children: [_jsx(FaIcon, { icon: expanded ? faAnglesLeft : faAnglesRight, className: "h-[18px]! w-[18px]!", "aria-hidden": true }), expanded ? _jsx("span", { className: "min-w-0 truncate text-left", children: expandLabel }) : null] }) })] }));
66
+ }
@@ -14,6 +14,10 @@ interface Props {
14
14
  * Called when the menu should close without selecting an item.
15
15
  */
16
16
  onClose: () => void;
17
+ /**
18
+ * Accessible name for the menu. Defaults to "Tab actions".
19
+ */
20
+ ariaLabel?: string;
17
21
  }
18
22
  /**
19
23
  * Cursor-positioned context menu for tab bars, rendered in a portal at the click point.
@@ -21,6 +25,6 @@ interface Props {
21
25
  * @param props - Menu groups, cursor anchor, and close handler.
22
26
  * @returns Portal menu panel, or null when there are no items.
23
27
  */
24
- export declare function TabContextMenu({ groups, position, onClose }: Props): JSX.Element | null;
28
+ export declare function TabContextMenu({ groups, position, onClose, ariaLabel }: Props): JSX.Element | null;
25
29
  export {};
26
30
  //# sourceMappingURL=TabContextMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabContextMenu.d.ts","sourceRoot":"","sources":["../../../src/components/TabBar/TabContextMenu.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,GAAG,EAAiB,MAAM,OAAO,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,oBAAoB,CAAC;AAU1E,UAAU,KAAK;IACb;;OAEG;IACH,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IAEvB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAoKvF"}
1
+ {"version":3,"file":"TabContextMenu.d.ts","sourceRoot":"","sources":["../../../src/components/TabBar/TabContextMenu.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,GAAG,EAAiB,MAAM,OAAO,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,oBAAoB,CAAC;AAU1E,UAAU,KAAK;IACb;;OAEG;IACH,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IAEvB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,QAAQ,EACR,OAAO,EACP,SAAyB,EAC1B,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAoK5B"}
@@ -10,7 +10,7 @@ import { cn, resolveTabListKeyAction } from '../utils.js';
10
10
  * @param props - Menu groups, cursor anchor, and close handler.
11
11
  * @returns Portal menu panel, or null when there are no items.
12
12
  */
13
- export function TabContextMenu({ groups, position, onClose }) {
13
+ export function TabContextMenu({ groups, position, onClose, ariaLabel = 'Tab actions' }) {
14
14
  const menuRef = useRef(null);
15
15
  const itemRefs = useRef([]);
16
16
  const [focusedIndex, setFocusedIndex] = useState(0);
@@ -104,7 +104,7 @@ export function TabContextMenu({ groups, position, onClose }) {
104
104
  if (flatItems.length === 0) {
105
105
  return null;
106
106
  }
107
- return portalToBody(_jsx("div", { ref: menuRef, role: "menu", "aria-label": "Tab actions", className: "hc-tab-context-menu app-no-drag fixed z-[70] min-w-[200px] rounded-md border border-separator bg-surface py-1 shadow-md", style: { left: clampedPosition.x, top: clampedPosition.y }, onKeyDown: handleMenuKeyDown, children: groups.map((group, groupIndex) => {
107
+ return portalToBody(_jsx("div", { ref: menuRef, role: "menu", "aria-label": ariaLabel, className: "hc-tab-context-menu app-no-drag fixed z-[70] min-w-[200px] rounded-md border border-separator bg-surface py-1 shadow-md", style: { left: clampedPosition.x, top: clampedPosition.y }, onKeyDown: handleMenuKeyDown, children: groups.map((group, groupIndex) => {
108
108
  let flatIndex = groups
109
109
  .slice(0, groupIndex)
110
110
  .reduce((count, groupItems) => count + groupItems.length, 0);
@@ -10,8 +10,8 @@ const segmentFocusVisible = 'focus-visible:outline focus-visible:outline-2 focus
10
10
  */
11
11
  export function segment(active) {
12
12
  return active
13
- ? `cursor-pointer rounded-md border-none bg-selection px-3 py-1 text-text app-no-drag ${segmentFocusVisible}`
14
- : `cursor-pointer rounded-md border-none bg-transparent px-3 py-1 text-muted hover:text-text app-no-drag ${segmentFocusVisible}`;
13
+ ? `cursor-pointer rounded-md border-none bg-selection px-3 h-[32px] leading-none text-text app-no-drag ${segmentFocusVisible}`
14
+ : `cursor-pointer rounded-md border-none bg-transparent px-3 h-[32px] leading-none text-muted hover:text-text app-no-drag ${segmentFocusVisible}`;
15
15
  }
16
16
  /**
17
17
  * Active/inactive surface classes for a document-style tab in the tab bar.
@@ -70,6 +70,8 @@ export { ScreenshotLightbox } from './ScreenshotCarousel/ScreenshotLightbox.js';
70
70
  export { screenshotCarouselImageFrameClassName, screenshotCarouselLightboxEnabled, type ScreenshotCarouselVariant } from './ScreenshotCarousel/variants.js';
71
71
  export { SidebarSection, SidebarSections, type SidebarSectionConfig } from './SidebarSection/index.js';
72
72
  export { Sidebar, type SidebarSide } from './Sidebar/index.js';
73
+ export { SidebarRail } from './SidebarRail/index.js';
74
+ export type { SidebarRailItemData } from './SidebarRail/index.js';
73
75
  export { DEFAULT_HEIGHT, MIN_HEIGHT, footerPanelClassName, footerPanelCloseButtonClassName, getFooterPanelMaxSize } from './Resizable/footerPanelUtils.js';
74
76
  export { ResourceList, ResourceListRow, ResourceListPrimary, ResourceListEmptyItem } from './ResourceList/index.js';
75
77
  export { RoundButton } from './RoundButton/index.js';
@@ -108,6 +110,6 @@ export { cleanVariables, resolveTabListKeyAction } from './utils.js';
108
110
  export type { TabListKeyOptions } from './utils.js';
109
111
  export { useDialogFocus, getFocusableElements } from './useDialogFocus.js';
110
112
  export { segment, segmentGroup, tabItem } from './classes.js';
111
- export { SidebarItem, SidebarListbox, SidebarList, SidebarTree, SidebarTreeGroup, handleSidebarOptionKeyDown, type SidebarItemListboxOption, type SidebarItemTreeItem, SortableSidebarItem, stopSortableDragPointerDown, SidebarMarkerDot, SidebarBadge, sourceRow, METHOD_CLASSES, methodBadgeClass, documentIconClass, statusDotVariant, statusDotClass, SIDEBAR_ITEM_BUTTON_CLASS, SIDEBAR_CHEVRON_BUTTON_CLASS, SIDEBAR_CHEVRON_ICON_CLASS, SIDEBAR_CHEVRON_SLOT_CLASS, SIDEBAR_CHEVRON_LABEL_OFFSET_CLASS, SidebarMethodBadge, SidebarStatusDot, SidebarStatusMarker, SidebarRequestItem, SidebarDocumentItem, SidebarFolderItem, SidebarRunItem, SidebarHistoryItem, SidebarEnvironmentItem, SidebarWorkspaceItem, SidebarCommitItem, type SidebarItemSortableConfig, type SidebarBadgeVariant, type SidebarCommitPushStatus } from './SidebarItem/index.js';
113
+ export { SidebarItem, SidebarListbox, SidebarList, SidebarTree, SidebarTreeGroup, handleSidebarOptionKeyDown, type SidebarItemListboxOption, type SidebarItemTreeItem, SortableSidebarItem, stopSortableDragPointerDown, SidebarMarkerDot, SidebarBadge, sourceRow, METHOD_CLASSES, methodBadgeClass, documentIconClass, statusDotVariant, statusDotClass, SIDEBAR_ITEM_BUTTON_CLASS, SIDEBAR_CHEVRON_BUTTON_CLASS, SIDEBAR_CHEVRON_ICON_CLASS, SIDEBAR_CHEVRON_SLOT_CLASS, SIDEBAR_CHEVRON_LABEL_OFFSET_CLASS, SidebarMethodBadge, SidebarStatusDot, SidebarStatusMarker, SidebarRequestItem, SidebarDocumentItem, SidebarFolderItem, SidebarRunItem, SidebarHistoryItem, SidebarEnvironmentItem, SidebarWorkspaceItem, SidebarWebsiteItem, SidebarCommitItem, type SidebarItemSortableConfig, type SidebarBadgeVariant, type SidebarCommitPushStatus } from './SidebarItem/index.js';
112
114
  export type { FormDataPart, FormDataPartType, HttpMethod, KeyValue, Variable } from '../types.js';
113
115
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
@@ -52,6 +52,7 @@ export { ScreenshotLightbox } from './ScreenshotCarousel/ScreenshotLightbox.js';
52
52
  export { screenshotCarouselImageFrameClassName, screenshotCarouselLightboxEnabled } from './ScreenshotCarousel/variants.js';
53
53
  export { SidebarSection, SidebarSections } from './SidebarSection/index.js';
54
54
  export { Sidebar } from './Sidebar/index.js';
55
+ export { SidebarRail } from './SidebarRail/index.js';
55
56
  export { DEFAULT_HEIGHT, MIN_HEIGHT, footerPanelClassName, footerPanelCloseButtonClassName, getFooterPanelMaxSize } from './Resizable/footerPanelUtils.js';
56
57
  export { ResourceList, ResourceListRow, ResourceListPrimary, ResourceListEmptyItem } from './ResourceList/index.js';
57
58
  export { RoundButton } from './RoundButton/index.js';
@@ -79,4 +80,4 @@ export { VisibilityMenu } from './VisibilityMenu/index.js';
79
80
  export { cleanVariables, resolveTabListKeyAction } from './utils.js';
80
81
  export { useDialogFocus, getFocusableElements } from './useDialogFocus.js';
81
82
  export { segment, segmentGroup, tabItem } from './classes.js';
82
- export { SidebarItem, SidebarListbox, SidebarList, SidebarTree, SidebarTreeGroup, handleSidebarOptionKeyDown, SortableSidebarItem, stopSortableDragPointerDown, SidebarMarkerDot, SidebarBadge, sourceRow, METHOD_CLASSES, methodBadgeClass, documentIconClass, statusDotVariant, statusDotClass, SIDEBAR_ITEM_BUTTON_CLASS, SIDEBAR_CHEVRON_BUTTON_CLASS, SIDEBAR_CHEVRON_ICON_CLASS, SIDEBAR_CHEVRON_SLOT_CLASS, SIDEBAR_CHEVRON_LABEL_OFFSET_CLASS, SidebarMethodBadge, SidebarStatusDot, SidebarStatusMarker, SidebarRequestItem, SidebarDocumentItem, SidebarFolderItem, SidebarRunItem, SidebarHistoryItem, SidebarEnvironmentItem, SidebarWorkspaceItem, SidebarCommitItem } from './SidebarItem/index.js';
83
+ export { SidebarItem, SidebarListbox, SidebarList, SidebarTree, SidebarTreeGroup, handleSidebarOptionKeyDown, SortableSidebarItem, stopSortableDragPointerDown, SidebarMarkerDot, SidebarBadge, sourceRow, METHOD_CLASSES, methodBadgeClass, documentIconClass, statusDotVariant, statusDotClass, SIDEBAR_ITEM_BUTTON_CLASS, SIDEBAR_CHEVRON_BUTTON_CLASS, SIDEBAR_CHEVRON_ICON_CLASS, SIDEBAR_CHEVRON_SLOT_CLASS, SIDEBAR_CHEVRON_LABEL_OFFSET_CLASS, SidebarMethodBadge, SidebarStatusDot, SidebarStatusMarker, SidebarRequestItem, SidebarDocumentItem, SidebarFolderItem, SidebarRunItem, SidebarHistoryItem, SidebarEnvironmentItem, SidebarWorkspaceItem, SidebarWebsiteItem, SidebarCommitItem } from './SidebarItem/index.js';
@@ -19,6 +19,7 @@ let importRegistrationCounter = 0;
19
19
 
20
20
  /** Monotonic id generator for MCP server registrations within one webview. */
21
21
  let mcpRegistrationCounter = 0;
22
+ let aiChatPointerRegistrationCounter = 0;
22
23
 
23
24
  /** Plugin id prefix for built-in HarborClient host commands executed in the renderer. */
24
25
  const HOST_COMMAND_OWNER = 'harborclient';
@@ -120,6 +121,7 @@ export function installImportInvokeListener() {
120
121
  */
121
122
  export function resetMcpServersForTests() {
122
123
  mcpRegistrationCounter = 0;
124
+ aiChatPointerRegistrationCounter = 0;
123
125
  }
124
126
 
125
127
  /**
@@ -345,6 +347,11 @@ export function createBridgedPluginContext({ pluginId, mode, contributionId, rea
345
347
  */
346
348
  const assertMcp = () => assertPermission('mcp');
347
349
 
350
+ /**
351
+ * Asserts AI permission for chat pointer registration and copy-to-chat.
352
+ */
353
+ const assertAi = () => assertPermission('ai');
354
+
348
355
  /**
349
356
  * Asserts that a contribution id is declared in manifest.contributes.
350
357
  *
@@ -609,6 +616,24 @@ export function createBridgedPluginContext({ pluginId, mode, contributionId, rea
609
616
  panel.Component
610
617
  );
611
618
  },
619
+ registerSidebarRailItem: (item) => {
620
+ assertManifestContribution('sidebarRailItems', item.id);
621
+ if (!canRegisterUi()) {
622
+ return noopDisposable();
623
+ }
624
+ return registerUiContribution(
625
+ 'sidebarRailItems',
626
+ item.id,
627
+ {
628
+ id: `plugin:${pluginId}:${item.id}`,
629
+ title: item.title,
630
+ icon: item.icon,
631
+ order: item.order,
632
+ contributionId: item.id
633
+ },
634
+ item.Component
635
+ );
636
+ },
612
637
  registerSidebarSection: (section) => {
613
638
  assertManifestContribution('sidebarSections', section.id);
614
639
  if (!canRegisterUi()) {
@@ -1187,6 +1212,37 @@ export function createBridgedPluginContext({ pluginId, mode, contributionId, rea
1187
1212
  void bridgeInvoke('mcp.unregisterServer', { registrationId });
1188
1213
  });
1189
1214
  }
1215
+ },
1216
+ ai: {
1217
+ registerChatPointer: (config) => {
1218
+ assertAi();
1219
+ if (!isAgent) {
1220
+ return noopDisposable();
1221
+ }
1222
+ const pointerId = String(config?.id ?? '').trim();
1223
+ if (!/^[a-z][a-z0-9-]*$/.test(pointerId)) {
1224
+ throw new Error(`Invalid chat pointer id: ${pointerId}`);
1225
+ }
1226
+ const registrationId = String(++aiChatPointerRegistrationCounter);
1227
+ void bridgeInvoke('ai.registerChatPointer', {
1228
+ registrationId,
1229
+ pointerId,
1230
+ agentGuidance: config?.agentGuidance
1231
+ });
1232
+ return track(() => {
1233
+ void bridgeInvoke('ai.unregisterChatPointer', { registrationId });
1234
+ });
1235
+ },
1236
+ copyToChat: async (input) => {
1237
+ assertAi();
1238
+ await bridgeInvoke('ai.copyToChat', {
1239
+ pointerId: String(input?.pointerId ?? '').trim(),
1240
+ key: String(input?.key ?? '').trim(),
1241
+ label: String(input?.label ?? '').trim(),
1242
+ context: String(input?.context ?? ''),
1243
+ selection: input?.selection
1244
+ });
1245
+ }
1190
1246
  }
1191
1247
  };
1192
1248
  }
@@ -1267,7 +1323,8 @@ export function mountContributionView({
1267
1323
  'collectionSettingsTabs',
1268
1324
  'modals',
1269
1325
  'mainViews',
1270
- 'sidebarPanels'
1326
+ 'sidebarPanels',
1327
+ 'sidebarRailItems'
1271
1328
  ]);
1272
1329
 
1273
1330
  if (FILL_SURFACE_KINDS.has(kind) && slot === 'content') {
@@ -403,6 +403,12 @@ interface HcScriptApi {
403
403
  * Omit model (or options) to use the first available model.
404
404
  */
405
405
  ask(prompt: string, options?: HcAskOptions): Promise<string | null>;
406
+ /**
407
+ * Resolves after the given delay. Use for pacing between script steps.
408
+ *
409
+ * @param milliseconds - Non-negative finite delay in milliseconds.
410
+ */
411
+ sleep(milliseconds: number): Promise<void>;
406
412
  test(name: string, fn: () => void): void;
407
413
  /** Chai BDD expect; see https://www.chaijs.com/api/bdd/ */
408
414
  expect: HcExpectStatic;
package/dist/types.d.ts CHANGED
@@ -163,6 +163,9 @@ export interface SettingsSectionContribution extends UiContributionBase {
163
163
  * To replace the built-in Collections sidebar, set `replaces: "collections"` on
164
164
  * the matching manifest entry (not on this runtime object). The host copies that
165
165
  * field into the registry when the panel is registered.
166
+ *
167
+ * For activity-rail icons that open a sidebar body while keeping the rail
168
+ * visible, use {@link SidebarRailItemContribution} instead.
166
169
  */
167
170
  export interface SidebarPanelContribution extends UiContributionBase {
168
171
  /**
@@ -179,6 +182,35 @@ export interface SidebarPanelContribution extends UiContributionBase {
179
182
  */
180
183
  order?: number;
181
184
  }
185
+ /**
186
+ * Registers an activity-rail button that opens a full sidebar body when selected.
187
+ *
188
+ * Distinct from {@link SidebarPanelContribution} (horizontal switcher; hides the
189
+ * rail). Manifest: `contributes.sidebarRailItems`. Requires the `ui` permission.
190
+ *
191
+ * The host mounts the body with `resizeMode="fill"` and keeps the activity rail
192
+ * visible. Use {@link SidebarPanelViewContext} via the host surface context for
193
+ * the current sidebar selection.
194
+ */
195
+ export interface SidebarRailItemContribution extends UiContributionBase {
196
+ /**
197
+ * Curated icon name shown on the activity rail. The host maps this to a
198
+ * built-in Font Awesome icon. Supported names: `server`, `database`, `globe`,
199
+ * `code`, `robot`, `puzzle-piece`, `bolt`, `flask`. Unknown names fall back to
200
+ * `puzzle-piece`.
201
+ */
202
+ icon: string;
203
+ /**
204
+ * Full sidebar content for this rail destination. Use {@link PluginContext.react}
205
+ * — do not bundle React.
206
+ */
207
+ Component: React.ComponentType;
208
+ /**
209
+ * Sort order among plugin rail items (appended after built-in modes). Lower
210
+ * values appear first.
211
+ */
212
+ order?: number;
213
+ }
182
214
  /**
183
215
  * Adds a collapsible block inside the scrollable sidebar, using the same pattern
184
216
  * as the built-in Collections and Environments sections.
@@ -647,14 +679,26 @@ export interface WorkflowActionRef {
647
679
  */
648
680
  payload: unknown;
649
681
  }
682
+ /**
683
+ * Mode of the workflow footer panel when a plugin surface or toolbar action runs.
684
+ *
685
+ * - `record` — live recording session (no persisted workflow yet; `workflowId` is `-1`)
686
+ * - `play` — playback without host edit controls
687
+ * - `edit` — timeline editor with unsaved buffer edits
688
+ */
689
+ export type WorkflowPanelPluginMode = 'record' | 'play' | 'edit';
650
690
  /**
651
691
  * Context passed to a workflow toolbar action command when the user clicks the button.
652
692
  */
653
693
  export interface WorkflowToolbarActionContext {
654
694
  /**
655
- * Database id of the workflow open in play/edit mode.
695
+ * Database id of the workflow open in play/edit mode, or `-1` while recording.
656
696
  */
657
697
  workflowId: number;
698
+ /**
699
+ * Active workflow footer panel mode.
700
+ */
701
+ mode: WorkflowPanelPluginMode;
658
702
  /**
659
703
  * 0-based index of the selected timeline action, or `-1` when none is selected.
660
704
  */
@@ -669,7 +713,10 @@ export interface WorkflowToolbarActionContext {
669
713
  dirty: boolean;
670
714
  }
671
715
  /**
672
- * Adds a button to the right of Save in the workflow play/edit toolbar.
716
+ * Adds a button to the right of Save in the workflow footer panel toolbar.
717
+ *
718
+ * Surfaces mount in record, play, and edit modes; use {@link WorkflowToolbarActionContext.mode}
719
+ * to tell them apart. Host delete/move/save buttons are edit-only.
673
720
  *
674
721
  * Register the command handler with {@link PluginCommands.register} separately.
675
722
  * The handler receives a single {@link WorkflowToolbarActionContext} argument.
@@ -703,9 +750,13 @@ export interface WorkflowToolbarActionContribution {
703
750
  */
704
751
  export interface WorkflowActionBlockContext {
705
752
  /**
706
- * Database id of the workflow open in play/edit mode.
753
+ * Database id of the workflow open in play/edit mode, or `-1` while recording.
707
754
  */
708
755
  workflowId: number;
756
+ /**
757
+ * Active workflow footer panel mode.
758
+ */
759
+ mode: WorkflowPanelPluginMode;
709
760
  /**
710
761
  * 0-based index of this timeline action.
711
762
  */
@@ -726,7 +777,8 @@ export interface WorkflowActionBlockContext {
726
777
  /**
727
778
  * Renders a HostedSurface inside matching workflow timeline action blocks.
728
779
  *
729
- * Manifest: `contributes.workflowActionBlocks`. Requires the `ui` permission.
780
+ * Surfaces mount in record, play, and edit modes; use {@link WorkflowActionBlockContext.mode}
781
+ * to tell them apart. Manifest: `contributes.workflowActionBlocks`. Requires the `ui` permission.
730
782
  */
731
783
  export interface WorkflowActionBlockContribution extends UiContributionBase {
732
784
  /**
@@ -818,6 +870,9 @@ export interface StatusBarItemContribution {
818
870
  * - `surface` — main content background
819
871
  * - `sidebar` — left sidebar background
820
872
  * - `sidebar-toolbar` — sidebar/footer toolbar strip background
873
+ * - `sidebar-rail` — activity rail background
874
+ * - `sidebar-rail-active` — active/hover activity rail section fill
875
+ * - `sidebar-rail-text` — activity rail icons and labels
821
876
  * - `sidebar-section` — sidebar section headers
822
877
  * - `sidebar-section-text` — sidebar section header labels and chevrons
823
878
  * - `footer` — footer status bar background
@@ -851,7 +906,7 @@ export interface StatusBarItemContribution {
851
906
  * - `script-stage-before-all`, `script-stage-before-each`, `script-stage-main`, `script-stage-after-each`, `script-stage-after-all` — script row stage accent colors
852
907
  * - `terminal` — footer terminal background
853
908
  */
854
- export type ThemeColorToken = 'surface' | 'sidebar' | 'sidebar-toolbar' | 'sidebar-section' | 'sidebar-section-text' | 'footer' | 'footer-text' | 'footer-muted' | 'footer-icon-active' | 'toolbar-action-active' | 'breadcrumb-background' | 'breadcrumb-segment' | 'breadcrumb-current' | 'git-staged' | 'git-uncommitted' | 'git-unstaged' | 'git-untracked' | 'control' | 'field' | 'separator' | 'text' | 'text-secondary' | 'muted' | 'accent' | 'selection' | 'doc-markdown' | 'tab-unsaved' | 'tab-underline' | 'resize-handle' | 'variable-token' | 'danger' | 'danger-light' | 'warning' | 'success' | 'info' | 'method-get' | 'method-post' | 'method-put' | 'method-patch' | 'method-delete' | 'method-head' | 'method-options' | 'scrollbar-track' | 'scrollbar-thumb' | 'scrollbar-thumb-hover' | 'scrollbar-thumb-active' | 'script-stage-before-all' | 'script-stage-before-each' | 'script-stage-main' | 'script-stage-after-each' | 'script-stage-after-all' | 'terminal';
909
+ export type ThemeColorToken = 'surface' | 'sidebar' | 'sidebar-toolbar' | 'sidebar-rail' | 'sidebar-rail-active' | 'sidebar-rail-text' | 'sidebar-section' | 'sidebar-section-text' | 'footer' | 'footer-text' | 'footer-muted' | 'footer-icon-active' | 'toolbar-action-active' | 'breadcrumb-background' | 'breadcrumb-segment' | 'breadcrumb-current' | 'git-staged' | 'git-uncommitted' | 'git-unstaged' | 'git-untracked' | 'control' | 'field' | 'separator' | 'text' | 'text-secondary' | 'muted' | 'accent' | 'selection' | 'doc-markdown' | 'tab-unsaved' | 'tab-underline' | 'resize-handle' | 'variable-token' | 'danger' | 'danger-light' | 'warning' | 'success' | 'info' | 'method-get' | 'method-post' | 'method-put' | 'method-patch' | 'method-delete' | 'method-head' | 'method-options' | 'scrollbar-track' | 'scrollbar-thumb' | 'scrollbar-thumb-hover' | 'scrollbar-thumb-active' | 'script-stage-before-all' | 'script-stage-before-each' | 'script-stage-main' | 'script-stage-after-each' | 'script-stage-after-all' | 'terminal';
855
910
  /**
856
911
  * HarborClient UI metric token ids (typography and geometry).
857
912
  *
@@ -1199,6 +1254,75 @@ export interface PluginMcp {
1199
1254
  */
1200
1255
  registerServer(config: PluginMcpServerConfig): Disposable;
1201
1256
  }
1257
+ /**
1258
+ * Config for {@link PluginAi.registerChatPointer}.
1259
+ */
1260
+ export interface PluginChatPointerConfig {
1261
+ /**
1262
+ * Pointer id segment in `@plugin.<pluginId>.<id>.<key>`.
1263
+ *
1264
+ * Must match `[a-z][a-z0-9-]*`.
1265
+ */
1266
+ id: string;
1267
+ /**
1268
+ * Static rules merged into the agent system prompt while the plugin is loaded.
1269
+ */
1270
+ agentGuidance?: string;
1271
+ }
1272
+ /**
1273
+ * Input for {@link PluginAi.copyToChat}.
1274
+ */
1275
+ export interface PluginCopyToChatInput {
1276
+ /**
1277
+ * Pointer id previously registered with {@link PluginAi.registerChatPointer}.
1278
+ */
1279
+ pointerId: string;
1280
+ /**
1281
+ * Opaque key segment after the pointer id (no spaces). Host builds the full token.
1282
+ */
1283
+ key: string;
1284
+ /**
1285
+ * Badge label shown in the AI composer and message bubbles.
1286
+ */
1287
+ label: string;
1288
+ /**
1289
+ * Text inlined into the send-time ephemeral system message for the agent.
1290
+ */
1291
+ context: string;
1292
+ /**
1293
+ * Optional character-range selection appended as `#start.end` on the token.
1294
+ */
1295
+ selection?: {
1296
+ /**
1297
+ * Inclusive start offset.
1298
+ */
1299
+ start: number;
1300
+ /**
1301
+ * Exclusive end offset.
1302
+ */
1303
+ end: number;
1304
+ };
1305
+ }
1306
+ /**
1307
+ * AI chat pointer APIs available on {@link PluginContext.ai}.
1308
+ *
1309
+ * Requires the `ai` permission. Registrations are activation-scoped.
1310
+ */
1311
+ export interface PluginAi {
1312
+ /**
1313
+ * Registers a namespaced `@plugin.<pluginId>.<id>.…` chat pointer kind.
1314
+ *
1315
+ * @param config - Pointer id and optional static agent guidance.
1316
+ * @returns A {@link Disposable} that unregisters the pointer when disposed.
1317
+ */
1318
+ registerChatPointer(config: PluginChatPointerConfig): Disposable;
1319
+ /**
1320
+ * Opens the AI sidebar and queues a plugin `@` badge token with a context snapshot.
1321
+ *
1322
+ * @param input - Pointer id, key, label, and context text captured by the plugin.
1323
+ */
1324
+ copyToChat(input: PluginCopyToChatInput): Promise<void>;
1325
+ }
1202
1326
  /**
1203
1327
  * **File → Import** handler registration available on {@link PluginContext.imports}.
1204
1328
  *
@@ -1338,6 +1462,16 @@ export interface PluginUi {
1338
1462
  * @returns A {@link Disposable} that unregisters the panel when disposed.
1339
1463
  */
1340
1464
  registerSidebarPanel(panel: SidebarPanelContribution): Disposable;
1465
+ /**
1466
+ * Registers an activity-rail icon that opens a sidebar body when selected.
1467
+ *
1468
+ * Manifest: `contributes.sidebarRailItems` — `item.id` must match an entry there.
1469
+ * Distinct from {@link PluginUi.registerSidebarPanel} (horizontal switcher).
1470
+ *
1471
+ * @param item - Sidebar rail item contribution.
1472
+ * @returns A {@link Disposable} that unregisters the rail item when disposed.
1473
+ */
1474
+ registerSidebarRailItem(item: SidebarRailItemContribution): Disposable;
1341
1475
  /**
1342
1476
  * Adds a collapsible block inside the scrollable sidebar.
1343
1477
  *
@@ -2885,6 +3019,10 @@ export interface PluginContext {
2885
3019
  * permission.
2886
3020
  */
2887
3021
  mcp: PluginMcp;
3022
+ /**
3023
+ * AI chat pointer registration and copy-to-chat. Requires the `ai` permission.
3024
+ */
3025
+ ai: PluginAi;
2888
3026
  /**
2889
3027
  * Host-managed disposable list used for registration cleanup on deactivation.
2890
3028
  *