@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.
Files changed (100) hide show
  1. package/dist/agents/index.cjs +369 -171
  2. package/dist/agents/index.js +4 -2
  3. package/dist/agents/tasks/DueDateMenu.d.ts +32 -0
  4. package/dist/agents/tasks/NewThreadDialog.d.ts +53 -0
  5. package/dist/agents/tasks/PersonPill.d.ts +22 -0
  6. package/dist/agents/tasks/PillSelect.d.ts +39 -0
  7. package/dist/agents/tasks/TaskActivityDialog.d.ts +14 -0
  8. package/dist/agents/tasks/TaskActivityTimeline.d.ts +54 -0
  9. package/dist/agents/tasks/TaskComposer.d.ts +6 -106
  10. package/dist/agents/tasks/TaskMoveDialog.d.ts +25 -0
  11. package/dist/agents/tasks/TaskOutputsCell.d.ts +23 -0
  12. package/dist/agents/tasks/TaskPlan.d.ts +4 -2
  13. package/dist/agents/tasks/TaskReviewActions.d.ts +44 -0
  14. package/dist/agents/tasks/TaskRowMenu.d.ts +28 -0
  15. package/dist/agents/tasks/TaskStatusPill.d.ts +24 -0
  16. package/dist/agents/tasks/TaskTable.d.ts +99 -0
  17. package/dist/agents/tasks/TaskThreadChip.d.ts +19 -0
  18. package/dist/agents/tasks/TaskTriggerChip.d.ts +24 -0
  19. package/dist/agents/tasks/TasksChrome.d.ts +17 -17
  20. package/dist/agents/tasks/WorkflowComposer.d.ts +10 -0
  21. package/dist/agents/tasks/WorkflowsTable.d.ts +72 -0
  22. package/dist/agents/tasks/gridWidth.d.ts +11 -0
  23. package/dist/agents/tasks/index.d.ts +23 -7
  24. package/dist/agents/tasks/taskColumns.d.ts +39 -63
  25. package/dist/agents/tasks/taskComposerTypes.d.ts +217 -0
  26. package/dist/agents/tasks/taskLabels.d.ts +27 -10
  27. package/dist/agents/tasks/taskRequest.d.ts +151 -25
  28. package/dist/agents/tasks/taskRows.d.ts +111 -0
  29. package/dist/agents/tasks/taskTableLabels.d.ts +64 -0
  30. package/dist/agents/tasks/workflowColumns.d.ts +23 -0
  31. package/dist/agents/tasks/workflowRows.d.ts +44 -0
  32. package/dist/agents/tasks/workflowTableLabels.d.ts +53 -0
  33. package/dist/agents/workflows/WorkflowConfigDialog.d.ts +5 -0
  34. package/dist/agents/workflows/index.d.ts +1 -0
  35. package/dist/agents/workflows/scopeRender.d.ts +10 -0
  36. package/dist/agents/workflows/types.d.ts +2 -0
  37. package/dist/chat/AssistantModeToggle.d.ts +25 -0
  38. package/dist/chat/MentionMenu.d.ts +52 -0
  39. package/dist/chat/index.cjs +119 -63
  40. package/dist/chat/index.d.ts +4 -0
  41. package/dist/chat/index.js +1 -1
  42. package/dist/chat/mentions.d.ts +64 -0
  43. package/dist/chat/useMentionAutocomplete.d.ts +33 -0
  44. package/dist/{chunk-IMA6I73C.js → chunk-ABSII3ND.js} +336 -4
  45. package/dist/chunk-ABSII3ND.js.map +1 -0
  46. package/dist/{chunk-22T6KHGB.cjs → chunk-C2V6HQKG.cjs} +348 -2
  47. package/dist/chunk-C2V6HQKG.cjs.map +1 -0
  48. package/dist/{chunk-CVFBSUXL.js → chunk-F3F56LOR.js} +4227 -851
  49. package/dist/chunk-F3F56LOR.js.map +1 -0
  50. package/dist/chunk-IC2VHFWR.js +158 -0
  51. package/dist/chunk-IC2VHFWR.js.map +1 -0
  52. package/dist/{chunk-D6XY3C4O.cjs → chunk-JGZTRLKL.cjs} +207 -139
  53. package/dist/chunk-JGZTRLKL.cjs.map +1 -0
  54. package/dist/{chunk-H7OD4CHN.js → chunk-NUPVHEJW.js} +208 -140
  55. package/dist/chunk-NUPVHEJW.js.map +1 -0
  56. package/dist/{chunk-67HGXV4I.cjs → chunk-TP7JJAXZ.cjs} +4280 -855
  57. package/dist/chunk-TP7JJAXZ.cjs.map +1 -0
  58. package/dist/chunk-ZPERNIMP.cjs +162 -0
  59. package/dist/chunk-ZPERNIMP.cjs.map +1 -0
  60. package/dist/connection/ai.d.ts +4 -1
  61. package/dist/facts/FactRowActions.d.ts +5 -1
  62. package/dist/facts/factColumns.d.ts +1 -1
  63. package/dist/facts/index.cjs +19 -10
  64. package/dist/facts/index.cjs.map +1 -1
  65. package/dist/facts/index.js +14 -5
  66. package/dist/facts/index.js.map +1 -1
  67. package/dist/files/GridView.d.ts +5 -0
  68. package/dist/files/index.cjs +18 -18
  69. package/dist/files/index.js +4 -5
  70. package/dist/files/index.js.map +1 -1
  71. package/dist/index.cjs +549 -297
  72. package/dist/index.js +8 -8
  73. package/dist/settings/ConversationSettingsParts.d.ts +5 -1
  74. package/dist/settings/index.cjs +8 -3
  75. package/dist/settings/index.cjs.map +1 -1
  76. package/dist/settings/index.js +8 -3
  77. package/dist/settings/index.js.map +1 -1
  78. package/dist/shell/index.cjs +1 -1
  79. package/dist/shell/index.js +1 -1
  80. package/dist/site/index.cjs +12 -12
  81. package/dist/site/index.js +2 -2
  82. package/dist/studio/index.cjs +1 -1
  83. package/dist/studio/index.js +1 -1
  84. package/dist/workspaces/index.cjs +1 -1
  85. package/dist/workspaces/index.cjs.map +1 -1
  86. package/dist/workspaces/index.js +1 -1
  87. package/dist/workspaces/index.js.map +1 -1
  88. package/package.json +3 -3
  89. package/dist/agents/tasks/LiveRunsBanner.d.ts +0 -26
  90. package/dist/agents/tasks/TaskRowActions.d.ts +0 -43
  91. package/dist/chunk-22T6KHGB.cjs.map +0 -1
  92. package/dist/chunk-67HGXV4I.cjs.map +0 -1
  93. package/dist/chunk-CVFBSUXL.js.map +0 -1
  94. package/dist/chunk-D6XY3C4O.cjs.map +0 -1
  95. package/dist/chunk-H7OD4CHN.js.map +0 -1
  96. package/dist/chunk-IMA6I73C.js.map +0 -1
  97. package/dist/chunk-NUNKSZKU.js +0 -203
  98. package/dist/chunk-NUNKSZKU.js.map +0 -1
  99. package/dist/chunk-V4ISCZJ7.cjs +0 -207
  100. 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 DEFAULT_DOCUMENT_VIEW_TOGGLE_LABELS = {
517
- gallery: "Gallery",
518
- table: "Table",
540
+ var NARROW_BELOW_PX = 480;
541
+ var DEFAULT_SELECTION_BAR_LABELS = {
542
+ selected: "selected",
543
+ clearSelection: "Clear selection",
519
544
  review: "Review",
520
- smartSearch: "Smart Search"
545
+ selectionActions: "Selection actions"
521
546
  };
522
- function ViewToggleItem({
523
- option,
524
- size,
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 ViewToggle({
565
- options,
566
- value,
567
- onChange,
568
- testIdPrefix = "view",
569
- showLabels = false,
570
- hideTooltips = false,
571
- size = "default",
572
- containerCollapse = false,
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 labelClassName = containerCollapse ? "hidden @lg:inline text-sm" : "hidden md:inline text-sm";
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
- ui.ToggleGroup,
611
+ "div",
578
612
  {
579
- variant: "default",
580
- type: "single",
581
- value,
582
- onValueChange: (next) => next && onChange(next),
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
- option,
588
- size,
589
- testIdPrefix,
590
- showLabel: showLabels,
591
- labelClassName,
592
- hideTooltip: hideTooltips
593
- },
594
- option.value
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 documentViewOptions(l) {
600
- return [
601
- // "Gallery" (page-preview grid) reads more conventionally than "Tiles".
602
- { value: "explorer", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileImage, { className: "size-3.5" }), label: l.gallery },
603
- { value: "grid", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Table2, { className: "size-3.5" }), label: l.table },
604
- { value: "navigator", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.BookOpen, { className: "size-3.5" }), label: l.review },
605
- { value: "search", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "size-3.5" }), label: l.smartSearch }
606
- ];
607
- }
608
- function DocumentViewToggle({
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
- const options = documentViewOptions({ ...DEFAULT_DOCUMENT_VIEW_TOGGLE_LABELS, ...labels }).map(
618
- (o) => ({ ...o, testId: testIds?.[o.value] })
619
- );
620
- if (compact) {
621
- const current = options.find((o) => o.value === viewMode) ?? options[0];
622
- return /* @__PURE__ */ jsxRuntime.jsxs(ui.Select, { value: viewMode, onValueChange: (v) => onChange(v), children: [
623
- /* @__PURE__ */ jsxRuntime.jsx(
624
- ui.SelectTrigger,
625
- {
626
- 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",
627
- "aria-label": current.label,
628
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(compactTestIds?.select, {
629
- testId: "documents-layout-compact-select"
630
- }),
631
- children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { children: current.icon })
632
- }
633
- ),
634
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { align: "center", children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
635
- ui.SelectItem,
636
- {
637
- value: option.value,
638
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(compactTestIds?.option?.(option.value), {
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.DEFAULT_DOCUMENT_VIEW_TOGGLE_LABELS = DEFAULT_DOCUMENT_VIEW_TOGGLE_LABELS;
665
- exports.DocumentViewToggle = DocumentViewToggle;
732
+ exports.DEFAULT_SELECTION_BAR_LABELS = DEFAULT_SELECTION_BAR_LABELS;
666
733
  exports.GridView = GridView;
667
- exports.ViewToggle = ViewToggle;
668
- //# sourceMappingURL=chunk-D6XY3C4O.cjs.map
669
- //# sourceMappingURL=chunk-D6XY3C4O.cjs.map
734
+ exports.SelectionBar = SelectionBar;
735
+ exports.SelectionBarAction = SelectionBarAction;
736
+ //# sourceMappingURL=chunk-JGZTRLKL.cjs.map
737
+ //# sourceMappingURL=chunk-JGZTRLKL.cjs.map