@arbidocs/react 0.3.183 → 0.3.185

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.
@@ -1432,6 +1432,13 @@ var ToggleGroupItem = React2__namespace.forwardRef(({ className, children, varia
1432
1432
  );
1433
1433
  });
1434
1434
  ToggleGroupItem.displayName = ToggleGroupPrimitive__namespace.Item.displayName;
1435
+
1436
+ // src/lib/toast-interaction.ts
1437
+ function isToastInteraction(event) {
1438
+ const original = event.detail?.originalEvent;
1439
+ const target = original?.target ?? event.target;
1440
+ return target instanceof Element && target.closest("[data-sonner-toaster]") !== null;
1441
+ }
1435
1442
  var Dialog = DialogPrimitive__namespace.Root;
1436
1443
  var DialogTrigger = DialogPrimitive__namespace.Trigger;
1437
1444
  var DialogPortal = DialogPrimitive__namespace.Portal;
@@ -1448,12 +1455,16 @@ var DialogOverlay = React2__namespace.forwardRef(({ className, ...props }, ref)
1448
1455
  }
1449
1456
  ));
1450
1457
  DialogOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
1451
- var DialogContent = React2__namespace.forwardRef(({ className, children, hideCloseButton, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { children: [
1458
+ var DialogContent = React2__namespace.forwardRef(({ className, children, hideCloseButton, onInteractOutside, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { children: [
1452
1459
  /* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, {}),
1453
1460
  /* @__PURE__ */ jsxRuntime.jsxs(
1454
1461
  DialogPrimitive__namespace.Content,
1455
1462
  {
1456
1463
  ref,
1464
+ onInteractOutside: (event) => {
1465
+ if (isToastInteraction(event)) event.preventDefault();
1466
+ onInteractOutside?.(event);
1467
+ },
1457
1468
  className: cn(
1458
1469
  "fixed left-[50%] top-[50%] z-50 grid w-[calc(100%-2rem)] max-w-lg max-h-[90vh] translate-x-[-50%] translate-y-[-50%] gap-4 overflow-y-auto border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 rounded-md",
1459
1470
  className
@@ -1856,11 +1867,1427 @@ function AiMarkdown({
1856
1867
  }
1857
1868
  );
1858
1869
  }
1870
+ var EntityPill = React2.forwardRef(function EntityPill2({
1871
+ icon,
1872
+ label,
1873
+ secondaryText,
1874
+ size = "sm",
1875
+ shape = "rounded",
1876
+ className,
1877
+ labelMaxWidth = "max-w-[320px]",
1878
+ labelClassName,
1879
+ fullWidth = false,
1880
+ highlight = false,
1881
+ onClick,
1882
+ onIconClick,
1883
+ onMoreClick,
1884
+ moreContent,
1885
+ href,
1886
+ disabled = false,
1887
+ tooltipContent,
1888
+ tooltipSide = "bottom",
1889
+ "data-testid": testId
1890
+ }, ref) {
1891
+ const shapeClass = shape === "pill" ? "rounded-full" : "rounded-md";
1892
+ const sizeClasses2 = size === "base" ? "gap-1.5 px-1.5 py-0.5" : "gap-1 px-1";
1893
+ const textSizeClass = size === "base" ? "text-base" : "text-sm";
1894
+ const baseClasses = cn(
1895
+ "group/pill items-center",
1896
+ fullWidth ? "flex w-full" : "inline-flex",
1897
+ sizeClasses2,
1898
+ shapeClass,
1899
+ "bg-muted",
1900
+ "border border-border",
1901
+ "transition-all",
1902
+ className
1903
+ );
1904
+ const interactiveClasses = "cursor-pointer hover:bg-muted/80";
1905
+ const disabledClasses = "cursor-default opacity-60";
1906
+ const highlightClasses = "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground";
1907
+ const mainContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1908
+ onIconClick ? /* @__PURE__ */ jsxRuntime.jsx(
1909
+ "span",
1910
+ {
1911
+ role: "button",
1912
+ tabIndex: 0,
1913
+ className: "flex-shrink-0 cursor-pointer hover:opacity-70 transition-opacity",
1914
+ onClick: (e) => {
1915
+ e.stopPropagation();
1916
+ onIconClick(e);
1917
+ },
1918
+ children: icon
1919
+ }
1920
+ ) : icon,
1921
+ /* @__PURE__ */ jsxRuntime.jsx(
1922
+ "span",
1923
+ {
1924
+ className: cn(
1925
+ textSizeClass,
1926
+ "font-medium truncate leading-tight min-w-0",
1927
+ labelMaxWidth,
1928
+ labelClassName
1929
+ ),
1930
+ children: label
1931
+ }
1932
+ ),
1933
+ secondaryText && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground flex-shrink-0 leading-none", children: secondaryText })
1934
+ ] });
1935
+ const tooltipWrap = (content, tip, side = tooltipSide, triggerClassName, triggerProps) => /* @__PURE__ */ jsxRuntime.jsxs(Tooltip, { children: [
1936
+ /* @__PURE__ */ jsxRuntime.jsx(
1937
+ TooltipTrigger,
1938
+ {
1939
+ onFocusCapture: (e) => e.stopPropagation(),
1940
+ className: triggerClassName,
1941
+ ...triggerProps,
1942
+ children: content
1943
+ }
1944
+ ),
1945
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipContent, { side, className: "p-2", children: tip })
1946
+ ] });
1947
+ const mainAreaClass = cn("inline-flex items-center gap-1", fullWidth && "min-w-0 flex-1");
1948
+ if (onMoreClick || moreContent) {
1949
+ let mainArea;
1950
+ if (tooltipContent) {
1951
+ mainArea = tooltipWrap(
1952
+ mainContent,
1953
+ tooltipContent,
1954
+ tooltipSide,
1955
+ cn(mainAreaClass, disabled && "opacity-60"),
1956
+ {
1957
+ type: "button",
1958
+ onClick: href ? onClick : disabled ? void 0 : onClick,
1959
+ disabled: disabled || void 0
1960
+ }
1961
+ );
1962
+ } else if (href) {
1963
+ mainArea = /* @__PURE__ */ jsxRuntime.jsx(
1964
+ "a",
1965
+ {
1966
+ href,
1967
+ target: "_blank",
1968
+ rel: "noopener noreferrer",
1969
+ className: mainAreaClass,
1970
+ onClick,
1971
+ children: mainContent
1972
+ }
1973
+ );
1974
+ } else if (onClick) {
1975
+ mainArea = /* @__PURE__ */ jsxRuntime.jsx(
1976
+ "button",
1977
+ {
1978
+ type: "button",
1979
+ onClick: disabled ? void 0 : onClick,
1980
+ disabled,
1981
+ className: cn("inline-flex items-center gap-1", disabled && "opacity-60"),
1982
+ children: mainContent
1983
+ }
1984
+ );
1985
+ } else {
1986
+ mainArea = /* @__PURE__ */ jsxRuntime.jsx("span", { className: mainAreaClass, children: mainContent });
1987
+ }
1988
+ const moreArea = moreContent ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0 leading-none", children: moreContent }) : tooltipWrap(
1989
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreVertical, { className: "w-3.5 h-3.5" }),
1990
+ "Click for more",
1991
+ tooltipSide,
1992
+ "flex-shrink-0 leading-none text-muted-foreground hover:text-foreground",
1993
+ {
1994
+ type: "button",
1995
+ onClick: (e) => {
1996
+ e.stopPropagation();
1997
+ onMoreClick?.(e);
1998
+ }
1999
+ }
2000
+ );
2001
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2002
+ "span",
2003
+ {
2004
+ ref,
2005
+ className: cn(
2006
+ baseClasses,
2007
+ (onClick || href) && !disabled && interactiveClasses,
2008
+ highlight && highlightClasses
2009
+ ),
2010
+ "data-testid": testId,
2011
+ children: [
2012
+ mainArea,
2013
+ moreArea
2014
+ ]
2015
+ }
2016
+ );
2017
+ }
2018
+ if (tooltipContent) {
2019
+ if (href) {
2020
+ return tooltipWrap(
2021
+ /* @__PURE__ */ jsxRuntime.jsx(
2022
+ "a",
2023
+ {
2024
+ href,
2025
+ target: "_blank",
2026
+ rel: "noopener noreferrer",
2027
+ className: mainAreaClass,
2028
+ onClick,
2029
+ children: mainContent
2030
+ }
2031
+ ),
2032
+ tooltipContent,
2033
+ tooltipSide,
2034
+ cn(baseClasses, interactiveClasses),
2035
+ { "data-testid": testId }
2036
+ );
2037
+ }
2038
+ return tooltipWrap(
2039
+ mainContent,
2040
+ tooltipContent,
2041
+ tooltipSide,
2042
+ cn(
2043
+ baseClasses,
2044
+ onClick && !disabled ? interactiveClasses : "",
2045
+ disabled ? disabledClasses : "",
2046
+ highlight && highlightClasses
2047
+ ),
2048
+ {
2049
+ type: "button",
2050
+ ref,
2051
+ onClick: onClick && !disabled ? onClick : void 0,
2052
+ disabled: disabled || void 0,
2053
+ "data-testid": testId
2054
+ }
2055
+ );
2056
+ }
2057
+ if (href) {
2058
+ return /* @__PURE__ */ jsxRuntime.jsx(
2059
+ "a",
2060
+ {
2061
+ ref,
2062
+ href,
2063
+ target: "_blank",
2064
+ rel: "noopener noreferrer",
2065
+ className: cn(baseClasses, interactiveClasses),
2066
+ "data-testid": testId,
2067
+ onClick,
2068
+ children: mainContent
2069
+ }
2070
+ );
2071
+ }
2072
+ if (onClick) {
2073
+ return /* @__PURE__ */ jsxRuntime.jsx(
2074
+ "button",
2075
+ {
2076
+ ref,
2077
+ type: "button",
2078
+ onClick: disabled ? void 0 : onClick,
2079
+ disabled,
2080
+ className: cn(
2081
+ baseClasses,
2082
+ disabled ? disabledClasses : interactiveClasses,
2083
+ highlight && highlightClasses
2084
+ ),
2085
+ "data-testid": testId,
2086
+ children: mainContent
2087
+ }
2088
+ );
2089
+ }
2090
+ return /* @__PURE__ */ jsxRuntime.jsx(
2091
+ "span",
2092
+ {
2093
+ ref,
2094
+ className: cn(baseClasses, highlight && highlightClasses),
2095
+ "data-testid": testId,
2096
+ children: mainContent
2097
+ }
2098
+ );
2099
+ });
2100
+ var TAG_TYPE_LABELS = {
2101
+ checkbox: "Checkbox",
2102
+ select: "Select",
2103
+ number: "Number",
2104
+ text: "Text",
2105
+ folder: "Folder",
2106
+ search: "Saved Search",
2107
+ date: "Date",
2108
+ assistant: "AI Assistant"
2109
+ };
2110
+ var TAG_TYPE_ICONS = {
2111
+ checkbox: lucideReact.SquareCheckBig,
2112
+ select: lucideReact.List,
2113
+ number: lucideReact.Hash,
2114
+ text: lucideReact.NotebookPen,
2115
+ folder: lucideReact.Folder,
2116
+ search: lucideReact.Search,
2117
+ date: lucideReact.Calendar,
2118
+ assistant: lucideReact.Bot
2119
+ };
2120
+ function getTagTypeIcon(type) {
2121
+ return TAG_TYPE_ICONS[type ?? "text"] || lucideReact.NotebookPen;
2122
+ }
2123
+ function getTagTypeLabel(type) {
2124
+ const t = type ?? "text";
2125
+ return TAG_TYPE_LABELS[t] || t;
2126
+ }
2127
+ var BASE_COLORS = {
2128
+ "0": "#10b981",
2129
+ "1": "#3b82f6",
2130
+ "2": "#8b5cf6",
2131
+ "3": "#f43f5e",
2132
+ "4": "#f59e0b",
2133
+ "5": "#84cc16",
2134
+ "6": "#a855f7",
2135
+ "7": "#06b6d4",
2136
+ "8": "#f97316",
2137
+ "9": "#14b8a6",
2138
+ a: "#ef4444",
2139
+ b: "#6366f1",
2140
+ c: "#ec4899",
2141
+ d: "#22c55e",
2142
+ e: "#eab308",
2143
+ f: "#0ea5e9"
2144
+ };
2145
+ function getEntityColor(entityId) {
2146
+ return BASE_COLORS[entityId[4]] || BASE_COLORS["0"];
2147
+ }
2148
+ function TagEntity({
2149
+ tag,
2150
+ size = "md",
2151
+ className = "",
2152
+ onClick,
2153
+ showTooltip = true,
2154
+ tooltipContent
2155
+ }) {
2156
+ const tagType = tag.tag_type?.type ?? "text";
2157
+ const iconSize = size === "sm" ? 12 : size === "md" ? 14 : 16;
2158
+ const Icon2 = getTagTypeIcon(tagType);
2159
+ const sizeClasses2 = {
2160
+ sm: "p-0.5",
2161
+ md: "p-1",
2162
+ lg: "p-1.5"
2163
+ };
2164
+ const tagColor = tag.color ?? getEntityColor(tag.external_id);
2165
+ const iconElement = /* @__PURE__ */ jsxRuntime.jsx(
2166
+ "span",
2167
+ {
2168
+ className: `inline-flex items-center justify-center rounded-md text-white flex-shrink-0 ${sizeClasses2[size]}`,
2169
+ style: { backgroundColor: tagColor },
2170
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon2, { size: iconSize, className: "flex-shrink-0" })
2171
+ }
2172
+ );
2173
+ const pillSize = size === "lg" ? "base" : "sm";
2174
+ const defaultTooltip = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
2175
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2176
+ /* @__PURE__ */ jsxRuntime.jsx(
2177
+ "span",
2178
+ {
2179
+ className: "inline-flex items-center justify-center rounded-md text-white p-1",
2180
+ style: { backgroundColor: tagColor },
2181
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon2, { size: 16 })
2182
+ }
2183
+ ),
2184
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-sm", children: tag.name })
2185
+ ] }),
2186
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5 text-sm", children: [
2187
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2188
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Type:" }),
2189
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: getTagTypeLabel(tagType) })
2190
+ ] }),
2191
+ tag.doctag_count != null && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2192
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Documents:" }),
2193
+ /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "secondary", className: "h-5 min-w-[20px] justify-center", children: tag.doctag_count ?? 0 })
2194
+ ] }),
2195
+ tag.shared != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: tag.shared ? "Shared" : "Private" }) })
2196
+ ] })
2197
+ ] });
2198
+ const resolvedTooltip = showTooltip ? tooltipContent ?? defaultTooltip : void 0;
2199
+ return /* @__PURE__ */ jsxRuntime.jsx(
2200
+ EntityPill,
2201
+ {
2202
+ icon: iconElement,
2203
+ label: tag.name,
2204
+ size: pillSize,
2205
+ shape: "rounded",
2206
+ labelMaxWidth: "max-w-[180px]",
2207
+ tooltipContent: resolvedTooltip,
2208
+ onClick,
2209
+ className,
2210
+ "data-testid": `tag-entity-${tag.external_id}`
2211
+ }
2212
+ );
2213
+ }
2214
+
2215
+ // src/icons/colors.ts
2216
+ var NEUTRAL_GRAY = "#64748b";
2217
+ var FILE_TYPE_COLORS = {
2218
+ pdf: "#ef4444",
2219
+ // red
2220
+ doc: "#3b82f6",
2221
+ // blue (Word docs)
2222
+ docx: "#3b82f6",
2223
+ // blue
2224
+ html: "#0284c7",
2225
+ // sky-600 (web files)
2226
+ img: "#8b5cf6",
2227
+ // violet-500 (images)
2228
+ vid: "#10b981",
2229
+ // emerald-500 (video)
2230
+ aud: "#f59e0b",
2231
+ // amber-500 (audio)
2232
+ xls: "#16a34a",
2233
+ // green-600 (Excel)
2234
+ eml: "#0d9488",
2235
+ // teal-600 (email)
2236
+ txt: NEUTRAL_GRAY,
2237
+ // gray (plain text)
2238
+ generic: NEUTRAL_GRAY,
2239
+ // gray (unknown)
2240
+ white: "#ffffff"
2241
+ // for strokes/text on colored backgrounds
2242
+ };
2243
+ var PdfIcon = ({ size = 16, className = "" }) => {
2244
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2245
+ "svg",
2246
+ {
2247
+ width: size,
2248
+ height: size,
2249
+ viewBox: "0 0 24 24",
2250
+ fill: "none",
2251
+ xmlns: "http://www.w3.org/2000/svg",
2252
+ className,
2253
+ children: [
2254
+ /* @__PURE__ */ jsxRuntime.jsx(
2255
+ "path",
2256
+ {
2257
+ d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
2258
+ fill: FILE_TYPE_COLORS.pdf,
2259
+ stroke: FILE_TYPE_COLORS.pdf,
2260
+ strokeWidth: "1",
2261
+ strokeLinecap: "round",
2262
+ strokeLinejoin: "round"
2263
+ }
2264
+ ),
2265
+ /* @__PURE__ */ jsxRuntime.jsx(
2266
+ "path",
2267
+ {
2268
+ d: "M14 2v6h6",
2269
+ fill: "none",
2270
+ stroke: FILE_TYPE_COLORS.white,
2271
+ strokeWidth: "1",
2272
+ strokeLinecap: "round",
2273
+ strokeLinejoin: "round"
2274
+ }
2275
+ ),
2276
+ /* @__PURE__ */ jsxRuntime.jsx(
2277
+ "text",
2278
+ {
2279
+ x: "12",
2280
+ y: "16",
2281
+ fontSize: "6",
2282
+ fill: "white",
2283
+ textAnchor: "middle",
2284
+ fontWeight: "bold",
2285
+ fontFamily: "Arial, sans-serif",
2286
+ children: "PDF"
2287
+ }
2288
+ )
2289
+ ]
2290
+ }
2291
+ );
2292
+ };
2293
+ var AudIcon = ({ size = 16, className = "" }) => {
2294
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2295
+ "svg",
2296
+ {
2297
+ width: size,
2298
+ height: size,
2299
+ viewBox: "0 0 24 24",
2300
+ fill: "none",
2301
+ xmlns: "http://www.w3.org/2000/svg",
2302
+ className,
2303
+ children: [
2304
+ /* @__PURE__ */ jsxRuntime.jsx(
2305
+ "path",
2306
+ {
2307
+ d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
2308
+ fill: FILE_TYPE_COLORS.aud,
2309
+ stroke: FILE_TYPE_COLORS.aud,
2310
+ strokeWidth: "1",
2311
+ strokeLinecap: "round",
2312
+ strokeLinejoin: "round"
2313
+ }
2314
+ ),
2315
+ /* @__PURE__ */ jsxRuntime.jsx(
2316
+ "path",
2317
+ {
2318
+ d: "M14 2v6h6",
2319
+ fill: "none",
2320
+ stroke: FILE_TYPE_COLORS.white,
2321
+ strokeWidth: "1",
2322
+ strokeLinecap: "round",
2323
+ strokeLinejoin: "round"
2324
+ }
2325
+ ),
2326
+ /* @__PURE__ */ jsxRuntime.jsx(
2327
+ "text",
2328
+ {
2329
+ x: "12",
2330
+ y: "16",
2331
+ fontSize: "6",
2332
+ fill: "white",
2333
+ textAnchor: "middle",
2334
+ fontWeight: "bold",
2335
+ fontFamily: "Arial, sans-serif",
2336
+ children: "AUD"
2337
+ }
2338
+ )
2339
+ ]
2340
+ }
2341
+ );
2342
+ };
2343
+ var ImgIcon = ({ size = 16, className = "" }) => {
2344
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2345
+ "svg",
2346
+ {
2347
+ width: size,
2348
+ height: size,
2349
+ viewBox: "0 0 24 24",
2350
+ fill: "none",
2351
+ xmlns: "http://www.w3.org/2000/svg",
2352
+ className,
2353
+ children: [
2354
+ /* @__PURE__ */ jsxRuntime.jsx(
2355
+ "path",
2356
+ {
2357
+ d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
2358
+ fill: FILE_TYPE_COLORS.img,
2359
+ stroke: FILE_TYPE_COLORS.img,
2360
+ strokeWidth: "1",
2361
+ strokeLinecap: "round",
2362
+ strokeLinejoin: "round"
2363
+ }
2364
+ ),
2365
+ /* @__PURE__ */ jsxRuntime.jsx(
2366
+ "path",
2367
+ {
2368
+ d: "M14 2v6h6",
2369
+ fill: "none",
2370
+ stroke: FILE_TYPE_COLORS.white,
2371
+ strokeWidth: "1",
2372
+ strokeLinecap: "round",
2373
+ strokeLinejoin: "round"
2374
+ }
2375
+ ),
2376
+ /* @__PURE__ */ jsxRuntime.jsx(
2377
+ "text",
2378
+ {
2379
+ x: "12",
2380
+ y: "16",
2381
+ fontSize: "6",
2382
+ fill: "white",
2383
+ textAnchor: "middle",
2384
+ fontWeight: "bold",
2385
+ fontFamily: "Arial, sans-serif",
2386
+ children: "IMG"
2387
+ }
2388
+ )
2389
+ ]
2390
+ }
2391
+ );
2392
+ };
2393
+ var VidIcon = ({ size = 16, className = "" }) => {
2394
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2395
+ "svg",
2396
+ {
2397
+ width: size,
2398
+ height: size,
2399
+ viewBox: "0 0 24 24",
2400
+ fill: "none",
2401
+ xmlns: "http://www.w3.org/2000/svg",
2402
+ className,
2403
+ children: [
2404
+ /* @__PURE__ */ jsxRuntime.jsx(
2405
+ "path",
2406
+ {
2407
+ d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
2408
+ fill: FILE_TYPE_COLORS.vid,
2409
+ stroke: FILE_TYPE_COLORS.vid,
2410
+ strokeWidth: "1",
2411
+ strokeLinecap: "round",
2412
+ strokeLinejoin: "round"
2413
+ }
2414
+ ),
2415
+ /* @__PURE__ */ jsxRuntime.jsx(
2416
+ "path",
2417
+ {
2418
+ d: "M14 2v6h6",
2419
+ fill: "none",
2420
+ stroke: FILE_TYPE_COLORS.white,
2421
+ strokeWidth: "1",
2422
+ strokeLinecap: "round",
2423
+ strokeLinejoin: "round"
2424
+ }
2425
+ ),
2426
+ /* @__PURE__ */ jsxRuntime.jsx(
2427
+ "text",
2428
+ {
2429
+ x: "12",
2430
+ y: "16",
2431
+ fontSize: "6",
2432
+ fill: "white",
2433
+ textAnchor: "middle",
2434
+ fontWeight: "bold",
2435
+ fontFamily: "Arial, sans-serif",
2436
+ children: "VID"
2437
+ }
2438
+ )
2439
+ ]
2440
+ }
2441
+ );
2442
+ };
2443
+ var EmlIcon = ({ size = 16, className = "" }) => {
2444
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2445
+ "svg",
2446
+ {
2447
+ width: size,
2448
+ height: size,
2449
+ viewBox: "0 0 24 24",
2450
+ fill: "none",
2451
+ xmlns: "http://www.w3.org/2000/svg",
2452
+ className,
2453
+ children: [
2454
+ /* @__PURE__ */ jsxRuntime.jsx(
2455
+ "path",
2456
+ {
2457
+ d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z",
2458
+ fill: FILE_TYPE_COLORS.eml,
2459
+ stroke: FILE_TYPE_COLORS.eml,
2460
+ strokeWidth: "1",
2461
+ strokeLinecap: "round",
2462
+ strokeLinejoin: "round"
2463
+ }
2464
+ ),
2465
+ /* @__PURE__ */ jsxRuntime.jsx(
2466
+ "path",
2467
+ {
2468
+ d: "M14 2v6h6",
2469
+ fill: "none",
2470
+ stroke: FILE_TYPE_COLORS.white,
2471
+ strokeWidth: "1",
2472
+ strokeLinecap: "round",
2473
+ strokeLinejoin: "round"
2474
+ }
2475
+ ),
2476
+ /* @__PURE__ */ jsxRuntime.jsx(
2477
+ "rect",
2478
+ {
2479
+ x: "7",
2480
+ y: "12",
2481
+ width: "10",
2482
+ height: "7",
2483
+ rx: "1",
2484
+ fill: "none",
2485
+ stroke: "white",
2486
+ strokeWidth: "1.2"
2487
+ }
2488
+ ),
2489
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 13l5 3 5-3", fill: "none", stroke: "white", strokeWidth: "1.2", strokeLinejoin: "round" })
2490
+ ]
2491
+ }
2492
+ );
2493
+ };
2494
+ var ArbiBotHeadIcon = ({ size = 24, className = "" }) => {
2495
+ const maskId = React2.useId();
2496
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2497
+ "svg",
2498
+ {
2499
+ xmlns: "http://www.w3.org/2000/svg",
2500
+ width: size,
2501
+ height: size,
2502
+ viewBox: "30 -5 190 190",
2503
+ preserveAspectRatio: "xMidYMid meet",
2504
+ className,
2505
+ children: [
2506
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("mask", { id: maskId, children: /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: "translate(0,250) scale(0.1,-0.1)", children: [
2507
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "0", width: "2500", height: "2500", fill: "white" }),
2508
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "855", cy: "1715", r: "190", fill: "black" }),
2509
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "855", cy: "1715", r: "50", fill: "white" }),
2510
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "1665", cy: "1700", r: "190", fill: "black" }),
2511
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "1665", cy: "1700", r: "50", fill: "white" })
2512
+ ] }) }) }),
2513
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { mask: `url(#${maskId})`, children: [
2514
+ /* @__PURE__ */ jsxRuntime.jsx(
2515
+ "g",
2516
+ {
2517
+ transform: "translate(0,250) scale(0.1,-0.1)",
2518
+ fill: "currentColor",
2519
+ stroke: "currentColor",
2520
+ strokeWidth: "100",
2521
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1038 2434 c-217 -39 -406 -154 -522 -318 -121 -170 -176 -376 -103 -384 l27 -3 0 -106 c0 -88 -3 -108 -17 -118 -15 -11 -16 -18 -5 -66 44 -188 209 -369 420 -459 l65 -28 -74 -7 c-283 -26 -444 -152 -535 -418 -70 -204 -73 -507 -5 -507 4 0 12 75 19 168 18 263 68 419 167 530 78 87 224 162 263 134 9 -6 43 -26 76 -43 224 -117 802 -95 948 38 38 34 165 -22 253 -111 117 -119 168 -268 187 -549 6 -92 15 -167 19 -167 89 0 53 415 -54 627 -88 173 -238 270 -458 295 l-99 11 75 32 c201 88 367 274 406 454 10 47 9 56 -5 66 -13 10 -16 32 -16 118 l0 106 28 3 c91 10 -12 297 -165 459 -202 214 -544 307 -895 243z m472 -84 c170 -43 323 -140 416 -264 47 -61 117 -197 128 -248 l6 -28 -65 0 c-64 0 -65 1 -78 33 -43 102 -109 136 -262 137 l-110 0 -38 -40 c-25 -27 -46 -40 -65 -41 -134 -5 -394 1 -410 10 -11 6 -30 24 -42 41 l-21 30 -112 0 c-156 -1 -219 -33 -262 -136 -14 -34 -14 -34 -80 -34 -76 0 -74 -7 -30 103 96 243 311 406 595 452 118 20 319 13 430 -15z m-561 -505 c97 -50 126 -174 61 -263 -118 -163 -380 -23 -309 165 35 93 162 143 248 98z m799 -15 c129 -96 69 -304 -92 -318 -189 -16 -265 218 -106 326 48 33 149 29 198 -8z m272 -389 c0 -23 -45 -110 -86 -168 -245 -343 -856 -408 -1231 -130 -90 67 -213 236 -213 294 0 11 132 13 765 13 457 0 765 -4 765 -9z" })
2522
+ }
2523
+ ),
2524
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: "translate(0,250) scale(0.1,-0.1)", fill: "currentColor", stroke: "none", children: [
2525
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M785 1777 c-60 -60 -59 -134 1 -186 92 -82 236 9 204 128 -25 93 -138 125 -205 58z m161 -29 c7 -22 -19 -52 -40 -45 -21 7 -30 35 -17 51 19 23 48 20 57 -6z" }),
2526
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1591 1803 c-128 -67 -85 -243 60 -243 83 0 141 99 105 178 -32 69 -103 97 -165 65z m127 -59 c4 -25 -19 -47 -41 -38 -22 8 -30 34 -16 51 17 20 53 12 57 -13z" }),
2527
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M843 1347 c-9 -15 9 -63 41 -108 148 -202 565 -209 730 -12 37 44 60 103 47 116 -13 13 -810 17 -818 4z" })
2528
+ ] })
2529
+ ] })
2530
+ ]
2531
+ }
2532
+ );
2533
+ };
2534
+ function getDocumentTitle(document2, defaultValue = "") {
2535
+ if (!document2) return defaultValue;
2536
+ return document2.doc_metadata?.title || document2.file_name || defaultValue;
2537
+ }
2538
+ var MAX_LABEL_CHARS = 30;
2539
+ function clampLabel(text) {
2540
+ return text.length > MAX_LABEL_CHARS ? `${text.slice(0, MAX_LABEL_CHARS).trimEnd()}\u2026` : text;
2541
+ }
2542
+ var IMAGE_EXTENSIONS = /* @__PURE__ */ new Set(["jpg", "jpeg", "png", "gif", "bmp", "tiff", "tif", "webp"]);
2543
+ var VIDEO_EXTENSIONS = /* @__PURE__ */ new Set(["mp4", "mpeg", "mpg", "webm", "mov", "avi", "mkv"]);
2544
+ var AUDIO_EXTENSIONS = /* @__PURE__ */ new Set(["mp3", "wav", "m4a", "aac", "ogg", "flac"]);
2545
+ var EMAIL_EXTENSIONS = /* @__PURE__ */ new Set(["eml", "msg"]);
2546
+ function getDocIcon(fileName, iconSize = 14) {
2547
+ const ext = fileName?.split(".").pop()?.toLowerCase();
2548
+ if (ext && VIDEO_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(VidIcon, { size: iconSize, className: "flex-shrink-0" });
2549
+ if (ext && AUDIO_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(AudIcon, { size: iconSize, className: "flex-shrink-0" });
2550
+ if (ext && IMAGE_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(ImgIcon, { size: iconSize, className: "flex-shrink-0" });
2551
+ if (ext && EMAIL_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsxRuntime.jsx(EmlIcon, { size: iconSize, className: "flex-shrink-0" });
2552
+ return /* @__PURE__ */ jsxRuntime.jsx(PdfIcon, { size: iconSize, className: "flex-shrink-0" });
2553
+ }
2554
+ function DocumentEntity({
2555
+ doc,
2556
+ icon,
2557
+ size = "sm",
2558
+ labelMaxWidth,
2559
+ labelClassName,
2560
+ onClick,
2561
+ onIconClick,
2562
+ viewing,
2563
+ iconBadge,
2564
+ actions,
2565
+ tooltipContent,
2566
+ className,
2567
+ fullWidth,
2568
+ noClamp
2569
+ }) {
2570
+ const title = getDocumentTitle(doc);
2571
+ const ext = doc.file_name?.split(".").pop()?.toLowerCase();
2572
+ const iconSize = size === "base" ? 16 : 14;
2573
+ const eyeSizeClass = size === "base" ? "h-4 w-4" : "h-3.5 w-3.5";
2574
+ const baseIcon = icon ?? getDocIcon(doc.file_name, iconSize);
2575
+ const displayIcon = viewing || iconBadge ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative inline-flex flex-shrink-0 items-center justify-center", children: [
2576
+ viewing ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: cn("text-primary-foreground", eyeSizeClass) }) : baseIcon,
2577
+ iconBadge
2578
+ ] }) : baseIcon;
2579
+ const defaultTooltip = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 text-xs max-w-[440px]", children: [
2580
+ doc.folder && // `flex-wrap` so a deep folder path wraps WITHIN the balloon instead of
2581
+ // spilling out of it (each path segment is atomic and wraps as a unit;
2582
+ // `min-w-0` + `break-all` lets a single over-long segment break too).
2583
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-wrap items-center gap-0.5 text-muted-foreground", children: [
2584
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FolderOpen, { className: "h-3 w-3 text-yellow-600 shrink-0" }),
2585
+ doc.folder.split("/").map((part, i, arr) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 items-center gap-0.5", children: [
2586
+ i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground/50 mx-0.5", children: "/" }),
2587
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `break-all ${i < arr.length - 1 ? "text-muted-foreground/70" : ""}`, children: part })
2588
+ ] }, i))
2589
+ ] }),
2590
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-medium break-words", children: [
2591
+ title,
2592
+ ext ? `.${ext}` : ""
2593
+ ] })
2594
+ ] });
2595
+ return /* @__PURE__ */ jsxRuntime.jsx(
2596
+ EntityPill,
2597
+ {
2598
+ icon: displayIcon,
2599
+ size,
2600
+ label: fullWidth || noClamp ? title : clampLabel(title),
2601
+ labelMaxWidth: labelMaxWidth ?? "max-w-[140px]",
2602
+ labelClassName,
2603
+ fullWidth,
2604
+ onClick,
2605
+ onIconClick,
2606
+ moreContent: actions,
2607
+ className,
2608
+ highlight: viewing,
2609
+ tooltipContent: tooltipContent ?? defaultTooltip
2610
+ }
2611
+ );
2612
+ }
2613
+ var VARIANT_STYLES = {
2614
+ "mine-paid": {
2615
+ pill: "bg-primary/10 text-primary border-border/60",
2616
+ icon: "text-primary"
2617
+ },
2618
+ other: {
2619
+ pill: "bg-secondary/10 text-secondary border-border/60",
2620
+ icon: "text-secondary"
2621
+ },
2622
+ "mine-free": {
2623
+ pill: "bg-muted-foreground/10 text-muted-foreground border-border/60",
2624
+ icon: "text-muted-foreground"
2625
+ },
2626
+ common: {
2627
+ pill: "",
2628
+ icon: "text-muted-foreground"
2629
+ }
2630
+ };
2631
+ function resolveVariant(relation, paid, hasCollaborators) {
2632
+ if (relation === "common") return "common";
2633
+ if (relation === "other") return "other";
2634
+ if (relation === "mine") return paid ? "mine-paid" : "mine-free";
2635
+ if (paid) return hasCollaborators ? "other" : "mine-paid";
2636
+ return "mine-free";
2637
+ }
2638
+ function ProjectEntity({
2639
+ name,
2640
+ label,
2641
+ icon,
2642
+ subscription = "none",
2643
+ hasCollaborators = false,
2644
+ size = "sm",
2645
+ className,
2646
+ onClick,
2647
+ relation,
2648
+ isPaid,
2649
+ tooltipContent
2650
+ }) {
2651
+ const paid = isPaid ?? (subscription === "active" || subscription === "past_due" || subscription === "dev");
2652
+ const variant = resolveVariant(relation, paid, hasCollaborators);
2653
+ const { pill, icon: iconClass } = VARIANT_STYLES[variant];
2654
+ const iconSizeClass = size === "base" ? "h-4 w-4" : "h-3.5 w-3.5";
2655
+ const iconNode = icon ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CreditCard, { className: cn(iconSizeClass, iconClass) });
2656
+ return /* @__PURE__ */ jsxRuntime.jsx(
2657
+ EntityPill,
2658
+ {
2659
+ icon: iconNode,
2660
+ label: label ?? name,
2661
+ size,
2662
+ shape: "rounded",
2663
+ className: cn(pill, className),
2664
+ onClick,
2665
+ tooltipContent
2666
+ }
2667
+ );
2668
+ }
2669
+ var sizeClasses = {
2670
+ xs: "h-5 w-5",
2671
+ sm: "h-6 w-6",
2672
+ md: "h-8 w-8",
2673
+ lg: "h-10 w-10"
2674
+ };
2675
+ var textSizeClasses = {
2676
+ xs: "text-xs",
2677
+ sm: "text-xs",
2678
+ md: "text-xs",
2679
+ lg: "text-sm"
2680
+ };
2681
+ var presenceDotClasses = {
2682
+ xs: "w-2 h-2 border",
2683
+ sm: "w-2.5 h-2.5 border",
2684
+ md: "w-3 h-3 border-2",
2685
+ lg: "w-3.5 h-3.5 border-2"
2686
+ };
2687
+ var presencePositionClasses = {
2688
+ xs: "-right-1 bottom-0",
2689
+ sm: "-right-1 bottom-0",
2690
+ md: "-right-1.5 -bottom-0.5",
2691
+ lg: "-right-1.5 -bottom-0.5"
2692
+ };
2693
+ var PRESENCE_LABELS = {
2694
+ connected: "Online",
2695
+ connecting: "Connecting",
2696
+ disconnected: "Offline",
2697
+ error: "Connection problem",
2698
+ hidden: "Status hidden"
2699
+ };
2700
+ var presenceColorClasses = {
2701
+ connected: "bg-status-online",
2702
+ connecting: "bg-status-connecting",
2703
+ disconnected: "bg-status-away",
2704
+ error: "bg-status-busy",
2705
+ hidden: "bg-status-offline"
2706
+ };
2707
+ var UserEntity = React2.memo(function UserEntity2({
2708
+ size = "md",
2709
+ variant = "pill",
2710
+ className,
2711
+ showTooltip = true,
2712
+ interactive = true,
2713
+ hasUnreadMessages = false,
2714
+ initials = "",
2715
+ displayName = "",
2716
+ picture,
2717
+ colorClass = "",
2718
+ isAgent = false,
2719
+ agentStyle,
2720
+ avatarStyle,
2721
+ isMe = false,
2722
+ displayStatus,
2723
+ onClick,
2724
+ tooltipContent,
2725
+ empty = false
2726
+ }) {
2727
+ if (empty) {
2728
+ return /* @__PURE__ */ jsxRuntime.jsx(
2729
+ Avatar,
2730
+ {
2731
+ className: cn(sizeClasses[size], "border border-border", className),
2732
+ "data-testid": "user-entity",
2733
+ children: /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "bg-status-empty text-muted-foreground text-xs font-semibold", children: "?" })
2734
+ }
2735
+ );
2736
+ }
2737
+ const agentBadge = isAgent ? /* @__PURE__ */ jsxRuntime.jsx(ArbiBotHeadIcon, { className: "w-3.5 h-3.5 text-muted-foreground" }) : void 0;
2738
+ const canMessage = interactive && !isMe && !isAgent;
2739
+ const showUnread = hasUnreadMessages && !isMe && !isAgent;
2740
+ const surfaceStyle = avatarStyle ?? agentStyle;
2741
+ const avatarCore = /* @__PURE__ */ jsxRuntime.jsxs(
2742
+ Avatar,
2743
+ {
2744
+ className: cn(
2745
+ sizeClasses[size],
2746
+ isAgent ? "rounded-full border-2 border-dashed" : "border border-white"
2747
+ ),
2748
+ style: surfaceStyle,
2749
+ "data-testid": "user-entity",
2750
+ children: [
2751
+ picture && /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: picture, alt: initials }),
2752
+ /* @__PURE__ */ jsxRuntime.jsx(
2753
+ AvatarFallback,
2754
+ {
2755
+ className: cn(
2756
+ textSizeClasses[size],
2757
+ "font-semibold leading-none",
2758
+ isAgent ? "rounded-full bg-transparent" : `text-white ${colorClass}`
2759
+ ),
2760
+ style: surfaceStyle,
2761
+ children: initials
2762
+ }
2763
+ )
2764
+ ]
2765
+ }
2766
+ );
2767
+ const statusDot = showUnread || displayStatus ? /* @__PURE__ */ jsxRuntime.jsx(
2768
+ "span",
2769
+ {
2770
+ className: cn(
2771
+ "absolute rounded-full border-white",
2772
+ presenceDotClasses[size],
2773
+ presencePositionClasses[size],
2774
+ !showUnread && displayStatus ? presenceColorClasses[displayStatus] : ""
2775
+ ),
2776
+ style: showUnread ? { backgroundColor: "#00adef" } : void 0,
2777
+ "data-testid": "user-entity-presence",
2778
+ role: "img",
2779
+ "aria-label": showUnread ? "Unread messages" : PRESENCE_LABELS[displayStatus],
2780
+ title: showUnread ? "Unread messages" : PRESENCE_LABELS[displayStatus]
2781
+ }
2782
+ ) : null;
2783
+ const avatarElement = statusDot ? /* @__PURE__ */ jsxRuntime.jsxs(
2784
+ "div",
2785
+ {
2786
+ className: cn(
2787
+ "relative inline-block",
2788
+ sizeClasses[size],
2789
+ variant === "pill" ? "" : className
2790
+ ),
2791
+ children: [
2792
+ avatarCore,
2793
+ statusDot
2794
+ ]
2795
+ }
2796
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("inline-block", variant === "pill" ? "" : className), children: avatarCore });
2797
+ const pillAvatar = (
2798
+ // shrink-0: when the pill is squeezed the NAME truncates away — the avatar
2799
+ // must never collapse under it and overflow onto neighbouring text.
2800
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("relative inline-block shrink-0", sizeClasses[size]), children: [
2801
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("block transition-opacity", canMessage && "group-hover/pill:opacity-0"), children: avatarCore }),
2802
+ canMessage && /* @__PURE__ */ jsxRuntime.jsx(
2803
+ "span",
2804
+ {
2805
+ "aria-hidden": true,
2806
+ className: "absolute inset-0 flex items-center justify-center rounded-full bg-muted text-foreground opacity-0 transition-opacity group-hover/pill:opacity-100",
2807
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircleMore, { className: size === "xs" ? "h-3 w-3" : "h-4 w-4" })
2808
+ }
2809
+ ),
2810
+ statusDot
2811
+ ] })
2812
+ );
2813
+ const resolvedTooltip = showTooltip ? tooltipContent : void 0;
2814
+ if (variant === "pill") {
2815
+ const row = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2816
+ pillAvatar,
2817
+ displayName && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 max-w-[320px] truncate text-sm leading-tight", children: displayName }),
2818
+ agentBadge
2819
+ ] });
2820
+ const rowClass = "group/pill inline-flex min-w-0 items-center gap-2";
2821
+ const clickable = interactive && !!onClick;
2822
+ const clickableClass = "cursor-pointer rounded-md px-1 py-0.5 -mx-1 transition-colors hover:bg-muted/60";
2823
+ if (resolvedTooltip) {
2824
+ return /* @__PURE__ */ jsxRuntime.jsxs(Tooltip, { children: [
2825
+ /* @__PURE__ */ jsxRuntime.jsx(
2826
+ TooltipTrigger,
2827
+ {
2828
+ type: "button",
2829
+ onClick: clickable ? onClick : void 0,
2830
+ onFocusCapture: (e) => e.stopPropagation(),
2831
+ className: cn(rowClass, clickable && clickableClass, className),
2832
+ "data-testid": "user-entity-pill",
2833
+ children: row
2834
+ }
2835
+ ),
2836
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipContent, { className: "p-2", children: resolvedTooltip })
2837
+ ] });
2838
+ }
2839
+ if (clickable) {
2840
+ return /* @__PURE__ */ jsxRuntime.jsx(
2841
+ "button",
2842
+ {
2843
+ type: "button",
2844
+ onClick,
2845
+ className: cn(rowClass, clickableClass, className),
2846
+ "data-testid": "user-entity-pill",
2847
+ children: row
2848
+ }
2849
+ );
2850
+ }
2851
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(rowClass, className), "data-testid": "user-entity-pill", children: row });
2852
+ }
2853
+ if (showTooltip) {
2854
+ return /* @__PURE__ */ jsxRuntime.jsxs(Tooltip, { children: [
2855
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipTrigger, { onFocusCapture: (e) => e.stopPropagation(), className: "inline-flex", children: avatarElement }),
2856
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipContent, { className: "p-2", children: tooltipContent })
2857
+ ] });
2858
+ }
2859
+ return avatarElement;
2860
+ });
2861
+ function AgentBadge({ className }) {
2862
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2863
+ "span",
2864
+ {
2865
+ "data-testid": "agent-badge",
2866
+ className: cn(
2867
+ "inline-flex shrink-0 items-center gap-1 rounded-full border border-ai-accent/50",
2868
+ "bg-ai-accent-soft px-2 py-0.5 text-[11px] font-bold uppercase tracking-wider text-ai-accent",
2869
+ className
2870
+ ),
2871
+ children: [
2872
+ /* @__PURE__ */ jsxRuntime.jsx(ArbiBotHeadIcon, { size: 14, className: "text-ai-accent" }),
2873
+ "Agent"
2874
+ ]
2875
+ }
2876
+ );
2877
+ }
2878
+ var PRESENCE_WORDS = {
2879
+ connected: "Online",
2880
+ connecting: "Connecting",
2881
+ disconnected: "Offline",
2882
+ error: "Connection problem",
2883
+ hidden: null
2884
+ };
2885
+ function PresenceLabel({
2886
+ status,
2887
+ className
2888
+ }) {
2889
+ if (!status) return null;
2890
+ const word = PRESENCE_WORDS[status];
2891
+ if (!word) return null;
2892
+ const online = status === "connected";
2893
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2894
+ "span",
2895
+ {
2896
+ "data-testid": "presence-label",
2897
+ className: cn("inline-flex shrink-0 items-center gap-1 text-xs", className),
2898
+ children: [
2899
+ /* @__PURE__ */ jsxRuntime.jsx(
2900
+ "span",
2901
+ {
2902
+ className: cn(
2903
+ "size-1.5 rounded-full",
2904
+ online ? "bg-status-online" : "bg-muted-foreground/50"
2905
+ ),
2906
+ "aria-hidden": "true"
2907
+ }
2908
+ ),
2909
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: online ? "font-medium text-status-online" : "text-muted-foreground", children: word })
2910
+ ]
2911
+ }
2912
+ );
2913
+ }
2914
+ var PACKAGE_BADGE_VARIANTS = [
2915
+ "default",
2916
+ "accent",
2917
+ "secondary",
2918
+ "destructive",
2919
+ "outline"
2920
+ ];
2921
+ function isPackageBadgeVariant(v) {
2922
+ return PACKAGE_BADGE_VARIANTS.some((known) => known === v);
2923
+ }
2924
+ function PackageStatusBadge({ variant, ...rest }) {
2925
+ return /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: isPackageBadgeVariant(variant) ? variant : "outline", ...rest });
2926
+ }
2927
+ var registry = {
2928
+ variants: {},
2929
+ fallback: "outline",
2930
+ Badge: PackageStatusBadge
2931
+ };
2932
+ function configureStatusRegistry(map, opts) {
2933
+ Object.assign(registry.variants, map);
2934
+ if (opts?.fallback) registry.fallback = opts.fallback;
2935
+ if (opts?.Badge) registry.Badge = opts.Badge;
2936
+ }
2937
+ function getStatusVariant(status) {
2938
+ return registry.variants[status] ?? registry.fallback;
2939
+ }
2940
+ function StatusPill({ status, label, variant, className, testId }) {
2941
+ const Badge2 = registry.Badge;
2942
+ return /* @__PURE__ */ jsxRuntime.jsx(Badge2, { variant: variant ?? getStatusVariant(status), className, "data-testid": testId, children: label ?? status });
2943
+ }
2944
+ var RAG_LABELS = { red: "At risk", amber: "Attention", green: "On track" };
2945
+ function configureRagLabels(labels) {
2946
+ RAG_LABELS = { ...RAG_LABELS, ...labels };
2947
+ }
2948
+ function RagDot({
2949
+ rag,
2950
+ withLabel,
2951
+ className
2952
+ }) {
2953
+ const color = rag === "red" ? "bg-destructive" : rag === "amber" ? "bg-warning" : "bg-success";
2954
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("inline-flex items-center gap-1.5", className), "data-testid": `rag-${rag}`, children: [
2955
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("size-2 rounded-full", color) }),
2956
+ withLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: RAG_LABELS[rag] })
2957
+ ] });
2958
+ }
2959
+ var ENTITY_MAPPINGS = {
2960
+ PRODUCT: {
2961
+ NAMES: {
2962
+ SINGULAR: "ARBI Docs"
2963
+ },
2964
+ ICONS: {
2965
+ DEFAULT: lucideReact.MessageSquareLock
2966
+ }
2967
+ },
2968
+ SECTION: {
2969
+ NAMES: {
2970
+ SINGULAR: "Section"
2971
+ },
2972
+ ICONS: {
2973
+ DEFAULT: lucideReact.ChevronsDown
2974
+ }
2975
+ },
2976
+ WORKSPACE: {
2977
+ NAMES: {
2978
+ SINGULAR: "Workspace",
2979
+ PLURAL: "Workspaces"
2980
+ },
2981
+ ICONS: {
2982
+ DEFAULT: lucideReact.SquareM,
2983
+ NEW: lucideReact.SquarePlus,
2984
+ LIST: lucideReact.LayoutGrid,
2985
+ SETTINGS: lucideReact.Columns3Cog
2986
+ }
2987
+ },
2988
+ CONVERSATION: {
2989
+ NAMES: {
2990
+ SINGULAR: "Chat",
2991
+ PLURAL: "Chats",
2992
+ NEW: "New ARBI Chat"
2993
+ },
2994
+ ICONS: {
2995
+ DEFAULT: lucideReact.MessagesSquare,
2996
+ OFF: lucideReact.MessageSquareOff,
2997
+ ACTIVE: lucideReact.MessageSquareText,
2998
+ NEW: lucideReact.MessageSquarePlus,
2999
+ LIST: lucideReact.MessageSquareMore
3000
+ }
3001
+ },
3002
+ DOCUMENT: {
3003
+ NAMES: {
3004
+ SINGULAR: "File",
3005
+ PLURAL: "Files"
3006
+ },
3007
+ ICONS: {
3008
+ DEFAULT: lucideReact.FolderOpen,
3009
+ OFF: lucideReact.CaptionsOff
3010
+ }
3011
+ },
3012
+ VIEWER: {
3013
+ NAMES: {
3014
+ SINGULAR: "Viewer",
3015
+ PLURAL: "Viewers"
3016
+ },
3017
+ ICONS: {
3018
+ DEFAULT: lucideReact.Eye,
3019
+ OFF: lucideReact.EyeOff
3020
+ }
3021
+ },
3022
+ TAG: {
3023
+ NAMES: {
3024
+ SINGULAR: "Field",
3025
+ PLURAL: "Fields"
3026
+ },
3027
+ ICONS: {
3028
+ DEFAULT: lucideReact.Hash,
3029
+ NEW: lucideReact.FolderPlus
3030
+ }
3031
+ },
3032
+ ANNOTATION: {
3033
+ NAMES: {
3034
+ SINGULAR: "Annotation",
3035
+ PLURAL: "Annotations"
3036
+ },
3037
+ ICONS: {
3038
+ DEFAULT: lucideReact.StickyNote,
3039
+ NEW: lucideReact.StickyNote
3040
+ }
3041
+ },
3042
+ // Workspace knowledge the assistant retains and recalls — durable free text,
3043
+ // optionally grounded in source passages. Distinct from ANNOTATION, which is
3044
+ // attached TO a document field; a NOTE is workspace-scoped and stands alone.
3045
+ // Stored server-side as `memories` (mem-*); "Note" is the user-facing name.
3046
+ NOTE: {
3047
+ NAMES: {
3048
+ SINGULAR: "Note",
3049
+ PLURAL: "Notes"
3050
+ },
3051
+ ICONS: {
3052
+ DEFAULT: lucideReact.NotebookText,
3053
+ NEW: lucideReact.NotebookPen
3054
+ }
3055
+ },
3056
+ USER: {
3057
+ NAMES: {
3058
+ SINGULAR: "User",
3059
+ PLURAL: "Users"
3060
+ },
3061
+ ICONS: {
3062
+ DEFAULT: lucideReact.User,
3063
+ NEW: lucideReact.UserPlus,
3064
+ SETTINGS: lucideReact.Settings2
3065
+ }
3066
+ },
3067
+ WORKSPACEUSER: {
3068
+ NAMES: {
3069
+ SINGULAR: "Member",
3070
+ PLURAL: "Members"
3071
+ },
3072
+ ICONS: {
3073
+ DEFAULT: lucideReact.User,
3074
+ PLURAL: lucideReact.Users,
3075
+ NEW: lucideReact.UserPlus,
3076
+ SETTINGS: lucideReact.Settings2
3077
+ }
3078
+ },
3079
+ CONTACT: {
3080
+ NAMES: {
3081
+ SINGULAR: "Contact",
3082
+ PLURAL: "Contacts"
3083
+ },
3084
+ ICONS: {
3085
+ // A starred person, not an address-book card: contacts here are the
3086
+ // people you talk to, and the star reads as "your people".
3087
+ DEFAULT: lucideReact.UserStar,
3088
+ NEW: lucideReact.UserPlus
3089
+ }
3090
+ },
3091
+ TASK: {
3092
+ NAMES: {
3093
+ SINGULAR: "Job",
3094
+ PLURAL: "Jobs"
3095
+ },
3096
+ ICONS: {
3097
+ DEFAULT: lucideReact.ClipboardList
3098
+ }
3099
+ },
3100
+ PROJECT: {
3101
+ NAMES: {
3102
+ SINGULAR: "Project",
3103
+ PLURAL: "Projects"
3104
+ },
3105
+ ICONS: {
3106
+ DEFAULT: lucideReact.CreditCard
3107
+ }
3108
+ },
3109
+ SKILL: {
3110
+ NAMES: {
3111
+ SINGULAR: "Skill",
3112
+ PLURAL: "Skills"
3113
+ },
3114
+ ICONS: {
3115
+ DEFAULT: lucideReact.Wrench
3116
+ }
3117
+ },
3118
+ ACCOUNT: {
3119
+ NAMES: {
3120
+ SINGULAR: "Account"
3121
+ },
3122
+ ICONS: {
3123
+ DEFAULT: lucideReact.CircleUserRound
3124
+ }
3125
+ },
3126
+ NOTIFICATIONS: {
3127
+ NAMES: {
3128
+ SINGULAR: "Activity",
3129
+ PLURAL: "Activities"
3130
+ },
3131
+ ICONS: {
3132
+ DEFAULT: lucideReact.Bell
3133
+ }
3134
+ },
3135
+ MESSAGE: {
3136
+ NAMES: {
3137
+ SINGULAR: "Message",
3138
+ PLURAL: "Messages"
3139
+ },
3140
+ ICONS: {
3141
+ DEFAULT: lucideReact.MessageSquare
3142
+ }
3143
+ },
3144
+ NOTIFICATION: {
3145
+ NAMES: {
3146
+ SINGULAR: "Notification",
3147
+ PLURAL: "Notifications"
3148
+ },
3149
+ ICONS: {
3150
+ DEFAULT: lucideReact.Bell
3151
+ }
3152
+ },
3153
+ APP: {
3154
+ NAMES: {
3155
+ SINGULAR: "Application",
3156
+ PLURAL: "Applications"
3157
+ },
3158
+ ICONS: {
3159
+ DEFAULT: lucideReact.LayoutGrid,
3160
+ HOME: lucideReact.LayoutGrid,
3161
+ LOGOUT: lucideReact.LogOut,
3162
+ UPLOAD: lucideReact.Upload
3163
+ }
3164
+ },
3165
+ HELP: {
3166
+ NAMES: {
3167
+ SINGULAR: "Help",
3168
+ PLURAL: "Help"
3169
+ },
3170
+ ICONS: {
3171
+ DEFAULT: lucideReact.MessageSquareLock,
3172
+ DOCS: lucideReact.BookOpen,
3173
+ FAQ: lucideReact.FileQuestion,
3174
+ ABOUT: lucideReact.Info
3175
+ }
3176
+ },
3177
+ USERSHIELD: {
3178
+ NAMES: {
3179
+ SINGULAR: "User Shield",
3180
+ PLURAL: "User Shields"
3181
+ },
3182
+ ICONS: {
3183
+ DEFAULT: lucideReact.MessageSquareLock
3184
+ }
3185
+ }
3186
+ };
3187
+ function configureEntityRegistry(overrides) {
3188
+ for (const [type, def] of Object.entries(overrides)) {
3189
+ const target = ENTITY_MAPPINGS[type];
3190
+ if (!target) continue;
3191
+ if (def?.NAMES) Object.assign(target.NAMES, def.NAMES);
3192
+ if (def?.ICONS) Object.assign(target.ICONS, def.ICONS);
3193
+ }
3194
+ }
3195
+ var getEntityIcon = (entityType, variant = "DEFAULT") => {
3196
+ const icons = ENTITY_MAPPINGS[entityType]?.ICONS;
3197
+ return icons?.[variant] || icons?.DEFAULT;
3198
+ };
3199
+ var getEntityLabel = (entityType, form = "SINGULAR") => {
3200
+ const entityMapping = ENTITY_MAPPINGS[entityType];
3201
+ if (!entityMapping) return "";
3202
+ const names = entityMapping.NAMES;
3203
+ const singularName = names.SINGULAR || "";
3204
+ if (form === "NEW") return names.NEW !== void 0 ? names.NEW : "New " + singularName;
3205
+ if (form === "SHORT")
3206
+ return names.SHORT !== void 0 ? names.SHORT : singularName.substring(0, 3) + ".";
3207
+ if (form === "PLURAL") return names.PLURAL !== void 0 ? names.PLURAL : singularName + "s";
3208
+ return singularName;
3209
+ };
3210
+ var EntityIcon = ({ entityType, variant = "DEFAULT", ...props }) => {
3211
+ const IconComponent = getEntityIcon(entityType, variant);
3212
+ return IconComponent ? React2__namespace.default.createElement(IconComponent, props) : null;
3213
+ };
3214
+ var VISIBILITY_ICONS = {
3215
+ PRIVATE: lucideReact.MessageSquareLock,
3216
+ SHARED: lucideReact.Users
3217
+ };
3218
+ var VisibilityIcon = ({
3219
+ isShared,
3220
+ ...props
3221
+ }) => {
3222
+ const IconComponent = isShared ? VISIBILITY_ICONS.SHARED : VISIBILITY_ICONS.PRIVATE;
3223
+ return React2__namespace.default.createElement(IconComponent, props);
3224
+ };
3225
+
3226
+ // src/entities/colors.ts
3227
+ var OPACITY_LIGHT = 0.15;
3228
+ var OPACITY_MEDIUM = 1;
3229
+ var OPACITY_BORDER = 0.3;
3230
+ var PLACEHOLDER_COLOR = "#9ca3af";
3231
+ var NEUTRAL_GRAY2 = "#64748b";
3232
+ var BASE_COLORS2 = {
3233
+ "0": "#10b981",
3234
+ "1": "#3b82f6",
3235
+ "2": "#8b5cf6",
3236
+ "3": "#f43f5e",
3237
+ "4": "#f59e0b",
3238
+ "5": "#84cc16",
3239
+ "6": "#a855f7",
3240
+ "7": "#06b6d4",
3241
+ "8": "#f97316",
3242
+ "9": "#14b8a6",
3243
+ a: "#ef4444",
3244
+ b: "#6366f1",
3245
+ c: "#ec4899",
3246
+ d: "#22c55e",
3247
+ e: "#eab308",
3248
+ f: "#0ea5e9"
3249
+ };
3250
+ function hexToRgba(hex, opacity) {
3251
+ const r = parseInt(hex.slice(1, 3), 16);
3252
+ const g = parseInt(hex.slice(3, 5), 16);
3253
+ const b = parseInt(hex.slice(5, 7), 16);
3254
+ return `rgba(${r}, ${g}, ${b}, ${opacity})`;
3255
+ }
3256
+ function getEntityColor2(entityId, variant = "medium") {
3257
+ const baseColor = BASE_COLORS2[entityId[4]] || BASE_COLORS2["0"];
3258
+ switch (variant) {
3259
+ case "light":
3260
+ return hexToRgba(baseColor, OPACITY_LIGHT);
3261
+ case "medium":
3262
+ return hexToRgba(baseColor, OPACITY_MEDIUM);
3263
+ case "text":
3264
+ return baseColor;
3265
+ }
3266
+ }
3267
+ function getEntityColorStyles(entityId) {
3268
+ const baseColor = BASE_COLORS2[entityId[4]] || BASE_COLORS2["0"];
3269
+ return {
3270
+ backgroundColor: getEntityColor2(entityId, "light"),
3271
+ color: baseColor,
3272
+ borderColor: hexToRgba(baseColor, OPACITY_BORDER)
3273
+ };
3274
+ }
3275
+ var getWorkspaceColor = (workspaceId, useWorkspaceColors) => {
3276
+ const shouldUseWorkspaceColors = useWorkspaceColors !== void 0 ? useWorkspaceColors : true;
3277
+ if (!shouldUseWorkspaceColors) return "hsl(var(--primary))";
3278
+ const isValidId = workspaceId && workspaceId.startsWith("wrk-") && workspaceId.length >= 5;
3279
+ if (!isValidId) return "hsl(var(--primary))";
3280
+ return getEntityColor2(workspaceId, "medium");
3281
+ };
1859
3282
 
3283
+ exports.AgentBadge = AgentBadge;
1860
3284
  exports.AiMarkdown = AiMarkdown;
3285
+ exports.ArbiBotHeadIcon = ArbiBotHeadIcon;
3286
+ exports.AudIcon = AudIcon;
1861
3287
  exports.Avatar = Avatar;
1862
3288
  exports.AvatarFallback = AvatarFallback;
1863
3289
  exports.AvatarImage = AvatarImage;
3290
+ exports.BASE_COLORS = BASE_COLORS2;
1864
3291
  exports.Badge = Badge;
1865
3292
  exports.Button = Button;
1866
3293
  exports.Card = Card;
@@ -1893,6 +3320,7 @@ exports.DialogPortal = DialogPortal;
1893
3320
  exports.DialogTitle = DialogTitle;
1894
3321
  exports.DialogTrigger = DialogTrigger;
1895
3322
  exports.DictateProvider = DictateProvider;
3323
+ exports.DocumentEntity = DocumentEntity;
1896
3324
  exports.DropdownMenu = DropdownMenu;
1897
3325
  exports.DropdownMenuCheckboxItem = DropdownMenuCheckboxItem;
1898
3326
  exports.DropdownMenuContent = DropdownMenuContent;
@@ -1908,10 +3336,16 @@ exports.DropdownMenuSub = DropdownMenuSub;
1908
3336
  exports.DropdownMenuSubContent = DropdownMenuSubContent;
1909
3337
  exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
1910
3338
  exports.DropdownMenuTrigger = DropdownMenuTrigger;
3339
+ exports.ENTITY_MAPPINGS = ENTITY_MAPPINGS;
3340
+ exports.EmlIcon = EmlIcon;
3341
+ exports.EntityIcon = EntityIcon;
3342
+ exports.EntityPill = EntityPill;
3343
+ exports.FILE_TYPE_COLORS = FILE_TYPE_COLORS;
1911
3344
  exports.HoverCard = HoverCard;
1912
3345
  exports.HoverCardContent = HoverCardContent;
1913
3346
  exports.HoverCardTrigger = HoverCardTrigger;
1914
3347
  exports.IconToggle = IconToggle;
3348
+ exports.ImgIcon = ImgIcon;
1915
3349
  exports.InlineMicButton = InlineMicButton;
1916
3350
  exports.Input = Input;
1917
3351
  exports.Label = Label;
@@ -1919,13 +3353,19 @@ exports.MarkdownRenderer = MarkdownRenderer;
1919
3353
  exports.MarkdownStreamingContext = MarkdownStreamingContext;
1920
3354
  exports.MicRecordingOverlay = MicRecordingOverlay;
1921
3355
  exports.MicWaveformIndicator = MicWaveformIndicator;
3356
+ exports.NEUTRAL_GRAY = NEUTRAL_GRAY2;
3357
+ exports.PLACEHOLDER_COLOR = PLACEHOLDER_COLOR;
3358
+ exports.PdfIcon = PdfIcon;
1922
3359
  exports.Popover = Popover;
1923
3360
  exports.PopoverAnchor = PopoverAnchor;
1924
3361
  exports.PopoverContent = PopoverContent;
1925
3362
  exports.PopoverTrigger = PopoverTrigger;
3363
+ exports.PresenceLabel = PresenceLabel;
1926
3364
  exports.Progress = Progress;
3365
+ exports.ProjectEntity = ProjectEntity;
1927
3366
  exports.RadioGroup = RadioGroup;
1928
3367
  exports.RadioGroupItem = RadioGroupItem;
3368
+ exports.RagDot = RagDot;
1929
3369
  exports.ScrollArea = ScrollArea;
1930
3370
  exports.ScrollBar = ScrollBar;
1931
3371
  exports.Select = Select;
@@ -1940,7 +3380,10 @@ exports.SelectTrigger = SelectTrigger;
1940
3380
  exports.SelectValue = SelectValue;
1941
3381
  exports.Separator = Separator;
1942
3382
  exports.Slider = Slider;
3383
+ exports.StatusPill = StatusPill;
1943
3384
  exports.Switch = Switch;
3385
+ exports.TAG_TYPE_ICONS = TAG_TYPE_ICONS;
3386
+ exports.TAG_TYPE_LABELS = TAG_TYPE_LABELS;
1944
3387
  exports.Table = Table;
1945
3388
  exports.TableBody = TableBody;
1946
3389
  exports.TableCaption = TableCaption;
@@ -1953,6 +3396,7 @@ exports.Tabs = Tabs;
1953
3396
  exports.TabsContent = TabsContent;
1954
3397
  exports.TabsList = TabsList;
1955
3398
  exports.TabsTrigger = TabsTrigger;
3399
+ exports.TagEntity = TagEntity;
1956
3400
  exports.Textarea = Textarea;
1957
3401
  exports.Toggle = Toggle;
1958
3402
  exports.ToggleGroup = ToggleGroup;
@@ -1961,15 +3405,31 @@ exports.Tooltip = Tooltip;
1961
3405
  exports.TooltipContent = TooltipContent;
1962
3406
  exports.TooltipProvider = TooltipProvider;
1963
3407
  exports.TooltipTrigger = TooltipTrigger;
3408
+ exports.UserEntity = UserEntity;
3409
+ exports.VISIBILITY_ICONS = VISIBILITY_ICONS;
3410
+ exports.VidIcon = VidIcon;
3411
+ exports.VisibilityIcon = VisibilityIcon;
1964
3412
  exports.badgeVariants = badgeVariants;
1965
3413
  exports.buttonVariants = buttonVariants;
1966
3414
  exports.cardVariants = cardVariants;
1967
3415
  exports.classifyMediaError = classifyMediaError;
1968
3416
  exports.cn = cn;
3417
+ exports.configureEntityRegistry = configureEntityRegistry;
3418
+ exports.configureRagLabels = configureRagLabels;
3419
+ exports.configureStatusRegistry = configureStatusRegistry;
1969
3420
  exports.formatElapsed = formatElapsed;
3421
+ exports.getDocIcon = getDocIcon;
3422
+ exports.getEntityColor = getEntityColor2;
3423
+ exports.getEntityColorStyles = getEntityColorStyles;
3424
+ exports.getEntityIcon = getEntityIcon;
3425
+ exports.getEntityLabel = getEntityLabel;
3426
+ exports.getStatusVariant = getStatusVariant;
3427
+ exports.getTagTypeIcon = getTagTypeIcon;
3428
+ exports.getTagTypeLabel = getTagTypeLabel;
3429
+ exports.getWorkspaceColor = getWorkspaceColor;
1970
3430
  exports.markdownBaseComponents = markdownBaseComponents;
1971
3431
  exports.splitMarkdownBlocks = splitMarkdownBlocks;
1972
3432
  exports.toggleVariants = toggleVariants;
1973
3433
  exports.useAudioRecorder = useAudioRecorder;
1974
- //# sourceMappingURL=chunk-FIPS3VPH.cjs.map
1975
- //# sourceMappingURL=chunk-FIPS3VPH.cjs.map
3434
+ //# sourceMappingURL=chunk-IZPXHVPJ.cjs.map
3435
+ //# sourceMappingURL=chunk-IZPXHVPJ.cjs.map