@harborclient/sdk 1.4.3 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 1.4.4 - 2026-08-01
8
+
9
+ - refactor(teamHub): introduce soft-connection handling for team hubs. (`5fc744ec`)
10
+
7
11
  ## 1.4.3 - 2026-08-01
8
12
 
9
13
  - feat(live-server): integrate live-server package and enhance CLI functionality. (`890d9cd7`)
@@ -1,4 +1,4 @@
1
- import { type ComponentPropsWithoutRef, type JSX } from 'react';
1
+ import { type ComponentPropsWithoutRef, type JSX, type ReactNode } from 'react';
2
2
  import { type SidebarRailItemData } from './SidebarRailItem.js';
3
3
  export type { SidebarRailItemData };
4
4
  interface Props extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'aria-label' | 'onSelect'> {
@@ -34,6 +34,13 @@ interface Props extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'aria
34
34
  * Id of the sidebar panel controlled by each rail tab (`aria-controls`).
35
35
  */
36
36
  panelId?: string;
37
+ /**
38
+ * Optional content rendered in the rail footer above the expand/collapse
39
+ * button (for example Team Hub connection avatars). Callers that need a
40
+ * hairline above the expand control should include a separator in this
41
+ * content. Kept outside the tablist so it does not join the roving tabindex.
42
+ */
43
+ footer?: ReactNode;
37
44
  }
38
45
  /**
39
46
  * Vertical activity rail for switching sidebar modes.
@@ -43,7 +50,8 @@ interface Props extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'aria
43
50
  * last item, so the list has a bottom border before the footer); active chrome
44
51
  * uses the sidebar-rail-active token. Items form a vertical tablist with
45
52
  * 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.
53
+ * first/last item. Optional footer content and expand/collapse sit outside the
54
+ * tablist as their own Tab stops.
47
55
  */
48
- export declare function SidebarRail({ items, activeId, onSelect, expanded, onExpandedChange, ariaLabel, panelId, className, ...props }: Props): JSX.Element;
56
+ export declare function SidebarRail({ items, activeId, onSelect, expanded, onExpandedChange, ariaLabel, panelId, footer, className, ...props }: Props): JSX.Element;
49
57
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SidebarRail/index.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,GAAG,EAER,KAAK,SAAS,EAGf,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;IAEjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,SAA2B,EAC3B,OAAO,EACP,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CA0GrB"}
@@ -17,9 +17,10 @@ const railExpandFocusVisible = 'focus-visible:outline focus-visible:outline-2 fo
17
17
  * last item, so the list has a bottom border before the footer); active chrome
18
18
  * uses the sidebar-rail-active token. Items form a vertical tablist with
19
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.
20
+ * first/last item. Optional footer content and expand/collapse sit outside the
21
+ * tablist as their own Tab stops.
21
22
  */
22
- export function SidebarRail({ items, activeId, onSelect, expanded, onExpandedChange, ariaLabel = 'Sidebar modes', panelId, className, ...props }) {
23
+ export function SidebarRail({ items, activeId, onSelect, expanded, onExpandedChange, ariaLabel = 'Sidebar modes', panelId, footer, className, ...props }) {
23
24
  const itemRefs = useRef([]);
24
25
  /**
25
26
  * Focuses the item button at the given index when it exists.
@@ -62,5 +63,5 @@ export function SidebarRail({ items, activeId, onSelect, expanded, onExpandedCha
62
63
  itemRefs.current[index] = node;
63
64
  } }, item.id),
64
65
  _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
+ ]) }), _jsxs("div", { className: "hc-sidebar-rail-footer shrink-0", children: [footer != null ? _jsx("div", { className: "hc-sidebar-rail-footer-content", children: footer }) : null, _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
67
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@harborclient/sdk",
3
- "version": "1.4.3",
3
+ "version": "1.4.4",
4
4
  "description": "TypeScript SDK for HarborClient development.",
5
5
  "keywords": [
6
6
  "harborclient",