@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.
Files changed (70) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/components/AnchorMenuPanel/index.js +1 -1
  3. package/dist/components/Breadcrumb/CrumbSegment.js +1 -1
  4. package/dist/components/Breadcrumb/EditableSegment.js +2 -2
  5. package/dist/components/Button/index.js +1 -1
  6. package/dist/components/CodeEditor/index.d.ts +2 -2
  7. package/dist/components/CodeEditor/index.js +5 -5
  8. package/dist/components/CodeEditor/selectionActionToolbar.d.ts +11 -7
  9. package/dist/components/CodeEditor/selectionActionToolbar.d.ts.map +1 -1
  10. package/dist/components/CodeEditor/selectionActionToolbar.js +39 -10
  11. package/dist/components/CopyToChatButton/index.js +1 -1
  12. package/dist/components/FooterButton/index.js +2 -2
  13. package/dist/components/FooterIcon/index.js +1 -1
  14. package/dist/components/FormDataEditor/index.d.ts.map +1 -1
  15. package/dist/components/FormDataEditor/index.js +2 -2
  16. package/dist/components/FormGroup/index.js +2 -2
  17. package/dist/components/KeyValueEditor/index.d.ts.map +1 -1
  18. package/dist/components/KeyValueEditor/index.js +1 -1
  19. package/dist/components/MethodSelect/MethodSelectMenu.js +1 -1
  20. package/dist/components/MethodSelect/MethodSelectOption.js +1 -1
  21. package/dist/components/MethodSelect/index.js +1 -1
  22. package/dist/components/Resizable/ResizeHandle.js +1 -1
  23. package/dist/components/Resizable/footerPanelUtils.d.ts +1 -1
  24. package/dist/components/Resizable/footerPanelUtils.d.ts.map +1 -1
  25. package/dist/components/Resizable/footerPanelUtils.js +2 -2
  26. package/dist/components/RowActionsMenu/Submenu.js +1 -1
  27. package/dist/components/RowActionsMenu/index.js +1 -1
  28. package/dist/components/SidebarItem/SidebarBadge.js +2 -2
  29. package/dist/components/SidebarItem/SidebarCommitItem.js +1 -1
  30. package/dist/components/SidebarItem/SidebarFolderItem.js +1 -1
  31. package/dist/components/SidebarItem/SidebarHistoryItem.d.ts +5 -1
  32. package/dist/components/SidebarItem/SidebarHistoryItem.d.ts.map +1 -1
  33. package/dist/components/SidebarItem/SidebarHistoryItem.js +3 -2
  34. package/dist/components/SidebarItem/sidebarItemClasses.d.ts +3 -3
  35. package/dist/components/SidebarItem/sidebarItemClasses.d.ts.map +1 -1
  36. package/dist/components/SidebarItem/sidebarItemClasses.js +5 -5
  37. package/dist/components/SidebarRail/SidebarRailItem.js +1 -1
  38. package/dist/components/SidebarRail/index.js +2 -2
  39. package/dist/components/SidebarSection/SectionItem.js +1 -1
  40. package/dist/components/SortButton/SortMenu.js +1 -1
  41. package/dist/components/SortButton/SortMenuOption.js +1 -1
  42. package/dist/components/TabBar/TabBarShell.js +1 -1
  43. package/dist/components/TabBar/TabContextMenu.js +1 -1
  44. package/dist/components/TabBar/TabNewButton.js +2 -2
  45. package/dist/components/TabBar/index.d.ts.map +1 -1
  46. package/dist/components/TabBar/index.js +2 -2
  47. package/dist/components/TabCloseButton/index.js +1 -1
  48. package/dist/components/Toolbar/index.js +2 -2
  49. package/dist/components/VariableInput/index.d.ts +2 -2
  50. package/dist/components/VariableInput/index.js +2 -2
  51. package/dist/components/VariableTooltip/dom.js +2 -2
  52. package/dist/components/VisibilityMenu/MenuCheckboxItem.js +1 -1
  53. package/dist/components/VisibilityMenu/index.js +1 -1
  54. package/dist/components/classes.d.ts +1 -1
  55. package/dist/components/classes.d.ts.map +1 -1
  56. package/dist/components/classes.js +5 -5
  57. package/dist/components/forms/classes.d.ts +1 -1
  58. package/dist/components/forms/classes.d.ts.map +1 -1
  59. package/dist/components/forms/classes.js +1 -1
  60. package/dist/components/rowActionsMenuHelpers.d.ts.map +1 -1
  61. package/dist/components/rowActionsMenuHelpers.js +1 -1
  62. package/dist/http/resolveRequest.d.ts +3 -0
  63. package/dist/http/resolveRequest.d.ts.map +1 -1
  64. package/dist/http/resolveRequest.js +4 -1
  65. package/dist/http/substitute.d.ts +1 -0
  66. package/dist/http/substitute.d.ts.map +1 -1
  67. package/dist/http/substitute.js +9 -0
  68. package/dist/types.d.ts +54 -35
  69. package/dist/types.d.ts.map +1 -1
  70. 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 app-no-drag 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: () => {
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, 'app-no-drag 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 })) }));
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: "app-no-drag 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) => {
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: "app-no-drag 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 })] })) }));
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 app-no-drag';
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`) and the `.app-no-drag`
287
- * class defined in HarborClient `styles.css`.
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`) and the `.app-no-drag`
451
- * class defined in HarborClient `styles.css`.
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)] app-no-drag';
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 app-no-drag 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: {
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 app-no-drag 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) => {
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
- * When true, ignore collapsed-selection dismissals that race pointerup
44
- * (CodeMirror may collapse into the gutter in the same event turn).
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 (or
121
- * immediately after pointerup) do not dismiss a previously captured selection.
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 show helpers.
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":"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"}
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 (or
75
- * immediately after pointerup) do not dismiss a previously captured selection.
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 immediately after pointer finalize, CodeMirror may collapse
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.isPointerSelecting || controller.suppressCollapseDismiss) {
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.isPointerSelecting || controller.suppressCollapseDismiss) {
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 show helpers.
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 app-no-drag 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';
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 app-no-drag'
9
- : 'cursor-pointer rounded-md border-none bg-transparent px-2 py-0.5 text-[14px] text-footer-muted hover:text-footer-text app-no-drag';
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 app-no-drag`;
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,CAyKrB"}
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, { className: "app-no-drag", 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) => {
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`, className: "app-no-drag", 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: "app-no-drag 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))) })] }));
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 app-no-drag ${extra}`
62
- : 'hc-form-group inline-flex cursor-pointer items-center gap-1.5 text-text app-no-drag';
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,CAoGrB"}
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, { className: "app-no-drag", 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`, className: "app-no-drag", 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));
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 app-no-drag 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) => {
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('app-no-drag 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) => {
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 app-no-drag 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] }));
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 app-no-drag m-0 flex shrink-0 items-center justify-center bg-resize-separator p-0 text-inherit hover:bg-selection/60', isHorizontal
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 app-no-drag";
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,sMACyJ,CAAC"}
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 app-no-drag',
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 app-no-drag';
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 app-no-drag 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) => {
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 app-no-drag 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: () => {
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
- 'app-no-drag cursor-pointer hover:text-text focus-visible:ring-2 focus-visible:ring-accent focus-visible:outline-none');
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
- 'app-no-drag cursor-pointer hover:bg-info/25 focus-visible:ring-2 focus-visible:ring-accent focus-visible:outline-none');
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 app-no-drag 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] })] })] }) }));
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: `app-no-drag ${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] })] }));
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;AAOxD,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,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,OAAO,EACP,QAAgB,EAChB,KAAK,EACL,SAAS,EACT,aAAa,EACb,OAAO,EACP,OAAO,EACP,EAAS,EACT,SAAS,EACV,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CA0CrB"}
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"}