@harborclient/sdk 1.0.29 → 1.0.31

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 (195) hide show
  1. package/dist/build/index.d.ts.map +1 -1
  2. package/dist/build/index.js +1 -1
  3. package/dist/components/AsyncListState/ErrorRetry.d.ts +21 -0
  4. package/dist/components/AsyncListState/ErrorRetry.d.ts.map +1 -0
  5. package/dist/components/AsyncListState/ErrorRetry.js +10 -0
  6. package/dist/components/AsyncListState/LoadingMessage.d.ts +13 -0
  7. package/dist/components/AsyncListState/LoadingMessage.d.ts.map +1 -0
  8. package/dist/components/AsyncListState/LoadingMessage.js +8 -0
  9. package/dist/components/AsyncListState/index.d.ts +4 -50
  10. package/dist/components/AsyncListState/index.d.ts.map +1 -1
  11. package/dist/components/AsyncListState/index.js +5 -31
  12. package/dist/components/Autocomplete/AutocompleteInput.d.ts +2 -4
  13. package/dist/components/Autocomplete/AutocompleteInput.d.ts.map +1 -1
  14. package/dist/components/Autocomplete/AutocompleteInput.js +2 -1
  15. package/dist/components/Autocomplete/SuggestionList.d.ts +3 -7
  16. package/dist/components/Autocomplete/SuggestionList.d.ts.map +1 -1
  17. package/dist/components/Autocomplete/SuggestionList.js +3 -4
  18. package/dist/components/BackButton/index.d.ts +3 -16
  19. package/dist/components/BackButton/index.d.ts.map +1 -1
  20. package/dist/components/BackButton/index.js +4 -10
  21. package/dist/components/Badge/index.d.ts +3 -11
  22. package/dist/components/Badge/index.d.ts.map +1 -1
  23. package/dist/components/Badge/index.js +3 -9
  24. package/dist/components/BusyIndicator/index.js +1 -1
  25. package/dist/components/Button/index.d.ts +2 -6
  26. package/dist/components/Button/index.d.ts.map +1 -1
  27. package/dist/components/Button/index.js +9 -15
  28. package/dist/components/Card/Body.d.ts +12 -0
  29. package/dist/components/Card/Body.d.ts.map +1 -0
  30. package/dist/components/Card/Body.js +8 -0
  31. package/dist/components/Card/Image.d.ts +8 -0
  32. package/dist/components/Card/Image.d.ts.map +1 -0
  33. package/dist/components/Card/Image.js +8 -0
  34. package/dist/components/Card/index.d.ts +16 -0
  35. package/dist/components/Card/index.d.ts.map +1 -0
  36. package/dist/components/Card/index.js +13 -0
  37. package/dist/components/CodeEditor/index.d.ts +3 -7
  38. package/dist/components/CodeEditor/index.d.ts.map +1 -1
  39. package/dist/components/CodeEditor/index.js +5 -50
  40. package/dist/components/CodeEditor/renderHighlightedPlaceholder.d.ts.map +1 -1
  41. package/dist/components/CodeEditor/slashCommandHighlighter.d.ts.map +1 -1
  42. package/dist/components/CodeEditor/syntaxHighlightedPlaceholder.d.ts.map +1 -1
  43. package/dist/components/EmptyState/index.d.ts +3 -11
  44. package/dist/components/EmptyState/index.d.ts.map +1 -1
  45. package/dist/components/EmptyState/index.js +3 -9
  46. package/dist/components/FaIcon/index.d.ts +3 -10
  47. package/dist/components/FaIcon/index.d.ts.map +1 -1
  48. package/dist/components/FaIcon/index.js +5 -4
  49. package/dist/components/FieldError/index.d.ts +3 -17
  50. package/dist/components/FieldError/index.d.ts.map +1 -1
  51. package/dist/components/FieldError/index.js +3 -11
  52. package/dist/components/FooterButton/index.d.ts +3 -11
  53. package/dist/components/FooterButton/index.d.ts.map +1 -1
  54. package/dist/components/FooterButton/index.js +3 -7
  55. package/dist/components/FooterIcon/index.d.ts +3 -11
  56. package/dist/components/FooterIcon/index.d.ts.map +1 -1
  57. package/dist/components/FooterIcon/index.js +3 -7
  58. package/dist/components/FormDataEditor/index.d.ts +0 -2
  59. package/dist/components/FormDataEditor/index.d.ts.map +1 -1
  60. package/dist/components/FormDataEditor/index.js +2 -12
  61. package/dist/components/FormGroup/index.d.ts +3 -16
  62. package/dist/components/FormGroup/index.d.ts.map +1 -1
  63. package/dist/components/FormGroup/index.js +4 -20
  64. package/dist/components/KeyValueEditor/index.d.ts +0 -2
  65. package/dist/components/KeyValueEditor/index.d.ts.map +1 -1
  66. package/dist/components/KeyValueEditor/index.js +1 -8
  67. package/dist/components/MethodSelect/index.d.ts +3 -5
  68. package/dist/components/MethodSelect/index.d.ts.map +1 -1
  69. package/dist/components/MethodSelect/index.js +3 -2
  70. package/dist/components/Modal/ModalFooter.d.ts +3 -11
  71. package/dist/components/Modal/ModalFooter.d.ts.map +1 -1
  72. package/dist/components/Modal/ModalFooter.js +3 -10
  73. package/dist/components/Modal/ModalFormLayout.d.ts +0 -5
  74. package/dist/components/Modal/ModalFormLayout.d.ts.map +1 -1
  75. package/dist/components/Modal/ModalFormLayout.js +0 -5
  76. package/dist/components/Modal/ModalHeader.d.ts +3 -3
  77. package/dist/components/Modal/ModalHeader.d.ts.map +1 -1
  78. package/dist/components/Modal/ModalHeader.js +3 -2
  79. package/dist/components/Modal/index.d.ts +3 -3
  80. package/dist/components/Modal/index.d.ts.map +1 -1
  81. package/dist/components/Modal/index.js +6 -7
  82. package/dist/components/OverlayCloseButton/index.d.ts +3 -11
  83. package/dist/components/OverlayCloseButton/index.d.ts.map +1 -1
  84. package/dist/components/OverlayCloseButton/index.js +3 -9
  85. package/dist/components/Page/index.d.ts +3 -3
  86. package/dist/components/Page/index.d.ts.map +1 -1
  87. package/dist/components/Page/index.js +4 -7
  88. package/dist/components/PageHeader/index.d.ts +3 -7
  89. package/dist/components/PageHeader/index.d.ts.map +1 -1
  90. package/dist/components/PageHeader/index.js +3 -5
  91. package/dist/components/PageSidebar/index.d.ts +3 -5
  92. package/dist/components/PageSidebar/index.d.ts.map +1 -1
  93. package/dist/components/PageSidebar/index.js +4 -5
  94. package/dist/components/PanelCloseButton/index.d.ts +5 -14
  95. package/dist/components/PanelCloseButton/index.d.ts.map +1 -1
  96. package/dist/components/PanelCloseButton/index.js +4 -12
  97. package/dist/components/Resizable/Resizable.d.ts +3 -3
  98. package/dist/components/Resizable/Resizable.d.ts.map +1 -1
  99. package/dist/components/Resizable/Resizable.js +6 -5
  100. package/dist/components/Resizable/ResizeHandle.d.ts +3 -7
  101. package/dist/components/Resizable/ResizeHandle.d.ts.map +1 -1
  102. package/dist/components/Resizable/ResizeHandle.js +4 -10
  103. package/dist/components/ResourceList/ResourceListEmptyItem.d.ts +13 -0
  104. package/dist/components/ResourceList/ResourceListEmptyItem.d.ts.map +1 -0
  105. package/dist/components/ResourceList/ResourceListEmptyItem.js +8 -0
  106. package/dist/components/ResourceList/ResourceListPrimary.d.ts +13 -0
  107. package/dist/components/ResourceList/ResourceListPrimary.d.ts.map +1 -0
  108. package/dist/components/ResourceList/ResourceListPrimary.js +8 -0
  109. package/dist/components/ResourceList/ResourceListRow.d.ts +29 -0
  110. package/dist/components/ResourceList/ResourceListRow.d.ts.map +1 -0
  111. package/dist/components/ResourceList/ResourceListRow.js +8 -0
  112. package/dist/components/ResourceList/index.d.ts +6 -74
  113. package/dist/components/ResourceList/index.d.ts.map +1 -1
  114. package/dist/components/ResourceList/index.js +7 -42
  115. package/dist/components/RowActionsMenu/index.d.ts +3 -5
  116. package/dist/components/RowActionsMenu/index.d.ts.map +1 -1
  117. package/dist/components/RowActionsMenu/index.js +6 -16
  118. package/dist/components/SegmentedTabs/SegmentedTabPanel.d.ts +3 -7
  119. package/dist/components/SegmentedTabs/SegmentedTabPanel.d.ts.map +1 -1
  120. package/dist/components/SegmentedTabs/SegmentedTabPanel.js +3 -4
  121. package/dist/components/SegmentedTabs/SegmentedTabsGroup.d.ts +0 -2
  122. package/dist/components/SegmentedTabs/SegmentedTabsGroup.d.ts.map +1 -1
  123. package/dist/components/SegmentedTabs/SegmentedTabsVisibilityMenu.d.ts +0 -2
  124. package/dist/components/SegmentedTabs/SegmentedTabsVisibilityMenu.d.ts.map +1 -1
  125. package/dist/components/SegmentedTabs/SegmentedTabsVisibilityMenu.js +5 -13
  126. package/dist/components/SegmentedTabs/index.d.ts +3 -7
  127. package/dist/components/SegmentedTabs/index.d.ts.map +1 -1
  128. package/dist/components/SegmentedTabs/index.js +7 -28
  129. package/dist/components/SidebarLayout/index.d.ts +3 -7
  130. package/dist/components/SidebarLayout/index.d.ts.map +1 -1
  131. package/dist/components/SidebarLayout/index.js +3 -5
  132. package/dist/components/Spinner/index.d.ts +3 -11
  133. package/dist/components/Spinner/index.d.ts.map +1 -1
  134. package/dist/components/Spinner/index.js +3 -9
  135. package/dist/components/StatusMessage/index.d.ts +3 -15
  136. package/dist/components/StatusMessage/index.d.ts.map +1 -1
  137. package/dist/components/StatusMessage/index.js +3 -8
  138. package/dist/components/TabCloseButton/index.d.ts +4 -14
  139. package/dist/components/TabCloseButton/index.d.ts.map +1 -1
  140. package/dist/components/TabCloseButton/index.js +3 -7
  141. package/dist/components/Table/TableBody.d.ts +13 -0
  142. package/dist/components/Table/TableBody.d.ts.map +1 -0
  143. package/dist/components/Table/TableBody.js +11 -0
  144. package/dist/components/Table/TableCell.d.ts +8 -0
  145. package/dist/components/Table/TableCell.d.ts.map +1 -0
  146. package/dist/components/Table/TableCell.js +11 -0
  147. package/dist/components/Table/TableContext.d.ts +22 -0
  148. package/dist/components/Table/TableContext.d.ts.map +1 -0
  149. package/dist/components/Table/TableContext.js +18 -0
  150. package/dist/components/Table/TableHead.d.ts +8 -0
  151. package/dist/components/Table/TableHead.d.ts.map +1 -0
  152. package/dist/components/Table/TableHead.js +11 -0
  153. package/dist/components/Table/TableHeader.d.ts +13 -0
  154. package/dist/components/Table/TableHeader.d.ts.map +1 -0
  155. package/dist/components/Table/TableHeader.js +8 -0
  156. package/dist/components/Table/index.d.ts +10 -86
  157. package/dist/components/Table/index.d.ts.map +1 -1
  158. package/dist/components/Table/index.js +17 -94
  159. package/dist/components/Toolbar/index.d.ts +3 -11
  160. package/dist/components/Toolbar/index.d.ts.map +1 -1
  161. package/dist/components/Toolbar/index.js +3 -11
  162. package/dist/components/VariableInput/index.d.ts +3 -5
  163. package/dist/components/VariableInput/index.d.ts.map +1 -1
  164. package/dist/components/VariableInput/index.js +6 -17
  165. package/dist/components/VariableTable/index.d.ts +3 -3
  166. package/dist/components/VariableTable/index.d.ts.map +1 -1
  167. package/dist/components/VariableTable/index.js +5 -9
  168. package/dist/components/forms/Checkbox.d.ts +2 -2
  169. package/dist/components/forms/Checkbox.d.ts.map +1 -1
  170. package/dist/components/forms/Checkbox.js +2 -4
  171. package/dist/components/forms/Input.d.ts +2 -2
  172. package/dist/components/forms/Input.d.ts.map +1 -1
  173. package/dist/components/forms/Radio.d.ts +2 -2
  174. package/dist/components/forms/Radio.d.ts.map +1 -1
  175. package/dist/components/forms/Radio.js +2 -4
  176. package/dist/components/forms/Select.d.ts +2 -2
  177. package/dist/components/forms/Select.d.ts.map +1 -1
  178. package/dist/components/forms/Textarea.d.ts +2 -2
  179. package/dist/components/forms/Textarea.d.ts.map +1 -1
  180. package/dist/components/forms/classes.d.ts +0 -3
  181. package/dist/components/forms/classes.d.ts.map +1 -1
  182. package/dist/components/forms/classes.js +3 -9
  183. package/dist/components/index.d.ts +1 -0
  184. package/dist/components/index.d.ts.map +1 -1
  185. package/dist/components/index.js +1 -0
  186. package/dist/components/utils.d.ts +8 -0
  187. package/dist/components/utils.d.ts.map +1 -1
  188. package/dist/components/utils.js +11 -0
  189. package/dist/runtime/createBridgedPluginContext.js +1 -1
  190. package/dist/runtime/index.js +1 -1
  191. package/dist/runtime/react.d.ts +2 -2
  192. package/dist/runtime/view-host/index.js +1 -1
  193. package/dist/runtime/viewHost.js +1 -1
  194. package/dist/signing/inventory.js +1 -1
  195. package/package.json +7 -3
@@ -1,6 +1,6 @@
1
- import type { JSX } from 'react';
1
+ import type { ComponentPropsWithoutRef, JSX } from 'react';
2
2
  import type { Variable } from '../../types.js';
3
- interface Props {
3
+ interface Props extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'onChange'> {
4
4
  /**
5
5
  * Variable rows to display.
6
6
  */
@@ -17,6 +17,6 @@ interface Props {
17
17
  /**
18
18
  * Editable table for key/value/default/share variable rows.
19
19
  */
20
- export declare function VariableTable({ variables, onChange, description }: Props): JSX.Element;
20
+ export declare function VariableTable({ variables, onChange, description, className, ...props }: Props): JSX.Element;
21
21
  export {};
22
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/VariableTable/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAY/C,UAAU,KAAK;IACb;;OAEG;IACH,SAAS,EAAE,QAAQ,EAAE,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IAE1C;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAoHtF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/VariableTable/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAY/C,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACpF;;OAEG;IACH,SAAS,EAAE,QAAQ,EAAE,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IAE1C;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,QAAQ,EACR,WAAW,EACX,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CA+GrB"}
@@ -1,9 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "@harborclient/sdk/jsx-runtime";
2
+ import { faPlus, faXmark } from '@fortawesome/free-solid-svg-icons';
2
3
  import { Button } from '../Button/index.js';
3
4
  import { FaIcon } from '../FaIcon/index.js';
4
- import { faPlus, faXmark } from '@fortawesome/free-solid-svg-icons';
5
- import { Checkbox, Input } from '../forms/index.js';
6
5
  import { Table, TableBody, TableCell, TableHead, TableHeader } from '../Table/index.js';
6
+ import { Checkbox, Input } from '../forms/index.js';
7
+ import { cn } from '../utils.js';
7
8
  /**
8
9
  * Returns a blank variable row for new table entries.
9
10
  */
@@ -11,12 +12,9 @@ const emptyVariable = () => ({ key: '', value: '', defaultValue: '', share: fals
11
12
  /**
12
13
  * Editable table for key/value/default/share variable rows.
13
14
  */
14
- export function VariableTable({ variables, onChange, description }) {
15
+ export function VariableTable({ variables, onChange, description, className, ...props }) {
15
16
  /**
16
17
  * Updates a single variable row by index.
17
- *
18
- * @param index - Row index to update.
19
- * @param patch - Partial fields to merge into the row.
20
18
  */
21
19
  const updateVariable = (index, patch) => {
22
20
  onChange(variables.map((row, i) => (i === index ? { ...row, ...patch } : row)));
@@ -29,8 +27,6 @@ export function VariableTable({ variables, onChange, description }) {
29
27
  };
30
28
  /**
31
29
  * Removes a variable row, keeping at least one empty row.
32
- *
33
- * @param index - Row index to remove.
34
30
  */
35
31
  const removeVariable = (index) => {
36
32
  if (variables.length === 1) {
@@ -39,5 +35,5 @@ export function VariableTable({ variables, onChange, description }) {
39
35
  }
40
36
  onChange(variables.filter((_, i) => i !== index));
41
37
  };
42
- return (_jsxs("div", { className: "hc-variable-table", children: [description && (_jsx("p", { className: "hc-variable-table-description mb-3 text-[14px] text-muted", children: description })), _jsxs("div", { className: "hc-variable-table-content flex flex-col gap-1.5", children: [_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs("tr", { children: [_jsx(TableHead, { children: "Key" }), _jsx(TableHead, { children: "Value" }), _jsx(TableHead, { children: "Default" }), _jsx(TableHead, { className: "w-14 text-center", children: "Share" }), _jsx(TableHead, { className: "w-7 p-0 text-center" })] }) }), _jsx(TableBody, { children: variables.map((variable, index) => (_jsxs("tr", { children: [_jsx(TableCell, { children: _jsx(Input, { type: "text", className: "w-full", value: variable.key, placeholder: "variable", "aria-label": `Key, row ${index + 1}`, onChange: (e) => updateVariable(index, { key: e.target.value }) }) }), _jsx(TableCell, { children: _jsx(Input, { type: "text", className: "w-full", value: variable.value, placeholder: "value", "aria-label": `Value, row ${index + 1}`, onChange: (e) => updateVariable(index, { value: e.target.value }) }) }), _jsx(TableCell, { children: _jsx(Input, { type: "text", className: "w-full", value: variable.defaultValue, placeholder: "default", "aria-label": `Default, row ${index + 1}`, onChange: (e) => updateVariable(index, { defaultValue: e.target.value }) }) }), _jsx(TableCell, { className: "w-14 text-center", children: _jsx(Checkbox, { checked: variable.share, onChange: (e) => updateVariable(index, { share: e.target.checked }), "aria-label": `Include value in export, row ${index + 1}`, title: "Include value in export" }) }), _jsx(TableCell, { className: "w-7 p-0 text-center", children: _jsx(Button, { type: "button", variant: "iconDanger", onClick: () => removeVariable(index), title: "Remove", "aria-label": `Remove row ${index + 1}`, children: _jsx(FaIcon, { icon: faXmark, className: "h-3.5 w-3.5" }) }) })] }, index))) })] }), _jsxs(Button, { type: "button", variant: "toolbar", className: "hc-variable-table-add inline-flex items-center gap-1 self-start", onClick: addVariable, children: [_jsx(FaIcon, { icon: faPlus, className: "h-3 w-3" }), "Add variable"] })] })] }));
38
+ return (_jsxs("div", { ...props, className: cn('hc-variable-table', className), children: [description && (_jsx("p", { className: "hc-variable-table-description mb-3 text-[14px] text-muted", children: description })), _jsxs("div", { className: "hc-variable-table-content flex flex-col gap-1.5", children: [_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs("tr", { children: [_jsx(TableHead, { children: "Key" }), _jsx(TableHead, { children: "Value" }), _jsx(TableHead, { children: "Default" }), _jsx(TableHead, { className: "w-14 text-center", children: "Share" }), _jsx(TableHead, { className: "w-7 p-0 text-center" })] }) }), _jsx(TableBody, { children: variables.map((variable, index) => (_jsxs("tr", { children: [_jsx(TableCell, { children: _jsx(Input, { type: "text", className: "w-full", value: variable.key, placeholder: "variable", "aria-label": `Key, row ${index + 1}`, onChange: (e) => updateVariable(index, { key: e.target.value }) }) }), _jsx(TableCell, { children: _jsx(Input, { type: "text", className: "w-full", value: variable.value, placeholder: "value", "aria-label": `Value, row ${index + 1}`, onChange: (e) => updateVariable(index, { value: e.target.value }) }) }), _jsx(TableCell, { children: _jsx(Input, { type: "text", className: "w-full", value: variable.defaultValue, placeholder: "default", "aria-label": `Default, row ${index + 1}`, onChange: (e) => updateVariable(index, { defaultValue: e.target.value }) }) }), _jsx(TableCell, { className: "w-14 text-center", children: _jsx(Checkbox, { checked: variable.share, onChange: (e) => updateVariable(index, { share: e.target.checked }), "aria-label": `Include value in export, row ${index + 1}`, title: "Include value in export" }) }), _jsx(TableCell, { className: "w-7 p-0 text-center", children: _jsx(Button, { type: "button", variant: "iconDanger", onClick: () => removeVariable(index), title: "Remove", "aria-label": `Remove row ${index + 1}`, children: _jsx(FaIcon, { icon: faXmark, className: "h-3.5 w-3.5" }) }) })] }, index))) })] }), _jsxs(Button, { type: "button", variant: "toolbar", className: "hc-variable-table-add inline-flex items-center gap-1 self-start", onClick: addVariable, children: [_jsx(FaIcon, { icon: faPlus, className: "h-3 w-3" }), "Add variable"] })] })] }));
43
39
  }
@@ -1,5 +1,5 @@
1
- import type { InputHTMLAttributes, JSX, Ref } from 'react';
2
- interface Props extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
1
+ import type { ComponentPropsWithoutRef, JSX, Ref } from 'react';
2
+ interface Props extends Omit<ComponentPropsWithoutRef<'input'>, 'type' | 'ref' | 'className'> {
3
3
  /**
4
4
  * Additional Tailwind classes applied to the outer wrapper.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/forms/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG3D,UAAU,KAAM,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACzE;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CA+BzE"}
1
+ {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/forms/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAIhE,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC;IAC3F;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAgCzE"}
@@ -1,11 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "@harborclient/sdk/jsx-runtime";
2
+ import { cn } from '../utils.js';
2
3
  import { checkboxBox, checkboxInput } from './classes.js';
3
4
  /**
4
5
  * macOS-style checkbox with a custom box slightly larger than the native control.
5
6
  */
6
7
  export function Checkbox({ ref, className, ...props }) {
7
- const wrapperClasses = className
8
- ? `hc-checkbox relative inline-flex h-[18px] w-[18px] shrink-0 leading-none ${className}`
9
- : 'hc-checkbox relative inline-flex h-[18px] w-[18px] shrink-0 leading-none';
10
- return (_jsxs("span", { className: wrapperClasses, children: [_jsx("input", { ref: ref, type: "checkbox", className: `hc-checkbox-input ${checkboxInput}`, ...props }), _jsx("span", { className: `hc-checkbox-box ${checkboxBox}`, "aria-hidden": true, children: _jsx("svg", { className: "hc-checkbox-icon h-3 w-3", viewBox: "0 0 12 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M2.5 6L5 8.5L9.5 3.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })] }));
8
+ return (_jsxs("span", { className: cn('hc-checkbox relative inline-flex h-[18px] w-[18px] shrink-0 leading-none', className), children: [_jsx("input", { ...props, ref: ref, type: "checkbox", className: cn('hc-checkbox-input', checkboxInput) }), _jsx("span", { className: cn('hc-checkbox-box', checkboxBox), "aria-hidden": true, children: _jsx("svg", { className: "hc-checkbox-icon h-3 w-3", viewBox: "0 0 12 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M2.5 6L5 8.5L9.5 3.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })] }));
11
9
  }
@@ -1,6 +1,6 @@
1
- import type { InputHTMLAttributes, JSX, Ref } from 'react';
1
+ import type { ComponentPropsWithoutRef, JSX, Ref } from 'react';
2
2
  import { type FieldVariant } from './classes.js';
3
- interface Props extends InputHTMLAttributes<HTMLInputElement> {
3
+ interface Props extends Omit<ComponentPropsWithoutRef<'input'>, 'ref'> {
4
4
  /**
5
5
  * Base field styling preset. Checkbox and radio inputs default to `plain`.
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/forms/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAEpE,UAAU,KAAM,SAAQ,mBAAmB,CAAC,gBAAgB,CAAC;IAC3D;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,GAAG,EAAE,OAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAWjG"}
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/forms/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,cAAc,CAAC;AAEpE,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;IACpE;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,GAAG,EAAE,OAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAWjG"}
@@ -1,5 +1,5 @@
1
- import type { InputHTMLAttributes, JSX, Ref } from 'react';
2
- interface Props extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
1
+ import type { ComponentPropsWithoutRef, JSX, Ref } from 'react';
2
+ interface Props extends Omit<ComponentPropsWithoutRef<'input'>, 'type' | 'ref' | 'className'> {
3
3
  /**
4
4
  * Additional Tailwind classes applied to the outer wrapper.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Radio.d.ts","sourceRoot":"","sources":["../../../src/components/forms/Radio.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG3D,UAAU,KAAM,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACzE;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAatE"}
1
+ {"version":3,"file":"Radio.d.ts","sourceRoot":"","sources":["../../../src/components/forms/Radio.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAIhE,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC;IAC3F;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CActE"}
@@ -1,11 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "@harborclient/sdk/jsx-runtime";
2
+ import { cn } from '../utils.js';
2
3
  import { radioCircle, radioDot, radioInput } from './classes.js';
3
4
  /**
4
5
  * macOS-style radio button with a custom circle slightly larger than the native control.
5
6
  */
6
7
  export function Radio({ ref, className, ...props }) {
7
- const wrapperClasses = className
8
- ? `hc-radio relative inline-flex h-[18px] w-[18px] shrink-0 leading-none ${className}`
9
- : 'hc-radio relative inline-flex h-[18px] w-[18px] shrink-0 leading-none';
10
- return (_jsxs("span", { className: wrapperClasses, children: [_jsx("input", { ref: ref, type: "radio", className: `hc-radio-input ${radioInput}`, ...props }), _jsx("span", { className: `hc-radio-circle ${radioCircle}`, "aria-hidden": true, children: _jsx("span", { className: `hc-radio-dot ${radioDot}` }) })] }));
8
+ return (_jsxs("span", { className: cn('hc-radio relative inline-flex h-[18px] w-[18px] shrink-0 leading-none', className), children: [_jsx("input", { ...props, ref: ref, type: "radio", className: cn('hc-radio-input', radioInput) }), _jsx("span", { className: cn('hc-radio-circle', radioCircle), "aria-hidden": true, children: _jsx("span", { className: cn('hc-radio-dot', radioDot) }) })] }));
11
9
  }
@@ -1,6 +1,6 @@
1
- import type { JSX, Ref, SelectHTMLAttributes } from 'react';
1
+ import type { ComponentPropsWithoutRef, JSX, Ref } from 'react';
2
2
  import { type FieldVariant } from './classes.js';
3
- interface Props extends SelectHTMLAttributes<HTMLSelectElement> {
3
+ interface Props extends Omit<ComponentPropsWithoutRef<'select'>, 'ref'> {
4
4
  /**
5
5
  * Base field styling preset.
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/forms/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAEpE,UAAU,KAAM,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC7D;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,EACrB,GAAG,EACH,OAAmB,EACnB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAMrB"}
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/forms/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,cAAc,CAAC;AAEpE,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IACrE;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,EACrB,GAAG,EACH,OAAmB,EACnB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAMrB"}
@@ -1,6 +1,6 @@
1
- import type { JSX, Ref, TextareaHTMLAttributes } from 'react';
1
+ import type { ComponentPropsWithoutRef, JSX, Ref } from 'react';
2
2
  import { type FieldVariant } from './classes.js';
3
- interface Props extends TextareaHTMLAttributes<HTMLTextAreaElement> {
3
+ interface Props extends Omit<ComponentPropsWithoutRef<'textarea'>, 'ref'> {
4
4
  /**
5
5
  * Base field styling preset.
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../src/components/forms/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAEpE,UAAU,KAAM,SAAQ,sBAAsB,CAAC,mBAAmB,CAAC;IACjE;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,GAAG,EAAE,OAAmB,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAQ9F"}
1
+ {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../src/components/forms/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,cAAc,CAAC;AAEpE,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACvE;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,GAAG,EAAE,OAAmB,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAQ9F"}
@@ -1,6 +1,3 @@
1
- /**
2
- * Shared Tailwind class strings for macOS-style form controls.
3
- */
4
1
  /**
5
2
  * Visual style preset for form field wrappers.
6
3
  */
@@ -1 +1 @@
1
- {"version":3,"file":"classes.d.ts","sourceRoot":"","sources":["../../../src/components/forms/classes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,UAAU,gEAAgE,CAAC;AAExF,mEAAmE;AACnE,eAAO,MAAM,KAAK,gGAC6E,CAAC;AAEhG,wDAAwD;AACxD,eAAO,MAAM,YAAY,yFAC+D,CAAC;AAEzF,uEAAuE;AACvE,eAAO,MAAM,aAAa,iGACsE,CAAC;AAEjG,qGAAqG;AACrG,eAAO,MAAM,WAAW,waAC+Y,CAAC;AAExa,oEAAoE;AACpE,eAAO,MAAM,UAAU,iGACyE,CAAC;AAEjG,kGAAkG;AAClG,eAAO,MAAM,WAAW,+XACsW,CAAC;AAE/X,6DAA6D;AAC7D,eAAO,MAAM,QAAQ,8GACwF,CAAC;AAO9G;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,GAAG,SAAS,CAOpB"}
1
+ {"version":3,"file":"classes.d.ts","sourceRoot":"","sources":["../../../src/components/forms/classes.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,UAAU,gEAAgE,CAAC;AAExF,mEAAmE;AACnE,eAAO,MAAM,KAAK,gGAC6E,CAAC;AAEhG,wDAAwD;AACxD,eAAO,MAAM,YAAY,yFAC+D,CAAC;AAEzF,uEAAuE;AACvE,eAAO,MAAM,aAAa,iGACsE,CAAC;AAEjG,qGAAqG;AACrG,eAAO,MAAM,WAAW,waAC+Y,CAAC;AAExa,oEAAoE;AACpE,eAAO,MAAM,UAAU,iGACyE,CAAC;AAEjG,kGAAkG;AAClG,eAAO,MAAM,WAAW,+XACsW,CAAC;AAE/X,6DAA6D;AAC7D,eAAO,MAAM,QAAQ,8GACwF,CAAC;AAE9G;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,GAAG,SAAS,CAOpB"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Shared Tailwind class strings for macOS-style form controls.
3
3
  */
4
+ import { cn } from '../utils.js';
4
5
  /**
5
6
  * Border and subtle tint shell for composite inputs (e.g. VariableInput wrappers).
6
7
  */
@@ -19,10 +20,6 @@ export const radioInput = 'peer absolute inset-0 m-0 h-full w-full cursor-pointe
19
20
  export const radioCircle = 'pointer-events-none relative h-[18px] w-[18px] shrink-0 leading-none rounded-full border border-separator bg-field peer-checked:border-accent peer-focus-visible:outline peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-accent peer-disabled:cursor-not-allowed peer-disabled:opacity-50 [&>span]:opacity-0 peer-checked:[&>span]:opacity-100';
20
21
  /** Checked-state dot centered inside {@link radioCircle}. */
21
22
  export const radioDot = 'absolute left-1/2 top-1/2 block h-2 w-2 -translate-x-1/2 -translate-y-1/2 shrink-0 rounded-full bg-accent';
22
- const VARIANT_CLASSES = {
23
- control: field,
24
- surface: surfaceField
25
- };
26
23
  /**
27
24
  * Merges a field variant preset with optional caller classes.
28
25
  *
@@ -32,9 +29,6 @@ const VARIANT_CLASSES = {
32
29
  * @returns Combined class string, or undefined when all inputs are empty.
33
30
  */
34
31
  export function mergeFieldClasses(variant, className, rootClass) {
35
- const base = variant === 'plain' ? '' : VARIANT_CLASSES[variant];
36
- const parts = [rootClass, base, className].filter((part) => part != null && part !== '');
37
- if (parts.length === 0)
38
- return undefined;
39
- return parts.join(' ');
32
+ const result = cn(rootClass, variant === 'control' ? field : variant === 'surface' ? surfaceField : undefined, className);
33
+ return result === '' ? undefined : result;
40
34
  }
@@ -1,5 +1,6 @@
1
1
  export { AsyncListState, ErrorRetry, LoadingMessage } from './AsyncListState/index.js';
2
2
  export { AutocompleteInput, SuggestionList, useAutocomplete, type AutocompleteInputProps, type AutocompleteSource } from './Autocomplete/index.js';
3
+ export { Card } from './Card/index.js';
3
4
  export { BusyIndicator } from './BusyIndicator/index.js';
4
5
  export type { Props as BusyIndicatorProps } from './BusyIndicator/index.js';
5
6
  export { BackButton } from './BackButton/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export { AsyncListState, ErrorRetry, LoadingMessage } from './AsyncListState/index.js';
2
2
  export { AutocompleteInput, SuggestionList, useAutocomplete } from './Autocomplete/index.js';
3
+ export { Card } from './Card/index.js';
3
4
  export { BusyIndicator } from './BusyIndicator/index.js';
4
5
  export { BackButton } from './BackButton/index.js';
5
6
  export { Badge } from './Badge/index.js';
@@ -1,4 +1,12 @@
1
+ import { type ClassValue } from 'clsx';
1
2
  import type { Variable } from '../types.js';
3
+ /**
4
+ * Merges Tailwind classes into a single string.
5
+ *
6
+ * @param inputs - Tailwind classes to merge.
7
+ * @returns Merged classes.
8
+ */
9
+ export declare function cn(...inputs: ClassValue[]): string;
2
10
  /**
3
11
  * Drops variable rows with no key, value, or default content.
4
12
  *
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/components/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,QAAQ,EAAE,KAAG,QAAQ,EACmB,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAgED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,MAAM,GAAG,IAAI,CAcf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,mBAAmB,GAAG,IAAI,CAc5B"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/components/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,QAAQ,EAAE,KAAG,QAAQ,EACmB,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAgED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,MAAM,GAAG,IAAI,CAcf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,mBAAmB,GAAG,IAAI,CAc5B"}
@@ -1,3 +1,14 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+ /**
4
+ * Merges Tailwind classes into a single string.
5
+ *
6
+ * @param inputs - Tailwind classes to merge.
7
+ * @returns Merged classes.
8
+ */
9
+ export function cn(...inputs) {
10
+ return twMerge(clsx(inputs));
11
+ }
1
12
  /**
2
13
  * Drops variable rows with no key, value, or default content.
3
14
  *
@@ -1,4 +1,3 @@
1
- import { bridgeInvoke, bridgeOn } from './hcBridge.js';
2
1
  import {
3
2
  getContributionComponent,
4
3
  getContributionHeaderActions,
@@ -7,6 +6,7 @@ import {
7
6
  registerContributionHeaderActions,
8
7
  registerContributionIndicator
9
8
  } from './contributionRegistry.js';
9
+ import { bridgeInvoke, bridgeOn } from './hcBridge.js';
10
10
  import { createPluginDatabaseApi } from './pluginDatabaseApi.js';
11
11
  import { setHostReact } from './reactHost.js';
12
12
 
@@ -1,4 +1,4 @@
1
- import { setHostReact, requireHostReact } from './reactHost.js';
1
+ import { requireHostReact, setHostReact } from './reactHost.js';
2
2
 
3
3
  /**
4
4
  * Installs the HarborClient renderer React instance for plugin JSX and hooks.
@@ -1,3 +1,5 @@
1
+ import type * as React from 'react';
2
+
1
3
  export {
2
4
  useState,
3
5
  useEffect,
@@ -16,7 +18,5 @@ export {
16
18
  createElement
17
19
  } from 'react';
18
20
 
19
- import type * as React from 'react';
20
-
21
21
  declare const _default: typeof React;
22
22
  export default _default;
@@ -1,3 +1,3 @@
1
- import { bootstrapViewHost, applyHostTheme } from './viewHost.js';
1
+ import { applyHostTheme, bootstrapViewHost } from './viewHost.js';
2
2
 
3
3
  export { bootstrapViewHost, applyHostTheme };
@@ -1,4 +1,3 @@
1
- import { installBridgeHandlers, bridgeOn } from './hcBridge.js';
2
1
  import { clearContributionRegistry } from './contributionRegistry.js';
3
2
  import {
4
3
  createBridgedPluginContext,
@@ -7,6 +6,7 @@ import {
7
6
  parseViewHostRole,
8
7
  resolveContributionKindFromUrl
9
8
  } from './createBridgedPluginContext.js';
9
+ import { bridgeOn, installBridgeHandlers } from './hcBridge.js';
10
10
  import { setHostReact, setHostReactDom } from './reactHost.js';
11
11
 
12
12
  /**
@@ -1,5 +1,5 @@
1
1
  import { createHash } from 'node:crypto';
2
- import { readdirSync, readFileSync, statSync } from 'node:fs';
2
+ import { readFileSync, readdirSync, statSync } from 'node:fs';
3
3
  import { join, relative } from 'node:path';
4
4
  import { PLUGIN_SIGNATURE_FILENAME } from './types.js';
5
5
  const EXCLUDED_PATH_SEGMENTS = new Set(['.git', 'node_modules']);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@harborclient/sdk",
3
- "version": "1.0.29",
3
+ "version": "1.0.31",
4
4
  "description": "TypeScript SDK for HarborClient development.",
5
5
  "keywords": [
6
6
  "harborclient",
@@ -159,15 +159,15 @@
159
159
  "react": ">=18"
160
160
  },
161
161
  "dependencies": {
162
- "@eslint/js": "^10.0.1",
163
162
  "@codemirror/autocomplete": "^6.20.3",
164
163
  "@codemirror/lang-javascript": "^6.2.4",
165
164
  "@codemirror/lang-json": "^6.0.2",
166
- "@codemirror/lint": "^6.9.7",
167
165
  "@codemirror/language": "^6.12.3",
168
166
  "@codemirror/legacy-modes": "^6.5.3",
167
+ "@codemirror/lint": "^6.9.7",
169
168
  "@codemirror/state": "^6.6.0",
170
169
  "@codemirror/view": "^6.43.1",
170
+ "@eslint/js": "^10.0.1",
171
171
  "@faker-js/faker": "^10.5.0",
172
172
  "@fortawesome/fontawesome-svg-core": "^7.2.0",
173
173
  "@fortawesome/free-solid-svg-icons": "^7.2.0",
@@ -175,9 +175,11 @@
175
175
  "@lezer/highlight": "^1.2.3",
176
176
  "@uiw/codemirror-themes-all": "^4.25.10",
177
177
  "@uiw/react-codemirror": "^4.25.10",
178
+ "clsx": "^2.1.1",
178
179
  "esbuild": "^0.25.0",
179
180
  "eslint-config-prettier": "^10.1.8",
180
181
  "globals": "^17.7.0",
182
+ "tailwind-merge": "^3.6.0",
181
183
  "typescript-eslint": "^8.62.0"
182
184
  },
183
185
  "devDependencies": {
@@ -186,6 +188,7 @@
186
188
  "@storybook/addon-docs": "^10.4.6",
187
189
  "@storybook/react-vite": "^10.4.6",
188
190
  "@tailwindcss/vite": "^4.3.1",
191
+ "@trivago/prettier-plugin-sort-imports": "^6.0.2",
189
192
  "@types/node": "^26.0.1",
190
193
  "@types/react": "^19.1.2",
191
194
  "@types/react-dom": "^19.1.2",
@@ -199,6 +202,7 @@
199
202
  "jest-environment-jsdom": "^30.4.1",
200
203
  "mermaid": "^11.15.0",
201
204
  "prettier": "^3.8.4",
205
+ "prettier-plugin-tailwindcss": "^0.8.0",
202
206
  "react": "^19.2.7",
203
207
  "react-dom": "^19.2.7",
204
208
  "storybook": "^10.4.6",