@arbidocs/blocks 0.4.16 → 0.4.18
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/agents/index.cjs +369 -171
- package/dist/agents/index.js +4 -2
- package/dist/agents/tasks/DueDateMenu.d.ts +32 -0
- package/dist/agents/tasks/NewThreadDialog.d.ts +53 -0
- package/dist/agents/tasks/PersonPill.d.ts +22 -0
- package/dist/agents/tasks/PillSelect.d.ts +39 -0
- package/dist/agents/tasks/TaskActivityDialog.d.ts +14 -0
- package/dist/agents/tasks/TaskActivityTimeline.d.ts +54 -0
- package/dist/agents/tasks/TaskComposer.d.ts +6 -106
- package/dist/agents/tasks/TaskMoveDialog.d.ts +25 -0
- package/dist/agents/tasks/TaskOutputsCell.d.ts +23 -0
- package/dist/agents/tasks/TaskPlan.d.ts +4 -2
- package/dist/agents/tasks/TaskReviewActions.d.ts +44 -0
- package/dist/agents/tasks/TaskRowMenu.d.ts +28 -0
- package/dist/agents/tasks/TaskStatusPill.d.ts +24 -0
- package/dist/agents/tasks/TaskTable.d.ts +99 -0
- package/dist/agents/tasks/TaskThreadChip.d.ts +19 -0
- package/dist/agents/tasks/TaskTriggerChip.d.ts +24 -0
- package/dist/agents/tasks/TasksChrome.d.ts +17 -17
- package/dist/agents/tasks/WorkflowComposer.d.ts +10 -0
- package/dist/agents/tasks/WorkflowsTable.d.ts +72 -0
- package/dist/agents/tasks/gridWidth.d.ts +11 -0
- package/dist/agents/tasks/index.d.ts +23 -7
- package/dist/agents/tasks/taskColumns.d.ts +39 -63
- package/dist/agents/tasks/taskComposerTypes.d.ts +217 -0
- package/dist/agents/tasks/taskLabels.d.ts +27 -10
- package/dist/agents/tasks/taskRequest.d.ts +151 -25
- package/dist/agents/tasks/taskRows.d.ts +111 -0
- package/dist/agents/tasks/taskTableLabels.d.ts +64 -0
- package/dist/agents/tasks/workflowColumns.d.ts +23 -0
- package/dist/agents/tasks/workflowRows.d.ts +44 -0
- package/dist/agents/tasks/workflowTableLabels.d.ts +53 -0
- package/dist/agents/workflows/WorkflowConfigDialog.d.ts +5 -0
- package/dist/agents/workflows/index.d.ts +1 -0
- package/dist/agents/workflows/scopeRender.d.ts +10 -0
- package/dist/agents/workflows/types.d.ts +2 -0
- package/dist/chat/AssistantModeToggle.d.ts +25 -0
- package/dist/chat/MentionMenu.d.ts +52 -0
- package/dist/chat/index.cjs +119 -63
- package/dist/chat/index.d.ts +4 -0
- package/dist/chat/index.js +1 -1
- package/dist/chat/mentions.d.ts +64 -0
- package/dist/chat/useMentionAutocomplete.d.ts +33 -0
- package/dist/{chunk-IMA6I73C.js → chunk-ABSII3ND.js} +336 -4
- package/dist/chunk-ABSII3ND.js.map +1 -0
- package/dist/{chunk-22T6KHGB.cjs → chunk-C2V6HQKG.cjs} +348 -2
- package/dist/chunk-C2V6HQKG.cjs.map +1 -0
- package/dist/{chunk-CVFBSUXL.js → chunk-F3F56LOR.js} +4227 -851
- package/dist/chunk-F3F56LOR.js.map +1 -0
- package/dist/chunk-IC2VHFWR.js +158 -0
- package/dist/chunk-IC2VHFWR.js.map +1 -0
- package/dist/{chunk-D6XY3C4O.cjs → chunk-JGZTRLKL.cjs} +207 -139
- package/dist/chunk-JGZTRLKL.cjs.map +1 -0
- package/dist/{chunk-H7OD4CHN.js → chunk-NUPVHEJW.js} +208 -140
- package/dist/chunk-NUPVHEJW.js.map +1 -0
- package/dist/{chunk-67HGXV4I.cjs → chunk-TP7JJAXZ.cjs} +4280 -855
- package/dist/chunk-TP7JJAXZ.cjs.map +1 -0
- package/dist/chunk-ZPERNIMP.cjs +162 -0
- package/dist/chunk-ZPERNIMP.cjs.map +1 -0
- package/dist/connection/ai.d.ts +4 -1
- package/dist/facts/FactRowActions.d.ts +5 -1
- package/dist/facts/factColumns.d.ts +1 -1
- package/dist/facts/index.cjs +19 -10
- package/dist/facts/index.cjs.map +1 -1
- package/dist/facts/index.js +14 -5
- package/dist/facts/index.js.map +1 -1
- package/dist/files/GridView.d.ts +5 -0
- package/dist/files/index.cjs +18 -18
- package/dist/files/index.js +4 -5
- package/dist/files/index.js.map +1 -1
- package/dist/index.cjs +549 -297
- package/dist/index.js +8 -8
- package/dist/settings/ConversationSettingsParts.d.ts +5 -1
- package/dist/settings/index.cjs +8 -3
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.js +8 -3
- package/dist/settings/index.js.map +1 -1
- package/dist/shell/index.cjs +1 -1
- package/dist/shell/index.js +1 -1
- package/dist/site/index.cjs +12 -12
- package/dist/site/index.js +2 -2
- package/dist/studio/index.cjs +1 -1
- package/dist/studio/index.js +1 -1
- package/dist/workspaces/index.cjs +1 -1
- package/dist/workspaces/index.cjs.map +1 -1
- package/dist/workspaces/index.js +1 -1
- package/dist/workspaces/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/agents/tasks/LiveRunsBanner.d.ts +0 -26
- package/dist/agents/tasks/TaskRowActions.d.ts +0 -43
- package/dist/chunk-22T6KHGB.cjs.map +0 -1
- package/dist/chunk-67HGXV4I.cjs.map +0 -1
- package/dist/chunk-CVFBSUXL.js.map +0 -1
- package/dist/chunk-D6XY3C4O.cjs.map +0 -1
- package/dist/chunk-H7OD4CHN.js.map +0 -1
- package/dist/chunk-IMA6I73C.js.map +0 -1
- package/dist/chunk-NUNKSZKU.js +0 -203
- package/dist/chunk-NUNKSZKU.js.map +0 -1
- package/dist/chunk-V4ISCZJ7.cjs +0 -207
- package/dist/chunk-V4ISCZJ7.cjs.map +0 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { testIdOr } from './chunk-7F6CBP3Z.js';
|
|
3
|
+
import { useRef, useState } from 'react';
|
|
4
|
+
import { FileImage, Table2, BookOpen, Search } from 'lucide-react';
|
|
5
|
+
import { ToggleGroup, cn, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, ToggleGroupItem, Tooltip, TooltipTrigger, TooltipContent } from '@arbidocs/react/ui';
|
|
6
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var DEFAULT_DOCUMENT_VIEW_TOGGLE_LABELS = {
|
|
9
|
+
gallery: "Gallery",
|
|
10
|
+
table: "Table",
|
|
11
|
+
review: "Review",
|
|
12
|
+
smartSearch: "Smart Search"
|
|
13
|
+
};
|
|
14
|
+
function ViewToggleItem({
|
|
15
|
+
option,
|
|
16
|
+
size,
|
|
17
|
+
testIdPrefix,
|
|
18
|
+
showLabel,
|
|
19
|
+
labelClassName,
|
|
20
|
+
hideTooltip
|
|
21
|
+
}) {
|
|
22
|
+
const labelRef = useRef(null);
|
|
23
|
+
const [isTipNeeded, setIsTipNeeded] = useState(true);
|
|
24
|
+
const isLabelShown = () => !!labelRef.current && labelRef.current.offsetParent !== null;
|
|
25
|
+
const content = /* @__PURE__ */ jsxs(
|
|
26
|
+
"span",
|
|
27
|
+
{
|
|
28
|
+
className: "flex items-center gap-1.5",
|
|
29
|
+
onPointerEnter: () => setIsTipNeeded(!isLabelShown()),
|
|
30
|
+
onFocus: () => setIsTipNeeded(!isLabelShown()),
|
|
31
|
+
children: [
|
|
32
|
+
option.icon,
|
|
33
|
+
showLabel && /* @__PURE__ */ jsx("span", { ref: labelRef, className: labelClassName, children: option.label })
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
return (
|
|
38
|
+
// The tooltip lives INSIDE the item: wrapping the ToggleGroupItem would make Radix
|
|
39
|
+
// Tooltip's data-state collide with the toggle's on/off state.
|
|
40
|
+
/* @__PURE__ */ jsx(
|
|
41
|
+
ToggleGroupItem,
|
|
42
|
+
{
|
|
43
|
+
value: option.value,
|
|
44
|
+
"aria-label": option.label,
|
|
45
|
+
size,
|
|
46
|
+
className: "rounded-[5px] border-0 bg-transparent text-muted-foreground pointer-coarse:min-h-11 data-[state=off]:hover:bg-background/60 data-[state=off]:hover:text-foreground data-[state=on]:bg-accent data-[state=on]:text-accent-foreground data-[state=on]:hover:bg-accent data-[state=on]:hover:text-accent-foreground",
|
|
47
|
+
"data-testid": option.testId ?? `${testIdPrefix}-${option.value}-button`,
|
|
48
|
+
children: hideTooltip ? content : /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
49
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: content }),
|
|
50
|
+
isTipNeeded && /* @__PURE__ */ jsx(TooltipContent, { children: option.label })
|
|
51
|
+
] })
|
|
52
|
+
}
|
|
53
|
+
)
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
function ViewToggle({
|
|
57
|
+
options,
|
|
58
|
+
value,
|
|
59
|
+
onChange,
|
|
60
|
+
testIdPrefix = "view",
|
|
61
|
+
showLabels = false,
|
|
62
|
+
hideTooltips = false,
|
|
63
|
+
size = "default",
|
|
64
|
+
containerCollapse = false,
|
|
65
|
+
className
|
|
66
|
+
}) {
|
|
67
|
+
const labelClassName = containerCollapse ? "hidden @lg:inline text-sm" : "hidden md:inline text-sm";
|
|
68
|
+
return /* @__PURE__ */ jsx(
|
|
69
|
+
ToggleGroup,
|
|
70
|
+
{
|
|
71
|
+
variant: "default",
|
|
72
|
+
type: "single",
|
|
73
|
+
value,
|
|
74
|
+
onValueChange: (next) => next && onChange(next),
|
|
75
|
+
className: cn("gap-0.5 rounded-md bg-muted p-0.5", className),
|
|
76
|
+
children: options.map((option) => /* @__PURE__ */ jsx(
|
|
77
|
+
ViewToggleItem,
|
|
78
|
+
{
|
|
79
|
+
option,
|
|
80
|
+
size,
|
|
81
|
+
testIdPrefix,
|
|
82
|
+
showLabel: showLabels,
|
|
83
|
+
labelClassName,
|
|
84
|
+
hideTooltip: hideTooltips
|
|
85
|
+
},
|
|
86
|
+
option.value
|
|
87
|
+
))
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
function documentViewOptions(l) {
|
|
92
|
+
return [
|
|
93
|
+
// "Gallery" (page-preview grid) reads more conventionally than "Tiles".
|
|
94
|
+
{ value: "explorer", icon: /* @__PURE__ */ jsx(FileImage, { className: "size-3.5" }), label: l.gallery },
|
|
95
|
+
{ value: "grid", icon: /* @__PURE__ */ jsx(Table2, { className: "size-3.5" }), label: l.table },
|
|
96
|
+
{ value: "navigator", icon: /* @__PURE__ */ jsx(BookOpen, { className: "size-3.5" }), label: l.review },
|
|
97
|
+
{ value: "search", icon: /* @__PURE__ */ jsx(Search, { className: "size-3.5" }), label: l.smartSearch }
|
|
98
|
+
];
|
|
99
|
+
}
|
|
100
|
+
function DocumentViewToggle({
|
|
101
|
+
viewMode,
|
|
102
|
+
onChange,
|
|
103
|
+
compact,
|
|
104
|
+
labels,
|
|
105
|
+
testIdPrefix,
|
|
106
|
+
testIds,
|
|
107
|
+
compactTestIds
|
|
108
|
+
}) {
|
|
109
|
+
const options = documentViewOptions({ ...DEFAULT_DOCUMENT_VIEW_TOGGLE_LABELS, ...labels }).map(
|
|
110
|
+
(o) => ({ ...o, testId: testIds?.[o.value] })
|
|
111
|
+
);
|
|
112
|
+
if (compact) {
|
|
113
|
+
const current = options.find((o) => o.value === viewMode) ?? options[0];
|
|
114
|
+
return /* @__PURE__ */ jsxs(Select, { value: viewMode, onValueChange: (v) => onChange(v), children: [
|
|
115
|
+
/* @__PURE__ */ jsx(
|
|
116
|
+
SelectTrigger,
|
|
117
|
+
{
|
|
118
|
+
className: "h-7 w-10 justify-center gap-0 border-input p-0 pointer-coarse:h-11! pointer-coarse:w-11! shrink-0 [&>svg]:hidden",
|
|
119
|
+
"aria-label": current.label,
|
|
120
|
+
"data-testid": testIdOr(compactTestIds?.select, {
|
|
121
|
+
testId: "documents-layout-compact-select"
|
|
122
|
+
}),
|
|
123
|
+
children: /* @__PURE__ */ jsx(SelectValue, { children: current.icon })
|
|
124
|
+
}
|
|
125
|
+
),
|
|
126
|
+
/* @__PURE__ */ jsx(SelectContent, { align: "center", children: options.map((option) => /* @__PURE__ */ jsx(
|
|
127
|
+
SelectItem,
|
|
128
|
+
{
|
|
129
|
+
value: option.value,
|
|
130
|
+
"data-testid": testIdOr(compactTestIds?.option?.(option.value), {
|
|
131
|
+
testId: `documents-layout-compact-${option.value}-option`
|
|
132
|
+
}),
|
|
133
|
+
children: /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2", children: [
|
|
134
|
+
option.icon,
|
|
135
|
+
option.label
|
|
136
|
+
] })
|
|
137
|
+
},
|
|
138
|
+
option.value
|
|
139
|
+
)) })
|
|
140
|
+
] });
|
|
141
|
+
}
|
|
142
|
+
return /* @__PURE__ */ jsx(
|
|
143
|
+
ViewToggle,
|
|
144
|
+
{
|
|
145
|
+
options,
|
|
146
|
+
value: viewMode,
|
|
147
|
+
onChange: (v) => onChange(v),
|
|
148
|
+
testIdPrefix: testIdPrefix ?? "documents-layout",
|
|
149
|
+
showLabels: true,
|
|
150
|
+
containerCollapse: true,
|
|
151
|
+
size: "sm"
|
|
152
|
+
}
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export { DEFAULT_DOCUMENT_VIEW_TOGGLE_LABELS, DocumentViewToggle, ViewToggle };
|
|
157
|
+
//# sourceMappingURL=chunk-IC2VHFWR.js.map
|
|
158
|
+
//# sourceMappingURL=chunk-IC2VHFWR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/files/ViewToggle.tsx"],"names":[],"mappings":"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","file":"chunk-IC2VHFWR.js","sourcesContent":["import { useRef, useState, type ReactNode } from 'react'\nimport { BookOpen, FileImage, Search, Table2 } from 'lucide-react'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n ToggleGroup,\n ToggleGroupItem,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\n/** Names of the four document view modes. Pass a partial `labels` to translate or reword. */\nexport interface DocumentViewToggleLabels {\n gallery: string\n table: string\n review: string\n smartSearch: string\n}\n\nexport const DEFAULT_DOCUMENT_VIEW_TOGGLE_LABELS: DocumentViewToggleLabels = {\n gallery: 'Gallery',\n table: 'Table',\n review: 'Review',\n smartSearch: 'Smart Search',\n}\n\nexport interface ViewToggleOption {\n value: string\n icon: ReactNode\n label: string\n /** Overrides this item's test id (default `${testIdPrefix}-${value}-button`). */\n testId?: string\n}\n\nexport interface ViewToggleProps {\n options: ViewToggleOption[]\n value: string\n onChange: (value: string) => void\n /** Item test ids are `${testIdPrefix}-${value}-button` unless an option sets its own `testId`. */\n testIdPrefix?: string\n showLabels?: boolean\n hideTooltips?: boolean\n size?: 'default' | 'sm'\n /**\n * Collapse labels to icons by the width of the nearest `@container` ancestor instead of the\n * viewport. The consumer must mark that region `@container`.\n */\n containerCollapse?: boolean\n className?: string\n}\n\ninterface ViewToggleItemProps {\n option: ViewToggleOption\n size: 'default' | 'sm'\n testIdPrefix: string\n showLabel: boolean\n labelClassName: string\n hideTooltip: boolean\n}\n\nfunction ViewToggleItem({\n option,\n size,\n testIdPrefix,\n showLabel,\n labelClassName,\n hideTooltip,\n}: ViewToggleItemProps) {\n const labelRef = useRef<HTMLSpanElement>(null)\n const [isTipNeeded, setIsTipNeeded] = useState(true)\n // A control that shows its own text needs no tooltip repeating it; when the container is too\n // narrow and the label collapses to the icon, the tooltip is the label.\n const isLabelShown = () => !!labelRef.current && labelRef.current.offsetParent !== null\n const content = (\n <span\n className=\"flex items-center gap-1.5\"\n onPointerEnter={() => setIsTipNeeded(!isLabelShown())}\n onFocus={() => setIsTipNeeded(!isLabelShown())}\n >\n {option.icon}\n {showLabel && (\n <span ref={labelRef} className={labelClassName}>\n {option.label}\n </span>\n )}\n </span>\n )\n return (\n // The tooltip lives INSIDE the item: wrapping the ToggleGroupItem would make Radix\n // Tooltip's data-state collide with the toggle's on/off state.\n <ToggleGroupItem\n value={option.value}\n aria-label={option.label}\n size={size}\n className=\"rounded-[5px] border-0 bg-transparent text-muted-foreground pointer-coarse:min-h-11 data-[state=off]:hover:bg-background/60 data-[state=off]:hover:text-foreground data-[state=on]:bg-accent data-[state=on]:text-accent-foreground data-[state=on]:hover:bg-accent data-[state=on]:hover:text-accent-foreground\"\n data-testid={option.testId ?? `${testIdPrefix}-${option.value}-button`}\n >\n {hideTooltip ? (\n content\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>{content}</TooltipTrigger>\n {isTipNeeded && <TooltipContent>{option.label}</TooltipContent>}\n </Tooltip>\n )}\n </ToggleGroupItem>\n )\n}\n\n/** Segmented view switch: selected = accent tint, tone-only hover, 44px targets on touch. */\nexport function ViewToggle({\n options,\n value,\n onChange,\n testIdPrefix = 'view',\n showLabels = false,\n hideTooltips = false,\n size = 'default',\n containerCollapse = false,\n className,\n}: ViewToggleProps) {\n const labelClassName = containerCollapse\n ? 'hidden @lg:inline text-sm'\n : 'hidden md:inline text-sm'\n return (\n <ToggleGroup\n variant=\"default\"\n type=\"single\"\n value={value}\n onValueChange={(next) => next && onChange(next)}\n className={cn('gap-0.5 rounded-md bg-muted p-0.5', className)}\n >\n {options.map((option) => (\n <ViewToggleItem\n key={option.value}\n option={option}\n size={size}\n testIdPrefix={testIdPrefix}\n showLabel={showLabels}\n labelClassName={labelClassName}\n hideTooltip={hideTooltips}\n />\n ))}\n </ToggleGroup>\n )\n}\n\nexport type DocumentViewMode = 'grid' | 'explorer' | 'navigator' | 'search'\n\nfunction documentViewOptions(l: DocumentViewToggleLabels): ViewToggleOption[] {\n return [\n // \"Gallery\" (page-preview grid) reads more conventionally than \"Tiles\".\n { value: 'explorer', icon: <FileImage className=\"size-3.5\" />, label: l.gallery },\n { value: 'grid', icon: <Table2 className=\"size-3.5\" />, label: l.table },\n { value: 'navigator', icon: <BookOpen className=\"size-3.5\" />, label: l.review },\n { value: 'search', icon: <Search className=\"size-3.5\" />, label: l.smartSearch },\n ]\n}\n\nexport interface DocumentViewToggleProps {\n viewMode: DocumentViewMode\n onChange: (mode: DocumentViewMode) => void\n /** Collapse the four modes into one select trigger (narrow viewports). */\n compact?: boolean\n labels?: Partial<DocumentViewToggleLabels>\n /** Overrides the segmented items' prefix (default `documents-layout`: `<prefix>-<mode>-button`). */\n testIdPrefix?: string\n /** Per-mode item ids, for hosts that keep their own (e.g. `documents-view-gallery`). */\n testIds?: Partial<Record<DocumentViewMode, string>>\n /** Overrides the compact select test ids (defaults keep the current ids). */\n compactTestIds?: Partial<{ select: string; option: (mode: DocumentViewMode) => string }>\n}\n\n/** The Documents page's Gallery / Table / Review / Smart Search switch. */\nexport function DocumentViewToggle({\n viewMode,\n onChange,\n compact,\n labels,\n testIdPrefix,\n testIds,\n compactTestIds,\n}: DocumentViewToggleProps) {\n const options = documentViewOptions({ ...DEFAULT_DOCUMENT_VIEW_TOGGLE_LABELS, ...labels }).map(\n (o) => ({ ...o, testId: testIds?.[o.value as DocumentViewMode] })\n )\n if (compact) {\n const current = options.find((o) => o.value === viewMode) ?? options[0]\n return (\n <Select value={viewMode} onValueChange={(v) => onChange(v as DocumentViewMode)}>\n <SelectTrigger\n className=\"h-7 w-10 justify-center gap-0 border-input p-0 pointer-coarse:h-11! pointer-coarse:w-11! shrink-0 [&>svg]:hidden\"\n aria-label={current.label}\n data-testid={testIdOr(compactTestIds?.select, {\n testId: 'documents-layout-compact-select',\n })}\n >\n <SelectValue>{current.icon}</SelectValue>\n </SelectTrigger>\n <SelectContent align=\"center\">\n {options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n data-testid={testIdOr(compactTestIds?.option?.(option.value as DocumentViewMode), {\n testId: `documents-layout-compact-${option.value}-option`,\n })}\n >\n <span className=\"flex items-center gap-2\">\n {option.icon}\n {option.label}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n return (\n <ViewToggle\n options={options}\n value={viewMode}\n onChange={(v) => onChange(v as DocumentViewMode)}\n testIdPrefix={testIdPrefix ?? 'documents-layout'}\n showLabels\n containerCollapse\n size=\"sm\"\n />\n )\n}\n"]}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkFX3K6LNZ_cjs = require('./chunk-FX3K6LNZ.cjs');
|
|
5
|
+
var chunkPPCATBOY_cjs = require('./chunk-PPCATBOY.cjs');
|
|
5
6
|
var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
|
|
6
7
|
var react = require('react');
|
|
7
8
|
var agGridReact = require('ag-grid-react');
|
|
@@ -176,12 +177,35 @@ function GridView({
|
|
|
176
177
|
selectionRef.current = selection;
|
|
177
178
|
const onSelectionChangeRef = react.useRef(selection?.onSelectionChange);
|
|
178
179
|
onSelectionChangeRef.current = selection?.onSelectionChange;
|
|
180
|
+
const syncingSelectionRef = react.useRef(false);
|
|
179
181
|
const handleSelectionChanged = react.useCallback(() => {
|
|
182
|
+
if (syncingSelectionRef.current) return;
|
|
180
183
|
if (!onSelectionChangeRef.current || !gridApiRef.current) return;
|
|
181
184
|
const selectedNodes = gridApiRef.current.getSelectedNodes();
|
|
182
185
|
const selectedData = selectedNodes.map((node) => node.data).filter((item) => item !== void 0);
|
|
183
186
|
onSelectionChangeRef.current(selectedData);
|
|
184
187
|
}, []);
|
|
188
|
+
const controlledSelected = selection?.controlled ? selection.selected : void 0;
|
|
189
|
+
react.useEffect(() => {
|
|
190
|
+
const api = gridApiRef.current;
|
|
191
|
+
if (!api || api.isDestroyed() || !controlledSelected) return;
|
|
192
|
+
const wanted = new Set(controlledSelected.map(getItemId));
|
|
193
|
+
const tick = [];
|
|
194
|
+
const untick = [];
|
|
195
|
+
api.forEachNode((node) => {
|
|
196
|
+
if (!node.data) return;
|
|
197
|
+
const want = wanted.has(getItemId(node.data));
|
|
198
|
+
if (want && !node.isSelected()) tick.push(node);
|
|
199
|
+
else if (!want && node.isSelected()) untick.push(node);
|
|
200
|
+
});
|
|
201
|
+
syncingSelectionRef.current = true;
|
|
202
|
+
try {
|
|
203
|
+
if (tick.length) api.setNodesSelected({ nodes: tick, newValue: true, source: "api" });
|
|
204
|
+
if (untick.length) api.setNodesSelected({ nodes: untick, newValue: false, source: "api" });
|
|
205
|
+
} finally {
|
|
206
|
+
syncingSelectionRef.current = false;
|
|
207
|
+
}
|
|
208
|
+
}, [controlledSelected, getItemId]);
|
|
185
209
|
const handleRowClicked = react.useCallback(
|
|
186
210
|
(event) => {
|
|
187
211
|
if (!onRowClick || !event.data) return;
|
|
@@ -513,157 +537,201 @@ function GridView({
|
|
|
513
537
|
}
|
|
514
538
|
);
|
|
515
539
|
}
|
|
516
|
-
var
|
|
517
|
-
|
|
518
|
-
|
|
540
|
+
var NARROW_BELOW_PX = 480;
|
|
541
|
+
var DEFAULT_SELECTION_BAR_LABELS = {
|
|
542
|
+
selected: "selected",
|
|
543
|
+
clearSelection: "Clear selection",
|
|
519
544
|
review: "Review",
|
|
520
|
-
|
|
545
|
+
selectionActions: "Selection actions"
|
|
521
546
|
};
|
|
522
|
-
function
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
testIdPrefix,
|
|
526
|
-
showLabel,
|
|
527
|
-
labelClassName,
|
|
528
|
-
hideTooltip
|
|
529
|
-
}) {
|
|
530
|
-
const labelRef = react.useRef(null);
|
|
531
|
-
const [isTipNeeded, setIsTipNeeded] = react.useState(true);
|
|
532
|
-
const isLabelShown = () => !!labelRef.current && labelRef.current.offsetParent !== null;
|
|
533
|
-
const content = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
534
|
-
"span",
|
|
535
|
-
{
|
|
536
|
-
className: "flex items-center gap-1.5",
|
|
537
|
-
onPointerEnter: () => setIsTipNeeded(!isLabelShown()),
|
|
538
|
-
onFocus: () => setIsTipNeeded(!isLabelShown()),
|
|
539
|
-
children: [
|
|
540
|
-
option.icon,
|
|
541
|
-
showLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { ref: labelRef, className: labelClassName, children: option.label })
|
|
542
|
-
]
|
|
543
|
-
}
|
|
544
|
-
);
|
|
545
|
-
return (
|
|
546
|
-
// The tooltip lives INSIDE the item: wrapping the ToggleGroupItem would make Radix
|
|
547
|
-
// Tooltip's data-state collide with the toggle's on/off state.
|
|
548
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
549
|
-
ui.ToggleGroupItem,
|
|
550
|
-
{
|
|
551
|
-
value: option.value,
|
|
552
|
-
"aria-label": option.label,
|
|
553
|
-
size,
|
|
554
|
-
className: "rounded-[5px] border-0 bg-transparent text-muted-foreground pointer-coarse:min-h-11 data-[state=off]:hover:bg-background/60 data-[state=off]:hover:text-foreground data-[state=on]:bg-accent data-[state=on]:text-accent-foreground data-[state=on]:hover:bg-accent data-[state=on]:hover:text-accent-foreground",
|
|
555
|
-
"data-testid": option.testId ?? `${testIdPrefix}-${option.value}-button`,
|
|
556
|
-
children: hideTooltip ? content : /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
|
|
557
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: content }),
|
|
558
|
-
isTipNeeded && /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { children: option.label })
|
|
559
|
-
] })
|
|
560
|
-
}
|
|
561
|
-
)
|
|
562
|
-
);
|
|
547
|
+
function SelectionBar(props) {
|
|
548
|
+
if (props.count === 0 && !props.status) return null;
|
|
549
|
+
return /* @__PURE__ */ jsxRuntime.jsx(SelectionBarInner, { ...props });
|
|
563
550
|
}
|
|
564
|
-
function
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
551
|
+
function SelectionBarInner({
|
|
552
|
+
count,
|
|
553
|
+
onClear,
|
|
554
|
+
onReview,
|
|
555
|
+
actions,
|
|
556
|
+
children,
|
|
557
|
+
status,
|
|
558
|
+
selectedLabel,
|
|
559
|
+
labels,
|
|
560
|
+
testIds,
|
|
573
561
|
className
|
|
574
562
|
}) {
|
|
575
|
-
const
|
|
563
|
+
const l = { ...DEFAULT_SELECTION_BAR_LABELS, ...labels };
|
|
564
|
+
const hasSelection = count > 0;
|
|
565
|
+
const rootRef = react.useRef(null);
|
|
566
|
+
const actionsRef = react.useRef(null);
|
|
567
|
+
const [isCompact, setIsCompact] = react.useState(false);
|
|
568
|
+
const [isNarrow, setIsNarrow] = react.useState(false);
|
|
569
|
+
const overflowRootWidthRef = react.useRef(Number.POSITIVE_INFINITY);
|
|
570
|
+
const measureRef = react.useRef(() => {
|
|
571
|
+
});
|
|
572
|
+
measureRef.current = () => {
|
|
573
|
+
const root = rootRef.current;
|
|
574
|
+
const el = actionsRef.current;
|
|
575
|
+
if (!root || !el) return;
|
|
576
|
+
const available = root.parentElement?.clientWidth ?? 0;
|
|
577
|
+
setIsNarrow(available > 0 && available < NARROW_BELOW_PX);
|
|
578
|
+
if (!isCompact) {
|
|
579
|
+
if (el.scrollWidth > el.clientWidth + 1) {
|
|
580
|
+
overflowRootWidthRef.current = root.clientWidth;
|
|
581
|
+
setIsCompact(true);
|
|
582
|
+
}
|
|
583
|
+
} else if (root.clientWidth > overflowRootWidthRef.current + 64) {
|
|
584
|
+
setIsCompact(false);
|
|
585
|
+
}
|
|
586
|
+
};
|
|
587
|
+
react.useLayoutEffect(() => {
|
|
588
|
+
measureRef.current();
|
|
589
|
+
const root = rootRef.current;
|
|
590
|
+
if (!root) return;
|
|
591
|
+
return chunkPPCATBOY_cjs.observeResize(root, () => measureRef.current());
|
|
592
|
+
}, []);
|
|
593
|
+
react.useLayoutEffect(() => {
|
|
594
|
+
measureRef.current();
|
|
595
|
+
const inner = actionsRef.current;
|
|
596
|
+
if (!inner || typeof ResizeObserver === "undefined") return;
|
|
597
|
+
const observer = new ResizeObserver(() => measureRef.current());
|
|
598
|
+
inner.querySelectorAll("button").forEach((button) => observer.observe(button));
|
|
599
|
+
return () => observer.disconnect();
|
|
600
|
+
});
|
|
601
|
+
react.useLayoutEffect(() => {
|
|
602
|
+
let isCancelled = false;
|
|
603
|
+
void document.fonts?.ready.then(() => {
|
|
604
|
+
if (!isCancelled) measureRef.current();
|
|
605
|
+
});
|
|
606
|
+
return () => {
|
|
607
|
+
isCancelled = true;
|
|
608
|
+
};
|
|
609
|
+
}, []);
|
|
576
610
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
577
|
-
|
|
611
|
+
"div",
|
|
578
612
|
{
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
className: ui.cn("gap-0.5 rounded-md bg-muted p-0.5", className),
|
|
584
|
-
children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
585
|
-
ViewToggleItem,
|
|
613
|
+
"data-slot": "selection-bar",
|
|
614
|
+
className: ui.cn("pointer-events-none sticky bottom-0 z-30 h-0", className),
|
|
615
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-x-0 bottom-4 flex justify-center px-3", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
616
|
+
"div",
|
|
586
617
|
{
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
618
|
+
ref: rootRef,
|
|
619
|
+
role: "toolbar",
|
|
620
|
+
"aria-label": l.selectionActions,
|
|
621
|
+
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.toolbar, { testId: "bulk-actions-toolbar" }),
|
|
622
|
+
"data-narrow": isNarrow || void 0,
|
|
623
|
+
className: "pointer-events-auto flex min-h-12 max-w-full items-center rounded-lg border border-border bg-popover px-2 py-1.5 shadow-xl",
|
|
624
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2 px-1", children: [
|
|
625
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
626
|
+
"div",
|
|
627
|
+
{
|
|
628
|
+
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.count, { testId: "bulk-selected-count" }),
|
|
629
|
+
"aria-live": "polite",
|
|
630
|
+
className: ui.cn(
|
|
631
|
+
"flex shrink-0 items-center rounded-full bg-accent text-sm font-semibold tabular-nums text-accent-foreground",
|
|
632
|
+
isCompact ? "gap-1 px-2.5 py-1" : "gap-2 px-3 py-1"
|
|
633
|
+
),
|
|
634
|
+
children: [
|
|
635
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
636
|
+
count,
|
|
637
|
+
!isCompact && ` ${selectedLabel ?? l.selected}`
|
|
638
|
+
] }),
|
|
639
|
+
hasSelection && /* @__PURE__ */ jsxRuntime.jsx(
|
|
640
|
+
"button",
|
|
641
|
+
{
|
|
642
|
+
type: "button",
|
|
643
|
+
onClick: onClear,
|
|
644
|
+
"aria-label": l.clearSelection,
|
|
645
|
+
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.clear, { testId: "bulk-clear-selection-button" }),
|
|
646
|
+
className: "rounded-full p-0.5 transition-colors hover:bg-foreground/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:p-[15px]",
|
|
647
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-3.5" })
|
|
648
|
+
}
|
|
649
|
+
)
|
|
650
|
+
]
|
|
651
|
+
}
|
|
652
|
+
),
|
|
653
|
+
onReview && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
654
|
+
"button",
|
|
655
|
+
{
|
|
656
|
+
type: "button",
|
|
657
|
+
onClick: onReview,
|
|
658
|
+
"aria-label": isNarrow ? l.review : void 0,
|
|
659
|
+
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.review, { testId: "bulk-review-button" }),
|
|
660
|
+
className: "flex h-8 shrink-0 items-center gap-1.5 rounded-md bg-accent px-2.5 text-sm font-medium text-accent-foreground transition-colors hover:bg-accent/70 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11",
|
|
661
|
+
children: [
|
|
662
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.BookOpen, { className: "size-3.5" }),
|
|
663
|
+
!isNarrow && l.review
|
|
664
|
+
]
|
|
665
|
+
}
|
|
666
|
+
),
|
|
667
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-6 w-px shrink-0 bg-border" }),
|
|
668
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
669
|
+
"div",
|
|
670
|
+
{
|
|
671
|
+
ref: actionsRef,
|
|
672
|
+
className: "flex min-w-0 flex-1 items-center gap-2 overflow-x-auto overscroll-x-contain [scrollbar-width:none]",
|
|
673
|
+
children: [
|
|
674
|
+
status && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center gap-2", children: status }),
|
|
675
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
676
|
+
"div",
|
|
677
|
+
{
|
|
678
|
+
className: ui.cn(
|
|
679
|
+
"flex min-w-0 items-center gap-2",
|
|
680
|
+
!hasSelection && "pointer-events-none opacity-40"
|
|
681
|
+
),
|
|
682
|
+
children: [
|
|
683
|
+
actions?.map((a) => /* @__PURE__ */ jsxRuntime.jsx(SelectionBarAction, { ...a, isCompact }, a.id)),
|
|
684
|
+
typeof children === "function" ? children(isCompact, isNarrow) : children
|
|
685
|
+
]
|
|
686
|
+
}
|
|
687
|
+
)
|
|
688
|
+
]
|
|
689
|
+
}
|
|
690
|
+
)
|
|
691
|
+
] })
|
|
692
|
+
}
|
|
693
|
+
) })
|
|
596
694
|
}
|
|
597
695
|
);
|
|
598
696
|
}
|
|
599
|
-
function
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
viewMode,
|
|
610
|
-
onChange,
|
|
611
|
-
compact,
|
|
612
|
-
labels,
|
|
613
|
-
testIdPrefix,
|
|
614
|
-
testIds,
|
|
615
|
-
compactTestIds
|
|
697
|
+
function SelectionBarAction({
|
|
698
|
+
icon: Icon,
|
|
699
|
+
label,
|
|
700
|
+
onClick,
|
|
701
|
+
disabled = false,
|
|
702
|
+
variant = "ghost",
|
|
703
|
+
tooltip,
|
|
704
|
+
testId,
|
|
705
|
+
className,
|
|
706
|
+
isCompact = false
|
|
616
707
|
}) {
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
"
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
testId: `documents-layout-compact-${option.value}-option`
|
|
640
|
-
}),
|
|
641
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
642
|
-
option.icon,
|
|
643
|
-
option.label
|
|
644
|
-
] })
|
|
645
|
-
},
|
|
646
|
-
option.value
|
|
647
|
-
)) })
|
|
648
|
-
] });
|
|
649
|
-
}
|
|
650
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
651
|
-
ViewToggle,
|
|
652
|
-
{
|
|
653
|
-
options,
|
|
654
|
-
value: viewMode,
|
|
655
|
-
onChange: (v) => onChange(v),
|
|
656
|
-
testIdPrefix: testIdPrefix ?? "documents-layout",
|
|
657
|
-
showLabels: true,
|
|
658
|
-
containerCollapse: true,
|
|
659
|
-
size: "sm"
|
|
660
|
-
}
|
|
661
|
-
);
|
|
708
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
|
|
709
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
710
|
+
ui.Button,
|
|
711
|
+
{
|
|
712
|
+
variant,
|
|
713
|
+
size: "sm",
|
|
714
|
+
onClick,
|
|
715
|
+
disabled,
|
|
716
|
+
"aria-label": isCompact ? label : void 0,
|
|
717
|
+
"data-testid": testId,
|
|
718
|
+
className: ui.cn(
|
|
719
|
+
"h-8 shrink-0 gap-1.5 whitespace-nowrap px-2 disabled:opacity-50 pointer-coarse:h-11",
|
|
720
|
+
className
|
|
721
|
+
),
|
|
722
|
+
children: [
|
|
723
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-4" }),
|
|
724
|
+
!isCompact && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: label })
|
|
725
|
+
]
|
|
726
|
+
}
|
|
727
|
+
) }),
|
|
728
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: tooltip ?? label }) })
|
|
729
|
+
] });
|
|
662
730
|
}
|
|
663
731
|
|
|
664
|
-
exports.
|
|
665
|
-
exports.DocumentViewToggle = DocumentViewToggle;
|
|
732
|
+
exports.DEFAULT_SELECTION_BAR_LABELS = DEFAULT_SELECTION_BAR_LABELS;
|
|
666
733
|
exports.GridView = GridView;
|
|
667
|
-
exports.
|
|
668
|
-
|
|
669
|
-
//# sourceMappingURL=chunk-
|
|
734
|
+
exports.SelectionBar = SelectionBar;
|
|
735
|
+
exports.SelectionBarAction = SelectionBarAction;
|
|
736
|
+
//# sourceMappingURL=chunk-JGZTRLKL.cjs.map
|
|
737
|
+
//# sourceMappingURL=chunk-JGZTRLKL.cjs.map
|