@harborclient/sdk 1.3.2 → 1.3.3

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 (89) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/components/ColorPicker/index.d.ts +5 -1
  3. package/dist/components/ColorPicker/index.d.ts.map +1 -1
  4. package/dist/components/ColorPicker/index.js +2 -2
  5. package/dist/components/FilterButton/FilterButtonIcon.d.ts +29 -0
  6. package/dist/components/FilterButton/FilterButtonIcon.d.ts.map +1 -0
  7. package/dist/components/FilterButton/FilterButtonIcon.js +18 -0
  8. package/dist/components/FilterButton/index.d.ts +26 -0
  9. package/dist/components/FilterButton/index.d.ts.map +1 -0
  10. package/dist/components/FilterButton/index.js +14 -0
  11. package/dist/components/Resizable/applyResizableSizes.d.ts +11 -0
  12. package/dist/components/Resizable/applyResizableSizes.d.ts.map +1 -0
  13. package/dist/components/Resizable/applyResizableSizes.js +34 -0
  14. package/dist/components/Resizable/footerPanelUtils.d.ts +1 -1
  15. package/dist/components/Resizable/footerPanelUtils.js +4 -4
  16. package/dist/components/Resizable/index.d.ts +1 -0
  17. package/dist/components/Resizable/index.d.ts.map +1 -1
  18. package/dist/components/Resizable/index.js +1 -0
  19. package/dist/components/Resizable/useResizable.d.ts +1 -1
  20. package/dist/components/Resizable/useResizable.d.ts.map +1 -1
  21. package/dist/components/Resizable/useResizable.js +28 -0
  22. package/dist/components/RowActionsMenu/index.d.ts +7 -1
  23. package/dist/components/RowActionsMenu/index.d.ts.map +1 -1
  24. package/dist/components/RowActionsMenu/index.js +40 -18
  25. package/dist/components/SidebarItem/SidebarDocumentItem.d.ts +6 -6
  26. package/dist/components/SidebarItem/SidebarDocumentItem.d.ts.map +1 -1
  27. package/dist/components/SidebarItem/SidebarDocumentItem.js +4 -4
  28. package/dist/components/SidebarItem/SidebarEnvironmentItem.d.ts +4 -4
  29. package/dist/components/SidebarItem/SidebarEnvironmentItem.d.ts.map +1 -1
  30. package/dist/components/SidebarItem/SidebarEnvironmentItem.js +3 -3
  31. package/dist/components/SidebarItem/SidebarFolderItem.d.ts +5 -5
  32. package/dist/components/SidebarItem/SidebarFolderItem.d.ts.map +1 -1
  33. package/dist/components/SidebarItem/SidebarFolderItem.js +4 -4
  34. package/dist/components/SidebarItem/SidebarHistoryItem.d.ts +9 -1
  35. package/dist/components/SidebarItem/SidebarHistoryItem.d.ts.map +1 -1
  36. package/dist/components/SidebarItem/SidebarHistoryItem.js +2 -2
  37. package/dist/components/SidebarItem/SidebarMarkerDot.d.ts +22 -0
  38. package/dist/components/SidebarItem/SidebarMarkerDot.d.ts.map +1 -0
  39. package/dist/components/SidebarItem/SidebarMarkerDot.js +11 -0
  40. package/dist/components/SidebarItem/SidebarMethodBadge.d.ts +9 -1
  41. package/dist/components/SidebarItem/SidebarMethodBadge.d.ts.map +1 -1
  42. package/dist/components/SidebarItem/SidebarMethodBadge.js +7 -5
  43. package/dist/components/SidebarItem/SidebarRequestItem.d.ts +9 -5
  44. package/dist/components/SidebarItem/SidebarRequestItem.d.ts.map +1 -1
  45. package/dist/components/SidebarItem/SidebarRequestItem.js +4 -4
  46. package/dist/components/SidebarItem/SidebarRunItem.d.ts +9 -1
  47. package/dist/components/SidebarItem/SidebarRunItem.d.ts.map +1 -1
  48. package/dist/components/SidebarItem/SidebarRunItem.js +2 -2
  49. package/dist/components/SidebarItem/SidebarStatusDot.d.ts +11 -1
  50. package/dist/components/SidebarItem/SidebarStatusDot.d.ts.map +1 -1
  51. package/dist/components/SidebarItem/SidebarStatusDot.js +10 -1
  52. package/dist/components/SidebarItem/{SidebarTabGroupItem.d.ts → SidebarWorkspaceItem.d.ts} +9 -9
  53. package/dist/components/SidebarItem/SidebarWorkspaceItem.d.ts.map +1 -0
  54. package/dist/components/SidebarItem/{SidebarTabGroupItem.js → SidebarWorkspaceItem.js} +4 -4
  55. package/dist/components/SidebarItem/index.d.ts +3 -3
  56. package/dist/components/SidebarItem/index.d.ts.map +1 -1
  57. package/dist/components/SidebarItem/index.js +3 -3
  58. package/dist/components/SidebarItem/sidebarItemClasses.d.ts +17 -0
  59. package/dist/components/SidebarItem/sidebarItemClasses.d.ts.map +1 -1
  60. package/dist/components/SidebarItem/sidebarItemClasses.js +26 -2
  61. package/dist/components/SidebarSection/SectionItem.d.ts.map +1 -1
  62. package/dist/components/SidebarSection/SectionItem.js +3 -1
  63. package/dist/components/SortButton/SortButtonIcon.d.ts +29 -0
  64. package/dist/components/SortButton/SortButtonIcon.d.ts.map +1 -0
  65. package/dist/components/SortButton/SortButtonIcon.js +18 -0
  66. package/dist/components/SortButton/SortMenu.d.ts +42 -0
  67. package/dist/components/SortButton/SortMenu.d.ts.map +1 -0
  68. package/dist/components/SortButton/SortMenu.js +137 -0
  69. package/dist/components/SortButton/SortMenuOption.d.ts +35 -0
  70. package/dist/components/SortButton/SortMenuOption.d.ts.map +1 -0
  71. package/dist/components/SortButton/SortMenuOption.js +18 -0
  72. package/dist/components/SortButton/index.d.ts +32 -0
  73. package/dist/components/SortButton/index.d.ts.map +1 -0
  74. package/dist/components/SortButton/index.js +15 -0
  75. package/dist/components/SortButton/sortOptions.d.ts +14 -0
  76. package/dist/components/SortButton/sortOptions.d.ts.map +1 -0
  77. package/dist/components/SortButton/sortOptions.js +1 -0
  78. package/dist/components/TabBar/types.d.ts +1 -1
  79. package/dist/components/index.d.ts +7 -2
  80. package/dist/components/index.d.ts.map +1 -1
  81. package/dist/components/index.js +6 -2
  82. package/dist/runtime/createBridgedPluginContext.js +4 -0
  83. package/dist/types.d.ts +55 -0
  84. package/dist/types.d.ts.map +1 -1
  85. package/package.json +3 -3
  86. package/dist/components/SidebarItem/SidebarColorDot.d.ts +0 -22
  87. package/dist/components/SidebarItem/SidebarColorDot.d.ts.map +0 -1
  88. package/dist/components/SidebarItem/SidebarColorDot.js +0 -11
  89. package/dist/components/SidebarItem/SidebarTabGroupItem.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 1.3.3 - 2026-07-27
8
+
9
+ - Update @harborclient/team-hub-api dependency to version 0.4.1 and enhance documentation for import handlers. (`516c9dae`)
10
+ - Add OpenCollection Import Functionality. (`ac4dc71a`)
11
+ - Add Appearance Options for Storage Locations, Color Markers, Highlights, and Indicators. (`ee9e54d5`)
12
+ - Rename `SidebarTabGroupItem` to `SidebarWorkspaceItem`. Breaking export rename; requires a major release.
13
+ - Refactor sidebar color handling to markers. (`6f53f3d7`)
14
+ - Add Filters and Sorting Options to Sidebar Menu. (`d17dea07`)
15
+ - Enhance menu functionality and visibility options. (`89cf8584`)
16
+
7
17
  ## 1.3.2 - 2026-07-26
8
18
 
9
19
  - Add dismissedRequestEditorNotices to general settings. (`22551faa`)
@@ -12,6 +12,10 @@ export interface Props extends Omit<ComponentPropsWithoutRef<'div'>, 'children'
12
12
  * Called when the user clears the current color. Omitted when clearing is disabled.
13
13
  */
14
14
  onClear?: () => void;
15
+ /**
16
+ * Label for the clear button, so hosts can name what is being cleared.
17
+ */
18
+ clearLabel?: string;
15
19
  /**
16
20
  * Fixed preset swatches (defaults to two rows of five HarborClient colors).
17
21
  */
@@ -35,5 +39,5 @@ export interface Props extends Omit<ComponentPropsWithoutRef<'div'>, 'children'
35
39
  * Custom slots open the native OS color picker via a hidden `<input type="color">`.
36
40
  * Chosen custom colors are saved to localStorage for reuse.
37
41
  */
38
- export declare function ColorPicker({ value, onChange, onClear, presets, customSwatchesStorageKey, 'aria-label': ariaLabel, className, ...props }: Props): JSX.Element;
42
+ export declare function ColorPicker({ value, onChange, onClear, clearLabel, presets, customSwatchesStorageKey, 'aria-label': ariaLabel, className, ...props }: Props): JSX.Element;
39
43
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ColorPicker/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAiB,MAAM,OAAO,CAAC;AAW1E,MAAM,WAAW,KAAM,SAAQ,IAAI,CACjC,wBAAwB,CAAC,KAAK,CAAC,EAC/B,UAAU,GAAG,WAAW,GAAG,UAAU,CACtC;IACC;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,OAAO,EACP,OAAsC,EACtC,wBAA8D,EAC9D,YAAY,EAAE,SAA4B,EAC1C,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAgLrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ColorPicker/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAiB,MAAM,OAAO,CAAC;AAW1E,MAAM,WAAW,KAAM,SAAQ,IAAI,CACjC,wBAAwB,CAAC,KAAK,CAAC,EAC/B,UAAU,GAAG,WAAW,GAAG,UAAU,CACtC;IACC;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,OAAO,EACP,UAA0B,EAC1B,OAAsC,EACtC,wBAA8D,EAC9D,YAAY,EAAE,SAA4B,EAC1C,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAgLrB"}
@@ -11,7 +11,7 @@ import { DEFAULT_CUSTOM_SWATCHES_STORAGE_KEY, loadCustomSwatches, padCustomSwatc
11
11
  * Custom slots open the native OS color picker via a hidden `<input type="color">`.
12
12
  * Chosen custom colors are saved to localStorage for reuse.
13
13
  */
14
- export function ColorPicker({ value, onChange, onClear, presets = DEFAULT_COLOR_PICKER_PRESETS, customSwatchesStorageKey = DEFAULT_CUSTOM_SWATCHES_STORAGE_KEY, 'aria-label': ariaLabel = 'Choose a color', className, ...props }) {
14
+ export function ColorPicker({ value, onChange, onClear, clearLabel = 'Clear color', presets = DEFAULT_COLOR_PICKER_PRESETS, customSwatchesStorageKey = DEFAULT_CUSTOM_SWATCHES_STORAGE_KEY, 'aria-label': ariaLabel = 'Choose a color', className, ...props }) {
15
15
  const groupId = useId();
16
16
  const nativeInputRef = useRef(null);
17
17
  const pendingCustomSlotRef = useRef(null);
@@ -99,5 +99,5 @@ export function ColorPicker({ value, onChange, onClear, presets = DEFAULT_COLOR_
99
99
  }
100
100
  openNativePickerForSlot(index, slotColor);
101
101
  }, () => openNativePickerForSlot(index, slotColor));
102
- }) }), onClear != null && value != null && value.trim() !== '' ? (_jsx("button", { type: "button", className: "self-start text-[14px] text-muted hover:text-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent", onClick: onClear, children: "Clear color" })) : null, _jsx("input", { ref: nativeInputRef, type: "color", className: "sr-only", tabIndex: -1, "aria-hidden": true, onChange: (event) => applyNativePickerColor(event.target.value) })] }));
102
+ }) }), onClear != null && value != null && value.trim() !== '' ? (_jsx("button", { type: "button", className: "self-start text-[14px] text-muted hover:text-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent", onClick: onClear, children: clearLabel })) : null, _jsx("input", { ref: nativeInputRef, type: "color", className: "sr-only", tabIndex: -1, "aria-hidden": true, onChange: (event) => applyNativePickerColor(event.target.value) })] }));
103
103
  }
@@ -0,0 +1,29 @@
1
+ import type { IconDefinition } from '@fortawesome/fontawesome-svg-core';
2
+ import type { JSX } from 'react';
3
+ interface Props {
4
+ /**
5
+ * When true, shows a SegmentedTabs-matching accent dot on the icon corner.
6
+ */
7
+ active?: boolean;
8
+ /**
9
+ * Font Awesome icon to render. Defaults to the filter funnel.
10
+ */
11
+ icon?: IconDefinition;
12
+ /**
13
+ * Additional classes merged onto the icon wrapper.
14
+ */
15
+ className?: string;
16
+ }
17
+ /**
18
+ * Filter funnel icon with an optional accent corner indicator when filters are
19
+ * applied. Shared by {@link FilterButton} and filter-style `RowActionsMenu`
20
+ * triggers so the active affordance stays consistent.
21
+ *
22
+ * @param active - When true, shows the accent status dot.
23
+ * @param icon - Icon to render; defaults to `faFilter`.
24
+ * @param className - Extra classes for the wrapper.
25
+ * @returns Relative icon wrapper with optional active indicator.
26
+ */
27
+ export declare function FilterButtonIcon({ active, icon, className }: Props): JSX.Element;
28
+ export {};
29
+ //# sourceMappingURL=FilterButtonIcon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterButtonIcon.d.ts","sourceRoot":"","sources":["../../../src/components/FilterButton/FilterButtonIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAKjC,UAAU,KAAK;IACb;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAc,EACd,IAAe,EACf,SAAS,EACV,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAcrB"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@harborclient/sdk/jsx-runtime";
2
+ import { faFilter } from '@fortawesome/free-solid-svg-icons';
3
+ import { FaIcon } from '../FaIcon/index.js';
4
+ import { StatusDot } from '../StatusDot/index.js';
5
+ import { cn } from '../utils.js';
6
+ /**
7
+ * Filter funnel icon with an optional accent corner indicator when filters are
8
+ * applied. Shared by {@link FilterButton} and filter-style `RowActionsMenu`
9
+ * triggers so the active affordance stays consistent.
10
+ *
11
+ * @param active - When true, shows the accent status dot.
12
+ * @param icon - Icon to render; defaults to `faFilter`.
13
+ * @param className - Extra classes for the wrapper.
14
+ * @returns Relative icon wrapper with optional active indicator.
15
+ */
16
+ export function FilterButtonIcon({ active = false, icon = faFilter, className }) {
17
+ return (_jsxs("span", { className: cn('hc-filter-button-icon relative inline-flex shrink-0', className), children: [_jsx(FaIcon, { icon: icon, className: "h-3.5 w-3.5", "aria-hidden": true }), active ? (_jsx(StatusDot, { variant: "accent", size: "sm", label: "Filters applied", className: "absolute -top-0.5 -right-0.5" })) : null] }));
18
+ }
@@ -0,0 +1,26 @@
1
+ import type { ComponentPropsWithoutRef, JSX, RefObject } from 'react';
2
+ interface Props extends Omit<ComponentPropsWithoutRef<'button'>, 'children' | 'aria-label'> {
3
+ /**
4
+ * When true, shows the accent filter-active indicator and full-contrast icon
5
+ * color. When false, the icon uses muted text until hover.
6
+ */
7
+ active?: boolean;
8
+ /**
9
+ * Accessible name for the icon-only control.
10
+ */
11
+ 'aria-label': string;
12
+ /**
13
+ * Ref forwarded to the underlying native button for popover anchoring.
14
+ */
15
+ innerRef?: RefObject<HTMLButtonElement | null>;
16
+ }
17
+ /**
18
+ * Toolbar filter trigger with an optional accent corner indicator when filters
19
+ * are in effect. Matches the SegmentedTabs indicator color (`bg-accent`).
20
+ *
21
+ * Defaults to `type="button"`. Pass `title` for a native tooltip; when omitted,
22
+ * the tooltip falls back to `aria-label`.
23
+ */
24
+ export declare function FilterButton({ active, className, title, innerRef, type, 'aria-label': ariaLabel, ...props }: Props): JSX.Element;
25
+ export {};
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FilterButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKtE,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACzF;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CAChD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAc,EACd,SAAS,EACT,KAAK,EACL,QAAQ,EACR,IAAe,EACf,YAAY,EAAE,SAAS,EACvB,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAkBrB"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "@harborclient/sdk/jsx-runtime";
2
+ import { Button } from '../Button/index.js';
3
+ import { cn } from '../utils.js';
4
+ import { FilterButtonIcon } from './FilterButtonIcon.js';
5
+ /**
6
+ * Toolbar filter trigger with an optional accent corner indicator when filters
7
+ * are in effect. Matches the SegmentedTabs indicator color (`bg-accent`).
8
+ *
9
+ * Defaults to `type="button"`. Pass `title` for a native tooltip; when omitted,
10
+ * the tooltip falls back to `aria-label`.
11
+ */
12
+ export function FilterButton({ active = false, className, title, innerRef, type = 'button', 'aria-label': ariaLabel, ...props }) {
13
+ return (_jsx(Button, { ...props, type: type, variant: "toolbar", innerRef: innerRef, "aria-label": ariaLabel, title: title ?? ariaLabel, className: cn('hc-filter-button', active ? 'text-text hover:text-text' : 'text-muted hover:text-text', className), children: _jsx(FilterButtonIcon, { active: active }) }));
14
+ }
@@ -0,0 +1,11 @@
1
+ /** Window event name used to re-read localStorage sizes after an external write. */
2
+ export declare const RESIZABLE_SYNC_EVENT = "hc:resizable-sync";
3
+ /**
4
+ * Writes resizable panel sizes to localStorage and notifies mounted hooks to re-read.
5
+ *
6
+ * Used when restoring a workspace layout snapshot that includes panel widths/heights.
7
+ *
8
+ * @param entries - Map of storageKey → size in pixels.
9
+ */
10
+ export declare function applyResizableSizes(entries: Record<string, number>): void;
11
+ //# sourceMappingURL=applyResizableSizes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyResizableSizes.d.ts","sourceRoot":"","sources":["../../../src/components/Resizable/applyResizableSizes.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AAgBxD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAWzE"}
@@ -0,0 +1,34 @@
1
+ /** Window event name used to re-read localStorage sizes after an external write. */
2
+ export const RESIZABLE_SYNC_EVENT = 'hc:resizable-sync';
3
+ /**
4
+ * Persists a size to localStorage.
5
+ *
6
+ * @param storageKey - localStorage key for the panel size.
7
+ * @param size - Size in pixels to store.
8
+ */
9
+ function persistSize(storageKey, size) {
10
+ try {
11
+ localStorage.setItem(storageKey, String(size));
12
+ }
13
+ catch {
14
+ // Ignore quota or privacy-mode failures.
15
+ }
16
+ }
17
+ /**
18
+ * Writes resizable panel sizes to localStorage and notifies mounted hooks to re-read.
19
+ *
20
+ * Used when restoring a workspace layout snapshot that includes panel widths/heights.
21
+ *
22
+ * @param entries - Map of storageKey → size in pixels.
23
+ */
24
+ export function applyResizableSizes(entries) {
25
+ for (const [storageKey, size] of Object.entries(entries)) {
26
+ if (!Number.isFinite(size)) {
27
+ continue;
28
+ }
29
+ persistSize(storageKey, Math.round(size));
30
+ }
31
+ if (typeof window !== 'undefined') {
32
+ window.dispatchEvent(new CustomEvent(RESIZABLE_SYNC_EVENT));
33
+ }
34
+ }
@@ -7,7 +7,7 @@ export declare const MIN_HEIGHT = 120;
7
7
  * Computes the maximum height for a footer slide-up panel from the main content area.
8
8
  *
9
9
  * Walks from the panel container up to the app shell and measures the flex row
10
- * above the footer so panels cannot grow past the usable workspace.
10
+ * above the footer so panels cannot grow past the usable main content area.
11
11
  *
12
12
  * @param containerRef - Ref attached to the panel root element.
13
13
  * @returns Maximum panel height in pixels.
@@ -3,13 +3,13 @@ export const DEFAULT_HEIGHT = 280;
3
3
  /** Minimum slide-up footer panel height in pixels. */
4
4
  export const MIN_HEIGHT = 120;
5
5
  /**
6
- * Resolves the main workspace row above the footer for max-height measurement.
6
+ * Resolves the main content row above the footer for max-height measurement.
7
7
  *
8
8
  * Prefers the flex row wrapping `#main-content` so measurement stays correct
9
- * when the app shell includes skip links or other elements before the workspace.
9
+ * when the app shell includes skip links or other elements before the main content area.
10
10
  *
11
11
  * @param containerRef - Ref attached to the panel root element.
12
- * @returns Workspace row element, if found.
12
+ * @returns Main content row element, if found.
13
13
  */
14
14
  function resolveFooterPanelContentArea(containerRef) {
15
15
  const mainContentParent = document.getElementById('main-content')?.parentElement;
@@ -31,7 +31,7 @@ function resolveFooterPanelContentArea(containerRef) {
31
31
  * Computes the maximum height for a footer slide-up panel from the main content area.
32
32
  *
33
33
  * Walks from the panel container up to the app shell and measures the flex row
34
- * above the footer so panels cannot grow past the usable workspace.
34
+ * above the footer so panels cannot grow past the usable main content area.
35
35
  *
36
36
  * @param containerRef - Ref attached to the panel root element.
37
37
  * @returns Maximum panel height in pixels.
@@ -1,4 +1,5 @@
1
1
  export { Resizable } from './Resizable.js';
2
2
  export { ResizeHandle } from './ResizeHandle.js';
3
+ export { applyResizableSizes, RESIZABLE_SYNC_EVENT } from './applyResizableSizes.js';
3
4
  export { useResizable, type UseResizableOptions, type UseResizableResult } from './useResizable.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Resizable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Resizable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export { Resizable } from './Resizable.js';
2
2
  export { ResizeHandle } from './ResizeHandle.js';
3
+ export { applyResizableSizes, RESIZABLE_SYNC_EVENT } from './applyResizableSizes.js';
3
4
  export { useResizable } from './useResizable.js';
@@ -1,4 +1,5 @@
1
1
  import type { KeyboardEvent as ReactKeyboardEvent, MouseEvent as ReactMouseEvent } from 'react';
2
+ export { applyResizableSizes, RESIZABLE_SYNC_EVENT } from './applyResizableSizes.js';
2
3
  type Axis = 'x' | 'y';
3
4
  export interface UseResizableOptions {
4
5
  /**
@@ -39,5 +40,4 @@ export interface UseResizableResult {
39
40
  onKeyboardResize: (event: ReactKeyboardEvent) => void;
40
41
  }
41
42
  export declare function useResizable({ axis, direction, defaultSize, minSize, getMaxSize, storageKey, onPersist }: UseResizableOptions): UseResizableResult;
42
- export {};
43
43
  //# sourceMappingURL=useResizable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useResizable.d.ts","sourceRoot":"","sources":["../../../src/components/Resizable/useResizable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,IAAI,kBAAkB,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,OAAO,CAAC;AAEhG,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAkDtB,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC;IAEX;;OAEG;IACH,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAElB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;IAE1B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,aAAa,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAChD,gBAAgB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACvD;AAyDD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,SAAS,EACT,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACV,EAAE,mBAAmB,GAAG,kBAAkB,CAgJ1C"}
1
+ {"version":3,"file":"useResizable.d.ts","sourceRoot":"","sources":["../../../src/components/Resizable/useResizable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,IAAI,kBAAkB,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,OAAO,CAAC;AAGhG,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErF,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAkDtB,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC;IAEX;;OAEG;IACH,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAElB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;IAE1B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,aAAa,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAChD,gBAAgB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACvD;AA+DD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,SAAS,EACT,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACV,EAAE,mBAAmB,GAAG,kBAAkB,CAuK1C"}
@@ -1,4 +1,6 @@
1
1
  import { useCallback, useEffect, useLayoutEffect, useRef, useState } from '@harborclient/sdk/react';
2
+ import { RESIZABLE_SYNC_EVENT } from './applyResizableSizes.js';
3
+ export { applyResizableSizes, RESIZABLE_SYNC_EVENT } from './applyResizableSizes.js';
2
4
  /** Id of the shared stylesheet injected during resize drags. */
3
5
  const RESIZING_STYLE_ID = 'hc-resizable-drag-styles';
4
6
  /**
@@ -45,6 +47,9 @@ function clearResizingState() {
45
47
  }
46
48
  /**
47
49
  * Loads a persisted size from localStorage.
50
+ *
51
+ * @param storageKey - localStorage key for the panel size.
52
+ * @param defaultSize - Fallback when the key is unset or invalid.
48
53
  */
49
54
  function loadStoredSize(storageKey, defaultSize) {
50
55
  try {
@@ -60,6 +65,9 @@ function loadStoredSize(storageKey, defaultSize) {
60
65
  }
61
66
  /**
62
67
  * Persists a size to localStorage.
68
+ *
69
+ * @param storageKey - localStorage key for the panel size.
70
+ * @param size - Size in pixels to store.
63
71
  */
64
72
  function persistSize(storageKey, size) {
65
73
  try {
@@ -109,6 +117,26 @@ export function useResizable({ axis, direction, defaultSize, minSize, getMaxSize
109
117
  useEffect(() => {
110
118
  sizeRef.current = size;
111
119
  }, [size]);
120
+ /**
121
+ * Re-reads this panel's localStorage size when a workspace (or other caller)
122
+ * applies sizes externally via {@link applyResizableSizes}.
123
+ */
124
+ useEffect(() => {
125
+ if (!storageKey) {
126
+ return;
127
+ }
128
+ /**
129
+ * Loads the stored size for this panel and clamps it to current bounds.
130
+ */
131
+ const handleSync = () => {
132
+ const nextSize = clampSize(loadStoredSize(storageKey, defaultSize), minSize, getMaxSize);
133
+ setSizeState(nextSize);
134
+ };
135
+ window.addEventListener(RESIZABLE_SYNC_EVENT, handleSync);
136
+ return () => {
137
+ window.removeEventListener(RESIZABLE_SYNC_EVENT, handleSync);
138
+ };
139
+ }, [defaultSize, getMaxSize, minSize, storageKey]);
112
140
  /**
113
141
  * Refreshes the computed max size when layout changes or the panel is resized.
114
142
  */
@@ -75,6 +75,12 @@ interface Props extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {
75
75
  * Additional classes merged onto the trigger button.
76
76
  */
77
77
  triggerClassName?: string;
78
+ /**
79
+ * When set, styles the trigger like {@link FilterButton}: muted when inactive,
80
+ * full-contrast when active, and an accent corner indicator on icon-only
81
+ * triggers while filters are applied.
82
+ */
83
+ triggerActive?: boolean;
78
84
  /**
79
85
  * Whether the menu opens below or above the trigger. Defaults to opening downward.
80
86
  */
@@ -88,6 +94,6 @@ interface Props extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {
88
94
  * `submenu` open a nested flyout panel beside them on hover, click, or
89
95
  * `ArrowRight`/`Enter`.
90
96
  */
91
- export declare function RowActionsMenu({ groups, menuId, openMenuId, onOpenChange, triggerVariant, triggerLabel, triggerIcon, triggerAriaLabel, triggerTitle, triggerClassName, placement, className, ...props }: Props): JSX.Element;
97
+ export declare function RowActionsMenu({ groups, menuId, openMenuId, onOpenChange, triggerVariant, triggerLabel, triggerIcon, triggerAriaLabel, triggerTitle, triggerClassName, triggerActive, placement, className, ...props }: Props): JSX.Element;
92
98
  export {};
93
99
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/RowActionsMenu/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAUxE,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAkBhE,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAE/B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAChB,CAAC,YAAY,GAAG;IAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,GAC9D,CAAC,YAAY,GAAG;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC;CACvB,CAAC,CAAC;AAEP,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACvE;;;OAGG;IACH,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;IAErB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B;;OAEG;IACH,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAE1C;;OAEG;IACH,cAAc,CAAC,EAAE,aAAa,CAAC;IAE/B;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC;IAE7B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAUD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,MAAM,EACN,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,SAAkB,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAojBrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/RowActionsMenu/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAUxE,OAAO,KAAK,EACV,wBAAwB,EACxB,GAAG,EAGH,SAAS,EACV,MAAM,OAAO,CAAC;AACf,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAmBlF,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAE/B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAChB,CAAC,YAAY,GAAG;IAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,GAC9D,CAAC,YAAY,GAAG;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC;CACvB,CAAC,CAAC;AAEP,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACvE;;;OAGG;IACH,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;IAErB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B;;OAEG;IACH,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAE1C;;OAEG;IACH,cAAc,CAAC,EAAE,aAAa,CAAC;IAE/B;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC;IAE7B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAUD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,MAAM,EACN,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,SAAkB,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAskBrB"}
@@ -3,6 +3,7 @@ import { faBars, faCaretRight, faCheck } from '@fortawesome/free-solid-svg-icons
3
3
  import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from '@harborclient/sdk/react';
4
4
  import { Button } from '../Button/index.js';
5
5
  import { FaIcon } from '../FaIcon/index.js';
6
+ import { FilterButtonIcon } from '../FilterButton/FilterButtonIcon.js';
6
7
  import { MENU_MIN_WIDTH_PX, clampMenuPosition, getTriggerAnchoredMenuPosition } from '../menuPosition.js';
7
8
  import { portalToBody } from '../portalToBody.js';
8
9
  import { findAdjacentEnabledIndex, findEdgeEnabledIndex, isMenuItemEnabled, menuItemClass } from '../rowActionsMenuHelpers.js';
@@ -21,7 +22,7 @@ const SUBMENU_CLOSE_DELAY_MS = 200;
21
22
  * `submenu` open a nested flyout panel beside them on hover, click, or
22
23
  * `ArrowRight`/`Enter`.
23
24
  */
24
- export function RowActionsMenu({ groups, menuId, openMenuId, onOpenChange, triggerVariant, triggerLabel, triggerIcon = faBars, triggerAriaLabel, triggerTitle, triggerClassName, placement = 'down', className, ...props }) {
25
+ export function RowActionsMenu({ groups, menuId, openMenuId, onOpenChange, triggerVariant, triggerLabel, triggerIcon = faBars, triggerAriaLabel, triggerTitle, triggerClassName, triggerActive, placement = 'down', className, ...props }) {
25
26
  const isOpen = openMenuId === menuId;
26
27
  const menuElementId = `${menuId}-menu`;
27
28
  const submenuElementId = `${menuId}-submenu`;
@@ -403,22 +404,43 @@ export function RowActionsMenu({ groups, menuId, openMenuId, onOpenChange, trigg
403
404
  const labeledTriggerVariant = resolvedTriggerVariant === 'icon' || resolvedTriggerVariant === 'iconDanger'
404
405
  ? 'secondary'
405
406
  : resolvedTriggerVariant;
406
- const triggerButton = isLabeledTrigger ? (_jsxs(Button, { innerRef: triggerRef, type: "button", variant: labeledTriggerVariant, className: cn('hc-row-actions-menu-trigger', triggerClassName), title: resolvedTriggerTitle, "aria-haspopup": "menu", "aria-expanded": isOpen, "aria-controls": isOpen ? menuElementId : undefined, onClick: (e) => {
407
- e.stopPropagation();
408
- if (isOpen) {
409
- closeMenu();
410
- }
411
- else {
412
- openMenu(false);
413
- }
414
- }, onKeyDown: handleTriggerKeyDown, children: [_jsx(FaIcon, { icon: triggerIcon, className: "h-[1em] w-[1em] shrink-0", "aria-hidden": true }), _jsx("span", { className: "hc-row-actions-menu-trigger-label inline-flex min-w-0 flex-1 items-center truncate overflow-hidden leading-none", children: triggerLabel })] })) : (_jsx(Button, { innerRef: triggerRef, type: "button", variant: "icon", className: cn('hc-row-actions-menu-trigger', triggerClassName), title: resolvedTriggerTitle, "aria-label": resolvedTriggerAriaLabel, "aria-haspopup": "menu", "aria-expanded": isOpen, "aria-controls": isOpen ? menuElementId : undefined, onClick: (e) => {
415
- e.stopPropagation();
416
- if (isOpen) {
417
- closeMenu();
418
- }
419
- else {
420
- openMenu(false);
421
- }
422
- }, onKeyDown: handleTriggerKeyDown, children: _jsx(FaIcon, { icon: triggerIcon, className: "h-3.5 w-3.5" }) }));
407
+ const triggerActiveClassName = triggerActive === undefined
408
+ ? undefined
409
+ : triggerActive
410
+ ? 'text-text hover:text-text'
411
+ : 'text-muted hover:text-text';
412
+ /**
413
+ * Toggles the menu from the trigger click without bubbling to the row.
414
+ *
415
+ * @param event - Native button click event.
416
+ */
417
+ const handleTriggerClick = (event) => {
418
+ event.stopPropagation();
419
+ if (isOpen) {
420
+ closeMenu();
421
+ }
422
+ else {
423
+ openMenu(false);
424
+ }
425
+ };
426
+ /**
427
+ * Icon-only trigger props. Cast through `ButtonProps` so `triggerVariant`
428
+ * (including `toolbar`) is accepted alongside the default `icon` variant;
429
+ * `aria-label` is always provided for accessibility.
430
+ */
431
+ const iconOnlyTriggerProps = {
432
+ innerRef: triggerRef,
433
+ type: 'button',
434
+ variant: resolvedTriggerVariant,
435
+ className: cn('hc-row-actions-menu-trigger', triggerActiveClassName, triggerClassName),
436
+ title: resolvedTriggerTitle,
437
+ 'aria-label': resolvedTriggerAriaLabel,
438
+ 'aria-haspopup': 'menu',
439
+ 'aria-expanded': isOpen,
440
+ 'aria-controls': isOpen ? menuElementId : undefined,
441
+ onClick: handleTriggerClick,
442
+ onKeyDown: handleTriggerKeyDown
443
+ };
444
+ const triggerButton = isLabeledTrigger ? (_jsxs(Button, { innerRef: triggerRef, type: "button", variant: labeledTriggerVariant, className: cn('hc-row-actions-menu-trigger', triggerActiveClassName, triggerClassName), title: resolvedTriggerTitle, "aria-haspopup": "menu", "aria-expanded": isOpen, "aria-controls": isOpen ? menuElementId : undefined, onClick: handleTriggerClick, onKeyDown: handleTriggerKeyDown, children: [_jsx(FaIcon, { icon: triggerIcon, className: "h-[1em] w-[1em] shrink-0", "aria-hidden": true }), _jsx("span", { className: "hc-row-actions-menu-trigger-label inline-flex min-w-0 flex-1 items-center truncate overflow-hidden leading-none", children: triggerLabel })] })) : (_jsx(Button, { ...iconOnlyTriggerProps, children: triggerActive !== undefined ? (_jsx(FilterButtonIcon, { active: triggerActive, icon: triggerIcon })) : (_jsx(FaIcon, { icon: triggerIcon, className: "h-3.5 w-3.5" })) }));
423
445
  return (_jsxs("div", { ref: rootRef, ...props, className: cn('hc-row-actions-menu shrink-0', className), children: [triggerButton, menuPanel ? portalToBody(menuPanel) : null, submenuPanel] }));
424
446
  }
@@ -16,14 +16,14 @@ interface Props {
16
16
  */
17
17
  name: string;
18
18
  /**
19
- * Optional Tailwind classes applied to the name text (e.g. git status colors).
19
+ * Optional Tailwind classes applied to the name text (e.g. git status markers).
20
20
  */
21
21
  nameClassName?: string;
22
22
  /**
23
- * Optional color dot configuration for collection sidebar rows.
23
+ * Optional marker dot configuration for collection sidebar rows.
24
24
  */
25
- colorDot?: {
26
- color: string | null | undefined;
25
+ markerDot?: {
26
+ marker: string | null | undefined;
27
27
  visible?: boolean;
28
28
  label?: string;
29
29
  };
@@ -74,12 +74,12 @@ interface Props {
74
74
  as?: 'div' | 'li';
75
75
  }
76
76
  /**
77
- * Renders a markdown document sidebar row with file icon, optional color dot or git
77
+ * Renders a markdown document sidebar row with file icon, optional marker dot or git
78
78
  * status marker, and shared row chrome. Used in both Collections and Git sidebars.
79
79
  *
80
80
  * The accessible name defaults to visible row content (name, markers) but can be
81
81
  * overridden with `ariaLabel` (e.g. to include git status context).
82
82
  */
83
- export declare function SidebarDocumentItem({ icon, iconClassName, name, nameClassName, colorDot, statusMarker, selected, ariaLabel, ariaSelected, ariaCurrent, onContextMenu, onClick, onDoubleClick, actions, as }: Props): JSX.Element;
83
+ export declare function SidebarDocumentItem({ icon, iconClassName, name, nameClassName, markerDot, statusMarker, selected, ariaLabel, ariaSelected, ariaCurrent, onContextMenu, onClick, onDoubleClick, actions, as }: Props): JSX.Element;
84
84
  export {};
85
85
  //# sourceMappingURL=SidebarDocumentItem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarDocumentItem.d.ts","sourceRoot":"","sources":["../../../src/components/SidebarItem/SidebarDocumentItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQxD,UAAU,KAAK;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IAEtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;QACjC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF;;OAEG;IACH,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAEF;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEnD;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,IAAkB,EAClB,aAAa,EACb,IAAI,EACJ,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,QAAgB,EAChB,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,EACb,OAAO,EACP,aAAa,EACb,OAAO,EACP,EAAS,EACV,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAiDrB"}
1
+ {"version":3,"file":"SidebarDocumentItem.d.ts","sourceRoot":"","sources":["../../../src/components/SidebarItem/SidebarDocumentItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQxD,UAAU,KAAK;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IAEtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;QAClC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF;;OAEG;IACH,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAEF;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEnD;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,IAAkB,EAClB,aAAa,EACb,IAAI,EACJ,aAAa,EACb,SAAS,EACT,YAAY,EACZ,QAAgB,EAChB,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,EACb,OAAO,EACP,aAAa,EACb,OAAO,EACP,EAAS,EACV,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAiDrB"}
@@ -2,18 +2,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "@harborclient/sdk/jsx-runtime";
2
2
  import { faFileLines } from '@fortawesome/free-solid-svg-icons';
3
3
  import { FaIcon } from '../FaIcon/index.js';
4
4
  import { cn } from '../utils.js';
5
- import { SidebarColorDot } from './SidebarColorDot.js';
6
5
  import { SidebarItem } from './SidebarItem.js';
6
+ import { SidebarMarkerDot } from './SidebarMarkerDot.js';
7
7
  import { SidebarStatusMarker } from './SidebarStatusMarker.js';
8
8
  import { SIDEBAR_ITEM_BUTTON_CLASS } from './sidebarItemClasses.js';
9
9
  /**
10
- * Renders a markdown document sidebar row with file icon, optional color dot or git
10
+ * Renders a markdown document sidebar row with file icon, optional marker dot or git
11
11
  * status marker, and shared row chrome. Used in both Collections and Git sidebars.
12
12
  *
13
13
  * The accessible name defaults to visible row content (name, markers) but can be
14
14
  * overridden with `ariaLabel` (e.g. to include git status context).
15
15
  */
16
- export function SidebarDocumentItem({ icon = faFileLines, iconClassName, name, nameClassName, colorDot, statusMarker, selected = false, ariaLabel, ariaSelected, ariaCurrent, onContextMenu, onClick, onDoubleClick, actions, as = 'li' }) {
16
+ export function SidebarDocumentItem({ icon = faFileLines, iconClassName, name, nameClassName, markerDot, statusMarker, selected = false, ariaLabel, ariaSelected, ariaCurrent, onContextMenu, onClick, onDoubleClick, actions, as = 'li' }) {
17
17
  const useListboxOption = as === 'li';
18
18
  return (_jsx(SidebarItem, { selected: selected, onContextMenu: onContextMenu, actions: actions, as: as, listboxOption: useListboxOption
19
19
  ? {
@@ -23,5 +23,5 @@ export function SidebarDocumentItem({ icon = faFileLines, iconClassName, name, n
23
23
  onClick,
24
24
  onDoubleClick
25
25
  }
26
- : undefined, children: _jsxs("span", { className: SIDEBAR_ITEM_BUTTON_CLASS, children: [_jsx(FaIcon, { icon: icon, className: cn('h-3.5 w-3.5 shrink-0 pl-1 text-muted', iconClassName), "aria-hidden": true }), colorDot != null ? (_jsxs("span", { className: "inline-flex min-w-0 items-center gap-1.5", children: [_jsx("span", { className: `min-w-0 truncate ${nameClassName ?? ''}`, children: name }), _jsx(SidebarColorDot, { color: colorDot.color, visible: colorDot.visible, label: colorDot.label })] })) : (_jsx("span", { className: `min-w-0 truncate ${nameClassName ?? ''}`, children: name })), statusMarker != null ? (_jsx(SidebarStatusMarker, { marker: statusMarker.marker, className: statusMarker.className, label: statusMarker.label })) : null] }) }));
26
+ : undefined, children: _jsxs("span", { className: SIDEBAR_ITEM_BUTTON_CLASS, children: [_jsx(FaIcon, { icon: icon, className: cn('h-3.5 w-3.5 shrink-0 pl-1 text-muted', iconClassName), "aria-hidden": true }), markerDot != null ? (_jsxs("span", { className: "inline-flex min-w-0 items-center gap-1.5", children: [_jsx("span", { className: `min-w-0 truncate ${nameClassName ?? ''}`, children: name }), _jsx(SidebarMarkerDot, { marker: markerDot.marker, visible: markerDot.visible, label: markerDot.label })] })) : (_jsx("span", { className: `min-w-0 truncate ${nameClassName ?? ''}`, children: name })), statusMarker != null ? (_jsx(SidebarStatusMarker, { marker: statusMarker.marker, className: statusMarker.className, label: statusMarker.label })) : null] }) }));
27
27
  }
@@ -10,10 +10,10 @@ interface Props {
10
10
  */
11
11
  variableSummary: string;
12
12
  /**
13
- * Optional color dot beside the environment name.
13
+ * Optional marker dot beside the environment name.
14
14
  */
15
- colorDot?: {
16
- color: string | null | undefined;
15
+ markerDot?: {
16
+ marker: string | null | undefined;
17
17
  visible?: boolean;
18
18
  label?: string;
19
19
  };
@@ -73,6 +73,6 @@ interface Props {
73
73
  *
74
74
  * The accessible name is derived from visible row content (name, variable summary).
75
75
  */
76
- export declare function SidebarEnvironmentItem({ name, variableSummary, colorDot, selected, sortable, ariaLabel, ariaSelected, ariaCurrent, onContextMenu, onClick, onDoubleClick, onEnter, actions, dataSidebarEnvironmentId, as }: Props): JSX.Element;
76
+ export declare function SidebarEnvironmentItem({ name, variableSummary, markerDot, selected, sortable, ariaLabel, ariaSelected, ariaCurrent, onContextMenu, onClick, onDoubleClick, onEnter, actions, dataSidebarEnvironmentId, as }: Props): JSX.Element;
77
77
  export {};
78
78
  //# sourceMappingURL=SidebarEnvironmentItem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarEnvironmentItem.d.ts","sourceRoot":"","sources":["../../../src/components/SidebarItem/SidebarEnvironmentItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAiB,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvE,OAAO,EAAe,KAAK,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAG/E,UAAU,KAAK;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;QACjC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IAErC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEnD;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE3C;;OAEG;IACH,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,eAAe,EACf,QAAQ,EACR,QAAgB,EAChB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,EACb,OAAO,EACP,aAAa,EACb,OAAO,EACP,OAAO,EACP,wBAAwB,EACxB,EAAS,EACV,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAwDrB"}
1
+ {"version":3,"file":"SidebarEnvironmentItem.d.ts","sourceRoot":"","sources":["../../../src/components/SidebarItem/SidebarEnvironmentItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAiB,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvE,OAAO,EAAe,KAAK,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAI/E,UAAU,KAAK;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;QAClC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IAErC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEnD;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE3C;;OAEG;IACH,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,eAAe,EACf,SAAS,EACT,QAAgB,EAChB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,EACb,OAAO,EACP,aAAa,EACb,OAAO,EACP,OAAO,EACP,wBAAwB,EACxB,EAAS,EACV,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAwDrB"}
@@ -1,13 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "@harborclient/sdk/jsx-runtime";
2
- import { SidebarColorDot } from './SidebarColorDot.js';
3
2
  import { SidebarItem } from './SidebarItem.js';
3
+ import { SidebarMarkerDot } from './SidebarMarkerDot.js';
4
4
  import { SIDEBAR_ITEM_BUTTON_CLASS } from './sidebarItemClasses.js';
5
5
  /**
6
6
  * Renders an environment row in the Collections sidebar Environments section.
7
7
  *
8
8
  * The accessible name is derived from visible row content (name, variable summary).
9
9
  */
10
- export function SidebarEnvironmentItem({ name, variableSummary, colorDot, selected = false, sortable, ariaLabel, ariaSelected, ariaCurrent, onContextMenu, onClick, onDoubleClick, onEnter, actions, dataSidebarEnvironmentId, as = 'li' }) {
10
+ export function SidebarEnvironmentItem({ name, variableSummary, markerDot, selected = false, sortable, ariaLabel, ariaSelected, ariaCurrent, onContextMenu, onClick, onDoubleClick, onEnter, actions, dataSidebarEnvironmentId, as = 'li' }) {
11
11
  const useListboxOption = as === 'li';
12
12
  /**
13
13
  * Opens environment settings when Enter is pressed on the name area.
@@ -31,5 +31,5 @@ export function SidebarEnvironmentItem({ name, variableSummary, colorDot, select
31
31
  }
32
32
  : undefined, children: _jsxs("span", { className: SIDEBAR_ITEM_BUTTON_CLASS, ...(dataSidebarEnvironmentId != null
33
33
  ? { 'data-sidebar-environment-id': String(dataSidebarEnvironmentId) }
34
- : {}), children: [_jsxs("span", { className: "inline-flex min-w-0 flex-1 items-center gap-1.5", children: [_jsx("span", { className: "min-w-0 truncate", children: name }), colorDot != null ? (_jsx(SidebarColorDot, { color: colorDot.color, visible: colorDot.visible, label: colorDot.label })) : null] }), _jsx("span", { className: "shrink-0 text-muted", children: variableSummary })] }) }));
34
+ : {}), children: [_jsxs("span", { className: "inline-flex min-w-0 flex-1 items-center gap-1.5", children: [_jsx("span", { className: "min-w-0 truncate", children: name }), markerDot != null ? (_jsx(SidebarMarkerDot, { marker: markerDot.marker, visible: markerDot.visible, label: markerDot.label })) : null] }), _jsx("span", { className: "shrink-0 text-muted", children: variableSummary })] }) }));
35
35
  }