@handled-ai/design-system 0.9.27 → 0.10.0
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/badge.d.ts +1 -1
- package/dist/components/button.d.ts +1 -1
- package/dist/components/compliance-badge.d.ts +10 -0
- package/dist/components/compliance-badge.js +95 -0
- package/dist/components/compliance-badge.js.map +1 -0
- package/dist/components/contact-chip.d.ts +12 -0
- package/dist/components/contact-chip.js +98 -0
- package/dist/components/contact-chip.js.map +1 -0
- package/dist/components/empty-state.d.ts +11 -0
- package/dist/components/empty-state.js +46 -0
- package/dist/components/empty-state.js.map +1 -0
- package/dist/components/filter-chip.d.ts +9 -0
- package/dist/components/filter-chip.js +67 -0
- package/dist/components/filter-chip.js.map +1 -0
- package/dist/components/inline-banner.d.ts +10 -0
- package/dist/components/inline-banner.js +97 -0
- package/dist/components/inline-banner.js.map +1 -0
- package/dist/components/kbd-hint.d.ts +5 -0
- package/dist/components/kbd-hint.js +51 -0
- package/dist/components/kbd-hint.js.map +1 -0
- package/dist/components/rich-text-toolbar.d.ts +9 -0
- package/dist/components/rich-text-toolbar.js +103 -0
- package/dist/components/rich-text-toolbar.js.map +1 -0
- package/dist/components/signal-feedback-inline.d.ts +13 -2
- package/dist/components/signal-feedback-inline.js +33 -4
- package/dist/components/signal-feedback-inline.js.map +1 -1
- package/dist/components/step-timeline.d.ts +19 -0
- package/dist/components/step-timeline.js +134 -0
- package/dist/components/step-timeline.js.map +1 -0
- package/dist/components/sticky-action-bar.d.ts +10 -0
- package/dist/components/sticky-action-bar.js +56 -0
- package/dist/components/sticky-action-bar.js.map +1 -0
- package/dist/components/switch.d.ts +6 -0
- package/dist/components/switch.js +66 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/tabs.d.ts +1 -1
- package/dist/components/variable-autocomplete.d.ts +21 -0
- package/dist/components/variable-autocomplete.js +171 -0
- package/dist/components/variable-autocomplete.js.map +1 -0
- package/dist/index.d.ts +12 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/prototype/prototype-config.d.ts +2 -1
- package/dist/prototype/prototype-inbox-view.d.ts +1 -1
- package/dist/prototype/prototype-inbox-view.js +1 -1
- package/dist/prototype/prototype-inbox-view.js.map +1 -1
- package/package.json +2 -1
- package/src/components/__tests__/compliance-badge.test.tsx +88 -0
- package/src/components/__tests__/contact-chip.test.tsx +88 -0
- package/src/components/__tests__/empty-state.test.tsx +76 -0
- package/src/components/__tests__/filter-chip.test.tsx +73 -0
- package/src/components/__tests__/inline-banner.test.tsx +110 -0
- package/src/components/__tests__/kbd-hint.test.tsx +29 -0
- package/src/components/__tests__/rich-text-toolbar.test.tsx +92 -0
- package/src/components/__tests__/step-timeline.test.tsx +174 -0
- package/src/components/__tests__/sticky-action-bar.test.tsx +52 -0
- package/src/components/__tests__/switch.test.tsx +39 -0
- package/src/components/__tests__/variable-autocomplete.test.tsx +155 -0
- package/src/components/compliance-badge.tsx +68 -0
- package/src/components/contact-chip.tsx +68 -0
- package/src/components/empty-state.tsx +37 -0
- package/src/components/filter-chip.tsx +37 -0
- package/src/components/inline-banner.tsx +69 -0
- package/src/components/kbd-hint.tsx +21 -0
- package/src/components/rich-text-toolbar.tsx +90 -0
- package/src/components/signal-feedback-inline.tsx +51 -5
- package/src/components/step-timeline.tsx +149 -0
- package/src/components/sticky-action-bar.tsx +36 -0
- package/src/components/switch.tsx +29 -0
- package/src/components/variable-autocomplete.tsx +178 -0
- package/src/index.ts +12 -1
- package/src/prototype/prototype-config.ts +2 -1
- package/src/prototype/prototype-inbox-view.tsx +2 -2
- package/src/styles/globals.css +60 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __objRest = (source, exclude) => {
|
|
21
|
+
var target = {};
|
|
22
|
+
for (var prop in source)
|
|
23
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
24
|
+
target[prop] = source[prop];
|
|
25
|
+
if (source != null && __getOwnPropSymbols)
|
|
26
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
27
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
28
|
+
target[prop] = source[prop];
|
|
29
|
+
}
|
|
30
|
+
return target;
|
|
31
|
+
};
|
|
32
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
33
|
+
import { cn } from "../lib/utils.js";
|
|
34
|
+
function StickyActionBar(_a) {
|
|
35
|
+
var _b = _a, { left, right, bordered = true, className } = _b, rest = __objRest(_b, ["left", "right", "bordered", "className"]);
|
|
36
|
+
return /* @__PURE__ */ jsxs(
|
|
37
|
+
"div",
|
|
38
|
+
__spreadProps(__spreadValues({
|
|
39
|
+
"data-slot": "sticky-action-bar",
|
|
40
|
+
className: cn(
|
|
41
|
+
"flex items-center justify-between sticky bottom-0 bg-background",
|
|
42
|
+
bordered && "pt-3 border-t border-border/50",
|
|
43
|
+
className
|
|
44
|
+
)
|
|
45
|
+
}, rest), {
|
|
46
|
+
children: [
|
|
47
|
+
left && /* @__PURE__ */ jsx("div", { "data-slot": "sticky-action-bar-left", className: "flex items-center gap-1", children: left }),
|
|
48
|
+
right && /* @__PURE__ */ jsx("div", { "data-slot": "sticky-action-bar-right", className: "ml-auto flex items-center gap-2", children: right })
|
|
49
|
+
]
|
|
50
|
+
})
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
StickyActionBar
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=sticky-action-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/sticky-action-bar.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\ninterface StickyActionBarProps extends React.HTMLAttributes<HTMLDivElement> {\n left?: React.ReactNode\n right?: React.ReactNode\n bordered?: boolean\n}\n\nfunction StickyActionBar({ left, right, bordered = true, className, ...rest }: StickyActionBarProps) {\n return (\n <div\n data-slot=\"sticky-action-bar\"\n className={cn(\n \"flex items-center justify-between sticky bottom-0 bg-background\",\n bordered && \"pt-3 border-t border-border/50\",\n className\n )}\n {...rest}\n >\n {left && (\n <div data-slot=\"sticky-action-bar-left\" className=\"flex items-center gap-1\">\n {left}\n </div>\n )}\n {right && (\n <div data-slot=\"sticky-action-bar-right\" className=\"ml-auto flex items-center gap-2\">\n {right}\n </div>\n )}\n </div>\n )\n}\n\nexport { StickyActionBar, type StickyActionBarProps }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYI,SAUI,KAVJ;AAVJ,SAAS,UAAU;AAQnB,SAAS,gBAAgB,IAA4E;AAA5E,eAAE,QAAM,OAAO,WAAW,MAAM,UAVzD,IAUyB,IAA8C,iBAA9C,IAA8C,CAA5C,QAAM,SAAO,YAAiB;AACvD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,MACF;AAAA,OACI,OAPL;AAAA,MASE;AAAA,gBACC,oBAAC,SAAI,aAAU,0BAAyB,WAAU,2BAC/C,gBACH;AAAA,QAED,SACC,oBAAC,SAAI,aAAU,2BAA0B,WAAU,mCAChD,iBACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
"use client";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __defProps = Object.defineProperties;
|
|
6
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
7
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
10
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
11
|
+
var __spreadValues = (a, b) => {
|
|
12
|
+
for (var prop in b || (b = {}))
|
|
13
|
+
if (__hasOwnProp.call(b, prop))
|
|
14
|
+
__defNormalProp(a, prop, b[prop]);
|
|
15
|
+
if (__getOwnPropSymbols)
|
|
16
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
17
|
+
if (__propIsEnum.call(b, prop))
|
|
18
|
+
__defNormalProp(a, prop, b[prop]);
|
|
19
|
+
}
|
|
20
|
+
return a;
|
|
21
|
+
};
|
|
22
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
23
|
+
var __objRest = (source, exclude) => {
|
|
24
|
+
var target = {};
|
|
25
|
+
for (var prop in source)
|
|
26
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
27
|
+
target[prop] = source[prop];
|
|
28
|
+
if (source != null && __getOwnPropSymbols)
|
|
29
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
30
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
31
|
+
target[prop] = source[prop];
|
|
32
|
+
}
|
|
33
|
+
return target;
|
|
34
|
+
};
|
|
35
|
+
import { jsx } from "react/jsx-runtime";
|
|
36
|
+
import { Switch as SwitchPrimitive } from "radix-ui";
|
|
37
|
+
import { cn } from "../lib/utils.js";
|
|
38
|
+
function Switch(_a) {
|
|
39
|
+
var _b = _a, {
|
|
40
|
+
className
|
|
41
|
+
} = _b, props = __objRest(_b, [
|
|
42
|
+
"className"
|
|
43
|
+
]);
|
|
44
|
+
return /* @__PURE__ */ jsx(
|
|
45
|
+
SwitchPrimitive.Root,
|
|
46
|
+
__spreadProps(__spreadValues({
|
|
47
|
+
"data-slot": "switch",
|
|
48
|
+
className: cn(
|
|
49
|
+
"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-xs transition-colors focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-switch-background",
|
|
50
|
+
className
|
|
51
|
+
)
|
|
52
|
+
}, props), {
|
|
53
|
+
children: /* @__PURE__ */ jsx(
|
|
54
|
+
SwitchPrimitive.Thumb,
|
|
55
|
+
{
|
|
56
|
+
"data-slot": "switch-thumb",
|
|
57
|
+
className: "pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0"
|
|
58
|
+
}
|
|
59
|
+
)
|
|
60
|
+
})
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
Switch
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/switch.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-xs transition-colors focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-switch-background\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0\"\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBM;AAjBN,SAAS,UAAU,uBAAuB;AAE1C,SAAS,UAAU;AAEnB,SAAS,OAAO,IAGsC;AAHtC,eACd;AAAA;AAAA,EARF,IAOgB,IAEX,kBAFW,IAEX;AAAA,IADH;AAAA;AAGA,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQC;AAAA,QAAC,gBAAgB;AAAA,QAAhB;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA;AAAA,MACZ;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -5,7 +5,7 @@ import { Tabs as Tabs$1 } from 'radix-ui';
|
|
|
5
5
|
|
|
6
6
|
declare function Tabs({ className, orientation, ...props }: React.ComponentProps<typeof Tabs$1.Root>): React.JSX.Element;
|
|
7
7
|
declare const tabsListVariants: (props?: ({
|
|
8
|
-
variant?: "
|
|
8
|
+
variant?: "line" | "default" | null | undefined;
|
|
9
9
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
10
10
|
declare function TabsList({ className, variant, ...props }: React.ComponentProps<typeof Tabs$1.List> & VariantProps<typeof tabsListVariants>): React.JSX.Element;
|
|
11
11
|
declare function TabsTrigger({ className, ...props }: React.ComponentProps<typeof Tabs$1.Trigger>): React.JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface VariableDef {
|
|
4
|
+
name: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
source?: string;
|
|
7
|
+
}
|
|
8
|
+
interface VariableGroup {
|
|
9
|
+
label: string;
|
|
10
|
+
variables: VariableDef[];
|
|
11
|
+
}
|
|
12
|
+
interface VariableAutocompleteProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onSelect"> {
|
|
13
|
+
groups: VariableGroup[];
|
|
14
|
+
filter?: string;
|
|
15
|
+
onSelect: (variable: VariableDef) => void;
|
|
16
|
+
onClose: () => void;
|
|
17
|
+
maxResults?: number;
|
|
18
|
+
}
|
|
19
|
+
declare function VariableAutocomplete({ groups, filter, onSelect, onClose, maxResults, className, ...rest }: VariableAutocompleteProps): React.JSX.Element | null;
|
|
20
|
+
|
|
21
|
+
export { VariableAutocomplete, type VariableAutocompleteProps, type VariableDef, type VariableGroup };
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
"use client";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __defProps = Object.defineProperties;
|
|
6
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
7
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
10
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
11
|
+
var __spreadValues = (a, b) => {
|
|
12
|
+
for (var prop in b || (b = {}))
|
|
13
|
+
if (__hasOwnProp.call(b, prop))
|
|
14
|
+
__defNormalProp(a, prop, b[prop]);
|
|
15
|
+
if (__getOwnPropSymbols)
|
|
16
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
17
|
+
if (__propIsEnum.call(b, prop))
|
|
18
|
+
__defNormalProp(a, prop, b[prop]);
|
|
19
|
+
}
|
|
20
|
+
return a;
|
|
21
|
+
};
|
|
22
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
23
|
+
var __objRest = (source, exclude) => {
|
|
24
|
+
var target = {};
|
|
25
|
+
for (var prop in source)
|
|
26
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
27
|
+
target[prop] = source[prop];
|
|
28
|
+
if (source != null && __getOwnPropSymbols)
|
|
29
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
30
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
31
|
+
target[prop] = source[prop];
|
|
32
|
+
}
|
|
33
|
+
return target;
|
|
34
|
+
};
|
|
35
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
36
|
+
import * as React from "react";
|
|
37
|
+
import { cn } from "../lib/utils.js";
|
|
38
|
+
function VariableAutocomplete(_a) {
|
|
39
|
+
var _b = _a, {
|
|
40
|
+
groups,
|
|
41
|
+
filter = "",
|
|
42
|
+
onSelect,
|
|
43
|
+
onClose,
|
|
44
|
+
maxResults = 10,
|
|
45
|
+
className
|
|
46
|
+
} = _b, rest = __objRest(_b, [
|
|
47
|
+
"groups",
|
|
48
|
+
"filter",
|
|
49
|
+
"onSelect",
|
|
50
|
+
"onClose",
|
|
51
|
+
"maxResults",
|
|
52
|
+
"className"
|
|
53
|
+
]);
|
|
54
|
+
const containerRef = React.useRef(null);
|
|
55
|
+
const [activeIndex, setActiveIndex] = React.useState(-1);
|
|
56
|
+
const filteredGroups = React.useMemo(
|
|
57
|
+
() => groups.map((group) => __spreadProps(__spreadValues({}, group), {
|
|
58
|
+
variables: group.variables.filter(
|
|
59
|
+
(v) => v.name.toLowerCase().startsWith(filter.toLowerCase())
|
|
60
|
+
)
|
|
61
|
+
})).filter((group) => group.variables.length > 0),
|
|
62
|
+
[groups, filter]
|
|
63
|
+
);
|
|
64
|
+
const allFiltered = React.useMemo(() => {
|
|
65
|
+
const result = [];
|
|
66
|
+
for (const group of filteredGroups) {
|
|
67
|
+
for (const variable of group.variables) {
|
|
68
|
+
if (result.length >= maxResults) break;
|
|
69
|
+
result.push({ group, variable });
|
|
70
|
+
}
|
|
71
|
+
if (result.length >= maxResults) break;
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}, [filteredGroups, maxResults]);
|
|
75
|
+
React.useEffect(() => {
|
|
76
|
+
setActiveIndex(-1);
|
|
77
|
+
}, [filter]);
|
|
78
|
+
React.useEffect(() => {
|
|
79
|
+
function handleMouseDown(e) {
|
|
80
|
+
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
81
|
+
onClose();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function handleKeyDown(e) {
|
|
85
|
+
if (e.key === "Escape") {
|
|
86
|
+
onClose();
|
|
87
|
+
}
|
|
88
|
+
if (e.key === "ArrowDown") {
|
|
89
|
+
e.preventDefault();
|
|
90
|
+
setActiveIndex((prev) => prev < allFiltered.length - 1 ? prev + 1 : 0);
|
|
91
|
+
}
|
|
92
|
+
if (e.key === "ArrowUp") {
|
|
93
|
+
e.preventDefault();
|
|
94
|
+
setActiveIndex((prev) => prev > 0 ? prev - 1 : allFiltered.length - 1);
|
|
95
|
+
}
|
|
96
|
+
if (e.key === "Enter" && activeIndex >= 0 && activeIndex < allFiltered.length) {
|
|
97
|
+
e.preventDefault();
|
|
98
|
+
onSelect(allFiltered[activeIndex].variable);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
document.addEventListener("mousedown", handleMouseDown);
|
|
102
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
103
|
+
return () => {
|
|
104
|
+
document.removeEventListener("mousedown", handleMouseDown);
|
|
105
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
106
|
+
};
|
|
107
|
+
}, [onClose, onSelect, allFiltered, activeIndex]);
|
|
108
|
+
if (allFiltered.length === 0) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
const groupsToRender = [];
|
|
112
|
+
let flatIndex = 0;
|
|
113
|
+
for (const group of filteredGroups) {
|
|
114
|
+
const items = [];
|
|
115
|
+
for (const variable of group.variables) {
|
|
116
|
+
if (flatIndex >= maxResults) break;
|
|
117
|
+
items.push({ variable, flatIndex });
|
|
118
|
+
flatIndex++;
|
|
119
|
+
}
|
|
120
|
+
if (items.length > 0) {
|
|
121
|
+
groupsToRender.push({ label: group.label, items });
|
|
122
|
+
}
|
|
123
|
+
if (flatIndex >= maxResults) break;
|
|
124
|
+
}
|
|
125
|
+
return /* @__PURE__ */ jsxs(
|
|
126
|
+
"div",
|
|
127
|
+
__spreadProps(__spreadValues({
|
|
128
|
+
ref: containerRef,
|
|
129
|
+
"data-slot": "variable-autocomplete",
|
|
130
|
+
className: cn(
|
|
131
|
+
"absolute z-50 bg-popover border border-border rounded-lg shadow-lg w-64 overflow-hidden",
|
|
132
|
+
className
|
|
133
|
+
)
|
|
134
|
+
}, rest), {
|
|
135
|
+
children: [
|
|
136
|
+
/* @__PURE__ */ jsx("div", { "data-slot": "variable-autocomplete-header", className: "px-3 py-1.5 border-b border-border", children: /* @__PURE__ */ jsx("span", { className: "text-[10px] font-medium text-muted-foreground uppercase tracking-wider", children: "Insert variable" }) }),
|
|
137
|
+
/* @__PURE__ */ jsx("div", { role: "listbox", "aria-label": "Variables", className: "overflow-y-auto", style: { maxHeight: "312px" }, children: groupsToRender.map((group) => /* @__PURE__ */ jsxs("div", { role: "group", "aria-label": group.label, children: [
|
|
138
|
+
/* @__PURE__ */ jsx("div", { "data-slot": "variable-autocomplete-group-label", className: "px-3 py-1 text-[10px] font-medium text-muted-foreground/60 uppercase tracking-wider", children: group.label }),
|
|
139
|
+
group.items.map(({ variable, flatIndex: idx }) => /* @__PURE__ */ jsxs(
|
|
140
|
+
"button",
|
|
141
|
+
{
|
|
142
|
+
type: "button",
|
|
143
|
+
role: "option",
|
|
144
|
+
"aria-selected": idx === activeIndex,
|
|
145
|
+
"data-slot": "variable-autocomplete-item",
|
|
146
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
147
|
+
onClick: () => onSelect(variable),
|
|
148
|
+
onMouseEnter: () => setActiveIndex(idx),
|
|
149
|
+
className: cn(
|
|
150
|
+
"w-full text-left px-3 py-2 cursor-pointer transition-colors flex items-start justify-between gap-2",
|
|
151
|
+
idx === activeIndex ? "bg-muted/50" : "hover:bg-muted/30"
|
|
152
|
+
),
|
|
153
|
+
children: [
|
|
154
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
155
|
+
/* @__PURE__ */ jsx("div", { className: "text-xs font-mono text-blue-600", children: `{{${variable.name}}}` }),
|
|
156
|
+
variable.description && /* @__PURE__ */ jsx("div", { className: "text-[10px] text-muted-foreground", children: variable.description })
|
|
157
|
+
] }),
|
|
158
|
+
variable.source && /* @__PURE__ */ jsx("span", { className: "text-[9px] px-1.5 py-0.5 rounded bg-muted/30 text-muted-foreground shrink-0 mt-0.5 capitalize", children: variable.source })
|
|
159
|
+
]
|
|
160
|
+
},
|
|
161
|
+
`${group.label}:${variable.name}`
|
|
162
|
+
))
|
|
163
|
+
] }, group.label)) })
|
|
164
|
+
]
|
|
165
|
+
})
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
export {
|
|
169
|
+
VariableAutocomplete
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=variable-autocomplete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/variable-autocomplete.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\ninterface VariableDef {\n name: string\n description?: string\n source?: string\n}\n\ninterface VariableGroup {\n label: string\n variables: VariableDef[]\n}\n\ninterface VariableAutocompleteProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n groups: VariableGroup[]\n filter?: string\n onSelect: (variable: VariableDef) => void\n onClose: () => void\n maxResults?: number\n}\n\nfunction VariableAutocomplete({\n groups,\n filter = \"\",\n onSelect,\n onClose,\n maxResults = 10,\n className,\n ...rest\n}: VariableAutocompleteProps) {\n const containerRef = React.useRef<HTMLDivElement>(null)\n const [activeIndex, setActiveIndex] = React.useState(-1)\n\n // Build filtered results preserving group structure\n const filteredGroups = React.useMemo(\n () =>\n groups\n .map((group) => ({\n ...group,\n variables: group.variables.filter((v) =>\n v.name.toLowerCase().startsWith(filter.toLowerCase())\n ),\n }))\n .filter((group) => group.variables.length > 0),\n [groups, filter]\n )\n\n // Flatten for indexing / keyboard navigation, respecting maxResults\n const allFiltered = React.useMemo(() => {\n const result: { group: VariableGroup; variable: VariableDef }[] = []\n for (const group of filteredGroups) {\n for (const variable of group.variables) {\n if (result.length >= maxResults) break\n result.push({ group, variable })\n }\n if (result.length >= maxResults) break\n }\n return result\n }, [filteredGroups, maxResults])\n\n // Reset active index when results change\n React.useEffect(() => {\n setActiveIndex(-1)\n }, [filter])\n\n React.useEffect(() => {\n function handleMouseDown(e: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n onClose()\n }\n }\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n onClose()\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault()\n setActiveIndex((prev) => (prev < allFiltered.length - 1 ? prev + 1 : 0))\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault()\n setActiveIndex((prev) => (prev > 0 ? prev - 1 : allFiltered.length - 1))\n }\n if (e.key === \"Enter\" && activeIndex >= 0 && activeIndex < allFiltered.length) {\n e.preventDefault()\n onSelect(allFiltered[activeIndex].variable)\n }\n }\n document.addEventListener(\"mousedown\", handleMouseDown)\n document.addEventListener(\"keydown\", handleKeyDown)\n return () => {\n document.removeEventListener(\"mousedown\", handleMouseDown)\n document.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [onClose, onSelect, allFiltered, activeIndex])\n\n if (allFiltered.length === 0) {\n return null\n }\n\n // Group the capped results back for rendering\n const groupsToRender: { label: string; items: { variable: VariableDef; flatIndex: number }[] }[] = []\n let flatIndex = 0\n for (const group of filteredGroups) {\n const items: { variable: VariableDef; flatIndex: number }[] = []\n for (const variable of group.variables) {\n if (flatIndex >= maxResults) break\n items.push({ variable, flatIndex })\n flatIndex++\n }\n if (items.length > 0) {\n groupsToRender.push({ label: group.label, items })\n }\n if (flatIndex >= maxResults) break\n }\n\n return (\n <div\n ref={containerRef}\n data-slot=\"variable-autocomplete\"\n className={cn(\n \"absolute z-50 bg-popover border border-border rounded-lg shadow-lg w-64 overflow-hidden\",\n className\n )}\n {...rest}\n >\n <div data-slot=\"variable-autocomplete-header\" className=\"px-3 py-1.5 border-b border-border\">\n <span className=\"text-[10px] font-medium text-muted-foreground uppercase tracking-wider\">\n Insert variable\n </span>\n </div>\n <div role=\"listbox\" aria-label=\"Variables\" className=\"overflow-y-auto\" style={{ maxHeight: \"312px\" }}>\n {groupsToRender.map((group) => (\n <div key={group.label} role=\"group\" aria-label={group.label}>\n <div data-slot=\"variable-autocomplete-group-label\" className=\"px-3 py-1 text-[10px] font-medium text-muted-foreground/60 uppercase tracking-wider\">\n {group.label}\n </div>\n {group.items.map(({ variable, flatIndex: idx }) => (\n <button\n type=\"button\"\n key={`${group.label}:${variable.name}`}\n role=\"option\"\n aria-selected={idx === activeIndex}\n data-slot=\"variable-autocomplete-item\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => onSelect(variable)}\n onMouseEnter={() => setActiveIndex(idx)}\n className={cn(\n \"w-full text-left px-3 py-2 cursor-pointer transition-colors flex items-start justify-between gap-2\",\n idx === activeIndex ? \"bg-muted/50\" : \"hover:bg-muted/30\"\n )}\n >\n <div className=\"min-w-0\">\n <div className=\"text-xs font-mono text-blue-600\">{`{{${variable.name}}}`}</div>\n {variable.description && (\n <div className=\"text-[10px] text-muted-foreground\">{variable.description}</div>\n )}\n </div>\n {variable.source && (\n <span className=\"text-[9px] px-1.5 py-0.5 rounded bg-muted/30 text-muted-foreground shrink-0 mt-0.5 capitalize\">\n {variable.source}\n </span>\n )}\n </button>\n ))}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport { VariableAutocomplete, type VariableAutocompleteProps, type VariableDef, type VariableGroup }\n"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, Ava
|
|
|
9
9
|
export { Badge, badgeVariants } from './components/badge.js';
|
|
10
10
|
export { Button, buttonVariants } from './components/button.js';
|
|
11
11
|
export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './components/card.js';
|
|
12
|
+
export { ComplianceBadge, ComplianceBadgeProps, ComplianceStatus } from './components/compliance-badge.js';
|
|
13
|
+
export { ContactChip, ContactChipProps } from './components/contact-chip.js';
|
|
12
14
|
export { ContactChannel, ContactItem, ContactList, ContactListProps } from './components/contact-list.js';
|
|
13
15
|
export { CheckInsCard, RecentlyCompletedCard, TopTasksCard, UpcomingMeetingsCard } from './components/dashboard-cards.js';
|
|
14
16
|
export { DataRow, DataTable, DataTableProps } from './components/data-table.js';
|
|
@@ -19,15 +21,19 @@ export { DataTableToolbar } from './components/data-table-toolbar.js';
|
|
|
19
21
|
export { Citation, DetailViewHeader, DetailViewSummary, DetailViewThread, SourceDef, SourceList, ThreadMessage } from './components/detail-view.js';
|
|
20
22
|
export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './components/dialog.js';
|
|
21
23
|
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './components/dropdown-menu.js';
|
|
24
|
+
export { EmptyState, EmptyStateProps } from './components/empty-state.js';
|
|
22
25
|
export { ActivityItem, ConnectedApps, EntityActivityItem, EntityDetails, EntityMetadataField, EntityMetadataGrid, EntityPanel, EntityPanelBrandIcons, EntityPanelHeader, EntityPanelTabs, EntitySection, PotentialContacts, RecentActivity, SystemActivity } from './components/entity-panel.js';
|
|
26
|
+
export { FilterChip, FilterChipProps } from './components/filter-chip.js';
|
|
23
27
|
export { InboxGroupHeader, InboxRow, InboxRowProps } from './components/inbox-row.js';
|
|
24
28
|
export { AssigneeFilter, InboxFilterCategory, InboxToolbar, InboxToolbarProps } from './components/inbox-toolbar.js';
|
|
29
|
+
export { InlineBanner, InlineBannerProps } from './components/inline-banner.js';
|
|
25
30
|
export { Input } from './components/input.js';
|
|
26
31
|
export { FilterDefinition, InsightsFilterBar, InsightsFilterBarProps } from './components/insights-filter-bar.js';
|
|
27
32
|
export { GroupedListGroup, GroupedListView, GroupedListViewProps, ItemList } from './components/item-list.js';
|
|
28
33
|
export { ItemListDisplay, ItemListDisplayState, ItemListGrouping, ItemListViewMode } from './components/item-list-display.js';
|
|
29
34
|
export { ItemListFilter, ItemListFilterCategory } from './components/item-list-filter.js';
|
|
30
35
|
export { ItemListQuickView, ItemListToolbar } from './components/item-list-toolbar.js';
|
|
36
|
+
export { KbdHint } from './components/kbd-hint.js';
|
|
31
37
|
export { Label } from './components/label.js';
|
|
32
38
|
export { Message, MessageAvatar, MessageAvatarProps, MessageContent, MessageContentProps, MessageProps } from './components/message.js';
|
|
33
39
|
export { MetricCard, MetricCardProps, MetricDataPoint } from './components/metric-card.js';
|
|
@@ -39,6 +45,7 @@ export { QuickActionModal, QuickActionPriority, QuickActionTaskDraft, QuickActio
|
|
|
39
45
|
export { ActiveVariant, QuickActionSidebarNav, SidebarNavItem, SidebarNavSection, SidebarUserProfile, UserMenuItem } from './components/quick-action-sidebar-nav.js';
|
|
40
46
|
export { RecommendedAction, RecommendedActionsSection } from './components/recommended-actions-section.js';
|
|
41
47
|
export { ReportCard, ReportCardProps } from './components/report-card.js';
|
|
48
|
+
export { RichTextAction, RichTextToolbar, RichTextToolbarProps } from './components/rich-text-toolbar.js';
|
|
42
49
|
export { ScoreAnalysisModal, ScoreAnalysisModalProps, ScoreAnalysisPanel } from './components/score-analysis-modal.js';
|
|
43
50
|
export { ScoreBreakdown, ScoreBreakdownProps, ScoreFactor } from './components/score-breakdown.js';
|
|
44
51
|
export { ScoreFeedback, useScoreFeedback } from './components/score-feedback.js';
|
|
@@ -50,17 +57,21 @@ export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHe
|
|
|
50
57
|
export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar } from './components/sidebar.js';
|
|
51
58
|
export { ApprovalState, SignalApproval, SignalApprovalActions, SignalApprovalContextValue, SignalApprovalGate, SignalApprovalLabels, SignalApprovalRoot, SignalApprovalRootProps, useSignalApproval } from './components/signal-feedback-inline.js';
|
|
52
59
|
export { SimpleDataTable, SimpleDataTableProps } from './components/simple-data-table.js';
|
|
53
|
-
export { VirtualizedDataTable, VirtualizedDataTableProps } from './components/virtualized-data-table.js';
|
|
54
60
|
export { Skeleton } from './components/skeleton.js';
|
|
55
61
|
export { StatusBadge, StatusBadgeProps, StatusType } from './components/status-badge.js';
|
|
62
|
+
export { StepTimeline, StepTimelineProps, StepType, TimelineStep } from './components/step-timeline.js';
|
|
63
|
+
export { StickyActionBar, StickyActionBarProps } from './components/sticky-action-bar.js';
|
|
56
64
|
export { StyledBarItem, StyledBarList, StyledBarListProps } from './components/styled-bar-list.js';
|
|
57
65
|
export { SuggestedAction, SuggestedActionBrowserMeta, SuggestedActionCallMeta, SuggestedActionEmailMeta, SuggestedActionFollowUp, SuggestedActionManualMeta, SuggestedActionReplyTo, SuggestedActionThreadMessage, SuggestedActionTicket, SuggestedActions, SuggestedActionsIconMap, SuggestedActionsProps, SuggestedContact } from './components/suggested-actions.js';
|
|
66
|
+
export { Switch } from './components/switch.js';
|
|
58
67
|
export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './components/table.js';
|
|
59
68
|
export { Tabs, TabsContent, TabsList, TabsTrigger, tabsListVariants } from './components/tabs.js';
|
|
60
69
|
export { Textarea } from './components/textarea.js';
|
|
61
70
|
export { TimelineActivity, TimelineActivityProps, TimelineEvent } from './components/timeline-activity.js';
|
|
62
71
|
export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './components/tooltip.js';
|
|
72
|
+
export { VariableAutocomplete, VariableAutocompleteProps, VariableDef, VariableGroup } from './components/variable-autocomplete.js';
|
|
63
73
|
export { ViewMode, ViewModeToggle, ViewModeToggleProps } from './components/view-mode-toggle.js';
|
|
74
|
+
export { VirtualizedDataTable, VirtualizedDataTableProps } from './components/virtualized-data-table.js';
|
|
64
75
|
export { ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent } from './charts/chart.js';
|
|
65
76
|
export { CHART_CURSOR_STYLE, CHART_TOOLTIP_STYLE, ChartTooltipEntry, SimpleChartTooltip, SimpleChartTooltipProps } from './charts/chart-tooltip.js';
|
|
66
77
|
export { BarChartComponent, BarChartComponentProps, BarSeries } from './charts/bar-chart-component.js';
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,8 @@ export * from "./components/avatar.js";
|
|
|
9
9
|
export * from "./components/badge.js";
|
|
10
10
|
export * from "./components/button.js";
|
|
11
11
|
export * from "./components/card.js";
|
|
12
|
+
export * from "./components/compliance-badge.js";
|
|
13
|
+
export * from "./components/contact-chip.js";
|
|
12
14
|
export * from "./components/contact-list.js";
|
|
13
15
|
export * from "./components/dashboard-cards.js";
|
|
14
16
|
export * from "./components/data-table.js";
|
|
@@ -19,15 +21,19 @@ export * from "./components/data-table-toolbar.js";
|
|
|
19
21
|
export * from "./components/detail-view.js";
|
|
20
22
|
export * from "./components/dialog.js";
|
|
21
23
|
export * from "./components/dropdown-menu.js";
|
|
24
|
+
export * from "./components/empty-state.js";
|
|
22
25
|
export * from "./components/entity-panel.js";
|
|
26
|
+
export * from "./components/filter-chip.js";
|
|
23
27
|
export * from "./components/inbox-row.js";
|
|
24
28
|
export * from "./components/inbox-toolbar.js";
|
|
29
|
+
export * from "./components/inline-banner.js";
|
|
25
30
|
export * from "./components/input.js";
|
|
26
31
|
export * from "./components/insights-filter-bar.js";
|
|
27
32
|
export * from "./components/item-list.js";
|
|
28
33
|
export * from "./components/item-list-display.js";
|
|
29
34
|
export * from "./components/item-list-filter.js";
|
|
30
35
|
export * from "./components/item-list-toolbar.js";
|
|
36
|
+
export * from "./components/kbd-hint.js";
|
|
31
37
|
export * from "./components/label.js";
|
|
32
38
|
export * from "./components/message.js";
|
|
33
39
|
export * from "./components/metric-card.js";
|
|
@@ -41,6 +47,7 @@ import {
|
|
|
41
47
|
export * from "./components/quick-action-sidebar-nav.js";
|
|
42
48
|
export * from "./components/recommended-actions-section.js";
|
|
43
49
|
export * from "./components/report-card.js";
|
|
50
|
+
export * from "./components/rich-text-toolbar.js";
|
|
44
51
|
export * from "./components/score-analysis-modal.js";
|
|
45
52
|
export * from "./components/score-breakdown.js";
|
|
46
53
|
export * from "./components/score-feedback.js";
|
|
@@ -52,17 +59,21 @@ export * from "./components/sheet.js";
|
|
|
52
59
|
export * from "./components/sidebar.js";
|
|
53
60
|
export * from "./components/signal-feedback-inline.js";
|
|
54
61
|
export * from "./components/simple-data-table.js";
|
|
55
|
-
export * from "./components/virtualized-data-table.js";
|
|
56
62
|
export * from "./components/skeleton.js";
|
|
57
63
|
export * from "./components/status-badge.js";
|
|
64
|
+
export * from "./components/step-timeline.js";
|
|
65
|
+
export * from "./components/sticky-action-bar.js";
|
|
58
66
|
export * from "./components/styled-bar-list.js";
|
|
59
67
|
export * from "./components/suggested-actions.js";
|
|
68
|
+
export * from "./components/switch.js";
|
|
60
69
|
export * from "./components/table.js";
|
|
61
70
|
export * from "./components/tabs.js";
|
|
62
71
|
export * from "./components/textarea.js";
|
|
63
72
|
export * from "./components/timeline-activity.js";
|
|
64
73
|
export * from "./components/tooltip.js";
|
|
74
|
+
export * from "./components/variable-autocomplete.js";
|
|
65
75
|
export * from "./components/view-mode-toggle.js";
|
|
76
|
+
export * from "./components/virtualized-data-table.js";
|
|
66
77
|
export * from "./charts/index.js";
|
|
67
78
|
export * from "./prototype/prototype-config.js";
|
|
68
79
|
export * from "./prototype/prototype-shell.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @handled-ai/design-system\n * UI components and utilities (shadcn-style, New York)\n */\n\n// Utilities\nexport { cn } from \"./lib/utils\"\nexport { BRAND_ICONS } from \"./lib/icons\"\n\n// Hooks\nexport { useIsMobile } from \"./hooks/use-mobile\"\n\n// Components (light — no recharts/nivo/three transitive deps)\nexport * from \"./components/activity-detail\"\nexport * from \"./components/activity-log\"\nexport * from \"./components/agent-popover\"\nexport * from \"./components/agent-widget\"\nexport * from \"./components/avatar\"\nexport * from \"./components/badge\"\nexport * from \"./components/button\"\nexport * from \"./components/card\"\nexport * from \"./components/contact-list\"\nexport * from \"./components/dashboard-cards\"\nexport * from \"./components/data-table\"\nexport * from \"./components/data-table-display\"\nexport * from \"./components/data-table-filter\"\nexport * from \"./components/data-table-quick-views\"\nexport * from \"./components/data-table-toolbar\"\nexport * from \"./components/detail-view\"\nexport * from \"./components/dialog\"\nexport * from \"./components/dropdown-menu\"\nexport * from \"./components/entity-panel\"\nexport * from \"./components/inbox-row\"\nexport * from \"./components/inbox-toolbar\"\nexport * from \"./components/input\"\nexport * from \"./components/insights-filter-bar\"\nexport * from \"./components/item-list\"\nexport * from \"./components/item-list-display\"\nexport * from \"./components/item-list-filter\"\nexport * from \"./components/item-list-toolbar\"\nexport * from \"./components/label\"\nexport * from \"./components/message\"\nexport * from \"./components/metric-card\"\nexport * from \"./components/performance-metrics-table\"\nexport * from \"./components/preview-list\"\nexport * from \"./components/progress\"\nexport * from \"./components/quick-action-chat-area\"\nexport {\n QuickActionModal,\n type QuickActionPriority,\n type QuickActionTaskDraft,\n type QuickActionTemplate,\n} from \"./components/quick-action-modal\"\nexport * from \"./components/quick-action-sidebar-nav\"\nexport * from \"./components/recommended-actions-section\"\nexport * from \"./components/report-card\"\nexport * from \"./components/score-analysis-modal\"\nexport * from \"./components/score-breakdown\"\nexport * from \"./components/score-feedback\"\nexport * from \"./components/score-ring\"\nexport * from \"./components/scroll-area\"\nexport * from \"./components/select\"\nexport * from \"./components/separator\"\nexport * from \"./components/sheet\"\nexport * from \"./components/sidebar\"\nexport * from \"./components/signal-feedback-inline\"\nexport * from \"./components/simple-data-table\"\nexport * from \"./components/
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @handled-ai/design-system\n * UI components and utilities (shadcn-style, New York)\n */\n\n// Utilities\nexport { cn } from \"./lib/utils\"\nexport { BRAND_ICONS } from \"./lib/icons\"\n\n// Hooks\nexport { useIsMobile } from \"./hooks/use-mobile\"\n\n// Components (light — no recharts/nivo/three transitive deps)\nexport * from \"./components/activity-detail\"\nexport * from \"./components/activity-log\"\nexport * from \"./components/agent-popover\"\nexport * from \"./components/agent-widget\"\nexport * from \"./components/avatar\"\nexport * from \"./components/badge\"\nexport * from \"./components/button\"\nexport * from \"./components/card\"\nexport * from \"./components/compliance-badge\"\nexport * from \"./components/contact-chip\"\nexport * from \"./components/contact-list\"\nexport * from \"./components/dashboard-cards\"\nexport * from \"./components/data-table\"\nexport * from \"./components/data-table-display\"\nexport * from \"./components/data-table-filter\"\nexport * from \"./components/data-table-quick-views\"\nexport * from \"./components/data-table-toolbar\"\nexport * from \"./components/detail-view\"\nexport * from \"./components/dialog\"\nexport * from \"./components/dropdown-menu\"\nexport * from \"./components/empty-state\"\nexport * from \"./components/entity-panel\"\nexport * from \"./components/filter-chip\"\nexport * from \"./components/inbox-row\"\nexport * from \"./components/inbox-toolbar\"\nexport * from \"./components/inline-banner\"\nexport * from \"./components/input\"\nexport * from \"./components/insights-filter-bar\"\nexport * from \"./components/item-list\"\nexport * from \"./components/item-list-display\"\nexport * from \"./components/item-list-filter\"\nexport * from \"./components/item-list-toolbar\"\nexport * from \"./components/kbd-hint\"\nexport * from \"./components/label\"\nexport * from \"./components/message\"\nexport * from \"./components/metric-card\"\nexport * from \"./components/performance-metrics-table\"\nexport * from \"./components/preview-list\"\nexport * from \"./components/progress\"\nexport * from \"./components/quick-action-chat-area\"\nexport {\n QuickActionModal,\n type QuickActionPriority,\n type QuickActionTaskDraft,\n type QuickActionTemplate,\n} from \"./components/quick-action-modal\"\nexport * from \"./components/quick-action-sidebar-nav\"\nexport * from \"./components/recommended-actions-section\"\nexport * from \"./components/report-card\"\nexport * from \"./components/rich-text-toolbar\"\nexport * from \"./components/score-analysis-modal\"\nexport * from \"./components/score-breakdown\"\nexport * from \"./components/score-feedback\"\nexport * from \"./components/score-ring\"\nexport * from \"./components/scroll-area\"\nexport * from \"./components/select\"\nexport * from \"./components/separator\"\nexport * from \"./components/sheet\"\nexport * from \"./components/sidebar\"\nexport * from \"./components/signal-feedback-inline\"\nexport * from \"./components/simple-data-table\"\nexport * from \"./components/skeleton\"\nexport * from \"./components/status-badge\"\nexport * from \"./components/step-timeline\"\nexport * from \"./components/sticky-action-bar\"\nexport * from \"./components/styled-bar-list\"\nexport * from \"./components/suggested-actions\"\nexport * from \"./components/switch\"\nexport * from \"./components/table\"\nexport * from \"./components/tabs\"\nexport * from \"./components/textarea\"\nexport * from \"./components/timeline-activity\"\nexport * from \"./components/tooltip\"\nexport * from \"./components/variable-autocomplete\"\nexport * from \"./components/view-mode-toggle\"\nexport * from \"./components/virtualized-data-table\"\n\n// Charts (re-exported for backward compatibility with root imports)\nexport * from \"./charts/index\"\n\n// Prototype template system (re-exported for backward compatibility)\nexport * from \"./prototype/prototype-config\"\nexport * from \"./prototype/prototype-shell\"\nexport * from \"./prototype/prototype-inbox-view\"\nexport * from \"./prototype/prototype-insights-view\"\nexport * from \"./prototype/prototype-accounts-view\"\nexport * from \"./prototype/prototype-admin-view\"\nexport * from \"./prototype/prototype-work-queue-view\"\n"],"mappings":"AAMA,SAAS,UAAU;AACnB,SAAS,mBAAmB;AAG5B,SAAS,mBAAmB;AAG5B,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd;AAAA,EACE;AAAA,OAIK;AACP,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -86,7 +86,7 @@ interface InboxViewConfig {
|
|
|
86
86
|
}>;
|
|
87
87
|
hideAccountsButton?: boolean;
|
|
88
88
|
accountDetailsLabel?: string;
|
|
89
|
-
onSignalApprove?: (item: QueueItem) => void
|
|
89
|
+
onSignalApprove?: (item: QueueItem) => void | Promise<boolean>;
|
|
90
90
|
getSignalApprovalState?: (item: QueueItem) => ApprovalState | undefined;
|
|
91
91
|
signalLabels?: {
|
|
92
92
|
approveButton?: string;
|
|
@@ -95,6 +95,7 @@ interface InboxViewConfig {
|
|
|
95
95
|
dismissedStatus?: string;
|
|
96
96
|
opportunityCreated?: string;
|
|
97
97
|
confirmPrompt?: string;
|
|
98
|
+
creatingStatus?: string;
|
|
98
99
|
};
|
|
99
100
|
/** When true, the approve/create-opportunity button is hidden but the dismiss button remains. */
|
|
100
101
|
hideApproveButton?: boolean;
|
|
@@ -36,7 +36,7 @@ interface DetailViewProps {
|
|
|
36
36
|
onOpenEntityPanel?: () => void;
|
|
37
37
|
onOpenRecentActivity?: () => void;
|
|
38
38
|
onSuggestedActionFeedback?: (actionId: number | string, feedback: string, actionTitle?: string) => void;
|
|
39
|
-
onSignalApprove?: (item: QueueItem) => void
|
|
39
|
+
onSignalApprove?: (item: QueueItem) => void | Promise<boolean>;
|
|
40
40
|
getSignalApprovalState?: (item: QueueItem) => ApprovalState | undefined;
|
|
41
41
|
signalLabels?: InboxViewConfig["signalLabels"];
|
|
42
42
|
hideApproveButton?: boolean;
|
|
@@ -228,7 +228,7 @@ function DetailView({
|
|
|
228
228
|
] : signalData.evidence.map((ev, i) => /* @__PURE__ */ jsx("span", { children: ev }, i));
|
|
229
229
|
const briefHeading = (_a = signalBriefCopy == null ? void 0 : signalBriefCopy.heading) != null ? _a : "Signal brief";
|
|
230
230
|
const introOpt = signalBriefCopy == null ? void 0 : signalBriefCopy.intro;
|
|
231
|
-
const briefIntro = introOpt === null ? null : typeof introOpt === "function" ? introOpt(item) : introOpt != null ? introOpt : `
|
|
231
|
+
const briefIntro = introOpt === null ? null : typeof introOpt === "function" ? introOpt(item) : introOpt != null ? introOpt : `Signals indicate a potential opportunity for ${item.company}.`;
|
|
232
232
|
return /* @__PURE__ */ jsxs("div", { className: "mb-8", children: [
|
|
233
233
|
briefHeading ? /* @__PURE__ */ jsx("h3", { className: "text-xs font-bold text-muted-foreground uppercase tracking-wider mb-3", children: briefHeading }) : null,
|
|
234
234
|
briefIntro ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground leading-relaxed mb-2", children: briefIntro }) : null,
|