@harborclient/sdk 1.0.74 → 1.0.77

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 (29) hide show
  1. package/dist/components/CodeEditor/index.js +1 -1
  2. package/dist/components/ColorPicker/colorUtils.d.ts +28 -0
  3. package/dist/components/ColorPicker/colorUtils.d.ts.map +1 -0
  4. package/dist/components/ColorPicker/colorUtils.js +59 -0
  5. package/dist/components/ColorPicker/customSwatches.d.ts +23 -0
  6. package/dist/components/ColorPicker/customSwatches.d.ts.map +1 -0
  7. package/dist/components/ColorPicker/customSwatches.js +65 -0
  8. package/dist/components/ColorPicker/index.d.ts +39 -0
  9. package/dist/components/ColorPicker/index.d.ts.map +1 -0
  10. package/dist/components/ColorPicker/index.js +103 -0
  11. package/dist/components/EmptyState/index.d.ts.map +1 -1
  12. package/dist/components/EmptyState/index.js +3 -3
  13. package/dist/components/FooterPanel/index.d.ts.map +1 -1
  14. package/dist/components/FooterPanel/index.js +1 -1
  15. package/dist/components/FormGroup/index.js +6 -6
  16. package/dist/components/PageHeader/index.d.ts.map +1 -1
  17. package/dist/components/PageHeader/index.js +1 -1
  18. package/dist/components/TabBar/TabContextMenu.js +1 -1
  19. package/dist/components/VariableInput/index.js +3 -3
  20. package/dist/components/classes.js +2 -2
  21. package/dist/components/forms/classes.d.ts +1 -1
  22. package/dist/components/forms/classes.d.ts.map +1 -1
  23. package/dist/components/forms/classes.js +1 -1
  24. package/dist/components/index.d.ts +5 -0
  25. package/dist/components/index.d.ts.map +1 -1
  26. package/dist/components/index.js +4 -0
  27. package/dist/components/rowActionsMenuHelpers.js +1 -1
  28. package/dist/styles.css +10 -0
  29. package/package.json +1 -1
@@ -1111,7 +1111,7 @@ export function CodeEditor({ value, onChange, language = 'text', readOnly = fals
1111
1111
  ...(height ? { height: '100%' } : {}),
1112
1112
  basicSetup,
1113
1113
  onCreateEditor: stableOnCreateEditor
1114
- }), selectionTooltip && selectionTooltipContent && variables ? (_jsxs("div", { id: tooltipId, role: "tooltip", className: "hc-code-editor-tooltip app-no-drag pointer-events-auto fixed z-50 flex max-w-sm -translate-x-1/2 -translate-y-full flex-col gap-1.5 rounded-lg border border-separator bg-surface px-3 py-2 text-[16px] text-text shadow-md", style: { top: selectionTooltip.top - 4, left: selectionTooltip.left }, children: [_jsx(VariableTooltipValue, { value: selectionTooltipContent.text, variableKey: selectionTooltip.key, muted: selectionTooltipContent.muted }), onEditVariable ? (_jsx(Button, { variant: "secondary", className: "hc-code-editor-tooltip-edit self-start", "aria-label": `Edit value for ${selectionTooltip.key}`, onMouseDown: (event) => {
1114
+ }), selectionTooltip && selectionTooltipContent && variables ? (_jsxs("div", { id: tooltipId, role: "tooltip", className: "hc-code-editor-tooltip app-no-drag pointer-events-auto fixed z-50 flex max-w-sm -translate-x-1/2 -translate-y-full flex-col gap-1.5 rounded-lg border border-separator bg-surface px-3 py-2 text-text shadow-md", style: { top: selectionTooltip.top - 4, left: selectionTooltip.left }, children: [_jsx(VariableTooltipValue, { value: selectionTooltipContent.text, variableKey: selectionTooltip.key, muted: selectionTooltipContent.muted }), onEditVariable ? (_jsx(Button, { variant: "secondary", className: "hc-code-editor-tooltip-edit self-start", "aria-label": `Edit value for ${selectionTooltip.key}`, onMouseDown: (event) => {
1115
1115
  event.preventDefault();
1116
1116
  onEditVariable(selectionTooltip.key);
1117
1117
  setSelectionTooltip(null);
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Default preset swatches for sidebar item color coding (two rows of five).
3
+ */
4
+ export declare const DEFAULT_COLOR_PICKER_PRESETS: readonly string[];
5
+ /** Number of user-defined custom swatch slots in the picker grid. */
6
+ export declare const CUSTOM_SWATCH_SLOT_COUNT = 5;
7
+ /**
8
+ * Normalizes a CSS color string to lowercase hex when possible.
9
+ *
10
+ * @param value - Raw color string from storage or user input.
11
+ * @returns Normalized color for comparison, or the trimmed input.
12
+ */
13
+ export declare function normalizeCssColor(value: string): string;
14
+ /**
15
+ * Returns whether two CSS color strings represent the same color.
16
+ *
17
+ * @param a - First color string.
18
+ * @param b - Second color string.
19
+ */
20
+ export declare function colorsMatch(a: string | null | undefined, b: string | null | undefined): boolean;
21
+ /**
22
+ * Coerces a stored value to a valid hex color for native color inputs (`#rrggbb`).
23
+ *
24
+ * @param value - CSS color string.
25
+ * @returns Hex suitable for `<input type="color">`, or `#808080` when unrecognized.
26
+ */
27
+ export declare function toHexColorInputValue(value: string | null | undefined): string;
28
+ //# sourceMappingURL=colorUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorUtils.d.ts","sourceRoot":"","sources":["../../../src/components/ColorPicker/colorUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAWhD,CAAC;AAEX,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAK/F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAgB7E"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Default preset swatches for sidebar item color coding (two rows of five).
3
+ */
4
+ export const DEFAULT_COLOR_PICKER_PRESETS = [
5
+ '#1e3a5f',
6
+ '#0d9488',
7
+ '#ca8a04',
8
+ '#b91c1c',
9
+ '#be185d',
10
+ '#3b82f6',
11
+ '#16a34a',
12
+ '#ea580c',
13
+ '#dc2626',
14
+ '#9333ea'
15
+ ];
16
+ /** Number of user-defined custom swatch slots in the picker grid. */
17
+ export const CUSTOM_SWATCH_SLOT_COUNT = 5;
18
+ /**
19
+ * Normalizes a CSS color string to lowercase hex when possible.
20
+ *
21
+ * @param value - Raw color string from storage or user input.
22
+ * @returns Normalized color for comparison, or the trimmed input.
23
+ */
24
+ export function normalizeCssColor(value) {
25
+ return value.trim().toLowerCase();
26
+ }
27
+ /**
28
+ * Returns whether two CSS color strings represent the same color.
29
+ *
30
+ * @param a - First color string.
31
+ * @param b - Second color string.
32
+ */
33
+ export function colorsMatch(a, b) {
34
+ if (a == null || b == null) {
35
+ return false;
36
+ }
37
+ return normalizeCssColor(a) === normalizeCssColor(b);
38
+ }
39
+ /**
40
+ * Coerces a stored value to a valid hex color for native color inputs (`#rrggbb`).
41
+ *
42
+ * @param value - CSS color string.
43
+ * @returns Hex suitable for `<input type="color">`, or `#808080` when unrecognized.
44
+ */
45
+ export function toHexColorInputValue(value) {
46
+ if (value == null || value.trim() === '') {
47
+ return '#808080';
48
+ }
49
+ const trimmed = value.trim();
50
+ const hexMatch = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(trimmed);
51
+ if (hexMatch) {
52
+ const hex = hexMatch[1];
53
+ if (hex.length === 3) {
54
+ return `#${hex[0]}${hex[0]}${hex[1]}${hex[1]}${hex[2]}${hex[2]}`.toLowerCase();
55
+ }
56
+ return `#${hex.toLowerCase()}`;
57
+ }
58
+ return '#808080';
59
+ }
@@ -0,0 +1,23 @@
1
+ /** Default localStorage key for persisted custom color swatches. */
2
+ export declare const DEFAULT_CUSTOM_SWATCHES_STORAGE_KEY = "hc.sidebarCustomSwatches";
3
+ /**
4
+ * Loads custom swatch colors from localStorage.
5
+ *
6
+ * @param storageKey - localStorage key for the swatch array.
7
+ * @returns Up to five hex color strings; empty slots are omitted.
8
+ */
9
+ export declare function loadCustomSwatches(storageKey: string): string[];
10
+ /**
11
+ * Persists custom swatch colors to localStorage.
12
+ *
13
+ * @param storageKey - localStorage key for the swatch array.
14
+ * @param swatches - Hex colors for each custom slot (length up to five).
15
+ */
16
+ export declare function persistCustomSwatches(storageKey: string, swatches: string[]): void;
17
+ /**
18
+ * Returns the custom swatch slot values padded to the fixed slot count.
19
+ *
20
+ * @param swatches - Loaded custom swatches.
21
+ */
22
+ export declare function padCustomSwatchSlots(swatches: string[]): string[];
23
+ //# sourceMappingURL=customSwatches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customSwatches.d.ts","sourceRoot":"","sources":["../../../src/components/ColorPicker/customSwatches.ts"],"names":[],"mappings":"AAEA,oEAAoE;AACpE,eAAO,MAAM,mCAAmC,6BAA6B,CAAC;AAE9E;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CA0B/D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAUlF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAMjE"}
@@ -0,0 +1,65 @@
1
+ import { CUSTOM_SWATCH_SLOT_COUNT } from './colorUtils.js';
2
+ /** Default localStorage key for persisted custom color swatches. */
3
+ export const DEFAULT_CUSTOM_SWATCHES_STORAGE_KEY = 'hc.sidebarCustomSwatches';
4
+ /**
5
+ * Loads custom swatch colors from localStorage.
6
+ *
7
+ * @param storageKey - localStorage key for the swatch array.
8
+ * @returns Up to five hex color strings; empty slots are omitted.
9
+ */
10
+ export function loadCustomSwatches(storageKey) {
11
+ try {
12
+ const raw = localStorage.getItem(storageKey);
13
+ if (!raw) {
14
+ return [];
15
+ }
16
+ const parsed = JSON.parse(raw);
17
+ if (!Array.isArray(parsed)) {
18
+ return [];
19
+ }
20
+ const result = [];
21
+ for (const entry of parsed) {
22
+ if (typeof entry !== 'string' || entry.trim() === '') {
23
+ continue;
24
+ }
25
+ result.push(entry.trim());
26
+ if (result.length >= CUSTOM_SWATCH_SLOT_COUNT) {
27
+ break;
28
+ }
29
+ }
30
+ return result;
31
+ }
32
+ catch {
33
+ return [];
34
+ }
35
+ }
36
+ /**
37
+ * Persists custom swatch colors to localStorage.
38
+ *
39
+ * @param storageKey - localStorage key for the swatch array.
40
+ * @param swatches - Hex colors for each custom slot (length up to five).
41
+ */
42
+ export function persistCustomSwatches(storageKey, swatches) {
43
+ try {
44
+ const normalized = swatches
45
+ .slice(0, CUSTOM_SWATCH_SLOT_COUNT)
46
+ .map((entry) => entry.trim())
47
+ .filter((entry) => entry.length > 0);
48
+ localStorage.setItem(storageKey, JSON.stringify(normalized));
49
+ }
50
+ catch {
51
+ // Ignore quota or privacy-mode failures.
52
+ }
53
+ }
54
+ /**
55
+ * Returns the custom swatch slot values padded to the fixed slot count.
56
+ *
57
+ * @param swatches - Loaded custom swatches.
58
+ */
59
+ export function padCustomSwatchSlots(swatches) {
60
+ const slots = swatches.slice(0, CUSTOM_SWATCH_SLOT_COUNT);
61
+ while (slots.length < CUSTOM_SWATCH_SLOT_COUNT) {
62
+ slots.push('');
63
+ }
64
+ return slots;
65
+ }
@@ -0,0 +1,39 @@
1
+ import type { ComponentPropsWithoutRef, JSX } from 'react';
2
+ export interface Props extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'className' | 'onChange'> {
3
+ /**
4
+ * Currently selected color, or null when no color is assigned.
5
+ */
6
+ value: string | null;
7
+ /**
8
+ * Called when the user picks a preset or custom swatch color.
9
+ */
10
+ onChange: (color: string) => void;
11
+ /**
12
+ * Called when the user clears the current color. Omitted when clearing is disabled.
13
+ */
14
+ onClear?: () => void;
15
+ /**
16
+ * Fixed preset swatches (defaults to two rows of five HarborClient colors).
17
+ */
18
+ presets?: readonly string[];
19
+ /**
20
+ * localStorage key for persisting custom swatch slot colors.
21
+ */
22
+ customSwatchesStorageKey?: string;
23
+ /**
24
+ * Accessible name for the swatch grid.
25
+ */
26
+ 'aria-label'?: string;
27
+ /**
28
+ * Additional classes on the outer wrapper.
29
+ */
30
+ className?: string;
31
+ }
32
+ /**
33
+ * Swatch-grid color picker with preset rows and user-defined custom slots.
34
+ *
35
+ * Custom slots open the native OS color picker via a hidden `<input type="color">`.
36
+ * Chosen custom colors are saved to localStorage for reuse.
37
+ */
38
+ export declare function ColorPicker({ value, onChange, onClear, presets, customSwatchesStorageKey, 'aria-label': ariaLabel, className, ...props }: Props): JSX.Element;
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ColorPicker/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAiB,MAAM,OAAO,CAAC;AAW1E,MAAM,WAAW,KAAM,SAAQ,IAAI,CACjC,wBAAwB,CAAC,KAAK,CAAC,EAC/B,UAAU,GAAG,WAAW,GAAG,UAAU,CACtC;IACC;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,OAAO,EACP,OAAsC,EACtC,wBAA8D,EAC9D,YAAY,EAAE,SAA4B,EAC1C,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAgLrB"}
@@ -0,0 +1,103 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@harborclient/sdk/jsx-runtime";
2
+ import { faCheck } from '@fortawesome/free-solid-svg-icons';
3
+ import { useCallback, useEffect, useId, useRef, useState } from '@harborclient/sdk/react';
4
+ import { FaIcon } from '../FaIcon/index.js';
5
+ import { cn } from '../utils.js';
6
+ import { DEFAULT_COLOR_PICKER_PRESETS, colorsMatch, toHexColorInputValue } from './colorUtils.js';
7
+ import { DEFAULT_CUSTOM_SWATCHES_STORAGE_KEY, loadCustomSwatches, padCustomSwatchSlots, persistCustomSwatches } from './customSwatches.js';
8
+ /**
9
+ * Swatch-grid color picker with preset rows and user-defined custom slots.
10
+ *
11
+ * Custom slots open the native OS color picker via a hidden `<input type="color">`.
12
+ * Chosen custom colors are saved to localStorage for reuse.
13
+ */
14
+ export function ColorPicker({ value, onChange, onClear, presets = DEFAULT_COLOR_PICKER_PRESETS, customSwatchesStorageKey = DEFAULT_CUSTOM_SWATCHES_STORAGE_KEY, 'aria-label': ariaLabel = 'Choose a color', className, ...props }) {
15
+ const groupId = useId();
16
+ const nativeInputRef = useRef(null);
17
+ const pendingCustomSlotRef = useRef(null);
18
+ const [customSlots, setCustomSlots] = useState(() => padCustomSwatchSlots(loadCustomSwatches(customSwatchesStorageKey)));
19
+ /**
20
+ * Reloads custom swatches when the storage key changes (e.g. isolated tests).
21
+ */
22
+ useEffect(() => {
23
+ setCustomSlots(padCustomSwatchSlots(loadCustomSwatches(customSwatchesStorageKey)));
24
+ }, [customSwatchesStorageKey]);
25
+ /**
26
+ * Persists custom slot colors whenever they change.
27
+ */
28
+ useEffect(() => {
29
+ persistCustomSwatches(customSwatchesStorageKey, customSlots);
30
+ }, [customSlots, customSwatchesStorageKey]);
31
+ /**
32
+ * Applies a color chosen from the native picker to the pending custom slot.
33
+ *
34
+ * @param hex - Hex color from the native input.
35
+ */
36
+ const applyNativePickerColor = useCallback((hex) => {
37
+ const slotIndex = pendingCustomSlotRef.current;
38
+ if (slotIndex == null) {
39
+ return;
40
+ }
41
+ setCustomSlots((current) => {
42
+ const next = [...current];
43
+ next[slotIndex] = hex;
44
+ return next;
45
+ });
46
+ onChange(hex);
47
+ pendingCustomSlotRef.current = null;
48
+ }, [onChange]);
49
+ /**
50
+ * Opens the native color picker for an empty or filled custom slot.
51
+ *
52
+ * @param slotIndex - Zero-based custom slot index.
53
+ * @param currentSlotColor - Existing color in the slot, if any.
54
+ */
55
+ const openNativePickerForSlot = useCallback((slotIndex, currentSlotColor) => {
56
+ pendingCustomSlotRef.current = slotIndex;
57
+ const input = nativeInputRef.current;
58
+ if (!input) {
59
+ return;
60
+ }
61
+ input.value = toHexColorInputValue(currentSlotColor || null);
62
+ input.click();
63
+ }, []);
64
+ /**
65
+ * Renders one circular swatch button with optional selection checkmark.
66
+ *
67
+ * @param color - CSS background color for the swatch.
68
+ * @param label - Accessible name for the swatch.
69
+ * @param selected - Whether this swatch matches the current value.
70
+ * @param onSelect - Called when the swatch is activated.
71
+ * @param onEdit - When set, double-click or a modifier opens the native picker.
72
+ */
73
+ const renderSwatch = (color, label, selected, onSelect, onEdit) => {
74
+ /**
75
+ * Activates the swatch on Enter or Space.
76
+ *
77
+ * @param event - Keyboard event on the swatch button.
78
+ */
79
+ const handleKeyDown = (event) => {
80
+ if (event.key === 'Enter' || event.key === ' ') {
81
+ event.preventDefault();
82
+ onSelect();
83
+ }
84
+ };
85
+ return (_jsx("button", { type: "button", role: "radio", "aria-checked": selected, "aria-label": label, className: cn('relative flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-separator', 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent'), style: { backgroundColor: color }, onClick: onSelect, onDoubleClick: onEdit
86
+ ? (event) => {
87
+ event.preventDefault();
88
+ onEdit();
89
+ }
90
+ : undefined, onKeyDown: handleKeyDown, children: selected ? (_jsx(FaIcon, { icon: faCheck, className: "h-3.5 w-3.5 text-white drop-shadow-sm", "aria-hidden": true })) : null }, `${label}-${color}`));
91
+ };
92
+ return (_jsxs("div", { className: cn('flex flex-col gap-2', className), role: "radiogroup", "aria-label": ariaLabel, id: groupId, ...props, children: [_jsx("div", { className: "grid grid-cols-5 gap-2", children: presets.map((color, index) => renderSwatch(color, `Preset color ${index + 1}`, colorsMatch(value, color), () => onChange(color))) }), _jsx("div", { className: "grid grid-cols-5 gap-2", children: customSlots.map((slotColor, index) => {
93
+ const hasColor = slotColor.trim() !== '';
94
+ const displayColor = hasColor ? slotColor : '#d4d4d4';
95
+ return renderSwatch(displayColor, hasColor ? `Custom color ${index + 1}` : `Define custom color ${index + 1}`, hasColor && colorsMatch(value, slotColor), () => {
96
+ if (hasColor) {
97
+ onChange(slotColor);
98
+ return;
99
+ }
100
+ openNativePickerForSlot(index, slotColor);
101
+ }, () => openNativePickerForSlot(index, slotColor));
102
+ }) }), onClear != null && value != null && value.trim() !== '' ? (_jsx("button", { type: "button", className: "self-start text-[14px] text-muted hover:text-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent", onClick: onClear, children: "Clear color" })) : null, _jsx("input", { ref: nativeInputRef, type: "color", className: "sr-only", tabIndex: -1, "aria-hidden": true, onChange: (event) => applyNativePickerColor(event.target.value) })] }));
103
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/EmptyState/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtE,KAAK,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE/C,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACvE;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAcD;;GAEG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,OAAkB,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CASrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/EmptyState/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtE,KAAK,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE/C,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACvE;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAcD;;GAEG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,OAAkB,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAMrB"}
@@ -7,13 +7,13 @@ import { cn } from '../utils.js';
7
7
  */
8
8
  function variantClasses(variant) {
9
9
  if (variant === 'centered') {
10
- return 'flex flex-1 items-center justify-center p-4 text-center text-[14px] text-muted';
10
+ return 'flex flex-1 items-center justify-center p-4 text-center text-muted';
11
11
  }
12
- return 'text-[14px] text-muted';
12
+ return 'text-muted';
13
13
  }
14
14
  /**
15
15
  * Placeholder shown when a panel or list has no content to display.
16
16
  */
17
17
  export function EmptyState({ children, variant = 'inline', className, ...props }) {
18
- return (_jsx("div", { ...props, className: cn('hc-empty-state text-[16px]', variantClasses(variant), className), children: children }));
18
+ return (_jsx("div", { ...props, className: cn('hc-empty-state', variantClasses(variant), className), children: children }));
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FooterPanel/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAIxC,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAExB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE9B;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAE5B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,EAAE,EACF,KAAK,EACL,KAAK,EACL,WAAW,EACX,UAAU,EACV,UAAU,EACV,OAAO,EACP,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,iBAAyB,EAC1B,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CA2CrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FooterPanel/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAIxC,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAExB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE9B;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAE5B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC1B,EAAE,EACF,KAAK,EACL,KAAK,EACL,WAAW,EACX,UAAU,EACV,UAAU,EACV,OAAO,EACP,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,iBAAyB,EAC1B,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAuCrB"}
@@ -7,5 +7,5 @@ import { RoundButton } from '../RoundButton/index.js';
7
7
  */
8
8
  export function FooterPanel({ id, title, badge, description, closeLabel, storageKey, buttons, open, onClose, children, unmountWhenClosed = false }) {
9
9
  const closeButton = (_jsx(RoundButton, { icon: faXmark, title: "Close", ariaLabel: `Close ${closeLabel}`, onClick: onClose, className: "hc-footer-panel-close" }));
10
- return (_jsxs(Resizable, { id: id, open: open, onClose: onClose, closeLabel: closeLabel, storageKey: storageKey, unmountWhenClosed: unmountWhenClosed, showCloseButton: false, headerless: true, children: [_jsxs("div", { className: "hc-footer-panel flex shrink-0 items-center justify-between border-b border-separator px-3 py-2", children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2 text-[16px] font-medium text-text", children: [title, badge && (_jsx("span", { className: "hc-footer-panel-badge text-[16px] font-normal text-muted", children: badge }))] }), description && _jsx("span", { className: "truncate text-[16px] text-muted", children: description })] }), _jsxs("div", { className: "flex gap-2", children: [buttons, closeButton] })] }), _jsx("div", { className: "hc-footer-panel-body min-h-0 flex-1 overflow-auto", children: children })] }));
10
+ return (_jsxs(Resizable, { id: id, open: open, onClose: onClose, closeLabel: closeLabel, storageKey: storageKey, unmountWhenClosed: unmountWhenClosed, showCloseButton: false, headerless: true, children: [_jsxs("div", { className: "hc-footer-panel flex shrink-0 items-center justify-between border-b border-separator px-3 py-2", children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2 font-medium text-text", children: [title, badge && _jsx("span", { className: "hc-footer-panel-badge font-normal text-muted", children: badge })] }), description && _jsx("span", { className: "truncate text-muted", children: description })] }), _jsxs("div", { className: "flex gap-2", children: [buttons, closeButton] })] }), _jsx("div", { className: "hc-footer-panel-body min-h-0 flex-1 overflow-auto", children: children })] }));
11
11
  }
@@ -29,7 +29,7 @@ export function FormGroup({ label, children, htmlFor, description, error, errorI
29
29
  if (layout === 'associated') {
30
30
  const associatedClasses = labelClassName
31
31
  ? `hc-form-group ${labelClassName}`
32
- : 'hc-form-group text-[16px] text-text';
32
+ : 'hc-form-group text-text';
33
33
  return (_jsx("label", { htmlFor: htmlFor, className: associatedClasses, children: label }));
34
34
  }
35
35
  if (layout === 'checkboxAdjacent') {
@@ -38,14 +38,14 @@ export function FormGroup({ label, children, htmlFor, description, error, errorI
38
38
  : 'hc-form-group flex items-start gap-2';
39
39
  const adjacentLabelClasses = labelClassName
40
40
  ? `hc-form-group-label ${labelClassName}`
41
- : 'hc-form-group-label min-w-0 flex-1 text-[16px] text-text';
41
+ : 'hc-form-group-label min-w-0 flex-1 text-text';
42
42
  const linkedChildren = enhanceControl(children, { id: controlId });
43
43
  return (_jsxs("div", { ...props, className: wrapperClasses, children: [linkedChildren, _jsx("label", { htmlFor: controlId, className: adjacentLabelClasses, children: label })] }));
44
44
  }
45
45
  if (layout === 'radio') {
46
46
  const wrapperClasses = extra
47
- ? `hc-form-group inline-flex cursor-pointer items-center gap-1.5 text-[16px] text-text app-no-drag ${extra}`
48
- : 'hc-form-group inline-flex cursor-pointer items-center gap-1.5 text-[16px] text-text app-no-drag';
47
+ ? `hc-form-group inline-flex cursor-pointer items-center gap-1.5 text-text app-no-drag ${extra}`
48
+ : 'hc-form-group inline-flex cursor-pointer items-center gap-1.5 text-text app-no-drag';
49
49
  const linkedChildren = enhanceControl(children, { id: controlId });
50
50
  return (_jsxs("label", { htmlFor: controlId, className: wrapperClasses, children: [linkedChildren, _jsx("span", { className: "hc-form-group-label", children: label })] }));
51
51
  }
@@ -89,7 +89,7 @@ export function FormGroup({ label, children, htmlFor, description, error, errorI
89
89
  id: htmlFor
90
90
  });
91
91
  const wrapperClasses = extra
92
- ? `hc-form-group flex flex-col gap-1 p-4 text-[16px] border border-separator rounded-md ${extra}`
93
- : 'hc-form-group flex flex-col gap-1 p-4 text-[16px] border border-separator rounded-md';
92
+ ? `hc-form-group flex flex-col gap-1 p-4 border border-separator rounded-md ${extra}`
93
+ : 'hc-form-group flex flex-col gap-1 p-4 border border-separator rounded-md';
94
94
  return (_jsxs("div", { ...props, 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] }));
95
95
  }
@@ -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,wBAAwB,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAItE,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACvE;;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;CACtB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CA+BrB"}
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,wBAAwB,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAItE,UAAU,KAAM,SAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACvE;;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;CACtB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CA6BrB"}
@@ -6,5 +6,5 @@ import { cn } from '../utils.js';
6
6
  * and optional action controls on the right.
7
7
  */
8
8
  export function PageHeader({ title, description, icon, children, className, ...props }) {
9
- return (_jsxs("div", { ...props, className: cn('hc-page-header -mx-6 mb-4 flex flex-wrap items-center gap-2 border-b border-separator px-6 py-4', className), 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-[22px] leading-[1.15] font-bold tracking-[-0.01em] text-text", children: [icon ? (_jsx(FaIcon, { icon: icon, className: "hc-page-header-title-icon h-4 w-4 shrink-0 text-muted", "aria-hidden": true })) : null, title] }), description ? (_jsx("p", { className: "hc-page-header-description m-0 mt-1 text-[16px] leading-6 text-muted", children: description })) : null] }), children ? (_jsx("div", { className: "hc-page-header-actions flex flex-wrap items-center gap-2", children: children })) : null] }));
9
+ return (_jsxs("div", { ...props, className: cn('hc-page-header -mx-6 mb-4 flex flex-wrap items-center gap-2 border-b border-separator px-6 py-4', className), 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-[22px] leading-[1.15] font-bold tracking-[-0.01em] text-text", children: [icon ? (_jsx(FaIcon, { icon: icon, className: "hc-page-header-title-icon h-4 w-4 shrink-0 text-muted", "aria-hidden": true })) : null, title] }), description ? (_jsx("p", { className: "hc-page-header-description m-0 mt-1 leading-6 text-muted", children: description })) : null] }), children ? (_jsx("div", { className: "hc-page-header-actions flex flex-wrap items-center gap-2", children: children })) : null] }));
10
10
  }
@@ -9,7 +9,7 @@ import { cn, resolveTabListKeyAction } from '../utils.js';
9
9
  * @param variant - Visual variant for default or destructive actions.
10
10
  */
11
11
  function menuItemClass(variant) {
12
- const base = 'block w-full cursor-pointer border-none bg-transparent px-3.5 py-1.5 text-left text-[16px] app-no-drag';
12
+ const base = 'block w-full cursor-pointer border-none bg-transparent px-3.5 py-1.5 text-left app-no-drag';
13
13
  return variant === 'danger'
14
14
  ? `${base} text-text hover:bg-danger/15 hover:text-danger`
15
15
  : `${base} text-text hover:bg-selection`;
@@ -193,20 +193,20 @@ export function VariableInput({ value, onChange, variables, placeholder, onKeyDo
193
193
  }
194
194
  };
195
195
  const tooltipContent = tooltip ? getVariableTooltipContent(tooltip.key, variables) : null;
196
- return (_jsxs("div", { ...props, className: cn('hc-variable-input relative min-w-0', wrapperClassName ?? 'flex-1'), children: [_jsx("div", { ref: backdropRef, "aria-hidden": true, className: "hc-variable-input-backdrop pointer-events-none absolute inset-0 overflow-hidden px-2.5 py-1.5 text-[16px] whitespace-nowrap text-inherit", children: safeValue ? (tokens.map((token, index) => token.key ? (_jsx("span", { ref: (el) => {
196
+ return (_jsxs("div", { ...props, className: cn('hc-variable-input relative min-w-0', wrapperClassName ?? 'flex-1'), children: [_jsx("div", { ref: backdropRef, "aria-hidden": true, className: "hc-variable-input-backdrop pointer-events-none absolute inset-0 overflow-hidden px-2.5 py-1.5 whitespace-nowrap text-inherit", children: safeValue ? (tokens.map((token, index) => token.key ? (_jsx("span", { ref: (el) => {
197
197
  if (el)
198
198
  spanRefs.current.set(index, el);
199
199
  else
200
200
  spanRefs.current.delete(index);
201
201
  }, className: "hc-variable-input-token hc-variable-input-token-variable text-[#32D2E2]", children: token.text }, index)) : (_jsx("span", { className: "hc-variable-input-token", children: token.text }, index)))) : (_jsx("span", { className: "hc-variable-input-placeholder text-muted", children: placeholder })) }), _jsx(Input, { ref: inputRef, id: id, variant: "plain", role: source ? 'combobox' : undefined, "aria-autocomplete": source ? 'list' : undefined, "aria-expanded": source ? autocompleteOpen : undefined, "aria-controls": source && autocompleteOpen ? listboxId : undefined, "aria-activedescendant": source && autocompleteOpen && autocompleteActiveIndex >= 0
202
202
  ? `${listboxId}-option-${autocompleteActiveIndex}`
203
- : undefined, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": tooltip ? tooltipId : undefined, className: cn('hc-variable-input-field relative w-full min-w-0 border-none bg-transparent px-2.5 py-1.5 text-[16px] text-transparent caret-text focus-visible:shadow-none', className), type: "text", placeholder: placeholder, value: safeValue, onChange: (e) => {
203
+ : undefined, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": tooltip ? tooltipId : undefined, className: cn('hc-variable-input-field relative w-full min-w-0 border-none bg-transparent px-2.5 py-1.5 text-transparent caret-text focus-visible:shadow-none', className), type: "text", placeholder: placeholder, value: safeValue, onChange: (e) => {
204
204
  onChange(e.target.value);
205
205
  queueMicrotask(updateTooltipFromCaret);
206
206
  }, onFocus: () => {
207
207
  openAutocomplete();
208
208
  updateTooltipFromCaret();
209
- }, onBlur: closeAutocomplete, onKeyDown: handleKeyDown, onKeyUp: handleKeyUp, onSelect: updateTooltipFromCaret, onClick: updateTooltipFromCaret, onScroll: syncScroll, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave }), source && (_jsx(SuggestionList, { open: autocompleteOpen, items: autocompleteItems, activeIndex: autocompleteActiveIndex, anchorRef: inputRef, listboxId: listboxId, onSelect: selectItem, onActiveIndexChange: setActiveIndex, onClose: closeSuggestions })), tooltip && tooltipContent && (_jsxs("div", { id: tooltipId, role: "tooltip", className: "hc-variable-input-tooltip pointer-events-auto fixed z-50 flex max-w-sm -translate-x-1/2 -translate-y-full flex-col gap-2 rounded-lg border border-separator bg-surface px-4 py-3 text-[16px] text-text shadow-md after:pointer-events-auto after:absolute after:right-0 after:-bottom-2 after:left-0 after:h-2 after:content-['']", style: { top: tooltip.top - 4, left: tooltip.left }, onMouseEnter: cancelHide, onMouseLeave: scheduleHide, children: [_jsx(VariableTooltipValue, { value: tooltipContent.text, variableKey: tooltip.key, muted: tooltipContent.muted }), onEditVariable && (_jsx(Button, { variant: "secondary", className: "hc-variable-input-tooltip-edit self-start", "aria-label": `Edit value for ${tooltip.key}`, onClick: () => {
209
+ }, onBlur: closeAutocomplete, onKeyDown: handleKeyDown, onKeyUp: handleKeyUp, onSelect: updateTooltipFromCaret, onClick: updateTooltipFromCaret, onScroll: syncScroll, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave }), source && (_jsx(SuggestionList, { open: autocompleteOpen, items: autocompleteItems, activeIndex: autocompleteActiveIndex, anchorRef: inputRef, listboxId: listboxId, onSelect: selectItem, onActiveIndexChange: setActiveIndex, onClose: closeSuggestions })), tooltip && tooltipContent && (_jsxs("div", { id: tooltipId, role: "tooltip", className: "hc-variable-input-tooltip pointer-events-auto fixed z-50 flex max-w-sm -translate-x-1/2 -translate-y-full flex-col gap-2 rounded-lg border border-separator bg-surface px-4 py-3 text-text shadow-md after:pointer-events-auto after:absolute after:right-0 after:-bottom-2 after:left-0 after:h-2 after:content-['']", style: { top: tooltip.top - 4, left: tooltip.left }, onMouseEnter: cancelHide, onMouseLeave: scheduleHide, children: [_jsx(VariableTooltipValue, { value: tooltipContent.text, variableKey: tooltip.key, muted: tooltipContent.muted }), onEditVariable && (_jsx(Button, { variant: "secondary", className: "hc-variable-input-tooltip-edit self-start", "aria-label": `Edit value for ${tooltip.key}`, onClick: () => {
210
210
  onEditVariable(tooltip.key);
211
211
  setTooltip(null);
212
212
  }, children: "Edit value" }))] }))] }));
@@ -10,8 +10,8 @@ const segmentFocusVisible = 'focus-visible:outline focus-visible:outline-2 focus
10
10
  */
11
11
  export function segment(active) {
12
12
  return active
13
- ? `cursor-pointer rounded-md border-none bg-selection px-3 py-1 text-[16px] text-text app-no-drag ${segmentFocusVisible}`
14
- : `cursor-pointer rounded-md border-none bg-transparent px-3 py-1 text-[16px] text-muted hover:text-text app-no-drag ${segmentFocusVisible}`;
13
+ ? `cursor-pointer rounded-md border-none bg-selection px-3 py-1 text-text app-no-drag ${segmentFocusVisible}`
14
+ : `cursor-pointer rounded-md border-none bg-transparent px-3 py-1 text-muted hover:text-text app-no-drag ${segmentFocusVisible}`;
15
15
  }
16
16
  /**
17
17
  * Active/inactive surface classes for a document-style tab in the tab bar.
@@ -7,7 +7,7 @@ export type FieldVariant = 'control' | 'surface' | 'plain';
7
7
  */
8
8
  export declare const fieldFrame = "overflow-hidden rounded-lg border border-separator bg-field";
9
9
  /** Inset control style for standard settings and editor fields. */
10
- export declare const field = "rounded-lg border border-separator bg-field px-2.5 py-1.5 text-[16px] text-text app-no-drag";
10
+ export declare const field = "rounded-lg border border-separator bg-field px-2.5 py-1.5 text-text app-no-drag";
11
11
  /** Surface style for modal and Team Hub form fields. */
12
12
  export declare const surfaceField = "w-full rounded-lg border border-separator bg-field px-3 py-2.5 text-[15px] text-text";
13
13
  /** Transparent overlay checkbox input sized to {@link checkboxBox}. */
@@ -1 +1 @@
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
+ {"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,oFACiE,CAAC;AAEpF,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"}
@@ -7,7 +7,7 @@ import { cn } from '../utils.js';
7
7
  */
8
8
  export const fieldFrame = 'overflow-hidden rounded-lg border border-separator bg-field';
9
9
  /** Inset control style for standard settings and editor fields. */
10
- export const field = 'rounded-lg border border-separator bg-field px-2.5 py-1.5 text-[16px] text-text app-no-drag';
10
+ export const field = 'rounded-lg border border-separator bg-field px-2.5 py-1.5 text-text app-no-drag';
11
11
  /** Surface style for modal and Team Hub form fields. */
12
12
  export const surfaceField = 'w-full rounded-lg border border-separator bg-field px-3 py-2.5 text-[15px] text-text';
13
13
  /** Transparent overlay checkbox input sized to {@link checkboxBox}. */
@@ -1,6 +1,10 @@
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
3
  export { Card } from './Card/index.js';
4
+ export { ColorPicker } from './ColorPicker/index.js';
5
+ export type { Props as ColorPickerProps } from './ColorPicker/index.js';
6
+ export { colorsMatch, CUSTOM_SWATCH_SLOT_COUNT, DEFAULT_COLOR_PICKER_PRESETS, normalizeCssColor, toHexColorInputValue } from './ColorPicker/colorUtils.js';
7
+ export { DEFAULT_CUSTOM_SWATCHES_STORAGE_KEY, loadCustomSwatches, padCustomSwatchSlots, persistCustomSwatches } from './ColorPicker/customSwatches.js';
4
8
  export { BusyIndicator } from './BusyIndicator/index.js';
5
9
  export type { Props as BusyIndicatorProps } from './BusyIndicator/index.js';
6
10
  export { BackButton } from './BackButton/index.js';
@@ -29,6 +33,7 @@ export { MethodSelect } from './MethodSelect/index.js';
29
33
  export { Modal, ModalFooter, ModalFormLayout } from './Modal/index.js';
30
34
  export { ModalHeader } from './Modal/ModalHeader.js';
31
35
  export { portalToBody } from './portalToBody.js';
36
+ export { clampMenuPosition, getSubmenuAnchoredPosition, getTriggerAnchoredMenuPosition, MENU_MIN_WIDTH_PX, MENU_TRIGGER_OFFSET_PX, MENU_VIEWPORT_MARGIN_PX, type MenuPosition, type MenuSize } from './menuPosition.js';
32
37
  export { OverlayCloseButton } from './OverlayCloseButton/index.js';
33
38
  export { Page } from './Page/index.js';
34
39
  export { PageHeader } from './PageHeader/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":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,4BAA4B,EAC5B,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mCAAmC,EACnC,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,KAAK,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EACV,KAAK,IAAI,eAAe,EACxB,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,YAAY,EAAE,KAAK,IAAI,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,QAAQ,EACR,KAAK,EACL,UAAU,EACV,YAAY,EACZ,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,YAAY,EAAE,KAAK,IAAI,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,8BAA8B,EAC9B,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC7E,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EACL,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,+BAA+B,EAC/B,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAChG,YAAY,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,MAAM,EACN,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,KAAK,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EACL,oBAAoB,EACpB,6BAA6B,EAC7B,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
@@ -1,6 +1,9 @@
1
1
  export { AsyncListState, ErrorRetry, LoadingMessage } from './AsyncListState/index.js';
2
2
  export { AutocompleteInput, SuggestionList, useAutocomplete } from './Autocomplete/index.js';
3
3
  export { Card } from './Card/index.js';
4
+ export { ColorPicker } from './ColorPicker/index.js';
5
+ export { colorsMatch, CUSTOM_SWATCH_SLOT_COUNT, DEFAULT_COLOR_PICKER_PRESETS, normalizeCssColor, toHexColorInputValue } from './ColorPicker/colorUtils.js';
6
+ export { DEFAULT_CUSTOM_SWATCHES_STORAGE_KEY, loadCustomSwatches, padCustomSwatchSlots, persistCustomSwatches } from './ColorPicker/customSwatches.js';
4
7
  export { BusyIndicator } from './BusyIndicator/index.js';
5
8
  export { BackButton } from './BackButton/index.js';
6
9
  export { Badge } from './Badge/index.js';
@@ -22,6 +25,7 @@ export { MethodSelect } from './MethodSelect/index.js';
22
25
  export { Modal, ModalFooter, ModalFormLayout } from './Modal/index.js';
23
26
  export { ModalHeader } from './Modal/ModalHeader.js';
24
27
  export { portalToBody } from './portalToBody.js';
28
+ export { clampMenuPosition, getSubmenuAnchoredPosition, getTriggerAnchoredMenuPosition, MENU_MIN_WIDTH_PX, MENU_TRIGGER_OFFSET_PX, MENU_VIEWPORT_MARGIN_PX } from './menuPosition.js';
25
29
  export { OverlayCloseButton } from './OverlayCloseButton/index.js';
26
30
  export { Page } from './Page/index.js';
27
31
  export { PageHeader } from './PageHeader/index.js';
@@ -3,7 +3,7 @@
3
3
  * `RowActionsMenu` panel and its flyout `Submenu` panels.
4
4
  */
5
5
  export function menuItemClass(variant, disabled) {
6
- const base = 'flex w-full items-center gap-2 border-none bg-transparent px-3.5 py-1.5 text-left text-[16px] app-no-drag';
6
+ const base = 'flex w-full items-center gap-2 border-none bg-transparent px-3.5 py-1.5 text-left app-no-drag';
7
7
  if (disabled) {
8
8
  return `${base} cursor-not-allowed text-muted opacity-60`;
9
9
  }
package/dist/styles.css CHANGED
@@ -90,3 +90,13 @@
90
90
  aspect-ratio: auto;
91
91
  border-radius: 9999px;
92
92
  }
93
+
94
+ /**
95
+ * Default body text size for SDK and host renderers. Unlayered so it wins over
96
+ * host `@layer base` body rules. Hosts keep `:root { font-size: 14px }` as the
97
+ * rem base for layout; only inherited text size comes from here.
98
+ */
99
+ body {
100
+ font-size: 16px;
101
+ line-height: 1.5;
102
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@harborclient/sdk",
3
- "version": "1.0.74",
3
+ "version": "1.0.77",
4
4
  "description": "TypeScript SDK for HarborClient development.",
5
5
  "keywords": [
6
6
  "harborclient",