@harborclient/sdk 1.6.5 → 1.6.7
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 +10 -0
- package/dist/components/AnchorMenuPanel/index.js +1 -1
- package/dist/components/Breadcrumb/CrumbSegment.js +1 -1
- package/dist/components/Breadcrumb/EditableSegment.js +2 -2
- package/dist/components/Button/index.js +1 -1
- package/dist/components/CodeEditor/index.d.ts +2 -2
- package/dist/components/CodeEditor/index.js +5 -5
- package/dist/components/CodeEditor/selectionActionToolbar.d.ts +11 -7
- package/dist/components/CodeEditor/selectionActionToolbar.d.ts.map +1 -1
- package/dist/components/CodeEditor/selectionActionToolbar.js +39 -10
- package/dist/components/CopyToChatButton/index.js +1 -1
- package/dist/components/FooterButton/index.js +2 -2
- package/dist/components/FooterIcon/index.js +1 -1
- package/dist/components/FormDataEditor/index.d.ts.map +1 -1
- package/dist/components/FormDataEditor/index.js +2 -2
- package/dist/components/FormGroup/index.js +2 -2
- package/dist/components/KeyValueEditor/index.d.ts.map +1 -1
- package/dist/components/KeyValueEditor/index.js +1 -1
- package/dist/components/MethodSelect/MethodSelectMenu.js +1 -1
- package/dist/components/MethodSelect/MethodSelectOption.js +1 -1
- package/dist/components/MethodSelect/index.js +1 -1
- package/dist/components/Resizable/ResizeHandle.js +1 -1
- package/dist/components/Resizable/footerPanelUtils.d.ts +1 -1
- package/dist/components/Resizable/footerPanelUtils.d.ts.map +1 -1
- package/dist/components/Resizable/footerPanelUtils.js +2 -2
- package/dist/components/RowActionsMenu/Submenu.js +1 -1
- package/dist/components/RowActionsMenu/index.js +1 -1
- package/dist/components/SidebarItem/SidebarBadge.js +2 -2
- package/dist/components/SidebarItem/SidebarCommitItem.js +1 -1
- package/dist/components/SidebarItem/SidebarFolderItem.js +1 -1
- package/dist/components/SidebarItem/SidebarHistoryItem.d.ts +5 -1
- package/dist/components/SidebarItem/SidebarHistoryItem.d.ts.map +1 -1
- package/dist/components/SidebarItem/SidebarHistoryItem.js +3 -2
- package/dist/components/SidebarItem/sidebarItemClasses.d.ts +3 -3
- package/dist/components/SidebarItem/sidebarItemClasses.d.ts.map +1 -1
- package/dist/components/SidebarItem/sidebarItemClasses.js +5 -5
- package/dist/components/SidebarRail/SidebarRailItem.js +1 -1
- package/dist/components/SidebarRail/index.js +2 -2
- package/dist/components/SidebarSection/SectionItem.js +1 -1
- package/dist/components/SortButton/SortMenu.js +1 -1
- package/dist/components/SortButton/SortMenuOption.js +1 -1
- package/dist/components/TabBar/TabBarShell.js +1 -1
- package/dist/components/TabBar/TabContextMenu.js +1 -1
- package/dist/components/TabBar/TabNewButton.js +2 -2
- package/dist/components/TabBar/index.d.ts.map +1 -1
- package/dist/components/TabBar/index.js +2 -2
- package/dist/components/TabCloseButton/index.js +1 -1
- package/dist/components/Toolbar/index.js +2 -2
- package/dist/components/VariableInput/index.d.ts +2 -2
- package/dist/components/VariableInput/index.js +2 -2
- package/dist/components/VariableTooltip/dom.js +2 -2
- package/dist/components/VisibilityMenu/MenuCheckboxItem.js +1 -1
- package/dist/components/VisibilityMenu/index.js +1 -1
- package/dist/components/classes.d.ts +1 -1
- package/dist/components/classes.d.ts.map +1 -1
- package/dist/components/classes.js +5 -5
- package/dist/components/forms/classes.d.ts +1 -1
- package/dist/components/forms/classes.d.ts.map +1 -1
- package/dist/components/forms/classes.js +1 -1
- package/dist/components/rowActionsMenuHelpers.d.ts.map +1 -1
- package/dist/components/rowActionsMenuHelpers.js +1 -1
- package/dist/http/resolveRequest.d.ts +3 -0
- package/dist/http/resolveRequest.d.ts.map +1 -1
- package/dist/http/resolveRequest.js +4 -1
- package/dist/http/substitute.d.ts +1 -0
- package/dist/http/substitute.d.ts.map +1 -1
- package/dist/http/substitute.js +9 -0
- package/dist/types.d.ts +54 -35
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -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.6.7 - 2026-08-05
|
|
8
|
+
|
|
9
|
+
- Refactor Team Hub integration to support tenantId. (`1baf9475`)
|
|
10
|
+
|
|
11
|
+
## 1.6.6 - 2026-08-05
|
|
12
|
+
|
|
13
|
+
- Refactor UI components to remove `app-no-drag` class. (`c9cbe40e`)
|
|
14
|
+
- Enhance CLI and UI theme support with new tab color tokens. (`7864533e`)
|
|
15
|
+
- chore: enhance security documentation and improve JSON parsing across modules. (`0040e7a4`)
|
|
16
|
+
|
|
7
17
|
## 1.6.4 - 2026-08-04
|
|
8
18
|
|
|
9
19
|
- feat: enhance sidebar navigation and focus management. (`015e793a`)
|
|
@@ -326,7 +326,7 @@ export function AnchorMenuPanel({ groups, anchor, onDismiss, menuId = 'anchor-me
|
|
|
326
326
|
}
|
|
327
327
|
const openSubmenuItem = openSubmenuIndex != null ? flatItems[openSubmenuIndex] : undefined;
|
|
328
328
|
const openSubmenuAnchorRect = openSubmenuIndex != null ? itemRefs.current[openSubmenuIndex]?.getBoundingClientRect() : null;
|
|
329
|
-
const menuPanel = (_jsx("div", { ref: panelRef, id: menuElementId, role: "menu", tabIndex: hasEnabledItems ? undefined : -1, className: cn('hc-anchor-menu-panel hc-row-actions-menu-panel
|
|
329
|
+
const menuPanel = (_jsx("div", { ref: panelRef, id: menuElementId, role: "menu", tabIndex: hasEnabledItems ? undefined : -1, className: cn('hc-anchor-menu-panel hc-row-actions-menu-panel fixed z-50 min-w-[200px] rounded-md border border-separator bg-surface py-1 shadow-md', className), style: { left: menuPosition.x, top: menuPosition.y }, onKeyDown: handleMenuKeyDown, onMouseLeave: () => {
|
|
330
330
|
if (openSubmenuIndex != null) {
|
|
331
331
|
scheduleCloseSubmenu();
|
|
332
332
|
}
|
|
@@ -19,5 +19,5 @@ export function CrumbSegment({ segment, shape }) {
|
|
|
19
19
|
const showLabel = !segment.iconOnly && segment.label.length > 0;
|
|
20
20
|
const accessibleName = segment.ariaLabel ?? (showLabel ? undefined : segment.label);
|
|
21
21
|
const content = (_jsxs(_Fragment, { children: [segment.icon && _jsx(FaIcon, { icon: segment.icon, className: "h-3.5 w-3.5 shrink-0" }), showLabel ? _jsx("span", { className: "min-w-0 truncate", children: segment.label }) : null] }));
|
|
22
|
-
return (_jsx(SegmentShell, { shape: shape, tone: shape === 'first' ? 'selection' : 'path', children: segment.onClick ? (_jsx("button", { type: "button", className: cn(contentClass, '
|
|
22
|
+
return (_jsx(SegmentShell, { shape: shape, tone: shape === 'first' ? 'selection' : 'path', children: segment.onClick ? (_jsx("button", { type: "button", className: cn(contentClass, 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-accent'), "aria-label": accessibleName, onClick: handleClick, children: content })) : (_jsx("span", { className: contentClass, "aria-label": accessibleName, children: content })) }));
|
|
23
23
|
}
|
|
@@ -7,10 +7,10 @@ import { SegmentShell } from './SegmentShell.js';
|
|
|
7
7
|
* Renders the trailing breadcrumb segment with click-to-edit behavior.
|
|
8
8
|
*/
|
|
9
9
|
export function EditableSegment({ value, placeholder, editableLabel, editing, shape, inputRef, onStartEditing, onStopEditing, onValueChange }) {
|
|
10
|
-
return (_jsx(SegmentShell, { shape: shape, tone: "current", grow: true, children: editing ? (_jsx(Input, { ref: inputRef, variant: "plain", "aria-label": editableLabel, className: "
|
|
10
|
+
return (_jsx(SegmentShell, { shape: shape, tone: "current", grow: true, children: editing ? (_jsx(Input, { ref: inputRef, variant: "plain", "aria-label": editableLabel, className: "w-full min-w-0 border-none bg-transparent p-0 font-semibold text-text outline-none", type: "text", value: value, onChange: (event) => onValueChange(event.target.value), onBlur: onStopEditing, onKeyDown: (event) => {
|
|
11
11
|
if (event.key === 'Enter' || event.key === 'Escape') {
|
|
12
12
|
event.preventDefault();
|
|
13
13
|
onStopEditing();
|
|
14
14
|
}
|
|
15
|
-
} })) : (_jsxs("button", { type: "button", "aria-current": "page", "aria-label": editableLabel, className: "
|
|
15
|
+
} })) : (_jsxs("button", { type: "button", "aria-current": "page", "aria-label": editableLabel, className: "inline-flex max-w-full min-w-0 cursor-text items-center border-none bg-transparent p-0 text-left font-semibold text-text hover:opacity-80 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-accent", onClick: onStartEditing, children: [_jsx("span", { className: "min-w-0 truncate", children: value ? value : _jsx("span", { className: "font-normal text-muted", children: placeholder }) }), _jsx(FaIcon, { icon: faPen, className: "ms-3 h-2.5 w-2.5 shrink-0 cursor-pointer text-muted opacity-60", "aria-hidden": true })] })) }));
|
|
16
16
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "@harborclient/sdk/jsx-runtime";
|
|
2
2
|
import { cn } from '../utils.js';
|
|
3
|
-
const BUTTON_BASE = 'inline-flex cursor-pointer items-center rounded-full
|
|
3
|
+
const BUTTON_BASE = 'inline-flex cursor-pointer items-center rounded-full';
|
|
4
4
|
/**
|
|
5
5
|
* Keyboard focus ring for variants that use `shadow-sm`. Host apps often style
|
|
6
6
|
* `button:focus-visible` with `box-shadow`, which Tailwind `shadow-sm` overrides —
|
|
@@ -283,8 +283,8 @@ export interface Props extends Omit<ComponentPropsWithoutRef<'div'>, 'children'
|
|
|
283
283
|
/**
|
|
284
284
|
* CodeMirror wrapper for editable request bodies and read-only response views.
|
|
285
285
|
*
|
|
286
|
-
* Styling relies on host CSS variables (`--mac-*`, `--font-mono`)
|
|
287
|
-
*
|
|
286
|
+
* Styling relies on host CSS variables (`--mac-*`, `--font-mono`) defined in
|
|
287
|
+
* HarborClient `styles.css`.
|
|
288
288
|
*/
|
|
289
289
|
export declare function CodeEditor({ value, onChange, language, readOnly, editable, placeholder, placeholderHighlight, minHeight, height, onHeightChange, initialScrollTop, initialSelection, onViewStateChange, className, variables, onEditVariable, completionSource, slashCommands, onSlashCommand, selectionActions, lint, diagnostics, themeOverride, setupOverride, fontSize, id, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-invalid': ariaInvalid, 'aria-describedby': ariaDescribedBy, ...props }: Props): JSX.Element;
|
|
290
290
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -447,8 +447,8 @@ function buildPlaceholderExtensions(options) {
|
|
|
447
447
|
/**
|
|
448
448
|
* CodeMirror wrapper for editable request bodies and read-only response views.
|
|
449
449
|
*
|
|
450
|
-
* Styling relies on host CSS variables (`--mac-*`, `--font-mono`)
|
|
451
|
-
*
|
|
450
|
+
* Styling relies on host CSS variables (`--mac-*`, `--font-mono`) defined in
|
|
451
|
+
* HarborClient `styles.css`.
|
|
452
452
|
*/
|
|
453
453
|
export function CodeEditor({ value, onChange, language = 'text', readOnly = false, editable, placeholder, placeholderHighlight = false, minHeight = '144px', height, onHeightChange, initialScrollTop, initialSelection, onViewStateChange, className = '', variables, onEditVariable, completionSource, slashCommands, onSlashCommand, selectionActions, lint = true, diagnostics, themeOverride, setupOverride, fontSize, id, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-invalid': ariaInvalid, 'aria-describedby': ariaDescribedBy, ...props }) {
|
|
454
454
|
const config = useCodeEditorConfig();
|
|
@@ -982,7 +982,7 @@ export function CodeEditor({ value, onChange, language = 'text', readOnly = fals
|
|
|
982
982
|
* (`.hc-code-editor:focus-within::after`) so it stays visible inside
|
|
983
983
|
* OverlayScrollbars / overflow-hidden hosts such as the response Body viewer.
|
|
984
984
|
*/
|
|
985
|
-
const editorSurfaceClass = 'overflow-hidden rounded-lg bg-control shadow-[inset_0_0.5px_1px_rgba(0,0,0,0.06)]
|
|
985
|
+
const editorSurfaceClass = 'overflow-hidden rounded-lg bg-control shadow-[inset_0_0.5px_1px_rgba(0,0,0,0.06)]';
|
|
986
986
|
const wrapperClassName = readOnly
|
|
987
987
|
? `hc-code-editor ${editorSurfaceClass} ${className}`
|
|
988
988
|
: `hc-code-editor min-h-36 resize-y border border-separator ${editorSurfaceClass} ${className}`;
|
|
@@ -991,7 +991,7 @@ export function CodeEditor({ value, onChange, language = 'text', readOnly = fals
|
|
|
991
991
|
: null;
|
|
992
992
|
const wrapperStyle = height ? { height } : undefined;
|
|
993
993
|
const activeSelectionActions = selectionActionsRef.current ?? [];
|
|
994
|
-
const selectionActionToolbarNode = selectionActionToolbar && hasSelectionActions ? (_jsx("div", { ref: selectionToolbarElementRef, role: "toolbar", "aria-label": "Selection actions", className: "hc-code-editor-selection-toolbar
|
|
994
|
+
const selectionActionToolbarNode = selectionActionToolbar && hasSelectionActions ? (_jsx("div", { ref: selectionToolbarElementRef, role: "toolbar", "aria-label": "Selection actions", className: "hc-code-editor-selection-toolbar pointer-events-auto fixed z-50 flex -translate-x-1/2 -translate-y-full items-center gap-1 bg-transparent p-0 text-[14px] text-text", style: {
|
|
995
995
|
top: selectionActionToolbar.top - SELECTION_TOOLBAR_OFFSET_PX,
|
|
996
996
|
left: selectionActionToolbar.left
|
|
997
997
|
}, children: activeSelectionActions.map((action) => {
|
|
@@ -1025,7 +1025,7 @@ export function CodeEditor({ value, onChange, language = 'text', readOnly = fals
|
|
|
1025
1025
|
...(height ? { height: '100%' } : {}),
|
|
1026
1026
|
basicSetup,
|
|
1027
1027
|
onCreateEditor: stableOnCreateEditor
|
|
1028
|
-
}), selectionTooltip && selectionTooltipContent && variables ? (_jsxs("div", { id: tooltipId, role: "tooltip", className: "hc-code-editor-tooltip
|
|
1028
|
+
}), selectionTooltip && selectionTooltipContent && variables ? (_jsxs("div", { id: tooltipId, role: "tooltip", className: "hc-code-editor-tooltip pointer-events-auto fixed z-50 flex max-w-sm -translate-x-1/2 -translate-y-full flex-col gap-1.5 rounded-lg border border-separator bg-surface px-3 py-2 text-text shadow-md", style: { top: selectionTooltip.top - 4, left: selectionTooltip.left }, children: [_jsx(VariableTooltipValue, { value: selectionTooltipContent.text, variableKey: selectionTooltip.key, muted: selectionTooltipContent.muted }), onEditVariable ? (_jsx(Button, { variant: "secondary", className: "hc-code-editor-tooltip-edit self-start", "aria-label": `Edit value for ${selectionTooltip.key}`, onMouseDown: (event) => {
|
|
1029
1029
|
event.preventDefault();
|
|
1030
1030
|
onEditVariable(selectionTooltip.key);
|
|
1031
1031
|
setSelectionTooltip(null);
|
|
@@ -40,8 +40,10 @@ export interface SelectionActionToolbarController {
|
|
|
40
40
|
*/
|
|
41
41
|
lastNonEmptySelection: SelectionActionToolbarState | null;
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
44
|
-
* (CodeMirror may collapse into the gutter in the same event
|
|
43
|
+
* One-shot shield: ignore the next collapsed/unusable selection dismissal that
|
|
44
|
+
* races pointerup (CodeMirror may collapse into the gutter in the same event
|
|
45
|
+
* turn). Cleared after it is consumed, when the toolbar hides, or on the next
|
|
46
|
+
* pointerdown.
|
|
45
47
|
*/
|
|
46
48
|
suppressCollapseDismiss: boolean;
|
|
47
49
|
}
|
|
@@ -117,13 +119,13 @@ export declare function createSelectionActionToolbarController(): SelectionActio
|
|
|
117
119
|
/**
|
|
118
120
|
* Applies a view update to the selection toolbar controller.
|
|
119
121
|
*
|
|
120
|
-
* Encodes the RTL-gutter fix: collapsed selections during a pointer drag
|
|
121
|
-
*
|
|
122
|
+
* Encodes the RTL-gutter fix: collapsed selections during a pointer drag do not
|
|
123
|
+
* dismiss a previously captured selection. A one-shot post-pointerup shield
|
|
124
|
+
* ignores a single gutter-induced collapse, then later collapses dismiss normally.
|
|
122
125
|
*
|
|
123
126
|
* @param controller - Shared toolbar controller.
|
|
124
127
|
* @param update - CodeMirror view update.
|
|
125
128
|
* @param options - Enable/open callbacks and notify/dismiss helpers.
|
|
126
|
-
* @returns Whether the toolbar should remain open after this update (for tests).
|
|
127
129
|
*/
|
|
128
130
|
export declare function applySelectionActionToolbarUpdate(controller: SelectionActionToolbarController, update: SelectionToolbarUpdateLike, options: {
|
|
129
131
|
isEnabled: () => boolean;
|
|
@@ -138,16 +140,18 @@ export declare function applySelectionActionToolbarUpdate(controller: SelectionA
|
|
|
138
140
|
* Finalizes the toolbar after a primary-button pointer drag ends.
|
|
139
141
|
*
|
|
140
142
|
* Prefers the live selection; falls back to {@link SelectionActionToolbarController.lastNonEmptySelection}
|
|
141
|
-
* so RTL releases into the gutter still reveal Copy to chat.
|
|
143
|
+
* so RTL releases into the gutter still reveal Copy to chat. When neither yields a
|
|
144
|
+
* snapshot, dismisses any open or pending toolbar so a plain click collapses it.
|
|
142
145
|
*
|
|
143
146
|
* @param controller - Shared toolbar controller.
|
|
144
147
|
* @param view - CodeMirror editor view at pointerup.
|
|
145
|
-
* @param options - Open check and
|
|
148
|
+
* @param options - Open check, show, and dismiss helpers.
|
|
146
149
|
*/
|
|
147
150
|
export declare function finalizeSelectionActionToolbarOnPointerUp(controller: SelectionActionToolbarController, view: SelectionToolbarViewLike, options: {
|
|
148
151
|
isOpen: () => boolean;
|
|
149
152
|
scheduleShow: (state: SelectionActionToolbarState) => void;
|
|
150
153
|
showImmediately: (state: SelectionActionToolbarState) => void;
|
|
154
|
+
dismissToolbar: () => void;
|
|
151
155
|
}): void;
|
|
152
156
|
/**
|
|
153
157
|
* Builds update and pointer handlers that debounce toolbar display until selection settles.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionActionToolbar.d.ts","sourceRoot":"","sources":["../../../src/components/CodeEditor/selectionActionToolbar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,iFAAiF;AACjF,eAAO,MAAM,+BAA+B,MAAM,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS,CAAC;IACrD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,2BAA2B,GAAG,IAAI,CAAC;IACjD;;;OAGG;IACH,qBAAqB,EAAE,2BAA2B,GAAG,IAAI,CAAC;IAC1D
|
|
1
|
+
{"version":3,"file":"selectionActionToolbar.d.ts","sourceRoot":"","sources":["../../../src/components/CodeEditor/selectionActionToolbar.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,16 +68,37 @@ export function createSelectionActionToolbarController() {
|
|
|
68
68
|
suppressCollapseDismiss: false
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Returns whether a collapsed or unusable selection should skip dismissal.
|
|
73
|
+
*
|
|
74
|
+
* During a pointer drag, collapses are ignored so RTL gutter releases can still
|
|
75
|
+
* finalize. Immediately after pointerup, {@link SelectionActionToolbarController.suppressCollapseDismiss}
|
|
76
|
+
* is a one-shot shield for the gutter race; it is consumed here so later collapses
|
|
77
|
+
* (arrow keys, typing, clicks) dismiss the toolbar normally.
|
|
78
|
+
*
|
|
79
|
+
* @param controller - Shared toolbar controller.
|
|
80
|
+
* @returns True when this update should not dismiss the toolbar.
|
|
81
|
+
*/
|
|
82
|
+
function shouldSuppressCollapseDismiss(controller) {
|
|
83
|
+
if (controller.isPointerSelecting) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
if (controller.suppressCollapseDismiss) {
|
|
87
|
+
controller.suppressCollapseDismiss = false;
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
71
92
|
/**
|
|
72
93
|
* Applies a view update to the selection toolbar controller.
|
|
73
94
|
*
|
|
74
|
-
* Encodes the RTL-gutter fix: collapsed selections during a pointer drag
|
|
75
|
-
*
|
|
95
|
+
* Encodes the RTL-gutter fix: collapsed selections during a pointer drag do not
|
|
96
|
+
* dismiss a previously captured selection. A one-shot post-pointerup shield
|
|
97
|
+
* ignores a single gutter-induced collapse, then later collapses dismiss normally.
|
|
76
98
|
*
|
|
77
99
|
* @param controller - Shared toolbar controller.
|
|
78
100
|
* @param update - CodeMirror view update.
|
|
79
101
|
* @param options - Enable/open callbacks and notify/dismiss helpers.
|
|
80
|
-
* @returns Whether the toolbar should remain open after this update (for tests).
|
|
81
102
|
*/
|
|
82
103
|
export function applySelectionActionToolbarUpdate(controller, update, options) {
|
|
83
104
|
if (!options.isEnabled()) {
|
|
@@ -89,9 +110,9 @@ export function applySelectionActionToolbarUpdate(controller, update, options) {
|
|
|
89
110
|
}
|
|
90
111
|
const { from, to } = update.state.selection.main;
|
|
91
112
|
if (from === to) {
|
|
92
|
-
// During drag or
|
|
113
|
+
// During drag or on the one-shot post-pointerup race, CodeMirror may collapse
|
|
93
114
|
// into the gutter; keep the last non-empty selection for finalize.
|
|
94
|
-
if (controller
|
|
115
|
+
if (shouldSuppressCollapseDismiss(controller)) {
|
|
95
116
|
return;
|
|
96
117
|
}
|
|
97
118
|
options.dismissToolbar();
|
|
@@ -99,7 +120,7 @@ export function applySelectionActionToolbarUpdate(controller, update, options) {
|
|
|
99
120
|
}
|
|
100
121
|
const nextState = buildSelectionActionToolbarState(update.view);
|
|
101
122
|
if (!nextState) {
|
|
102
|
-
if (controller
|
|
123
|
+
if (shouldSuppressCollapseDismiss(controller)) {
|
|
103
124
|
return;
|
|
104
125
|
}
|
|
105
126
|
options.dismissToolbar();
|
|
@@ -122,11 +143,12 @@ export function applySelectionActionToolbarUpdate(controller, update, options) {
|
|
|
122
143
|
* Finalizes the toolbar after a primary-button pointer drag ends.
|
|
123
144
|
*
|
|
124
145
|
* Prefers the live selection; falls back to {@link SelectionActionToolbarController.lastNonEmptySelection}
|
|
125
|
-
* so RTL releases into the gutter still reveal Copy to chat.
|
|
146
|
+
* so RTL releases into the gutter still reveal Copy to chat. When neither yields a
|
|
147
|
+
* snapshot, dismisses any open or pending toolbar so a plain click collapses it.
|
|
126
148
|
*
|
|
127
149
|
* @param controller - Shared toolbar controller.
|
|
128
150
|
* @param view - CodeMirror editor view at pointerup.
|
|
129
|
-
* @param options - Open check and
|
|
151
|
+
* @param options - Open check, show, and dismiss helpers.
|
|
130
152
|
*/
|
|
131
153
|
export function finalizeSelectionActionToolbarOnPointerUp(controller, view, options) {
|
|
132
154
|
if (!controller.isPointerSelecting) {
|
|
@@ -143,7 +165,9 @@ export function finalizeSelectionActionToolbarOnPointerUp(controller, view, opti
|
|
|
143
165
|
}
|
|
144
166
|
if (controller.pendingState != null && !options.isOpen()) {
|
|
145
167
|
options.scheduleShow(controller.pendingState);
|
|
168
|
+
return;
|
|
146
169
|
}
|
|
170
|
+
options.dismissToolbar();
|
|
147
171
|
}
|
|
148
172
|
/**
|
|
149
173
|
* Builds update and pointer handlers that debounce toolbar display until selection settles.
|
|
@@ -175,6 +199,7 @@ export function createSelectionActionToolbarExtensions(onToolbarChange, isEnable
|
|
|
175
199
|
controller.isToolbarOpen = state != null;
|
|
176
200
|
if (state == null) {
|
|
177
201
|
controller.pendingState = null;
|
|
202
|
+
controller.suppressCollapseDismiss = false;
|
|
178
203
|
}
|
|
179
204
|
onToolbarChange(state);
|
|
180
205
|
};
|
|
@@ -182,10 +207,13 @@ export function createSelectionActionToolbarExtensions(onToolbarChange, isEnable
|
|
|
182
207
|
* Hides the toolbar immediately and cancels any pending reveal.
|
|
183
208
|
*
|
|
184
209
|
* Does not clear {@link SelectionActionToolbarController.lastNonEmptySelection}
|
|
185
|
-
* so a later pointerup can still recover an RTL gutter collapse.
|
|
210
|
+
* so a later pointerup can still recover an RTL gutter collapse. Clears
|
|
211
|
+
* {@link SelectionActionToolbarController.suppressCollapseDismiss} so a closed
|
|
212
|
+
* toolbar never starts out suppressed.
|
|
186
213
|
*/
|
|
187
214
|
const dismissToolbar = () => {
|
|
188
215
|
clearShowTimer();
|
|
216
|
+
controller.suppressCollapseDismiss = false;
|
|
189
217
|
if (controller.isToolbarOpen || controller.pendingState != null) {
|
|
190
218
|
notifyToolbarChange(null);
|
|
191
219
|
}
|
|
@@ -230,7 +258,8 @@ export function createSelectionActionToolbarExtensions(onToolbarChange, isEnable
|
|
|
230
258
|
finalizeSelectionActionToolbarOnPointerUp(controller, activeView, {
|
|
231
259
|
isOpen,
|
|
232
260
|
scheduleShow,
|
|
233
|
-
showImmediately
|
|
261
|
+
showImmediately,
|
|
262
|
+
dismissToolbar
|
|
234
263
|
});
|
|
235
264
|
};
|
|
236
265
|
if (typeof window !== 'undefined') {
|
|
@@ -7,7 +7,7 @@ import { cn } from '../utils.js';
|
|
|
7
7
|
import { COPY_TO_CHAT_ICON, COPY_TO_CHAT_LABEL, COPY_TO_CHAT_SHORTCUT_HINT } from './constants.js';
|
|
8
8
|
export { COPY_TO_CHAT_ICON, COPY_TO_CHAT_LABEL, COPY_TO_CHAT_SHORTCUT_CODEMIRROR_KEY, COPY_TO_CHAT_SHORTCUT_HINT, COPY_TO_CHAT_SHORTCUT_LETTER, copyToChatActionLabel } from './constants.js';
|
|
9
9
|
/** Shared chrome for the labeled breadcrumb-style Copy to chat control. */
|
|
10
|
-
const LABELED_BUTTON_CLASS = 'hc-copy-to-chat-button hc-code-editor-selection-action
|
|
10
|
+
const LABELED_BUTTON_CLASS = 'hc-copy-to-chat-button hc-code-editor-selection-action inline-flex cursor-pointer items-stretch overflow-hidden rounded-lg border-none bg-breadcrumb-background p-0 text-[14px] text-text shadow-sm hover:brightness-110 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-accent';
|
|
11
11
|
/**
|
|
12
12
|
* Shared Copy to chat control used for selection toolbars, floating overlays, and
|
|
13
13
|
* icon-only row/header actions so label, icon, shortcut, and styles stay in one place.
|
|
@@ -5,8 +5,8 @@ import { cn } from '../utils.js';
|
|
|
5
5
|
*/
|
|
6
6
|
function footerSegment(active) {
|
|
7
7
|
return active
|
|
8
|
-
? 'cursor-pointer rounded-md border-none bg-surface px-2 py-0.5 text-[14px] text-footer-text shadow-sm
|
|
9
|
-
: 'cursor-pointer rounded-md border-none bg-transparent px-2 py-0.5 text-[14px] text-footer-muted hover:text-footer-text
|
|
8
|
+
? 'cursor-pointer rounded-md border-none bg-surface px-2 py-0.5 text-[14px] text-footer-text shadow-sm'
|
|
9
|
+
: 'cursor-pointer rounded-md border-none bg-transparent px-2 py-0.5 text-[14px] text-footer-muted hover:text-footer-text';
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
12
|
* Text segment toggle button for the window footer bar, used to open and close
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "@harborclient/sdk/jsx-runtime";
|
|
|
2
2
|
import { FaIcon } from '../FaIcon/index.js';
|
|
3
3
|
import { footerIconButtonSizeClass } from '../footerBarUtils.js';
|
|
4
4
|
import { cn } from '../utils.js';
|
|
5
|
-
const footerIconBase = `inline-flex ${footerIconButtonSizeClass} shrink-0 cursor-pointer items-center justify-center rounded-md border-none
|
|
5
|
+
const footerIconBase = `inline-flex ${footerIconButtonSizeClass} shrink-0 cursor-pointer items-center justify-center rounded-md border-none`;
|
|
6
6
|
/**
|
|
7
7
|
* Square icon toggle styles for footer sidebar buttons.
|
|
8
8
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FormDataEditor/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,YAAY,EAAoB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQ/E,MAAM,WAAW,KAAK;IACpB;;OAEG;IACH,KAAK,EAAE,YAAY,EAAE,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAE1C;;OAEG;IACH,SAAS,EAAE,QAAQ,EAAE,CAAC;IAEtB;;OAEG;IACH,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvC;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACf,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FormDataEditor/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,YAAY,EAAoB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQ/E,MAAM,WAAW,KAAK;IACpB;;OAEG;IACH,KAAK,EAAE,YAAY,EAAE,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAE1C;;OAEG;IACH,SAAS,EAAE,QAAQ,EAAE,CAAC;IAEtB;;OAEG;IACH,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvC;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACf,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAuKrB"}
|
|
@@ -60,12 +60,12 @@ export function FormDataEditor({ parts, onChange, variables, onSelectFiles, onEd
|
|
|
60
60
|
const currentFiles = rows[index]?.files ?? [];
|
|
61
61
|
updateRow(index, { files: currentFiles.filter((file) => file !== filePath) });
|
|
62
62
|
};
|
|
63
|
-
return (_jsxs(Table, { className: "hc-form-data-editor", children: [_jsx(TableHeader, { className: "hc-form-data-editor-header", children: _jsxs("tr", { children: [_jsx(TableHead, { className: "w-6 p-0", children: _jsx("span", { className: "sr-only", children: "Enable" }) }), _jsx(TableHead, { children: "Key" }), _jsx(TableHead, { className: "w-24", children: "Type" }), _jsx(TableHead, { children: "Value" }), _jsx(TableHead, { className: "w-7 p-0" })] }) }), _jsx(TableBody, { className: "hc-form-data-editor-body", children: rows.map((row, index) => (_jsxs("tr", { children: [_jsx(TableCell, { className: "hc-form-data-editor-cell w-6 p-1 text-center", children: _jsx(Checkbox, {
|
|
63
|
+
return (_jsxs(Table, { className: "hc-form-data-editor", children: [_jsx(TableHeader, { className: "hc-form-data-editor-header", children: _jsxs("tr", { children: [_jsx(TableHead, { className: "w-6 p-0", children: _jsx("span", { className: "sr-only", children: "Enable" }) }), _jsx(TableHead, { children: "Key" }), _jsx(TableHead, { className: "w-24", children: "Type" }), _jsx(TableHead, { children: "Value" }), _jsx(TableHead, { className: "w-7 p-0" })] }) }), _jsx(TableBody, { className: "hc-form-data-editor-body", children: rows.map((row, index) => (_jsxs("tr", { children: [_jsx(TableCell, { className: "hc-form-data-editor-cell w-6 p-1 text-center", children: _jsx(Checkbox, { checked: row.enabled, onChange: (e) => updateRow(index, { enabled: e.target.checked }), "aria-label": `Enable row ${index + 1}`, title: "Enable" }) }), _jsx(TableCell, { className: "hc-form-data-editor-cell", children: _jsx(Input, { type: "text", className: "w-full", value: row.key, placeholder: "field", "aria-label": `Key, row ${index + 1}`, onChange: (e) => updateRow(index, { key: e.target.value }) }) }), _jsx(TableCell, { className: "hc-form-data-editor-cell", children: _jsxs(Select, { className: "w-full", value: row.type, "aria-label": `Type, row ${index + 1}`, onChange: (e) => {
|
|
64
64
|
const type = e.target.value;
|
|
65
65
|
updateRow(index, {
|
|
66
66
|
type,
|
|
67
67
|
value: type === 'text' ? row.value : '',
|
|
68
68
|
files: type === 'file' ? row.files : []
|
|
69
69
|
});
|
|
70
|
-
}, children: [_jsx("option", { value: "text", children: "Text" }), _jsx("option", { value: "file", children: "File" })] }) }), _jsx(TableCell, { className: "hc-form-data-editor-cell", children: row.type === 'text' ? (_jsx(VariableInput, { wrapperClassName: `${fieldFrame} w-full`,
|
|
70
|
+
}, children: [_jsx("option", { value: "text", children: "Text" }), _jsx("option", { value: "file", children: "File" })] }) }), _jsx(TableCell, { className: "hc-form-data-editor-cell", children: row.type === 'text' ? (_jsx(VariableInput, { wrapperClassName: `${fieldFrame} w-full`, value: row.value, onChange: (value) => updateRow(index, { value }), variables: variables, placeholder: "value", "aria-label": `Value, row ${index + 1}`, onEditVariable: onEditVariable })) : (_jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [_jsx(Button, { type: "button", variant: "secondary", className: "shrink-0 px-2 py-0.5 text-[14px]", onClick: () => void chooseFiles(index), children: "Choose files" }), row.files.map((filePath) => (_jsxs("span", { className: "inline-flex max-w-full items-center gap-1 rounded-md border border-separator bg-control px-1.5 py-0.5 text-[14px] text-text", title: filePath, "aria-label": filePath, children: [_jsx("span", { className: "truncate", children: fileBasename(filePath) }), _jsx("button", { type: "button", className: "inline-flex h-4 w-4 shrink-0 cursor-pointer items-center justify-center rounded border-none bg-transparent text-muted hover:bg-selection hover:text-text", onClick: () => removeFile(index, filePath), title: `Remove file ${fileBasename(filePath)}`, "aria-label": `Remove file ${fileBasename(filePath)}`, children: _jsx(FaIcon, { icon: faXmark, className: "h-3 w-3" }) })] }, filePath)))] })) }), _jsx(TableCell, { className: "hc-form-data-editor-cell w-7 p-1 text-center", children: _jsx(Button, { type: "button", variant: "iconDanger", onClick: () => removeRow(index), title: "Remove", "aria-label": `Remove row ${index + 1}`, children: _jsx(FaIcon, { icon: faXmark, className: "h-3.5 w-3.5" }) }) })] }, index))) })] }));
|
|
71
71
|
}
|
|
@@ -58,8 +58,8 @@ export function FormGroup({ label, children, htmlFor, description, error, errorI
|
|
|
58
58
|
}
|
|
59
59
|
if (layout === 'radio') {
|
|
60
60
|
const wrapperClasses = extra
|
|
61
|
-
? `hc-form-group inline-flex cursor-pointer items-center gap-1.5 text-text
|
|
62
|
-
: 'hc-form-group inline-flex cursor-pointer items-center gap-1.5 text-text
|
|
61
|
+
? `hc-form-group inline-flex cursor-pointer items-center gap-1.5 text-text ${extra}`
|
|
62
|
+
: 'hc-form-group inline-flex cursor-pointer items-center gap-1.5 text-text';
|
|
63
63
|
const linkedChildren = enhanceControl(children, { id: controlId });
|
|
64
64
|
return (_jsxs("label", { htmlFor: controlId, className: wrapperClasses, children: [linkedChildren, _jsx("span", { className: "hc-form-group-label", children: label })] }));
|
|
65
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/KeyValueEditor/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAOnE,MAAM,WAAW,KAAK;IACpB;;OAEG;IACH,IAAI,EAAE,QAAQ,EAAE,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IAErC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,SAAS,EAAE,QAAQ,EAAE,CAAC;IAEtB;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAEvC;;OAEG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAE/B;;OAEG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,EACR,cAAsB,EACtB,gBAA0B,EAC1B,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,EACZ,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/KeyValueEditor/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAOnE,MAAM,WAAW,KAAK;IACpB;;OAEG;IACH,IAAI,EAAE,QAAQ,EAAE,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IAErC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,SAAS,EAAE,QAAQ,EAAE,CAAC;IAEtB;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAEvC;;OAEG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAE/B;;OAEG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,EACR,cAAsB,EACtB,gBAA0B,EAC1B,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,EACZ,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAkGrB"}
|
|
@@ -41,6 +41,6 @@ export function KeyValueEditor({ rows, onChange, placeholderKey = 'Key', placeho
|
|
|
41
41
|
});
|
|
42
42
|
return (_jsxs(Table, { className: "hc-key-value-editor", children: [_jsx(TableHeader, { className: "hc-key-value-editor-header", children: _jsxs("tr", { children: [_jsx(TableHead, { className: "w-6 p-0", children: _jsx("span", { className: "sr-only", children: "Enable" }) }), _jsx(TableHead, { children: "Key" }), _jsx(TableHead, { children: "Value" }), _jsx(TableHead, { className: "w-7 p-0" })] }) }), _jsx(TableBody, { className: "hc-key-value-editor-body", children: rows.map((row, index) => {
|
|
43
43
|
const normalizedRow = normalizeRow(row);
|
|
44
|
-
return (_jsxs("tr", { children: [_jsx(TableCell, { className: "hc-key-value-editor-cell w-6 text-center", children: _jsx(Checkbox, {
|
|
44
|
+
return (_jsxs("tr", { children: [_jsx(TableCell, { className: "hc-key-value-editor-cell w-6 text-center", children: _jsx(Checkbox, { checked: normalizedRow.enabled, onChange: (e) => updateRow(index, { enabled: e.target.checked }), "aria-label": `Enable row ${index + 1}`, title: "Enable" }) }), _jsx(TableCell, { className: "hc-key-value-editor-cell", children: _jsx(AutocompleteInput, { type: "text", className: "w-full", value: normalizedRow.key, source: keySource, placeholder: placeholderKey, "aria-label": `Key, row ${index + 1}`, onChange: (key) => updateRow(index, { key }) }) }), _jsx(TableCell, { className: "hc-key-value-editor-cell", children: _jsx(VariableInput, { wrapperClassName: `${fieldFrame} w-full`, value: normalizedRow.value, onChange: (value) => updateRow(index, { value }), variables: variables, source: valueSource, placeholder: placeholderValue, "aria-label": `Value, row ${index + 1}`, onEditVariable: onEditVariable }) }), _jsx(TableCell, { className: "hc-key-value-editor-cell w-7 p-1 text-center", children: _jsx(Button, { type: "button", variant: "iconDanger", onClick: () => removeRow(index), title: "Remove", "aria-label": `Remove row ${index + 1}`, children: _jsx(FaIcon, { icon: faXmark, className: "h-3.5 w-3.5" }) }) })] }, index));
|
|
45
45
|
}) })] }));
|
|
46
46
|
}
|
|
@@ -142,7 +142,7 @@ export function MethodSelectMenu({ anchorRef, listboxId, value, onSelect, onClos
|
|
|
142
142
|
return null;
|
|
143
143
|
}
|
|
144
144
|
const menuWidth = Math.max(LISTBOX_WIDTH_PX, anchorRef.current?.getBoundingClientRect().width ?? LISTBOX_WIDTH_PX);
|
|
145
|
-
return portalToBody(_jsxs("div", { ref: listboxRef, id: listboxId, role: "listbox", "aria-label": "Request method or protocol", className: "hc-method-select-listbox
|
|
145
|
+
return portalToBody(_jsxs("div", { ref: listboxRef, id: listboxId, role: "listbox", "aria-label": "Request method or protocol", className: "hc-method-select-listbox fixed z-50 max-h-[320px] overflow-y-auto rounded-md border border-separator bg-surface py-1 shadow-md", style: { top: position.y, left: position.x, width: menuWidth }, onKeyDown: handleListboxKeyDown, children: [METHODS.map((method, index) => (_jsx(MethodSelectOption, { label: method, colorKey: method, selected: method === value, focused: index === focusedIndex, optionRef: (element) => {
|
|
146
146
|
optionRefs.current[index] = element;
|
|
147
147
|
}, onSelect: () => onSelect(method) }, method))), _jsx(MethodSelectSeparator, {}), _jsx(MethodSelectOption, { label: "SSE", colorKey: "sse", selected: value === 'SSE', focused: focusedIndex === SSE_OPTION_INDEX, optionRef: (element) => {
|
|
148
148
|
optionRefs.current[SSE_OPTION_INDEX] = element;
|
|
@@ -8,7 +8,7 @@ import { cn } from '../utils.js';
|
|
|
8
8
|
* @returns Accessible listbox option button.
|
|
9
9
|
*/
|
|
10
10
|
export function MethodSelectOption({ label, colorKey, selected, focused, optionRef, onSelect }) {
|
|
11
|
-
return (_jsx("button", { ref: optionRef, type: "button", role: "option", "aria-selected": selected, tabIndex: focused ? 0 : -1, className: cn('
|
|
11
|
+
return (_jsx("button", { ref: optionRef, type: "button", role: "option", "aria-selected": selected, tabIndex: focused ? 0 : -1, className: cn('flex w-full cursor-pointer items-center border-none bg-transparent px-3.5 py-1.5 text-left text-[14px] font-normal hover:bg-selection', methodColorClass(colorKey), selected ? 'bg-selection/60' : ''), onClick: (event) => {
|
|
12
12
|
event.stopPropagation();
|
|
13
13
|
onSelect();
|
|
14
14
|
}, children: label }));
|
|
@@ -48,5 +48,5 @@ export function MethodSelect({ value, protocol = 'http', onChange, onProtocolCha
|
|
|
48
48
|
const toggleOpen = useCallback(() => {
|
|
49
49
|
setOpen((wasOpen) => !wasOpen);
|
|
50
50
|
}, []);
|
|
51
|
-
return (_jsxs(_Fragment, { children: [_jsx("button", { ...props, ref: triggerRef, type: "button", role: "combobox", "aria-expanded": open, "aria-controls": listboxId, "aria-haspopup": "listbox", "aria-label": "Request method or protocol", className: cn('hc-method-select
|
|
51
|
+
return (_jsxs(_Fragment, { children: [_jsx("button", { ...props, ref: triggerRef, type: "button", role: "combobox", "aria-expanded": open, "aria-controls": listboxId, "aria-haspopup": "listbox", "aria-label": "Request method or protocol", className: cn('hc-method-select w-[100px] shrink-0 cursor-pointer border-none bg-transparent px-2 py-1.5 text-left text-[14px] leading-none font-normal focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent', methodColorClass(colorKey), className), onClick: toggleOpen, children: selectValue }), open ? (_jsx(MethodSelectMenu, { anchorRef: triggerRef, listboxId: listboxId, value: selectValue, onSelect: handleSelect, onClose: handleClose })) : null] }));
|
|
52
52
|
}
|
|
@@ -12,7 +12,7 @@ export function ResizeHandle({ orientation, value, min, max, onResizeStart, onKe
|
|
|
12
12
|
const valueText = formatValueText
|
|
13
13
|
? formatValueText(value, orientation)
|
|
14
14
|
: `${dimension} ${Math.round(value)} pixels`;
|
|
15
|
-
return (_jsx("div", { ...props, role: "separator", tabIndex: 0, className: cn('hc-resize-handle font-inherit
|
|
15
|
+
return (_jsx("div", { ...props, role: "separator", tabIndex: 0, className: cn('hc-resize-handle font-inherit m-0 flex shrink-0 items-center justify-center bg-resize-separator p-0 text-inherit hover:bg-selection/60', isHorizontal
|
|
16
16
|
? 'h-1.5 w-full cursor-row-resize border-b border-resize-separator'
|
|
17
17
|
: 'h-full w-1.5 cursor-col-resize border-r border-resize-separator', className), onMouseDown: onResizeStart, onKeyDown: onKeyboardResize, "aria-orientation": orientation, "aria-label": ariaLabel, "aria-valuenow": Math.round(value), "aria-valuemin": min, "aria-valuemax": Math.round(max), "aria-valuetext": valueText, children: _jsx("div", { className: isHorizontal
|
|
18
18
|
? 'hc-resize-handle-grip h-0.5 w-8 rounded-full bg-resize-handle'
|
|
@@ -21,5 +21,5 @@ export declare function getFooterPanelMaxSize(containerRef: RefObject<HTMLDivEle
|
|
|
21
21
|
*/
|
|
22
22
|
export declare function footerPanelClassName(open: boolean): string;
|
|
23
23
|
/** Shared close-button styling for footer slide-up panels. */
|
|
24
|
-
export declare const footerPanelCloseButtonClassName = "inline-flex h-7 w-7 shrink-0 cursor-pointer items-center justify-center self-center rounded-full border-none bg-transparent text-[14px] text-muted hover:bg-selection hover:text-text
|
|
24
|
+
export declare const footerPanelCloseButtonClassName = "inline-flex h-7 w-7 shrink-0 cursor-pointer items-center justify-center self-center rounded-full border-none bg-transparent text-[14px] text-muted hover:bg-selection hover:text-text";
|
|
25
25
|
//# sourceMappingURL=footerPanelUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"footerPanelUtils.d.ts","sourceRoot":"","sources":["../../../src/components/Resizable/footerPanelUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,sDAAsD;AACtD,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,sDAAsD;AACtD,eAAO,MAAM,UAAU,MAAM,CAAC;AAiC9B;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,MAAM,CAI5F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAQ1D;AAED,8DAA8D;AAC9D,eAAO,MAAM,+BAA+B,
|
|
1
|
+
{"version":3,"file":"footerPanelUtils.d.ts","sourceRoot":"","sources":["../../../src/components/Resizable/footerPanelUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,sDAAsD;AACtD,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,sDAAsD;AACtD,eAAO,MAAM,UAAU,MAAM,CAAC;AAiC9B;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,MAAM,CAI5F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAQ1D;AAED,8DAA8D;AAC9D,eAAO,MAAM,+BAA+B,0LAC6I,CAAC"}
|
|
@@ -51,11 +51,11 @@ export function getFooterPanelMaxSize(containerRef) {
|
|
|
51
51
|
export function footerPanelClassName(open) {
|
|
52
52
|
return [
|
|
53
53
|
'absolute inset-x-0 bottom-full z-40 flex flex-col border-t border-separator bg-surface',
|
|
54
|
-
'transition-transform duration-300 ease-out
|
|
54
|
+
'transition-transform duration-300 ease-out',
|
|
55
55
|
open
|
|
56
56
|
? 'translate-y-0 shadow-[0_-4px_16px_rgba(0,0,0,0.12)]'
|
|
57
57
|
: 'translate-y-full pointer-events-none shadow-none'
|
|
58
58
|
].join(' ');
|
|
59
59
|
}
|
|
60
60
|
/** Shared close-button styling for footer slide-up panels. */
|
|
61
|
-
export const footerPanelCloseButtonClassName = 'inline-flex h-7 w-7 shrink-0 cursor-pointer items-center justify-center self-center rounded-full border-none bg-transparent text-[14px] text-muted hover:bg-selection hover:text-text
|
|
61
|
+
export const footerPanelCloseButtonClassName = 'inline-flex h-7 w-7 shrink-0 cursor-pointer items-center justify-center self-center rounded-full border-none bg-transparent text-[14px] text-muted hover:bg-selection hover:text-text';
|
|
@@ -134,7 +134,7 @@ export function Submenu({ groups, anchorRect, menuElementId, onSelectItem, onReq
|
|
|
134
134
|
focusItem(typeahead.index);
|
|
135
135
|
}
|
|
136
136
|
};
|
|
137
|
-
return portalToBody(_jsx("div", { ref: panelRef, id: menuElementId, role: "menu", className: "hc-row-actions-menu-panel hc-row-actions-submenu-panel
|
|
137
|
+
return portalToBody(_jsx("div", { ref: panelRef, id: menuElementId, role: "menu", className: "hc-row-actions-menu-panel hc-row-actions-submenu-panel fixed z-50 min-w-[200px] rounded-md border border-separator bg-surface py-1 shadow-md", style: { left: position.x, top: position.y }, onKeyDown: handleKeyDown, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, children: groups.map((group, groupIndex) => {
|
|
138
138
|
let flatIndex = groups.slice(0, groupIndex).reduce((count, g) => count + g.length, 0);
|
|
139
139
|
return (_jsx("div", { className: groupIndex > 0
|
|
140
140
|
? 'hc-row-actions-menu-group border-t border-separator'
|
|
@@ -370,7 +370,7 @@ export function RowActionsMenu({ groups, menuId, openMenuId, onOpenChange, trigg
|
|
|
370
370
|
};
|
|
371
371
|
const openSubmenuItem = openSubmenuIndex != null ? flatItems[openSubmenuIndex] : undefined;
|
|
372
372
|
const openSubmenuAnchorRect = openSubmenuIndex != null ? itemRefs.current[openSubmenuIndex]?.getBoundingClientRect() : null;
|
|
373
|
-
const menuPanel = isOpen ? (_jsx("div", { ref: panelRef, id: menuElementId, role: "menu", tabIndex: hasEnabledItems ? undefined : -1, className: "hc-row-actions-menu-panel
|
|
373
|
+
const menuPanel = isOpen ? (_jsx("div", { ref: panelRef, id: menuElementId, role: "menu", tabIndex: hasEnabledItems ? undefined : -1, className: "hc-row-actions-menu-panel fixed z-50 min-w-[200px] rounded-md border border-separator bg-surface py-1 shadow-md", style: { left: menuPosition.x, top: menuPosition.y }, onKeyDown: handleMenuKeyDown, onMouseLeave: () => {
|
|
374
374
|
if (openSubmenuIndex != null) {
|
|
375
375
|
scheduleCloseSubmenu();
|
|
376
376
|
}
|
|
@@ -28,10 +28,10 @@ function variantClasses(variant, interactive) {
|
|
|
28
28
|
const base = 'hc-sidebar-badge inline-flex h-[18px] shrink-0 items-center text-[14px] leading-none';
|
|
29
29
|
if (variant === 'recessed') {
|
|
30
30
|
return cn(base, 'min-w-[22px] justify-center rounded-full bg-selection px-2 font-normal text-muted shadow-[inset_0_0.5px_1px_rgba(0,0,0,0.06)]', interactive &&
|
|
31
|
-
'
|
|
31
|
+
'cursor-pointer hover:text-text focus-visible:ring-2 focus-visible:ring-accent focus-visible:outline-none');
|
|
32
32
|
}
|
|
33
33
|
return cn(base, 'rounded bg-info/15 px-1.5 font-medium text-info', interactive &&
|
|
34
|
-
'
|
|
34
|
+
'cursor-pointer hover:bg-info/25 focus-visible:ring-2 focus-visible:ring-accent focus-visible:outline-none');
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
37
|
* Compact sidebar badge for storage locations, git branches, and count indicators.
|
|
@@ -24,5 +24,5 @@ function pushStatusLabel(pushStatus) {
|
|
|
24
24
|
*/
|
|
25
25
|
export function SidebarCommitItem({ message, author, timestampLabel, icon, pushStatus, onClick, as: Container = 'li' }) {
|
|
26
26
|
const statusLabel = pushStatus != null ? pushStatusLabel(pushStatus) : null;
|
|
27
|
-
return (_jsx(Container, { children: _jsxs("button", { type: "button", className: "hc-sidebar-commit-item group
|
|
27
|
+
return (_jsx(Container, { children: _jsxs("button", { type: "button", className: "hc-sidebar-commit-item group flex w-full cursor-pointer rounded-md p-2 text-left hover:bg-selection/60", onClick: onClick, children: [_jsxs("div", { className: "mr-2 flex shrink-0 flex-col items-center gap-0.5 self-start", children: [_jsx(FaIcon, { icon: icon, className: "h-4 w-4 text-muted", "aria-hidden": true }), pushStatus != null && statusLabel != null ? (_jsx(SidebarStatusDot, { className: pushStatus === 'pushed' ? 'mt-3 mr-1 bg-success' : 'mt-3 mr-1 bg-muted', srOnlyLabel: statusLabel, title: statusLabel })) : null] }), _jsxs("div", { className: "flex min-w-0 flex-col gap-0.5", children: [_jsx("span", { className: "-mt-1 block min-w-0 truncate font-medium text-text", children: message }), _jsxs("span", { className: "block min-w-0 truncate text-[14px] text-muted", children: [author, " \u00B7 ", timestampLabel] })] })] }) }));
|
|
28
28
|
}
|
|
@@ -40,5 +40,5 @@ export function SidebarFolderItem({ name, expanded, childrenId, level, setSize,
|
|
|
40
40
|
: undefined, children: [_jsx("button", { type: "button", className: SIDEBAR_CHEVRON_BUTTON_CLASS, onClick: (event) => {
|
|
41
41
|
event.stopPropagation();
|
|
42
42
|
onToggleExpand();
|
|
43
|
-
}, onPointerDown: stopSortableDragPointerDown, tabIndex: -1, "aria-label": chevronLabel, children: _jsx(FaIcon, { icon: expanded ? collapseIcon : expandIcon, className: SIDEBAR_CHEVRON_ICON_CLASS }) }), _jsxs("span", { className:
|
|
43
|
+
}, onPointerDown: stopSortableDragPointerDown, tabIndex: -1, "aria-label": chevronLabel, children: _jsx(FaIcon, { icon: expanded ? collapseIcon : expandIcon, className: SIDEBAR_CHEVRON_ICON_CLASS }) }), _jsxs("span", { className: `${SIDEBAR_CHEVRON_LABEL_OFFSET_CLASS} min-w-0 flex-1 cursor-pointer truncate border-none bg-transparent py-0 text-left leading-none font-medium text-inherit`, "aria-current": selected ? 'true' : undefined, children: [_jsxs("span", { className: "inline-flex min-w-0 items-center gap-1.5", children: [name, markerDot != null ? (_jsx(SidebarMarkerDot, { marker: markerDot.marker, visible: markerDot.visible, label: markerDot.label })) : null] }), dropHighlighted ? _jsx("span", { className: "ml-1.5 font-normal text-info", children: "Drop here" }) : null] })] }));
|
|
44
44
|
}
|
|
@@ -29,6 +29,10 @@ interface Props {
|
|
|
29
29
|
* When false, renders the method badge in neutral theme text instead of per-method colors.
|
|
30
30
|
*/
|
|
31
31
|
methodColors?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* When true, shows a danger badge indicating stored JSON for this entry was corrupt.
|
|
34
|
+
*/
|
|
35
|
+
corrupt?: boolean;
|
|
32
36
|
/**
|
|
33
37
|
* Icon shown for run history entries.
|
|
34
38
|
*/
|
|
@@ -69,6 +73,6 @@ interface Props {
|
|
|
69
73
|
/**
|
|
70
74
|
* Renders a request or run history entry row in the Collections sidebar History section.
|
|
71
75
|
*/
|
|
72
|
-
export declare function SidebarHistoryItem({ method, name, isRun, status, statusText, statusDotVisible, methodColors, runIcon, selected, title, ariaLabel, onContextMenu, onClick, actions, as, className }: Props): JSX.Element;
|
|
76
|
+
export declare function SidebarHistoryItem({ method, name, isRun, status, statusText, statusDotVisible, methodColors, corrupt, runIcon, selected, title, ariaLabel, onContextMenu, onClick, actions, as, className }: Props): JSX.Element;
|
|
73
77
|
export {};
|
|
74
78
|
//# sourceMappingURL=SidebarHistoryItem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarHistoryItem.d.ts","sourceRoot":"","sources":["../../../src/components/SidebarItem/SidebarHistoryItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SidebarHistoryItem.d.ts","sourceRoot":"","sources":["../../../src/components/SidebarItem/SidebarHistoryItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQxD,UAAU,KAAK;IACb;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;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,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,IAAI,EACJ,KAAa,EACb,MAAM,EACN,UAAU,EACV,gBAAuB,EACvB,YAAmB,EACnB,OAAe,EACf,OAAO,EACP,QAAgB,EAChB,KAAK,EACL,SAAS,EACT,aAAa,EACb,OAAO,EACP,OAAO,EACP,EAAS,EACT,SAAS,EACV,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CA+CrB"}
|