@harborclient/sdk 1.0.21 → 1.0.25

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 (93) hide show
  1. package/README.md +1 -1
  2. package/dist/components/AsyncListState/index.js +3 -3
  3. package/dist/components/Autocomplete/SuggestionList.js +3 -3
  4. package/dist/components/BackButton/index.js +1 -1
  5. package/dist/components/BusyIndicator/index.js +1 -1
  6. package/dist/components/Button/index.js +1 -1
  7. package/dist/components/CodeEditor/config.d.ts +4 -0
  8. package/dist/components/CodeEditor/config.d.ts.map +1 -1
  9. package/dist/components/CodeEditor/config.js +3 -2
  10. package/dist/components/CodeEditor/editorChrome.d.ts +23 -0
  11. package/dist/components/CodeEditor/editorChrome.d.ts.map +1 -0
  12. package/dist/components/CodeEditor/editorChrome.js +136 -0
  13. package/dist/components/CodeEditor/index.d.ts +133 -1
  14. package/dist/components/CodeEditor/index.d.ts.map +1 -1
  15. package/dist/components/CodeEditor/index.js +389 -134
  16. package/dist/components/CodeEditor/renderHighlightedPlaceholder.d.ts +32 -0
  17. package/dist/components/CodeEditor/renderHighlightedPlaceholder.d.ts.map +1 -0
  18. package/dist/components/CodeEditor/renderHighlightedPlaceholder.js +105 -0
  19. package/dist/components/CodeEditor/slashCommandHighlighter.d.ts +17 -0
  20. package/dist/components/CodeEditor/slashCommandHighlighter.d.ts.map +1 -0
  21. package/dist/components/CodeEditor/slashCommandHighlighter.js +56 -0
  22. package/dist/components/CodeEditor/syntaxHighlightedPlaceholder.d.ts +15 -0
  23. package/dist/components/CodeEditor/syntaxHighlightedPlaceholder.d.ts.map +1 -0
  24. package/dist/components/CodeEditor/syntaxHighlightedPlaceholder.js +99 -0
  25. package/dist/components/EmptyState/index.js +1 -1
  26. package/dist/components/FooterButton/index.js +2 -2
  27. package/dist/components/FooterIcon/index.js +1 -1
  28. package/dist/components/FormDataEditor/index.js +2 -2
  29. package/dist/components/FormGroup/index.d.ts.map +1 -1
  30. package/dist/components/FormGroup/index.js +7 -5
  31. package/dist/components/KeyValueEditor/index.js +2 -2
  32. package/dist/components/Modal/ModalFooter.d.ts.map +1 -1
  33. package/dist/components/Modal/ModalFooter.js +3 -1
  34. package/dist/components/Modal/ModalHeader.d.ts.map +1 -1
  35. package/dist/components/Modal/ModalHeader.js +1 -1
  36. package/dist/components/Modal/index.js +1 -1
  37. package/dist/components/OverlayCloseButton/index.js +1 -1
  38. package/dist/components/Page/index.js +1 -1
  39. package/dist/components/PageHeader/index.d.ts.map +1 -1
  40. package/dist/components/PageHeader/index.js +1 -1
  41. package/dist/components/PageSidebar/index.d.ts.map +1 -1
  42. package/dist/components/PageSidebar/index.js +6 -6
  43. package/dist/components/PanelCloseButton/index.js +1 -1
  44. package/dist/components/Resizable/Resizable.js +2 -2
  45. package/dist/components/Resizable/ResizeHandle.d.ts.map +1 -1
  46. package/dist/components/Resizable/ResizeHandle.js +4 -2
  47. package/dist/components/Resizable/footerPanelUtils.d.ts +1 -1
  48. package/dist/components/Resizable/footerPanelUtils.d.ts.map +1 -1
  49. package/dist/components/Resizable/footerPanelUtils.js +1 -1
  50. package/dist/components/Resizable/useResizable.d.ts +5 -4
  51. package/dist/components/Resizable/useResizable.d.ts.map +1 -1
  52. package/dist/components/Resizable/useResizable.js +19 -10
  53. package/dist/components/ResourceList/index.d.ts.map +1 -1
  54. package/dist/components/ResourceList/index.js +5 -5
  55. package/dist/components/RowActionsMenu/index.d.ts.map +1 -1
  56. package/dist/components/RowActionsMenu/index.js +6 -4
  57. package/dist/components/SegmentedTabs/SegmentedTabPanel.js +1 -1
  58. package/dist/components/SegmentedTabs/SegmentedTabsVisibilityMenu.js +4 -4
  59. package/dist/components/SegmentedTabs/index.d.ts.map +1 -1
  60. package/dist/components/SegmentedTabs/index.js +6 -3
  61. package/dist/components/SegmentedTabs/types.d.ts +3 -1
  62. package/dist/components/SegmentedTabs/types.d.ts.map +1 -1
  63. package/dist/components/SidebarLayout/index.js +1 -1
  64. package/dist/components/Spinner/index.js +1 -1
  65. package/dist/components/TabCloseButton/index.js +1 -1
  66. package/dist/components/Table/index.d.ts.map +1 -1
  67. package/dist/components/Table/index.js +7 -6
  68. package/dist/components/Toolbar/index.d.ts +75 -0
  69. package/dist/components/Toolbar/index.d.ts.map +1 -0
  70. package/dist/components/Toolbar/index.js +38 -0
  71. package/dist/components/VariableInput/index.d.ts.map +1 -1
  72. package/dist/components/VariableInput/index.js +6 -4
  73. package/dist/components/VariableTable/index.d.ts.map +1 -1
  74. package/dist/components/VariableTable/index.js +1 -1
  75. package/dist/components/classes.js +2 -2
  76. package/dist/components/forms/Checkbox.d.ts.map +1 -1
  77. package/dist/components/forms/Checkbox.js +1 -1
  78. package/dist/components/forms/Radio.js +1 -1
  79. package/dist/components/forms/classes.d.ts +4 -4
  80. package/dist/components/forms/classes.d.ts.map +1 -1
  81. package/dist/components/forms/classes.js +4 -4
  82. package/dist/components/index.d.ts +3 -1
  83. package/dist/components/index.d.ts.map +1 -1
  84. package/dist/components/index.js +1 -0
  85. package/dist/styles.css +80 -0
  86. package/dist/styles.css.d.ts +2 -0
  87. package/dist/ui/codeEditorSettings.d.ts +15 -0
  88. package/dist/ui/codeEditorSettings.d.ts.map +1 -1
  89. package/dist/ui/codeEditorSettings.js +40 -0
  90. package/dist/ui/index.d.ts +1 -1
  91. package/dist/ui/index.d.ts.map +1 -1
  92. package/dist/ui/index.js +1 -1
  93. package/package.json +10 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderHighlightedPlaceholder.d.ts","sourceRoot":"","sources":["../../../src/components/CodeEditor/renderHighlightedPlaceholder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAiC,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGpG;;GAEG;AACH,MAAM,WAAW,mCAAmC;IAClD;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,KAAK,EAAE,eAAe,CAAC;IAEvB;;OAEG;IACH,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACpC;AA8DD;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,mCAAmC,GAC3C,WAAW,CA4Cb"}
@@ -0,0 +1,105 @@
1
+ import { javascript } from '@codemirror/lang-javascript';
2
+ import { EditorState } from '@codemirror/state';
3
+ import { EditorView } from '@codemirror/view';
4
+ import { createBuiltInSyntaxHighlighting } from './editorChrome.js';
5
+ import { createSlashCommandHighlighter } from './slashCommandHighlighter.js';
6
+ import { getCodeEditorThemeExtension } from './themes.js';
7
+ const renderCache = new Map();
8
+ /**
9
+ * Builds a stable cache key for rendered placeholder DOM.
10
+ *
11
+ * @param text - Placeholder source text.
12
+ * @param options - Theme and highlighting options.
13
+ */
14
+ function buildRenderCacheKey(text, options) {
15
+ const slashNames = options.slashCommands?.map((command) => command.name).join(',') ?? '';
16
+ return [text, options.fontSize, String(options.isDark), options.theme, slashNames].join('\0');
17
+ }
18
+ /**
19
+ * Builds CodeMirror extensions for the offscreen placeholder render pass.
20
+ *
21
+ * @param options - Theme and highlighting options.
22
+ */
23
+ function buildOffscreenPlaceholderExtensions(options) {
24
+ const extensions = [
25
+ javascript(),
26
+ EditorView.lineWrapping,
27
+ EditorView.editable.of(false),
28
+ EditorState.readOnly.of(true),
29
+ EditorView.theme({
30
+ '&': { backgroundColor: 'transparent' },
31
+ '.cm-scroller': { overflow: 'hidden' },
32
+ '.cm-content': {
33
+ padding: '0',
34
+ fontFamily: 'var(--font-mono)',
35
+ fontSize: options.fontSize
36
+ },
37
+ '.cm-line': { padding: '0' },
38
+ '.cm-activeLine': { backgroundColor: 'transparent' },
39
+ '.cm-slash-command': {
40
+ color: 'var(--mac-accent)'
41
+ },
42
+ '.cm-slash-command-args': {
43
+ color: 'var(--mac-muted)',
44
+ fontStyle: 'italic'
45
+ }
46
+ })
47
+ ];
48
+ const themeExtension = getCodeEditorThemeExtension(options.theme);
49
+ if (themeExtension) {
50
+ extensions.push(themeExtension);
51
+ }
52
+ else {
53
+ extensions.push(createBuiltInSyntaxHighlighting(options.isDark));
54
+ }
55
+ if (options.slashCommands && options.slashCommands.length > 0) {
56
+ extensions.push(createSlashCommandHighlighter(options.slashCommands));
57
+ }
58
+ return extensions;
59
+ }
60
+ /**
61
+ * Renders highlighted placeholder markup via a hidden offscreen editor, then clones
62
+ * the resulting line nodes into a flat inline placeholder element.
63
+ *
64
+ * @param text - Placeholder source shown until the user focuses or types.
65
+ * @param options - Highlighting and theme options shared with the parent editor.
66
+ */
67
+ export function renderHighlightedPlaceholderDom(text, options) {
68
+ const cacheKey = buildRenderCacheKey(text, options);
69
+ const cached = renderCache.get(cacheKey);
70
+ if (cached) {
71
+ return cached.cloneNode(true);
72
+ }
73
+ const host = document.createElement('div');
74
+ host.style.cssText = 'position:fixed;left:-10000px;top:0;visibility:hidden;pointer-events:none;';
75
+ document.body.appendChild(host);
76
+ const view = new EditorView({
77
+ state: EditorState.create({
78
+ doc: text,
79
+ extensions: buildOffscreenPlaceholderExtensions(options)
80
+ }),
81
+ parent: host
82
+ });
83
+ const wrap = document.createElement('span');
84
+ wrap.className = 'cm-placeholder cm-syntax-placeholder';
85
+ wrap.style.pointerEvents = 'none';
86
+ wrap.style.display = 'inline-block';
87
+ wrap.style.verticalAlign = 'top';
88
+ wrap.style.whiteSpace = 'pre-wrap';
89
+ wrap.style.opacity = '0.55';
90
+ wrap.style.fontFamily = 'var(--font-mono)';
91
+ wrap.style.fontSize = options.fontSize;
92
+ wrap.style.userSelect = 'none';
93
+ wrap.style.width = '100%';
94
+ wrap.setAttribute('aria-hidden', 'true');
95
+ const content = view.dom.querySelector('.cm-content');
96
+ if (content) {
97
+ for (const line of content.querySelectorAll('.cm-line')) {
98
+ wrap.appendChild(line.cloneNode(true));
99
+ }
100
+ }
101
+ view.destroy();
102
+ host.remove();
103
+ renderCache.set(cacheKey, wrap.cloneNode(true));
104
+ return wrap;
105
+ }
@@ -0,0 +1,17 @@
1
+ import type { Extension } from '@codemirror/state';
2
+ /**
3
+ * Minimal slash-command shape required for line highlighting.
4
+ */
5
+ export interface SlashCommandSpec {
6
+ /**
7
+ * Command name without the leading slash (for example `ask`).
8
+ */
9
+ name: string;
10
+ }
11
+ /**
12
+ * Returns a ViewPlugin extension that accents slash commands at the start of a line.
13
+ *
14
+ * @param commands - Registered slash commands to decorate.
15
+ */
16
+ export declare function createSlashCommandHighlighter(commands: SlashCommandSpec[]): Extension;
17
+ //# sourceMappingURL=slashCommandHighlighter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slashCommandHighlighter.d.ts","sourceRoot":"","sources":["../../../src/components/CodeEditor/slashCommandHighlighter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAeD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,SAAS,CA+CrF"}
@@ -0,0 +1,56 @@
1
+ import { Decoration, MatchDecorator, ViewPlugin } from '@codemirror/view';
2
+ /**
3
+ * Builds a MatchDecorator regexp that highlights registered slash commands at line start.
4
+ *
5
+ * @param commands - Slash command names to highlight.
6
+ */
7
+ function slashCommandHighlightPattern(commands) {
8
+ const names = commands.map((entry) => entry.name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
9
+ if (names.length === 0) {
10
+ return /(?!)/g;
11
+ }
12
+ return new RegExp(`^(\\s*)(/(?:${names.join('|')}))([ \\t]+.*)?$`, 'gm');
13
+ }
14
+ /**
15
+ * Returns a ViewPlugin extension that accents slash commands at the start of a line.
16
+ *
17
+ * @param commands - Registered slash commands to decorate.
18
+ */
19
+ export function createSlashCommandHighlighter(commands) {
20
+ const slashMatcher = new MatchDecorator({
21
+ regexp: slashCommandHighlightPattern(commands),
22
+ /**
23
+ * Applies accent styling to the command token and muted italic styling to args.
24
+ */
25
+ decorate: (add, from, _to, match) => {
26
+ const leading = match[1] ?? '';
27
+ const command = match[2] ?? '';
28
+ const args = match[3];
29
+ const commandFrom = from + leading.length;
30
+ const commandTo = commandFrom + command.length;
31
+ add(commandFrom, commandTo, Decoration.mark({ class: 'cm-slash-command' }));
32
+ if (args) {
33
+ add(commandTo, commandTo + args.length, Decoration.mark({ class: 'cm-slash-command-args' }));
34
+ }
35
+ }
36
+ });
37
+ return ViewPlugin.fromClass(class {
38
+ decorations;
39
+ /**
40
+ * Builds the initial slash-command decoration set for the editor view.
41
+ *
42
+ * @param view - CodeMirror editor view instance.
43
+ */
44
+ constructor(view) {
45
+ this.decorations = slashMatcher.createDeco(view);
46
+ }
47
+ /**
48
+ * Recomputes slash-command decorations when document content changes.
49
+ *
50
+ * @param update - View update describing what changed.
51
+ */
52
+ update(update) {
53
+ this.decorations = slashMatcher.updateDeco(update, this.decorations);
54
+ }
55
+ }, { decorations: (v) => v.decorations });
56
+ }
@@ -0,0 +1,15 @@
1
+ import type { Extension } from '@codemirror/state';
2
+ import { type RenderHighlightedPlaceholderOptions } from './renderHighlightedPlaceholder.js';
3
+ /**
4
+ * Options for building a muted syntax-highlighted placeholder layer.
5
+ */
6
+ export type SyntaxHighlightedPlaceholderOptions = RenderHighlightedPlaceholderOptions;
7
+ /**
8
+ * Returns CodeMirror extensions that show muted syntax-highlighted placeholder content
9
+ * when the editor document is empty and unfocused.
10
+ *
11
+ * @param text - Placeholder source shown until the user focuses or types.
12
+ * @param options - Highlighting and theme options shared with the parent editor.
13
+ */
14
+ export declare function createSyntaxHighlightedPlaceholder(text: string, options: SyntaxHighlightedPlaceholderOptions): Extension[];
15
+ //# sourceMappingURL=syntaxHighlightedPlaceholder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntaxHighlightedPlaceholder.d.ts","sourceRoot":"","sources":["../../../src/components/CodeEditor/syntaxHighlightedPlaceholder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AASnD,OAAO,EAEL,KAAK,mCAAmC,EACzC,MAAM,mCAAmC,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,mCAAmC,CAAC;AA2DtF;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,mCAAmC,GAC3C,SAAS,EAAE,CA+Cb"}
@@ -0,0 +1,99 @@
1
+ import { Decoration, EditorView, ViewPlugin, WidgetType } from '@codemirror/view';
2
+ import { renderHighlightedPlaceholderDom } from './renderHighlightedPlaceholder.js';
3
+ /**
4
+ * Flat, pre-highlighted placeholder markup inserted when the parent editor is empty.
5
+ */
6
+ class SyntaxHighlightedPlaceholderWidget extends WidgetType {
7
+ text;
8
+ options;
9
+ /**
10
+ * @param text - Placeholder document shown when the parent editor is empty.
11
+ * @param options - Highlighting and theme options shared with the parent editor.
12
+ */
13
+ constructor(text, options) {
14
+ super();
15
+ this.text = text;
16
+ this.options = options;
17
+ }
18
+ /**
19
+ * Returns statically rendered placeholder DOM without nested editor chrome.
20
+ */
21
+ toDOM() {
22
+ return renderHighlightedPlaceholderDom(this.text, this.options);
23
+ }
24
+ /**
25
+ * Prevents the placeholder layer from intercepting pointer events meant for the parent editor.
26
+ */
27
+ ignoreEvent() {
28
+ return true;
29
+ }
30
+ }
31
+ /**
32
+ * Returns whether the syntax-highlighted placeholder should be visible.
33
+ *
34
+ * @param view - Parent CodeMirror editor view.
35
+ */
36
+ function shouldShowSyntaxPlaceholder(view) {
37
+ return view.state.doc.length === 0 && !view.hasFocus;
38
+ }
39
+ /**
40
+ * Builds widget decorations for the muted placeholder layer.
41
+ *
42
+ * @param text - Placeholder source shown until focus or input.
43
+ * @param options - Highlighting and theme options.
44
+ */
45
+ function buildSyntaxPlaceholderDecorations(text, options) {
46
+ return Decoration.set([
47
+ Decoration.widget({
48
+ widget: new SyntaxHighlightedPlaceholderWidget(text, options),
49
+ side: 1
50
+ }).range(0)
51
+ ]);
52
+ }
53
+ /**
54
+ * Returns CodeMirror extensions that show muted syntax-highlighted placeholder content
55
+ * when the editor document is empty and unfocused.
56
+ *
57
+ * @param text - Placeholder source shown until the user focuses or types.
58
+ * @param options - Highlighting and theme options shared with the parent editor.
59
+ */
60
+ export function createSyntaxHighlightedPlaceholder(text, options) {
61
+ const plugin = ViewPlugin.fromClass(class {
62
+ placeholder;
63
+ /**
64
+ * Initializes placeholder decorations for an empty, unfocused document.
65
+ *
66
+ * @param view - Parent CodeMirror editor view.
67
+ */
68
+ constructor(view) {
69
+ this.placeholder = shouldShowSyntaxPlaceholder(view)
70
+ ? buildSyntaxPlaceholderDecorations(text, options)
71
+ : Decoration.none;
72
+ }
73
+ /**
74
+ * Shows or hides the placeholder when the document, focus, or content changes.
75
+ *
76
+ * @param update - Parent view update.
77
+ */
78
+ update(update) {
79
+ if (!update.docChanged && !update.focusChanged) {
80
+ return;
81
+ }
82
+ this.placeholder = shouldShowSyntaxPlaceholder(update.view)
83
+ ? buildSyntaxPlaceholderDecorations(text, options)
84
+ : Decoration.none;
85
+ }
86
+ get decorations() {
87
+ return this.placeholder;
88
+ }
89
+ }, { decorations: (v) => v.decorations });
90
+ return [
91
+ plugin,
92
+ EditorView.contentAttributes.of({ 'aria-placeholder': text }),
93
+ EditorView.theme({
94
+ '.cm-content:has(.cm-syntax-placeholder) .cm-activeLine': {
95
+ backgroundColor: 'transparent !important'
96
+ }
97
+ })
98
+ ];
99
+ }
@@ -19,7 +19,7 @@ function variantClasses(variant) {
19
19
  * @param className - Extra classes appended after the preset.
20
20
  */
21
21
  export function EmptyState({ children, variant = 'inline', className }) {
22
- const base = `hc-empty-state ${variantClasses(variant)}`;
22
+ const base = `hc-empty-state text-[16px] ${variantClasses(variant)}`;
23
23
  const classes = className ? `${base} ${className}` : base;
24
24
  return _jsx("div", { className: classes, children: children });
25
25
  }
@@ -6,8 +6,8 @@ import { jsx as _jsx } from "@harborclient/sdk/jsx-runtime";
6
6
  */
7
7
  function footerSegment(active) {
8
8
  return active
9
- ? 'cursor-pointer rounded-[2.5px] border-none bg-surface px-2 py-0.5 text-[14px] text-text shadow-sm app-no-drag'
10
- : 'cursor-pointer rounded-[2.5px] border-none bg-transparent px-2 py-0.5 text-[14px] text-muted hover:text-text app-no-drag';
9
+ ? 'cursor-pointer rounded-md border-none bg-surface px-2 py-0.5 text-[14px] text-text shadow-sm app-no-drag'
10
+ : 'cursor-pointer rounded-md border-none bg-transparent px-2 py-0.5 text-[14px] text-muted hover:text-text app-no-drag';
11
11
  }
12
12
  /**
13
13
  * Text segment toggle button for the window footer bar, used to open and close
@@ -19,5 +19,5 @@ export function FooterIcon({ icon, active, onClick, label, className }) {
19
19
  const classes = className
20
20
  ? `hc-footer-icon ${footerIconButton(active)} ${className}`
21
21
  : `hc-footer-icon ${footerIconButton(active)}`;
22
- return (_jsx("button", { type: "button", className: classes, onClick: onClick, "aria-pressed": active, "aria-label": accessibleLabel, title: accessibleLabel, children: _jsx(FaIcon, { icon: icon, className: "h-4 w-4" }) }));
22
+ return (_jsx("button", { type: "button", className: classes, onClick: onClick, "aria-pressed": active, "aria-label": accessibleLabel, title: accessibleLabel, children: _jsx(FaIcon, { icon: icon, className: "hc-footer-icon-icon h-4 w-4" }) }));
23
23
  }
@@ -70,12 +70,12 @@ export function FormDataEditor({ parts, onChange, variables, onSelectFiles, onEd
70
70
  const currentFiles = rows[index]?.files ?? [];
71
71
  updateRow(index, { files: currentFiles.filter((file) => file !== filePath) });
72
72
  };
73
- return (_jsxs(Table, { className: "hc-form-data-editor", children: [_jsx(TableHeader, { 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, { children: rows.map((row, index) => (_jsxs("tr", { children: [_jsx(TableCell, { className: "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, { 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, { children: _jsxs(Select, { className: "w-full", value: row.type, "aria-label": `Type, row ${index + 1}`, onChange: (e) => {
73
+ 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) => {
74
74
  const type = e.target.value;
75
75
  updateRow(index, {
76
76
  type,
77
77
  value: type === 'text' ? row.value : '',
78
78
  files: type === 'file' ? row.files : []
79
79
  });
80
- }, children: [_jsx("option", { value: "text", children: "Text" }), _jsx("option", { value: "file", children: "File" })] }) }), _jsx(TableCell, { 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-col gap-1.5", children: [_jsx(Button, { type: "button", variant: "secondary", className: "self-start px-2 py-0.5 text-[14px]", onClick: () => void chooseFiles(index), children: "Choose files" }), row.files.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-1", children: 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 app-no-drag", 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: "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))) })] }));
80
+ }, 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-col gap-1.5", children: [_jsx(Button, { type: "button", variant: "secondary", className: "self-start px-2 py-0.5 text-[14px]", onClick: () => void chooseFiles(index), children: "Choose files" }), row.files.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-1", children: 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 app-no-drag", 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))) })] }));
81
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FormGroup/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI5C;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,UAAU,GACV,QAAQ,GACR,OAAO,GACP,kBAAkB,GAClB,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAC;AAErD,UAAU,KAAK;IACb;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IAEzB;;OAEG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAE/B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAqBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,WAAW,EACX,KAAK,EACL,OAAO,EACP,aAAa,EACb,MAAkB,EAClB,SAAqB,EACrB,MAAc,EACd,SAAS,EACT,cAAc,EACf,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAiJrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FormGroup/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI5C;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,UAAU,GACV,QAAQ,GACR,OAAO,GACP,kBAAkB,GAClB,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAC;AAErD,UAAU,KAAK;IACb;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IAEzB;;OAEG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAE/B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAqBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,WAAW,EACX,KAAK,EACL,OAAO,EACP,aAAa,EACb,MAAkB,EAClB,SAAqB,EACrB,MAAc,EACd,SAAS,EACT,cAAc,EACf,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAoJrB"}
@@ -11,7 +11,7 @@ import { enhanceControl } from '../enhanceControl.js';
11
11
  * @returns Class string for the label element.
12
12
  */
13
13
  function labelClasses(tone, srOnly, inline) {
14
- const base = 'text-[18px]';
14
+ const base = 'hc-form-group-label text-[18px]';
15
15
  const visibility = srOnly ? 'sr-only' : '';
16
16
  if (inline) {
17
17
  const color = tone === 'muted' ? 'shrink-0 text-muted' : 'shrink-0 font-medium text-text';
@@ -52,7 +52,9 @@ export function FormGroup({ label, children, htmlFor, description, error, errorI
52
52
  const wrapperClasses = extra
53
53
  ? `hc-form-group flex items-start gap-2 ${extra}`
54
54
  : 'hc-form-group flex items-start gap-2';
55
- const adjacentLabelClasses = labelClassName ?? 'min-w-0 flex-1 text-[16px] text-text';
55
+ const adjacentLabelClasses = labelClassName
56
+ ? `hc-form-group-label ${labelClassName}`
57
+ : 'hc-form-group-label min-w-0 flex-1 text-[16px] text-text';
56
58
  const linkedChildren = enhanceControl(children, { id: controlId });
57
59
  return (_jsxs("div", { className: wrapperClasses, children: [linkedChildren, _jsx("label", { htmlFor: controlId, className: adjacentLabelClasses, children: label })] }));
58
60
  }
@@ -61,7 +63,7 @@ export function FormGroup({ label, children, htmlFor, description, error, errorI
61
63
  ? `hc-form-group inline-flex cursor-pointer items-center gap-1.5 text-[16px] text-text app-no-drag ${extra}`
62
64
  : 'hc-form-group inline-flex cursor-pointer items-center gap-1.5 text-[16px] text-text app-no-drag';
63
65
  const linkedChildren = enhanceControl(children, { id: controlId });
64
- return (_jsxs("label", { htmlFor: controlId, className: wrapperClasses, children: [linkedChildren, label] }));
66
+ return (_jsxs("label", { htmlFor: controlId, className: wrapperClasses, children: [linkedChildren, _jsx("span", { className: "hc-form-group-label", children: label })] }));
65
67
  }
66
68
  if (layout === 'checkbox') {
67
69
  const resolvedDescriptionId = description != null && description !== ''
@@ -80,7 +82,7 @@ export function FormGroup({ label, children, htmlFor, description, error, errorI
80
82
  const wrapperClasses = extra
81
83
  ? `hc-form-group flex flex-col gap-1 p-4 border border-separator rounded-md ${extra}`
82
84
  : 'hc-form-group flex flex-col gap-1 p-4 border border-separator rounded-md';
83
- return (_jsxs("div", { className: wrapperClasses, children: [_jsxs("label", { htmlFor: controlId, className: "flex flex-col gap-1", children: [_jsxs("span", { className: "flex items-center gap-2", children: [linkedChildren, _jsx("span", { className: `${labelClasses(labelTone, srOnly, false)} leading-none`, children: label })] }), resolvedDescriptionId ? (_jsx("p", { id: resolvedDescriptionId, className: "hc-form-description m-0 pl-[26px] text-[14px] text-muted", children: description })) : null] }), resolvedErrorId ? (_jsx(FieldError, { id: resolvedErrorId, spacing: "field", children: error })) : null] }));
85
+ return (_jsxs("div", { className: wrapperClasses, children: [_jsxs("label", { htmlFor: controlId, className: "hc-form-group-label flex flex-col gap-1", children: [_jsxs("span", { className: "hc-form-group-label-row flex items-center gap-2", children: [linkedChildren, _jsx("span", { className: labelClasses(labelTone, srOnly, false), children: label })] }), resolvedDescriptionId ? (_jsx("p", { id: resolvedDescriptionId, className: "hc-form-group-description m-0 pl-[26px] text-[14px] text-muted", children: description })) : null] }), resolvedErrorId ? (_jsx(FieldError, { id: resolvedErrorId, spacing: "field", children: error })) : null] }));
84
86
  }
85
87
  if (layout === 'inline') {
86
88
  const wrapperClasses = extra
@@ -105,5 +107,5 @@ export function FormGroup({ label, children, htmlFor, description, error, errorI
105
107
  const wrapperClasses = extra
106
108
  ? `hc-form-group flex flex-col gap-1 p-4 text-[16px] border border-separator rounded-md ${extra}`
107
109
  : 'hc-form-group flex flex-col gap-1 p-4 text-[16px] border border-separator rounded-md';
108
- return (_jsxs("div", { className: wrapperClasses, children: [_jsxs("label", { htmlFor: htmlFor, className: "flex flex-col gap-1", children: [_jsx("span", { className: labelClasses(labelTone, srOnly, false), children: label }), resolvedDescriptionId ? (_jsx("p", { id: resolvedDescriptionId, className: "hc-form-description m-0 text-[14px] text-muted", children: description })) : null, control] }), resolvedErrorId ? (_jsx(FieldError, { id: resolvedErrorId, spacing: "field", children: error })) : null] }));
110
+ return (_jsxs("div", { className: wrapperClasses, children: [_jsxs("label", { htmlFor: htmlFor, className: "hc-form-group-label flex flex-col gap-1", children: [_jsx("span", { className: labelClasses(labelTone, srOnly, false), children: label }), resolvedDescriptionId ? (_jsx("p", { id: resolvedDescriptionId, className: "hc-form-group-description m-0 text-[14px] text-muted", children: description })) : null, control] }), resolvedErrorId ? (_jsx(FieldError, { id: resolvedErrorId, spacing: "field", children: error })) : null] }));
109
111
  }
@@ -46,8 +46,8 @@ export function KeyValueEditor({ rows, onChange, placeholderKey = 'Key', placeho
46
46
  value: row.value ?? '',
47
47
  enabled: row.enabled ?? true
48
48
  });
49
- return (_jsxs(Table, { className: "hc-key-value-editor", children: [_jsx(TableHeader, { 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, { children: rows.map((row, index) => {
49
+ 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) => {
50
50
  const normalizedRow = normalizeRow(row);
51
- return (_jsxs("tr", { children: [_jsx(TableCell, { className: "w-6 p-1 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, { 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, { 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: "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));
51
+ return (_jsxs("tr", { children: [_jsx(TableCell, { className: "hc-key-value-editor-cell w-6 p-1 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));
52
52
  }) })] }));
53
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ModalFooter.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/ModalFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5C,UAAU,KAAK;IACb;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAc,EAAE,SAAS,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAKvF"}
1
+ {"version":3,"file":"ModalFooter.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/ModalFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5C,UAAU,KAAK;IACb;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAc,EAAE,SAAS,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAOvF"}
@@ -7,7 +7,9 @@ import { jsx as _jsx } from "@harborclient/sdk/jsx-runtime";
7
7
  * @param className - Extra classes appended after the layout preset.
8
8
  */
9
9
  export function ModalFooter({ children, spaced = false, className }) {
10
- const base = spaced ? 'mt-4 flex justify-end gap-2' : 'flex justify-end gap-2';
10
+ const base = spaced
11
+ ? 'hc-modal-footer mt-4 flex justify-end gap-2'
12
+ : 'hc-modal-footer flex justify-end gap-2';
11
13
  const classes = className ? `${base} ${className}` : base;
12
14
  return _jsx("div", { className: classes, children: children });
13
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ModalHeader.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/ModalHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAK5C,UAAU,KAAK;IACb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC;IAE1B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,KAAK,EACL,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAqB,EACrB,OAAO,EACR,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CA+BrB"}
1
+ {"version":3,"file":"ModalHeader.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/ModalHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAK5C,UAAU,KAAK;IACb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC;IAE1B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,KAAK,EACL,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAqB,EACrB,OAAO,EACR,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAkCrB"}
@@ -7,5 +7,5 @@ import { FaIcon } from '../FaIcon/index.js';
7
7
  * optional actions, and a close icon on the right.
8
8
  */
9
9
  export function ModalHeader({ titleId, title, description, descriptionId, headerActions, closeDisabled = false, onClose }) {
10
- return (_jsxs("div", { className: "flex flex-wrap items-center gap-2 border-b border-separator px-4 py-4", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("h2", { id: titleId, className: "m-0 flex flex-wrap items-center gap-2 text-[17px] font-semibold text-text", children: title }), description ? (_jsx("p", { id: descriptionId, className: "m-0 mt-1 text-[14px] text-muted", children: description })) : null] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [headerActions, _jsx(Button, { type: "button", variant: "icon", className: "shrink-0", "aria-label": "Close", disabled: closeDisabled, onClick: onClose, children: _jsx(FaIcon, { icon: faXmark, className: "h-4 w-4" }) })] })] }));
10
+ return (_jsxs("div", { className: "hc-modal-header flex flex-wrap items-center gap-2 border-b border-separator px-4 py-4", children: [_jsxs("div", { className: "hc-modal-header-content min-w-0 flex-1", children: [_jsx("h2", { id: titleId, className: "hc-modal-header-title m-0 flex flex-wrap items-center gap-2 text-[17px] font-semibold text-text", children: title }), description ? (_jsx("p", { id: descriptionId, className: "hc-modal-header-description m-0 mt-1 text-[14px] text-muted", children: description })) : null] }), _jsxs("div", { className: "hc-modal-header-actions flex flex-wrap items-center gap-2", children: [headerActions, _jsx(Button, { type: "button", variant: "icon", className: "hc-modal-header-close shrink-0", "aria-label": "Close", disabled: closeDisabled, onClick: onClose, children: _jsx(FaIcon, { icon: faXmark, className: "h-4 w-4" }) })] })] }));
11
11
  }
@@ -35,5 +35,5 @@ export function Modal({ onClose, className = 'w-96', overlayClassName, disableEs
35
35
  ? `${className} flex max-h-[85vh] flex-col overflow-hidden rounded-lg border border-separator bg-surface shadow-xl`
36
36
  : `${className} rounded-lg border border-separator bg-surface p-4 shadow-xl`;
37
37
  const descriptionId = description && labelledBy ? `${labelledBy}-description` : undefined;
38
- return (_jsxs("div", { ref: overlayRef, className: overlayClass, children: [_jsx("div", { ref: panelRef, role: "dialog", "aria-modal": "true", "aria-labelledby": labelledBy, "aria-describedby": descriptionId, "aria-label": label, className: `relative z-10 ${panelClass}`, onClick: (event) => event.stopPropagation(), children: title && labelledBy ? (_jsxs(_Fragment, { children: [_jsx(ModalHeader, { titleId: labelledBy, title: title, description: description, descriptionId: descriptionId, headerActions: headerActions, closeDisabled: closeDisabled, onClose: onClose }), _jsx("div", { className: "flex-1 overflow-y-auto p-4", children: children })] })) : (children) }), _jsx("button", { type: "button", tabIndex: -1, className: "absolute inset-0 z-0 cursor-default border-none bg-transparent p-0", "aria-label": "Close dialog", onClick: onClose })] }));
38
+ return (_jsxs("div", { ref: overlayRef, className: overlayClass, children: [_jsx("div", { ref: panelRef, role: "dialog", "aria-modal": "true", "aria-labelledby": labelledBy, "aria-describedby": descriptionId, "aria-label": label, className: `hc-modal-panel relative z-10 ${panelClass}`, onClick: (event) => event.stopPropagation(), children: title && labelledBy ? (_jsxs(_Fragment, { children: [_jsx(ModalHeader, { titleId: labelledBy, title: title, description: description, descriptionId: descriptionId, headerActions: headerActions, closeDisabled: closeDisabled, onClose: onClose }), _jsx("div", { className: "hc-modal-body flex-1 overflow-y-auto p-4", children: children })] })) : (children) }), _jsx("button", { type: "button", tabIndex: -1, className: "hc-modal-backdrop absolute inset-0 z-0 cursor-default border-none bg-transparent p-0", "aria-label": "Close dialog", onClick: onClose })] }));
39
39
  }
@@ -13,5 +13,5 @@ export function OverlayCloseButton({ label = 'Close', onClose, className }) {
13
13
  const classes = className
14
14
  ? `hc-overlay-close-button text-[28px] ${className}`
15
15
  : 'hc-overlay-close-button text-[28px]';
16
- return (_jsx(Button, { type: "button", variant: "icon", className: classes, "aria-label": label, onClick: onClose, children: _jsx(FaIcon, { icon: faXmark, className: "h-4 w-4" }) }));
16
+ return (_jsx(Button, { type: "button", variant: "icon", className: classes, "aria-label": label, onClick: onClose, children: _jsx(FaIcon, { icon: faXmark, className: "hc-overlay-close-button-icon h-4 w-4" }) }));
17
17
  }
@@ -14,5 +14,5 @@ export function Page({ title, description, icon, actions, footer, embedded = fal
14
14
  const outer = className
15
15
  ? `hc-page flex min-h-0 flex-1 flex-col overflow-y-auto p-6 ${className}`
16
16
  : 'hc-page flex min-h-0 flex-1 flex-col overflow-y-auto p-6';
17
- return (_jsx("div", { className: outer, children: _jsxs("div", { className: "mx-auto w-full", children: [header, children, footer] }) }));
17
+ return (_jsx("div", { className: outer, children: _jsxs("div", { className: "hc-page-inner mx-auto w-full", children: [header, children, footer] }) }));
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PageHeader/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5C,UAAU,KAAK;IACb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAmBhG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PageHeader/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5C,UAAU,KAAK;IACb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CA6BhG"}
@@ -8,5 +8,5 @@ export function PageHeader({ title, description, icon, children, className }) {
8
8
  const wrapperClassName = className
9
9
  ? `hc-page-header -mx-6 mb-4 flex flex-wrap items-center gap-2 border-b border-separator px-6 py-4 ${className}`
10
10
  : 'hc-page-header -mx-6 mb-4 flex flex-wrap items-center gap-2 border-b border-separator px-6 py-4';
11
- return (_jsxs("div", { className: wrapperClassName, children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("h2", { className: "m-0 flex items-center gap-2 text-[18px] font-semibold text-text leading-none mb-2", children: [icon ? _jsx(FaIcon, { icon: icon, className: "h-5 w-5 shrink-0 text-muted", "aria-hidden": true }) : null, title] }), description ? (_jsx("p", { className: "m-0 mt-1 text-[16px] text-muted leading-none", children: description })) : null] }), children ? _jsx("div", { className: "flex flex-wrap items-center gap-2", children: children }) : null] }));
11
+ return (_jsxs("div", { className: wrapperClassName, children: [_jsxs("div", { className: "hc-page-header-content min-w-0 flex-1", children: [_jsxs("h2", { className: "hc-page-header-title m-0 flex items-center gap-2 text-[28px] font-bold leading-[1.15] tracking-[-0.01em] text-text", children: [icon ? (_jsx(FaIcon, { icon: icon, className: "hc-page-header-title-icon h-5 w-5 shrink-0 text-muted", "aria-hidden": true })) : null, title] }), description ? (_jsx("p", { className: "hc-page-header-description m-0 mt-1 text-[16px] text-muted leading-none", children: description })) : null] }), children ? (_jsx("div", { className: "hc-page-header-actions flex flex-wrap items-center gap-2", children: children })) : null] }));
12
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PageSidebar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGjC;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACxD;;OAEG;IACH,KAAK,EAAE,CAAC,CAAC;IAET;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAED,UAAU,KAAK,CAAC,CAAC,SAAS,MAAM;IAC9B;;OAEG;IACH,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5B;;OAEG;IACH,QAAQ,EAAE,CAAC,CAAC;IAEZ;;;;OAIG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAE7B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAaD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,EAC5C,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,EACV,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAiCxB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PageSidebar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGjC;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACxD;;OAEG;IACH,KAAK,EAAE,CAAC,CAAC;IAET;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAED,UAAU,KAAK,CAAC,CAAC,SAAS,MAAM;IAC9B;;OAEG;IACH,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5B;;OAEG;IACH,QAAQ,EAAE,CAAC,CAAC;IAEZ;;;;OAIG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAE7B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAaD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,EAC5C,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,EACV,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAuCxB"}
@@ -7,18 +7,18 @@ import { FaIcon } from '../FaIcon/index.js';
7
7
  */
8
8
  function sidebarRow(active) {
9
9
  return active
10
- ? 'group flex cursor-pointer items-center gap-1 rounded-md bg-selection px-1.5 py-0.5 app-no-drag'
11
- : 'group flex cursor-pointer items-center gap-1 rounded-md px-1.5 py-0.5 hover:bg-selection/60 app-no-drag';
10
+ ? 'group flex cursor-pointer items-center gap-1 rounded-md bg-selection px-1.5 py-2 app-no-drag'
11
+ : 'group flex cursor-pointer items-center gap-1 rounded-md px-1.5 py-2 hover:bg-selection/60 app-no-drag';
12
12
  }
13
13
  /**
14
14
  * Narrow sidebar navigation for multi-section pages such as settings overlays.
15
15
  */
16
16
  export function PageSidebar({ items, selected, onSelect, ariaLabel }) {
17
- return (_jsx("nav", { className: "hc-page-sidebar flex w-[180px] shrink-0 flex-col gap-0.5 border-r border-separator bg-sidebar px-2 py-3", "aria-label": ariaLabel, children: items.map((item) => {
17
+ return (_jsx("nav", { className: "hc-page-sidebar flex w-[180px] shrink-0 flex-col gap-1 border-r border-separator bg-sidebar px-2 py-3", "aria-label": ariaLabel, children: items.map((item) => {
18
18
  const active = selected === item.value;
19
19
  const rowClass = item.icon
20
- ? `${sidebarRow(active)} w-full gap-2 border-none text-left text-[15px] app-no-drag`
21
- : `${sidebarRow(active)} w-full border-none text-left text-[15px] app-no-drag`;
22
- return (_jsxs("button", { type: "button", className: rowClass, "aria-current": active ? 'page' : undefined, onClick: () => onSelect(item.value), children: [item.icon ? (_jsx(FaIcon, { icon: item.icon, className: `h-3.5 w-3.5 shrink-0 ${active ? 'text-text' : 'text-muted'}`, "aria-hidden": true })) : null, _jsx("span", { className: "min-w-0 truncate", children: item.label })] }, item.value));
20
+ ? `hc-page-sidebar-item ${sidebarRow(active)} w-full gap-2 border-none text-left text-[15px] app-no-drag`
21
+ : `hc-page-sidebar-item ${sidebarRow(active)} w-full border-none text-left text-[15px] app-no-drag`;
22
+ return (_jsxs("button", { type: "button", className: rowClass, "aria-current": active ? 'page' : undefined, onClick: () => onSelect(item.value), children: [item.icon ? (_jsx(FaIcon, { icon: item.icon, className: `hc-page-sidebar-item-icon h-[18px] w-[18px] shrink-0 ${active ? 'text-text' : 'text-muted'}`, "aria-hidden": true })) : null, _jsx("span", { className: "hc-page-sidebar-item-label min-w-0 truncate", children: item.label })] }, item.value));
23
23
  }) }));
24
24
  }
@@ -15,5 +15,5 @@ export function PanelCloseButton({ onClose, label = 'Close', ariaLabel, classNam
15
15
  const classes = className
16
16
  ? `hc-panel-close-button ${base} ${className}`
17
17
  : `hc-panel-close-button ${base}`;
18
- return (_jsx(Button, { type: "button", variant: "secondary", className: classes, "aria-label": ariaLabel ?? label, onClick: onClose, children: _jsx(FaIcon, { icon: faXmark, className: "h-4 w-4" }) }));
18
+ return (_jsx(Button, { type: "button", variant: "secondary", className: classes, "aria-label": ariaLabel ?? label, onClick: onClose, children: _jsx(FaIcon, { icon: faXmark, className: "hc-panel-close-button-icon h-4 w-4" }) }));
19
19
  }
@@ -26,7 +26,7 @@ export function Resizable({ id, open, onClose, closeLabel, storageKey, title, he
26
26
  getMaxSize,
27
27
  storageKey
28
28
  });
29
- const closeButton = (_jsx("button", { type: "button", className: footerPanelCloseButtonClassName, onClick: onClose, "aria-label": `Close ${closeLabel}`, children: _jsx(FaIcon, { icon: faXmark, className: "h-3.5 w-3.5" }) }));
29
+ const closeButton = (_jsx("button", { type: "button", className: `hc-resizable-close ${footerPanelCloseButtonClassName}`, onClick: onClose, "aria-label": `Close ${closeLabel}`, children: _jsx(FaIcon, { icon: faXmark, className: "h-3.5 w-3.5" }) }));
30
30
  const body = unmountWhenClosed && !open ? null : children;
31
- return (_jsxs("div", { ref: containerRef, id: id, className: `hc-resizable ${footerPanelClassName(open)}`, style: { height }, role: "region", "aria-label": `${closeLabel} panel`, "aria-hidden": !open, inert: !open || undefined, children: [_jsx(ResizeHandle, { orientation: "horizontal", value: height, min: panelMinSize, max: panelMaxSize, onResizeStart: onResizeStart, onKeyboardResize: onKeyboardResize, ariaLabel: `Resize ${closeLabel} panel` }), headerless ? (_jsxs("div", { className: "relative flex min-h-0 flex-1 flex-col overflow-hidden", children: [_jsx("button", { type: "button", className: `absolute right-2 top-2 z-10 ${footerPanelCloseButtonClassName}`, onClick: onClose, "aria-label": `Close ${closeLabel}`, children: _jsx(FaIcon, { icon: faXmark, className: "h-3.5 w-3.5" }) }), _jsx("div", { className: "flex min-h-0 flex-1 flex-col", children: body })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex shrink-0 items-center justify-between border-b border-separator px-3 py-2", children: [_jsx("div", { className: "min-w-0 flex-1", children: title }), closeButton] }), body] }))] }));
31
+ return (_jsxs("div", { ref: containerRef, id: id, className: `hc-resizable ${footerPanelClassName(open)}`, style: { height }, role: "region", "aria-label": `${closeLabel} panel`, "aria-hidden": !open, inert: !open || undefined, children: [_jsx(ResizeHandle, { orientation: "horizontal", value: height, min: panelMinSize, max: panelMaxSize, onResizeStart: onResizeStart, onKeyboardResize: onKeyboardResize, ariaLabel: `Resize ${closeLabel} panel` }), headerless ? (_jsxs("div", { className: "hc-resizable-headerless relative flex min-h-0 flex-1 flex-col overflow-hidden", children: [_jsx("button", { type: "button", className: `hc-resizable-headerless-close absolute right-2 top-2 z-10 ${footerPanelCloseButtonClassName}`, onClick: onClose, "aria-label": `Close ${closeLabel}`, children: _jsx(FaIcon, { icon: faXmark, className: "h-3.5 w-3.5" }) }), _jsx("div", { className: "hc-resizable-body flex min-h-0 flex-1 flex-col", children: body })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "hc-resizable-header flex shrink-0 items-center justify-between border-b border-separator px-3 py-2", children: [_jsx("div", { className: "hc-resizable-header-title min-w-0 flex-1", children: title }), closeButton] }), body] }))] }));
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ResizeHandle.d.ts","sourceRoot":"","sources":["../../../src/components/Resizable/ResizeHandle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EACH,aAAa,IAAI,kBAAkB,EACnC,UAAU,IAAI,eAAe,EAC9B,MAAM,OAAO,CAAC;AAEf,UAAU,KAAK;IACb;;OAEG;IACH,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;IAEvC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAEhD;;OAEG;IACH,gBAAgB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAEtD;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,KAAK,EACL,GAAG,EACH,GAAG,EACH,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,SAAS,EACV,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAiCrB"}
1
+ {"version":3,"file":"ResizeHandle.d.ts","sourceRoot":"","sources":["../../../src/components/Resizable/ResizeHandle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EACH,aAAa,IAAI,kBAAkB,EACnC,UAAU,IAAI,eAAe,EAC9B,MAAM,OAAO,CAAC;AAEf,UAAU,KAAK;IACb;;OAEG;IACH,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;IAEvC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAEhD;;OAEG;IACH,gBAAgB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAEtD;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,KAAK,EACL,GAAG,EACH,GAAG,EACH,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,SAAS,EACV,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAmCrB"}
@@ -5,7 +5,7 @@ import { jsx as _jsx } from "@harborclient/sdk/jsx-runtime";
5
5
  export function ResizeHandle({ orientation, value, min, max, onResizeStart, onKeyboardResize, ariaLabel, className }) {
6
6
  const isHorizontal = orientation === 'horizontal';
7
7
  const containerClassName = [
8
- 'm-0 flex shrink-0 items-center justify-center bg-control p-0 font-inherit text-inherit hover:bg-selection/60 app-no-drag',
8
+ 'hc-resize-handle m-0 flex shrink-0 items-center justify-center bg-control p-0 font-inherit text-inherit hover:bg-selection/60 app-no-drag',
9
9
  isHorizontal
10
10
  ? 'h-1.5 w-full cursor-row-resize border-b border-separator'
11
11
  : 'h-full w-1.5 cursor-col-resize border-r border-separator',
@@ -13,5 +13,7 @@ export function ResizeHandle({ orientation, value, min, max, onResizeStart, onKe
13
13
  ]
14
14
  .filter(Boolean)
15
15
  .join(' ');
16
- return (_jsx("div", { role: "separator", tabIndex: 0, className: containerClassName, onMouseDown: onResizeStart, onKeyDown: onKeyboardResize, "aria-orientation": orientation, "aria-label": ariaLabel, "aria-valuenow": Math.round(value), "aria-valuemin": min, "aria-valuemax": Math.round(max), children: _jsx("div", { className: isHorizontal ? 'h-0.5 w-8 rounded-full bg-muted/50' : 'h-8 w-0.5 rounded-full bg-muted/50', "aria-hidden": true }) }));
16
+ return (_jsx("div", { role: "separator", tabIndex: 0, className: containerClassName, onMouseDown: onResizeStart, onKeyDown: onKeyboardResize, "aria-orientation": orientation, "aria-label": ariaLabel, "aria-valuenow": Math.round(value), "aria-valuemin": min, "aria-valuemax": Math.round(max), children: _jsx("div", { className: isHorizontal
17
+ ? 'hc-resize-handle-grip h-0.5 w-8 rounded-full bg-muted/50'
18
+ : 'hc-resize-handle-grip h-8 w-0.5 rounded-full bg-muted/50', "aria-hidden": true }) }));
17
19
  }