@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.
- package/dist/components/CodeEditor/index.js +1 -1
- package/dist/components/ColorPicker/colorUtils.d.ts +28 -0
- package/dist/components/ColorPicker/colorUtils.d.ts.map +1 -0
- package/dist/components/ColorPicker/colorUtils.js +59 -0
- package/dist/components/ColorPicker/customSwatches.d.ts +23 -0
- package/dist/components/ColorPicker/customSwatches.d.ts.map +1 -0
- package/dist/components/ColorPicker/customSwatches.js +65 -0
- package/dist/components/ColorPicker/index.d.ts +39 -0
- package/dist/components/ColorPicker/index.d.ts.map +1 -0
- package/dist/components/ColorPicker/index.js +103 -0
- package/dist/components/EmptyState/index.d.ts.map +1 -1
- package/dist/components/EmptyState/index.js +3 -3
- package/dist/components/FooterPanel/index.d.ts.map +1 -1
- package/dist/components/FooterPanel/index.js +1 -1
- package/dist/components/FormGroup/index.js +6 -6
- package/dist/components/PageHeader/index.d.ts.map +1 -1
- package/dist/components/PageHeader/index.js +1 -1
- package/dist/components/TabBar/TabContextMenu.js +1 -1
- package/dist/components/VariableInput/index.js +3 -3
- package/dist/components/classes.js +2 -2
- package/dist/components/forms/classes.d.ts +1 -1
- package/dist/components/forms/classes.d.ts.map +1 -1
- package/dist/components/forms/classes.js +1 -1
- package/dist/components/index.d.ts +5 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +4 -0
- package/dist/components/rowActionsMenuHelpers.js +1 -1
- package/dist/styles.css +10 -0
- 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-
|
|
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,
|
|
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-
|
|
10
|
+
return 'flex flex-1 items-center justify-center p-4 text-center text-muted';
|
|
11
11
|
}
|
|
12
|
-
return 'text-
|
|
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
|
|
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,
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
48
|
-
: 'hc-form-group inline-flex cursor-pointer items-center gap-1.5 text-
|
|
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
|
|
93
|
-
: 'hc-form-group flex flex-col gap-1 p-4
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
14
|
-
: `cursor-pointer rounded-md border-none bg-transparent px-3 py-1 text-
|
|
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-
|
|
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,
|
|
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-
|
|
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"}
|
package/dist/components/index.js
CHANGED
|
@@ -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
|
|
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
|
+
}
|