@arbidocs/blocks 0.4.71 → 0.4.73
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 +404 -266
- package/dist/agents/index.js +10 -8
- package/dist/agents/tasks/TaskActivityTimeline.d.ts +1 -1
- package/dist/agents/tasks/WorkflowThreadStrip.d.ts +58 -0
- package/dist/agents/tasks/index.d.ts +1 -0
- package/dist/agents/workflows/WorkflowRunner.d.ts +70 -0
- package/dist/agents/workflows/index.d.ts +7 -1
- package/dist/agents/workflows/planSteps.d.ts +28 -0
- package/dist/agents/workflows/run.d.ts +97 -0
- package/dist/agents/workflows/skillMarkdown.d.ts +15 -0
- package/dist/agents/workflows/types.d.ts +109 -0
- package/dist/agents/workflows/useWorkflowPreview.d.ts +14 -0
- package/dist/agents/workflows/useWorkflowView.d.ts +54 -0
- package/dist/agents/workflows/workflow.d.ts +3 -1
- package/dist/calendar/CalendarGrid.d.ts +2 -0
- package/dist/calendar/CalendarList.d.ts +2 -0
- package/dist/calendar/CalendarSettingsForm.d.ts +2 -0
- package/dist/calendar/EventDetails.d.ts +2 -0
- package/dist/calendar/EventEditor.d.ts +2 -0
- package/dist/calendar/MiniMonth.d.ts +2 -0
- package/dist/calendar/RecurrenceEditor.d.ts +13 -0
- package/dist/calendar/RoomFinder.d.ts +2 -0
- package/dist/calendar/SchedulingAssistant.d.ts +2 -0
- package/dist/calendar/ScopeDialog.d.ts +2 -0
- package/dist/calendar/TimeZonePicker.d.ts +2 -0
- package/dist/calendar/colors.d.ts +4 -0
- package/dist/calendar/draft.d.ts +43 -0
- package/dist/calendar/format.d.ts +14 -0
- package/dist/calendar/grid-model.d.ts +24 -0
- package/dist/calendar/index.cjs +4122 -0
- package/dist/calendar/index.cjs.map +1 -0
- package/dist/calendar/index.d.ts +30 -0
- package/dist/calendar/index.js +4043 -0
- package/dist/calendar/index.js.map +1 -0
- package/dist/calendar/labels.d.ts +4 -0
- package/dist/calendar/recurrence-labels.d.ts +22 -0
- package/dist/calendar/recurrence.d.ts +66 -0
- package/dist/calendar/reminders.d.ts +26 -0
- package/dist/calendar/scheduling.d.ts +27 -0
- package/dist/calendar/types.d.ts +605 -0
- package/dist/calendar/ui.d.ts +16 -0
- package/dist/calendar/zone.d.ts +56 -0
- package/dist/chat/index.cjs +123 -123
- package/dist/chat/index.js +3 -3
- package/dist/chunk-2P3T23C7.js +1250 -0
- package/dist/chunk-2P3T23C7.js.map +1 -0
- package/dist/{chunk-XNRGCQPZ.cjs → chunk-3SFFTSOI.cjs} +5 -5
- package/dist/{chunk-XNRGCQPZ.cjs.map → chunk-3SFFTSOI.cjs.map} +1 -1
- package/dist/{chunk-7WM62NMM.cjs → chunk-6OL5S7MJ.cjs} +5 -2
- package/dist/chunk-6OL5S7MJ.cjs.map +1 -0
- package/dist/chunk-7D737FLE.cjs +43 -0
- package/dist/chunk-7D737FLE.cjs.map +1 -0
- package/dist/{chunk-VUEZARW5.cjs → chunk-B3WCKBJ7.cjs} +278 -5
- package/dist/chunk-B3WCKBJ7.cjs.map +1 -0
- package/dist/{chunk-L5UPP2HC.js → chunk-D46ZAPEE.js} +5 -2
- package/dist/chunk-D46ZAPEE.js.map +1 -0
- package/dist/{chunk-LFGJAZ5H.js → chunk-DDF5GPIJ.js} +6 -36
- package/dist/chunk-DDF5GPIJ.js.map +1 -0
- package/dist/chunk-DETZZBG2.cjs +91 -0
- package/dist/chunk-DETZZBG2.cjs.map +1 -0
- package/dist/chunk-EVUEIBNU.js +89 -0
- package/dist/chunk-EVUEIBNU.js.map +1 -0
- package/dist/{chunk-CXWESDIZ.cjs → chunk-F4RUCUXF.cjs} +6 -6
- package/dist/{chunk-CXWESDIZ.cjs.map → chunk-F4RUCUXF.cjs.map} +1 -1
- package/dist/{chunk-DABEWNL2.js → chunk-G5DP27DU.js} +3 -3
- package/dist/{chunk-DABEWNL2.js.map → chunk-G5DP27DU.js.map} +1 -1
- package/dist/{chunk-VZGBCBYB.js → chunk-GJV2G4FC.js} +276 -7
- package/dist/chunk-GJV2G4FC.js.map +1 -0
- package/dist/chunk-GTNUQBXI.cjs +1296 -0
- package/dist/chunk-GTNUQBXI.cjs.map +1 -0
- package/dist/{chunk-7M22KND4.cjs → chunk-IUR565UW.cjs} +303 -530
- package/dist/chunk-IUR565UW.cjs.map +1 -0
- package/dist/{chunk-5DM6VU4L.cjs → chunk-KJ3QEKOJ.cjs} +3 -3
- package/dist/{chunk-5DM6VU4L.cjs.map → chunk-KJ3QEKOJ.cjs.map} +1 -1
- package/dist/{chunk-THO7DZNN.cjs → chunk-MUMH3Z6K.cjs} +20 -15
- package/dist/chunk-MUMH3Z6K.cjs.map +1 -0
- package/dist/{chunk-3TVTG7FK.js → chunk-ORA2XE7U.js} +4 -4
- package/dist/{chunk-3TVTG7FK.js.map → chunk-ORA2XE7U.js.map} +1 -1
- package/dist/{chunk-5HOAOKZL.js → chunk-OYMWV45N.js} +21 -16
- package/dist/chunk-OYMWV45N.js.map +1 -0
- package/dist/{chunk-HLMFU7L2.js → chunk-QDNXEB3T.js} +272 -488
- package/dist/chunk-QDNXEB3T.js.map +1 -0
- package/dist/{chunk-ILGHS6ZV.js → chunk-SB5ZKOYN.js} +3 -3
- package/dist/{chunk-ILGHS6ZV.js.map → chunk-SB5ZKOYN.js.map} +1 -1
- package/dist/{chunk-CPMNAJLF.js → chunk-TX2ZICS7.js} +24 -4
- package/dist/chunk-TX2ZICS7.js.map +1 -0
- package/dist/{chunk-2ZTONLT5.cjs → chunk-ULWRNGGE.cjs} +25 -4
- package/dist/chunk-ULWRNGGE.cjs.map +1 -0
- package/dist/{chunk-BMWZTNZB.js → chunk-VRPRAU3J.js} +3 -3
- package/dist/{chunk-BMWZTNZB.js.map → chunk-VRPRAU3J.js.map} +1 -1
- package/dist/{chunk-LTA2IAQB.cjs → chunk-WOYUXVVQ.cjs} +8 -8
- package/dist/{chunk-LTA2IAQB.cjs.map → chunk-WOYUXVVQ.cjs.map} +1 -1
- package/dist/chunk-XD2M6LIG.js +41 -0
- package/dist/chunk-XD2M6LIG.js.map +1 -0
- package/dist/{chunk-WBDK4PIA.cjs → chunk-Z5VUZ6YD.cjs} +6 -37
- package/dist/chunk-Z5VUZ6YD.cjs.map +1 -0
- package/dist/collaboration/index.cjs +44 -45
- package/dist/collaboration/index.js +2 -3
- package/dist/connect/docx.cjs +2 -2
- package/dist/connect/docx.js +1 -1
- package/dist/connect/index.cjs +370 -48
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +2 -1
- package/dist/connect/index.js +331 -12
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedSettings.d.ts +13 -0
- package/dist/connection/ConnectedWorkflowBuilder.d.ts +44 -0
- package/dist/connection/ConnectedWorkflowRunner.d.ts +27 -0
- package/dist/connection/useWorkflowThread.d.ts +34 -0
- package/dist/document-tools/index.cjs +4 -5
- package/dist/document-tools/index.cjs.map +1 -1
- package/dist/document-tools/index.js +1 -2
- package/dist/document-tools/index.js.map +1 -1
- package/dist/facts/index.cjs +1 -1
- package/dist/facts/index.js +1 -1
- package/dist/files/import/index.d.ts +0 -1
- package/dist/files/index.cjs +31 -169
- package/dist/files/index.cjs.map +1 -1
- package/dist/files/index.js +8 -147
- package/dist/files/index.js.map +1 -1
- package/dist/home/index.cjs +21 -20
- package/dist/home/index.cjs.map +1 -1
- package/dist/home/index.js +3 -2
- package/dist/home/index.js.map +1 -1
- package/dist/index.cjs +680 -542
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +15 -13
- package/dist/index.js.map +1 -1
- package/dist/settings/Billing.d.ts +4 -0
- package/dist/settings/IdentityVerification.d.ts +83 -0
- package/dist/settings/PlanBadge.d.ts +2 -2
- package/dist/settings/PlanCard.d.ts +6 -1
- package/dist/settings/ProfileCard.d.ts +5 -1
- package/dist/settings/SubscriptionParts.d.ts +6 -2
- package/dist/settings/index.cjs +128 -95
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.d.ts +1 -0
- package/dist/settings/index.js +64 -47
- package/dist/settings/index.js.map +1 -1
- package/dist/shell/ActionCluster.d.ts +3 -1
- package/dist/shell/index.cjs +54 -54
- package/dist/shell/index.js +2 -2
- package/dist/studio/index.cjs +6 -6
- package/dist/studio/index.js +4 -4
- package/dist/workflow-canvas/StepInspector.d.ts +46 -0
- package/dist/workflow-canvas/TriggerInspector.d.ts +46 -0
- package/dist/workflow-canvas/WorkflowBuilder.d.ts +55 -0
- package/dist/workflow-canvas/WorkflowCanvas.d.ts +65 -0
- package/dist/workflow-canvas/edit.d.ts +54 -0
- package/dist/workflow-canvas/index.cjs +1609 -0
- package/dist/workflow-canvas/index.cjs.map +1 -0
- package/dist/workflow-canvas/index.d.ts +13 -0
- package/dist/workflow-canvas/index.js +1579 -0
- package/dist/workflow-canvas/index.js.map +1 -0
- package/dist/workflow-canvas/trigger.d.ts +51 -0
- package/dist/workspaces/index.cjs +2 -3
- package/dist/workspaces/index.cjs.map +1 -1
- package/dist/workspaces/index.js +1 -2
- package/dist/workspaces/index.js.map +1 -1
- package/package.json +41 -12
- package/src/calendar/calendar.css +316 -0
- package/src/workflow-canvas/canvas.css +113 -0
- package/dist/chunk-2ZTONLT5.cjs.map +0 -1
- package/dist/chunk-5HOAOKZL.js.map +0 -1
- package/dist/chunk-7M22KND4.cjs.map +0 -1
- package/dist/chunk-7WM62NMM.cjs.map +0 -1
- package/dist/chunk-CPMNAJLF.js.map +0 -1
- package/dist/chunk-DCDVWPMB.cjs +0 -29
- package/dist/chunk-DCDVWPMB.cjs.map +0 -1
- package/dist/chunk-HLMFU7L2.js.map +0 -1
- package/dist/chunk-L5UPP2HC.js.map +0 -1
- package/dist/chunk-LFGJAZ5H.js.map +0 -1
- package/dist/chunk-THO7DZNN.cjs.map +0 -1
- package/dist/chunk-TJMKFY5P.js +0 -27
- package/dist/chunk-TJMKFY5P.js.map +0 -1
- package/dist/chunk-VUEZARW5.cjs.map +0 -1
- package/dist/chunk-VZGBCBYB.js.map +0 -1
- package/dist/chunk-WBDK4PIA.cjs.map +0 -1
- package/dist/files/import/CalendarImportRow.d.ts +0 -26
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var lucideReact = require('lucide-react');
|
|
6
|
+
var ui = require('@arbidocs/react/ui');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
// src/files/UploadDropzone.tsx
|
|
10
|
+
function UploadDropzone({
|
|
11
|
+
onFiles,
|
|
12
|
+
accept,
|
|
13
|
+
multiple = true,
|
|
14
|
+
disabled = false,
|
|
15
|
+
uploading = false,
|
|
16
|
+
title = "Drag files here",
|
|
17
|
+
description = "or click to browse",
|
|
18
|
+
hint,
|
|
19
|
+
uploadingLabel = "Uploading\u2026",
|
|
20
|
+
icon: Icon = lucideReact.UploadCloud,
|
|
21
|
+
testId,
|
|
22
|
+
className
|
|
23
|
+
}) {
|
|
24
|
+
const inputRef = react.useRef(null);
|
|
25
|
+
const [dragOver, setDragOver] = react.useState(false);
|
|
26
|
+
const inert = disabled || uploading;
|
|
27
|
+
const pick = (files) => {
|
|
28
|
+
if (!files?.length) return;
|
|
29
|
+
onFiles(Array.from(files));
|
|
30
|
+
};
|
|
31
|
+
const onDrop = (e) => {
|
|
32
|
+
e.preventDefault();
|
|
33
|
+
setDragOver(false);
|
|
34
|
+
if (inert) return;
|
|
35
|
+
pick(e.dataTransfer.files);
|
|
36
|
+
};
|
|
37
|
+
const onDragOver = (e) => {
|
|
38
|
+
e.preventDefault();
|
|
39
|
+
if (!inert) setDragOver(true);
|
|
40
|
+
};
|
|
41
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
42
|
+
"button",
|
|
43
|
+
{
|
|
44
|
+
type: "button",
|
|
45
|
+
onClick: () => !inert && inputRef.current?.click(),
|
|
46
|
+
onDrop,
|
|
47
|
+
onDragOver,
|
|
48
|
+
onDragLeave: () => setDragOver(false),
|
|
49
|
+
disabled: inert,
|
|
50
|
+
"data-testid": testId,
|
|
51
|
+
className: ui.cn(
|
|
52
|
+
"flex w-full flex-col items-center justify-center gap-3 rounded-lg bg-muted px-6 py-12 text-center transition-colors",
|
|
53
|
+
"hover:bg-accent/60",
|
|
54
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
55
|
+
dragOver && "bg-accent ring-2 ring-primary",
|
|
56
|
+
inert && "cursor-not-allowed opacity-60 hover:bg-muted",
|
|
57
|
+
className
|
|
58
|
+
),
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
61
|
+
"input",
|
|
62
|
+
{
|
|
63
|
+
ref: inputRef,
|
|
64
|
+
type: "file",
|
|
65
|
+
accept,
|
|
66
|
+
multiple,
|
|
67
|
+
className: "hidden",
|
|
68
|
+
onChange: (e) => {
|
|
69
|
+
pick(e.target.files);
|
|
70
|
+
if (inputRef.current) inputRef.current.value = "";
|
|
71
|
+
},
|
|
72
|
+
"data-testid": testId ? `${testId}-input` : void 0
|
|
73
|
+
}
|
|
74
|
+
),
|
|
75
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-primary/10 text-primary", children: uploading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-6 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-6" }) }),
|
|
76
|
+
uploading ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-foreground", children: uploadingLabel }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
77
|
+
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm font-medium text-foreground", children: [
|
|
78
|
+
title,
|
|
79
|
+
" ",
|
|
80
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: description })
|
|
81
|
+
] }),
|
|
82
|
+
hint && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: hint })
|
|
83
|
+
] })
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
exports.UploadDropzone = UploadDropzone;
|
|
90
|
+
//# sourceMappingURL=chunk-DETZZBG2.cjs.map
|
|
91
|
+
//# sourceMappingURL=chunk-DETZZBG2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/files/UploadDropzone.tsx"],"names":["UploadCloud","useRef","useState","jsxs","cn","jsx","Loader2"],"mappings":"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","file":"chunk-DETZZBG2.cjs","sourcesContent":["import { useRef, useState } from 'react'\nimport type { DragEvent } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { Loader2, UploadCloud } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface UploadDropzoneProps {\n /** Called with the chosen/dropped files. */\n onFiles: (files: File[]) => void\n /** `accept` attribute for the file picker (e.g. `.pdf,.docx`). */\n accept?: string\n /** Allow selecting more than one file. Defaults to true. */\n multiple?: boolean\n /** Disables picking/dropping (e.g. no active workspace yet). */\n disabled?: boolean\n /** Shows a spinner + busy copy while an upload is in flight. */\n uploading?: boolean\n /** Primary line, e.g. \"Drag files here\". */\n title?: string\n /** Secondary line under the title. */\n description?: string\n /** Small muted hint, e.g. \"PDF, DOCX, images — up to 50MB\". */\n hint?: string\n /** Copy shown next to the spinner while uploading. */\n uploadingLabel?: string\n /** Glyph in the tile. Defaults to an upload-cloud icon. */\n icon?: LucideIcon\n testId?: string\n className?: string\n}\n\n/**\n * A themeable drag-and-drop upload target. Source-agnostic: it just surfaces\n * chosen files via `onFiles` — the host owns the actual upload. Handles its own\n * drag-over state, click-to-browse, and a busy state, styled with the kit's\n * SEMANTIC tokens only (border, muted, primary, foreground) so it renders in\n * each host's colours.\n */\nexport function UploadDropzone({\n onFiles,\n accept,\n multiple = true,\n disabled = false,\n uploading = false,\n title = 'Drag files here',\n description = 'or click to browse',\n hint,\n uploadingLabel = 'Uploading…',\n icon: Icon = UploadCloud,\n testId,\n className,\n}: UploadDropzoneProps) {\n const inputRef = useRef<HTMLInputElement>(null)\n const [dragOver, setDragOver] = useState(false)\n const inert = disabled || uploading\n\n const pick = (files: FileList | null) => {\n if (!files?.length) return\n onFiles(Array.from(files))\n }\n\n const onDrop = (e: DragEvent<HTMLButtonElement>) => {\n e.preventDefault()\n setDragOver(false)\n if (inert) return\n pick(e.dataTransfer.files)\n }\n\n const onDragOver = (e: DragEvent<HTMLButtonElement>) => {\n e.preventDefault()\n if (!inert) setDragOver(true)\n }\n\n return (\n <button\n type=\"button\"\n onClick={() => !inert && inputRef.current?.click()}\n onDrop={onDrop}\n onDragOver={onDragOver}\n onDragLeave={() => setDragOver(false)}\n disabled={inert}\n data-testid={testId}\n className={cn(\n 'flex w-full flex-col items-center justify-center gap-3 rounded-lg bg-muted px-6 py-12 text-center transition-colors',\n 'hover:bg-accent/60',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n dragOver && 'bg-accent ring-2 ring-primary',\n inert && 'cursor-not-allowed opacity-60 hover:bg-muted',\n className\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n onChange={(e) => {\n pick(e.target.files)\n if (inputRef.current) inputRef.current.value = ''\n }}\n data-testid={testId ? `${testId}-input` : undefined}\n />\n <div className=\"flex size-12 items-center justify-center rounded-full bg-primary/10 text-primary\">\n {uploading ? <Loader2 className=\"size-6 animate-spin\" /> : <Icon className=\"size-6\" />}\n </div>\n {uploading ? (\n <p className=\"text-sm font-medium text-foreground\">{uploadingLabel}</p>\n ) : (\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-foreground\">\n {title} <span className=\"text-muted-foreground\">{description}</span>\n </p>\n {hint && <p className=\"text-xs text-muted-foreground\">{hint}</p>}\n </div>\n )}\n </button>\n )\n}\n"]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useRef, useState } from 'react';
|
|
3
|
+
import { Loader2, UploadCloud } from 'lucide-react';
|
|
4
|
+
import { cn } from '@arbidocs/react/ui';
|
|
5
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
// src/files/UploadDropzone.tsx
|
|
8
|
+
function UploadDropzone({
|
|
9
|
+
onFiles,
|
|
10
|
+
accept,
|
|
11
|
+
multiple = true,
|
|
12
|
+
disabled = false,
|
|
13
|
+
uploading = false,
|
|
14
|
+
title = "Drag files here",
|
|
15
|
+
description = "or click to browse",
|
|
16
|
+
hint,
|
|
17
|
+
uploadingLabel = "Uploading\u2026",
|
|
18
|
+
icon: Icon = UploadCloud,
|
|
19
|
+
testId,
|
|
20
|
+
className
|
|
21
|
+
}) {
|
|
22
|
+
const inputRef = useRef(null);
|
|
23
|
+
const [dragOver, setDragOver] = useState(false);
|
|
24
|
+
const inert = disabled || uploading;
|
|
25
|
+
const pick = (files) => {
|
|
26
|
+
if (!files?.length) return;
|
|
27
|
+
onFiles(Array.from(files));
|
|
28
|
+
};
|
|
29
|
+
const onDrop = (e) => {
|
|
30
|
+
e.preventDefault();
|
|
31
|
+
setDragOver(false);
|
|
32
|
+
if (inert) return;
|
|
33
|
+
pick(e.dataTransfer.files);
|
|
34
|
+
};
|
|
35
|
+
const onDragOver = (e) => {
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
if (!inert) setDragOver(true);
|
|
38
|
+
};
|
|
39
|
+
return /* @__PURE__ */ jsxs(
|
|
40
|
+
"button",
|
|
41
|
+
{
|
|
42
|
+
type: "button",
|
|
43
|
+
onClick: () => !inert && inputRef.current?.click(),
|
|
44
|
+
onDrop,
|
|
45
|
+
onDragOver,
|
|
46
|
+
onDragLeave: () => setDragOver(false),
|
|
47
|
+
disabled: inert,
|
|
48
|
+
"data-testid": testId,
|
|
49
|
+
className: cn(
|
|
50
|
+
"flex w-full flex-col items-center justify-center gap-3 rounded-lg bg-muted px-6 py-12 text-center transition-colors",
|
|
51
|
+
"hover:bg-accent/60",
|
|
52
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
53
|
+
dragOver && "bg-accent ring-2 ring-primary",
|
|
54
|
+
inert && "cursor-not-allowed opacity-60 hover:bg-muted",
|
|
55
|
+
className
|
|
56
|
+
),
|
|
57
|
+
children: [
|
|
58
|
+
/* @__PURE__ */ jsx(
|
|
59
|
+
"input",
|
|
60
|
+
{
|
|
61
|
+
ref: inputRef,
|
|
62
|
+
type: "file",
|
|
63
|
+
accept,
|
|
64
|
+
multiple,
|
|
65
|
+
className: "hidden",
|
|
66
|
+
onChange: (e) => {
|
|
67
|
+
pick(e.target.files);
|
|
68
|
+
if (inputRef.current) inputRef.current.value = "";
|
|
69
|
+
},
|
|
70
|
+
"data-testid": testId ? `${testId}-input` : void 0
|
|
71
|
+
}
|
|
72
|
+
),
|
|
73
|
+
/* @__PURE__ */ jsx("div", { className: "flex size-12 items-center justify-center rounded-full bg-primary/10 text-primary", children: uploading ? /* @__PURE__ */ jsx(Loader2, { className: "size-6 animate-spin" }) : /* @__PURE__ */ jsx(Icon, { className: "size-6" }) }),
|
|
74
|
+
uploading ? /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground", children: uploadingLabel }) : /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
75
|
+
/* @__PURE__ */ jsxs("p", { className: "text-sm font-medium text-foreground", children: [
|
|
76
|
+
title,
|
|
77
|
+
" ",
|
|
78
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: description })
|
|
79
|
+
] }),
|
|
80
|
+
hint && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: hint })
|
|
81
|
+
] })
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export { UploadDropzone };
|
|
88
|
+
//# sourceMappingURL=chunk-EVUEIBNU.js.map
|
|
89
|
+
//# sourceMappingURL=chunk-EVUEIBNU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/files/UploadDropzone.tsx"],"names":[],"mappings":"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","file":"chunk-EVUEIBNU.js","sourcesContent":["import { useRef, useState } from 'react'\nimport type { DragEvent } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { Loader2, UploadCloud } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface UploadDropzoneProps {\n /** Called with the chosen/dropped files. */\n onFiles: (files: File[]) => void\n /** `accept` attribute for the file picker (e.g. `.pdf,.docx`). */\n accept?: string\n /** Allow selecting more than one file. Defaults to true. */\n multiple?: boolean\n /** Disables picking/dropping (e.g. no active workspace yet). */\n disabled?: boolean\n /** Shows a spinner + busy copy while an upload is in flight. */\n uploading?: boolean\n /** Primary line, e.g. \"Drag files here\". */\n title?: string\n /** Secondary line under the title. */\n description?: string\n /** Small muted hint, e.g. \"PDF, DOCX, images — up to 50MB\". */\n hint?: string\n /** Copy shown next to the spinner while uploading. */\n uploadingLabel?: string\n /** Glyph in the tile. Defaults to an upload-cloud icon. */\n icon?: LucideIcon\n testId?: string\n className?: string\n}\n\n/**\n * A themeable drag-and-drop upload target. Source-agnostic: it just surfaces\n * chosen files via `onFiles` — the host owns the actual upload. Handles its own\n * drag-over state, click-to-browse, and a busy state, styled with the kit's\n * SEMANTIC tokens only (border, muted, primary, foreground) so it renders in\n * each host's colours.\n */\nexport function UploadDropzone({\n onFiles,\n accept,\n multiple = true,\n disabled = false,\n uploading = false,\n title = 'Drag files here',\n description = 'or click to browse',\n hint,\n uploadingLabel = 'Uploading…',\n icon: Icon = UploadCloud,\n testId,\n className,\n}: UploadDropzoneProps) {\n const inputRef = useRef<HTMLInputElement>(null)\n const [dragOver, setDragOver] = useState(false)\n const inert = disabled || uploading\n\n const pick = (files: FileList | null) => {\n if (!files?.length) return\n onFiles(Array.from(files))\n }\n\n const onDrop = (e: DragEvent<HTMLButtonElement>) => {\n e.preventDefault()\n setDragOver(false)\n if (inert) return\n pick(e.dataTransfer.files)\n }\n\n const onDragOver = (e: DragEvent<HTMLButtonElement>) => {\n e.preventDefault()\n if (!inert) setDragOver(true)\n }\n\n return (\n <button\n type=\"button\"\n onClick={() => !inert && inputRef.current?.click()}\n onDrop={onDrop}\n onDragOver={onDragOver}\n onDragLeave={() => setDragOver(false)}\n disabled={inert}\n data-testid={testId}\n className={cn(\n 'flex w-full flex-col items-center justify-center gap-3 rounded-lg bg-muted px-6 py-12 text-center transition-colors',\n 'hover:bg-accent/60',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n dragOver && 'bg-accent ring-2 ring-primary',\n inert && 'cursor-not-allowed opacity-60 hover:bg-muted',\n className\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n onChange={(e) => {\n pick(e.target.files)\n if (inputRef.current) inputRef.current.value = ''\n }}\n data-testid={testId ? `${testId}-input` : undefined}\n />\n <div className=\"flex size-12 items-center justify-center rounded-full bg-primary/10 text-primary\">\n {uploading ? <Loader2 className=\"size-6 animate-spin\" /> : <Icon className=\"size-6\" />}\n </div>\n {uploading ? (\n <p className=\"text-sm font-medium text-foreground\">{uploadingLabel}</p>\n ) : (\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-foreground\">\n {title} <span className=\"text-muted-foreground\">{description}</span>\n </p>\n {hint && <p className=\"text-xs text-muted-foreground\">{hint}</p>}\n </div>\n )}\n </button>\n )\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunk7G2LJMUG_cjs = require('./chunk-7G2LJMUG.cjs');
|
|
5
|
-
var
|
|
5
|
+
var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
|
|
6
6
|
var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
|
|
7
7
|
var lucideReact = require('lucide-react');
|
|
8
8
|
var ui = require('@arbidocs/react/ui');
|
|
@@ -283,8 +283,8 @@ var STATUS_ICON = {
|
|
|
283
283
|
};
|
|
284
284
|
function AddContactsResults({ rows, onDone, onAddMore, labels }) {
|
|
285
285
|
const l = react.useMemo(() => ({ ...DEFAULT_ADD_CONTACTS_LABELS, ...labels }), [labels]);
|
|
286
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
287
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
286
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalSection, { children: [
|
|
287
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalSectionTitle, { children: l.results }),
|
|
288
288
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-80 overflow-y-auto rounded-md border", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full", children: [
|
|
289
289
|
/* @__PURE__ */ jsxRuntime.jsx("thead", { className: "sticky top-0 bg-muted/50", children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
290
290
|
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "p-2 text-left font-medium", children: l.email }),
|
|
@@ -705,7 +705,7 @@ function RecipientPicker({
|
|
|
705
705
|
}) {
|
|
706
706
|
const l = react.useMemo(() => ({ ...DEFAULT_RECIPIENT_PICKER_LABELS, ...labels }), [labels]);
|
|
707
707
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b px-6 py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
|
|
708
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
708
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalSectionTitle, { className: "mb-0 shrink-0 py-1.5", children: l.to }),
|
|
709
709
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 flex-col gap-1.5", children: [
|
|
710
710
|
selected.map((recipient) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
711
711
|
"div",
|
|
@@ -1075,5 +1075,5 @@ exports.toAddContactsRow = toAddContactsRow;
|
|
|
1075
1075
|
exports.toAddContactsRows = toAddContactsRows;
|
|
1076
1076
|
exports.toggleMailFolder = toggleMailFolder;
|
|
1077
1077
|
exports.vCardFilename = vCardFilename;
|
|
1078
|
-
//# sourceMappingURL=chunk-
|
|
1079
|
-
//# sourceMappingURL=chunk-
|
|
1078
|
+
//# sourceMappingURL=chunk-F4RUCUXF.cjs.map
|
|
1079
|
+
//# sourceMappingURL=chunk-F4RUCUXF.cjs.map
|