@arbidocs/blocks 0.4.88 → 0.4.90

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 (38) hide show
  1. package/dist/agents/index.cjs +207 -207
  2. package/dist/agents/index.js +2 -2
  3. package/dist/{chunk-2CFW2ELM.cjs → chunk-2EI7NCUA.cjs} +2 -8
  4. package/dist/chunk-2EI7NCUA.cjs.map +1 -0
  5. package/dist/{chunk-UZV27QLC.js → chunk-NQS7NFGM.js} +3 -3
  6. package/dist/{chunk-UZV27QLC.js.map → chunk-NQS7NFGM.js.map} +1 -1
  7. package/dist/{chunk-FNEL2BYV.cjs → chunk-TMKJACMP.cjs} +6 -6
  8. package/dist/{chunk-FNEL2BYV.cjs.map → chunk-TMKJACMP.cjs.map} +1 -1
  9. package/dist/{chunk-ZX2VPMBJ.js → chunk-YU2KUMGE.js} +2 -8
  10. package/dist/chunk-YU2KUMGE.js.map +1 -0
  11. package/dist/connect/index.cjs +52 -10
  12. package/dist/connect/index.cjs.map +1 -1
  13. package/dist/connect/index.js +52 -10
  14. package/dist/connect/index.js.map +1 -1
  15. package/dist/connection/WorkflowRunnerDialogs.d.ts +2 -0
  16. package/dist/facts/FactSourceGroup.d.ts +2 -1
  17. package/dist/facts/index.cjs +6 -6
  18. package/dist/facts/index.cjs.map +1 -1
  19. package/dist/facts/index.js +3 -3
  20. package/dist/facts/index.js.map +1 -1
  21. package/dist/files/cells/LabelMultiSelect.d.ts +11 -3
  22. package/dist/files/index.cjs +19 -13
  23. package/dist/files/index.cjs.map +1 -1
  24. package/dist/files/index.js +18 -12
  25. package/dist/files/index.js.map +1 -1
  26. package/dist/index.cjs +322 -318
  27. package/dist/index.cjs.map +1 -1
  28. package/dist/index.js +49 -45
  29. package/dist/index.js.map +1 -1
  30. package/dist/shell/FilterInput.d.ts +1 -3
  31. package/dist/shell/index.cjs +4 -4
  32. package/dist/shell/index.js +1 -1
  33. package/dist/tags/TagDetail.d.ts +10 -1
  34. package/dist/workflow-canvas/index.cjs +9 -9
  35. package/dist/workflow-canvas/index.js +2 -2
  36. package/package.json +4 -4
  37. package/dist/chunk-2CFW2ELM.cjs.map +0 -1
  38. package/dist/chunk-ZX2VPMBJ.js.map +0 -1
@@ -21,7 +21,6 @@ function FilterInput({
21
21
  hideFieldPicker = false,
22
22
  ariaLabel,
23
23
  onChange,
24
- onSubmit,
25
24
  fields,
26
25
  onFieldsChange,
27
26
  filter,
@@ -53,11 +52,6 @@ function FilterInput({
53
52
  "aria-label": ariaLabel,
54
53
  value,
55
54
  onChange: (e) => onChange(e.target.value),
56
- onKeyDown: onSubmit ? (e) => {
57
- if (e.key !== "Enter") return;
58
- e.preventDefault();
59
- onSubmit(value);
60
- } : void 0,
61
55
  placeholder: l.placeholder,
62
56
  "data-testid": testIdOr(testIds?.input, { testId: "facts-filter-input" }),
63
57
  className: cn(
@@ -131,5 +125,5 @@ function FilterInput({
131
125
  }
132
126
 
133
127
  export { DEFAULT_FILTER_FIELDS, DEFAULT_FILTER_INPUT_LABELS, FilterInput };
134
- //# sourceMappingURL=chunk-ZX2VPMBJ.js.map
135
- //# sourceMappingURL=chunk-ZX2VPMBJ.js.map
128
+ //# sourceMappingURL=chunk-YU2KUMGE.js.map
129
+ //# sourceMappingURL=chunk-YU2KUMGE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shell/FilterInput.tsx"],"names":[],"mappings":"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","file":"chunk-YU2KUMGE.js","sourcesContent":["/** Shared page filter with configurable searchable fields and optional quick-filter control. */\nimport type { ReactNode } from 'react'\nimport { X, Filter, SlidersHorizontal, Check } from 'lucide-react'\nimport {\n Command,\n CommandGroup,\n CommandItem,\n CommandList,\n Input,\n Popover,\n PopoverContent,\n PopoverTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\nexport type FilterField = 'text' | 'labels'\n\nexport const DEFAULT_FILTER_FIELDS: { value: FilterField; label: string }[] = [\n { value: 'text', label: 'Text' },\n { value: 'labels', label: 'Labels' },\n]\n\nexport interface FilterInputLabels<Field extends string = FilterField> {\n placeholder: string\n clear: string\n chooseFields: string\n fieldsHeading: string\n /** Display name per searchable field. */\n fieldNames: Partial<Record<Field, string>>\n}\n\nexport const DEFAULT_FILTER_INPUT_LABELS: FilterInputLabels = {\n placeholder: 'Filter...',\n clear: 'Clear filter',\n chooseFields: 'Choose fields to filter',\n fieldsHeading: 'Filter fields',\n fieldNames: { text: 'Text', labels: 'Labels' },\n}\n\nexport interface FilterInputTestIds<Field extends string = FilterField> {\n root: string\n quick: string\n input: string\n fieldsButton: string\n field: (field: Field) => string\n}\n\nexport interface FilterInputProps<Field extends string = FilterField> {\n fieldOptions?: { value: Field; label: string }[]\n value: string\n /** Lists with one searchable field need no field selector. */\n hideFieldPicker?: boolean\n ariaLabel?: string\n onChange: (q: string) => void\n fields: Field[]\n onFieldsChange: (fields: Field[]) => void\n /**\n * The quick-filter dropdown trigger, embedded inside the input on the left\n * (mirroring the Files search box). When absent, a static funnel icon shows.\n */\n filter?: ReactNode\n /** Width classes for the box (default `w-44`). */\n className?: string\n /** No outline: a soft fill instead of the input border, for a header that is already ruled. */\n borderless?: boolean\n labels?: Partial<FilterInputLabels<Field>>\n testIds?: Partial<FilterInputTestIds<Field>>\n}\n\nexport function FilterInput<Field extends string = FilterField>({\n fieldOptions,\n value,\n hideFieldPicker = false,\n ariaLabel,\n onChange,\n fields,\n onFieldsChange,\n filter,\n className,\n borderless = false,\n labels,\n testIds,\n}: FilterInputProps<Field>) {\n const l = { ...DEFAULT_FILTER_INPUT_LABELS, ...labels }\n const options = fieldOptions ?? (DEFAULT_FILTER_FIELDS as { value: Field; label: string }[])\n const toggleField = (field: Field) =>\n onFieldsChange(fields.includes(field) ? fields.filter((f) => f !== field) : [...fields, field])\n\n return (\n <div\n className={cn('flex min-w-0 items-center', className ?? 'w-44 pointer-coarse:w-56')}\n data-testid={testIdOr(testIds?.root, { testId: 'facts-filter' })}\n >\n <div className=\"relative flex-1 min-w-0\">\n {filter ? (\n <div\n className=\"absolute left-1 top-1/2 z-10 -translate-y-1/2\"\n data-testid={testIdOr(testIds?.quick, { testId: 'facts-filter-quick' })}\n >\n {filter}\n </div>\n ) : (\n <Filter className=\"pointer-events-none absolute left-2 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground\" />\n )}\n <Input\n aria-label={ariaLabel}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={l.placeholder}\n data-testid={testIdOr(testIds?.input, { testId: 'facts-filter-input' })}\n className={cn(\n 'h-7 pr-12 text-sm shadow-none focus-visible:ring-0 pointer-coarse:h-11 pointer-coarse:pr-12',\n // Touch: the 44px clear button only needs its room while there is text to clear, so\n // an empty field keeps space for its placeholder on a phone.\n value && 'pointer-coarse:pr-24',\n borderless\n ? 'border-transparent bg-muted/50 hover:bg-muted focus-visible:bg-muted'\n : 'border-input bg-background',\n filter ? 'pl-11' : 'pl-7',\n hideFieldPicker && 'pr-7 pointer-coarse:pr-11'\n )}\n />\n {value && (\n <button\n type=\"button\"\n onClick={() => onChange('')}\n aria-label={l.clear}\n className={cn(\n 'absolute top-1/2 z-10 -translate-y-1/2 text-muted-foreground hover:text-foreground pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center',\n hideFieldPicker\n ? 'right-1.5 pointer-coarse:right-0'\n : 'right-7 pointer-coarse:right-11'\n )}\n >\n <X className=\"size-3\" />\n </button>\n )}\n {/* Field picker — inside the input on the right, muted, exactly as the\n Files search box renders it. */}\n {!hideFieldPicker && (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n aria-label={l.chooseFields}\n data-testid={testIdOr(testIds?.fieldsButton, {\n testId: 'facts-filter-fields-button',\n })}\n className=\"absolute right-1.5 top-1/2 z-10 -translate-y-1/2 !h-5 !w-5 !p-0 text-muted-foreground/60 transition-colors hover:text-foreground pointer-coarse:right-0 pointer-coarse:!flex pointer-coarse:!h-11 pointer-coarse:!w-11 pointer-coarse:items-center pointer-coarse:justify-center\"\n >\n <SlidersHorizontal className=\"size-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent className=\"w-44 p-0\" align=\"end\" sideOffset={4}>\n <Command shouldFilter={false}>\n <CommandList>\n <CommandGroup heading={l.fieldsHeading}>\n {options.map((option) => {\n const isSelected = fields.includes(option.value)\n return (\n <CommandItem\n key={option.value}\n onSelect={() => toggleField(option.value)}\n className=\"cursor-pointer text-sm\"\n data-testid={testIdOr(testIds?.field?.(option.value), {\n testId: `facts-filter-field-${option.value}`,\n })}\n >\n <div\n className={cn(\n 'mr-2 flex size-3.5 items-center justify-center rounded-sm border border-primary',\n isSelected\n ? 'bg-primary text-primary-foreground'\n : 'opacity-50 [&_svg]:invisible'\n )}\n >\n <Check className=\"size-3\" />\n </div>\n {labels?.fieldNames?.[option.value] ?? option.label}\n </CommandItem>\n )\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )}\n </div>\n </div>\n )\n}\n"]}
@@ -13,7 +13,7 @@ var chunk5XZU64E2_cjs = require('../chunk-5XZU64E2.cjs');
13
13
  var chunkN26CXGXC_cjs = require('../chunk-N26CXGXC.cjs');
14
14
  var chunk7RGLTF76_cjs = require('../chunk-7RGLTF76.cjs');
15
15
  require('../chunk-DETZZBG2.cjs');
16
- var chunk2CFW2ELM_cjs = require('../chunk-2CFW2ELM.cjs');
16
+ var chunk2EI7NCUA_cjs = require('../chunk-2EI7NCUA.cjs');
17
17
  require('../chunk-7D737FLE.cjs');
18
18
  var chunkQVBZESYQ_cjs = require('../chunk-QVBZESYQ.cjs');
19
19
  require('../chunk-ADOKTJHV.cjs');
@@ -558,6 +558,8 @@ var DEFAULT_WORKFLOW_RUNNER_DIALOG_LABELS = {
558
558
  reviewDescription: "Each document against each review column.",
559
559
  document: "Document",
560
560
  empty: "\u2014",
561
+ showMore: "Show more",
562
+ showLess: "Show less",
561
563
  wordTitle: "Tracked changes"
562
564
  };
563
565
  var SIGN_PDF_RETRIES = 4;
@@ -699,18 +701,25 @@ function WorkflowReviewGridDialog({
699
701
  labels.loadingDocument
700
702
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full border-collapse text-sm", children: [
701
703
  /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
702
- /* @__PURE__ */ jsxRuntime.jsx("th", { className: "sticky left-0 border-b border-border bg-card p-2 text-left font-medium", children: labels.document }),
703
- columns.map((c) => /* @__PURE__ */ jsxRuntime.jsx("th", { className: "border-b border-border p-2 text-left font-medium", children: c.name }, c.id))
704
+ /* @__PURE__ */ jsxRuntime.jsx("th", { className: "sticky left-0 z-10 border-b border-border bg-background p-2 text-left align-bottom font-medium", children: labels.document }),
705
+ columns.map((c) => /* @__PURE__ */ jsxRuntime.jsx(
706
+ "th",
707
+ {
708
+ className: "border-b border-border p-2 text-left align-bottom font-medium",
709
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${VALUE_WIDTH} line-clamp-2 break-words`, title: c.name, children: c.name })
710
+ },
711
+ c.id
712
+ ))
704
713
  ] }) }),
705
714
  /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: (docs.data ?? []).map((d) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { "data-testid": `workflow-review-grid-row-${d.external_id}`, children: [
706
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "sticky left-0 max-w-56 border-b border-border bg-card p-2 align-top", children: /* @__PURE__ */ jsxRuntime.jsx(Cell, { onClick: onOpenDocument && (() => onOpenDocument(d.external_id)), children: d.file_name ?? d.external_id }) }),
715
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "sticky left-0 z-10 border-b border-border bg-background p-2 align-top", children: /* @__PURE__ */ jsxRuntime.jsx(DocumentName, { onClick: onOpenDocument && (() => onOpenDocument(d.external_id)), children: d.file_name ?? d.external_id }) }),
707
716
  columns.map((c) => {
708
717
  const note = d.doctags?.find((t) => t.tag_ext_id === c.id)?.note;
709
718
  return /* @__PURE__ */ jsxRuntime.jsx(
710
719
  "td",
711
720
  {
712
- className: "max-w-72 border-b border-border p-2 align-top text-muted-foreground",
713
- children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-4 whitespace-pre-line", children: note || labels.empty })
721
+ className: "border-b border-border p-2 align-top text-muted-foreground",
722
+ children: /* @__PURE__ */ jsxRuntime.jsx(ReviewValue, { value: note || labels.empty, labels })
714
723
  },
715
724
  c.id
716
725
  );
@@ -720,16 +729,49 @@ function WorkflowReviewGridDialog({
720
729
  }
721
730
  );
722
731
  }
723
- function Cell({ onClick, children }) {
732
+ var DOCUMENT_WIDTH = "w-40 sm:w-56";
733
+ var VALUE_WIDTH = "min-w-48 max-w-80";
734
+ function DocumentName({ onClick, children }) {
735
+ const className = `${DOCUMENT_WIDTH} line-clamp-2 break-words text-left font-medium`;
724
736
  return onClick ? /* @__PURE__ */ jsxRuntime.jsx(
725
737
  "button",
726
738
  {
727
739
  type: "button",
728
740
  onClick,
729
- className: "truncate text-left font-medium text-primary hover:underline",
741
+ title: children,
742
+ className: `${className} text-primary hover:underline`,
730
743
  children
731
744
  }
732
- ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate font-medium", children });
745
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { title: children, className, children });
746
+ }
747
+ function ReviewValue({ value, labels }) {
748
+ const ref = react.useRef(null);
749
+ const [expanded, setExpanded] = react.useState(false);
750
+ const [clamped, setClamped] = react.useState(false);
751
+ react.useLayoutEffect(() => {
752
+ const el = ref.current;
753
+ if (el && !expanded) setClamped(el.scrollHeight > el.clientHeight + 1);
754
+ }, [value, expanded]);
755
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: VALUE_WIDTH, children: [
756
+ /* @__PURE__ */ jsxRuntime.jsx(
757
+ "div",
758
+ {
759
+ ref,
760
+ title: clamped && !expanded ? value : void 0,
761
+ className: `whitespace-pre-line break-words ${expanded ? "" : "line-clamp-4"}`,
762
+ children: value
763
+ }
764
+ ),
765
+ (clamped || expanded) && /* @__PURE__ */ jsxRuntime.jsx(
766
+ "button",
767
+ {
768
+ type: "button",
769
+ onClick: () => setExpanded((e) => !e),
770
+ className: "mt-1 text-xs font-medium text-primary hover:underline",
771
+ children: expanded ? labels.showLess : labels.showMore
772
+ }
773
+ )
774
+ ] });
733
775
  }
734
776
  var DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS = {
735
777
  notify: "Ask to approve",
@@ -2985,7 +3027,7 @@ function ConnectedMailbox({
2985
3027
  compactBreakpoint: 360,
2986
3028
  firstTabContent: account ? /* @__PURE__ */ jsxRuntime.jsxs(chunkO4YPVYPO_cjs.FilesFilterBar, { children: [
2987
3029
  /* @__PURE__ */ jsxRuntime.jsx(
2988
- chunk2CFW2ELM_cjs.FilterInput,
3030
+ chunk2EI7NCUA_cjs.FilterInput,
2989
3031
  {
2990
3032
  value: query,
2991
3033
  onChange: (q) => {