@arbidocs/blocks 0.4.70 → 0.4.72
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/README.md +90 -14
- package/bin/arbidocs-copy-pdf-assets.mjs +112 -0
- package/dist/{StreamedArtifactEditor-OPL4KXOT.js → StreamedArtifactEditor-HTNPG4NB.js} +3 -2
- package/dist/StreamedArtifactEditor-HTNPG4NB.js.map +1 -0
- package/dist/{StreamedArtifactEditor-RIKG6CJQ.cjs → StreamedArtifactEditor-IZWYNFMM.cjs} +3 -2
- package/dist/StreamedArtifactEditor-IZWYNFMM.cjs.map +1 -0
- package/dist/agents/index.cjs +224 -224
- package/dist/agents/index.js +8 -8
- package/dist/artifacts/editor/index.cjs +1 -0
- package/dist/artifacts/editor/index.js +1 -0
- package/dist/artifacts/index.cjs +1 -0
- package/dist/artifacts/index.js +1 -0
- package/dist/auth/index.cjs +1 -0
- package/dist/auth/index.js +1 -0
- 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 +124 -123
- package/dist/chat/index.js +4 -3
- 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-EHXSBH6U.js → chunk-5HOAOKZL.js} +4 -2
- package/dist/chunk-5HOAOKZL.js.map +1 -0
- package/dist/{chunk-7WM62NMM.cjs → chunk-6OL5S7MJ.cjs} +5 -2
- package/dist/chunk-6OL5S7MJ.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-DES3K4SD.cjs +18 -0
- package/dist/chunk-DES3K4SD.cjs.map +1 -0
- package/dist/{chunk-7M22KND4.cjs → chunk-DH7C2UJO.cjs} +10 -10
- package/dist/{chunk-7M22KND4.cjs.map → chunk-DH7C2UJO.cjs.map} +1 -1
- 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-BR2CPKFU.cjs → chunk-G5QTGKDJ.cjs} +8 -8
- package/dist/{chunk-BR2CPKFU.cjs.map → chunk-G5QTGKDJ.cjs.map} +1 -1
- package/dist/{chunk-VZGBCBYB.js → chunk-GJV2G4FC.js} +276 -7
- package/dist/chunk-GJV2G4FC.js.map +1 -0
- package/dist/{chunk-HLMFU7L2.js → chunk-IMC2Z32C.js} +8 -8
- package/dist/{chunk-HLMFU7L2.js.map → chunk-IMC2Z32C.js.map} +1 -1
- 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-CW4WXGEN.js → chunk-KOXUBCLL.js} +4 -4
- package/dist/{chunk-CW4WXGEN.js.map → chunk-KOXUBCLL.js.map} +1 -1
- 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-TLQQV7WW.cjs → chunk-THO7DZNN.cjs} +4 -2
- package/dist/chunk-THO7DZNN.cjs.map +1 -0
- 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-VUNV25KB.js +15 -0
- package/dist/chunk-VUNV25KB.js.map +1 -0
- package/dist/citations/index.cjs +1 -0
- package/dist/citations/index.js +1 -0
- package/dist/collaboration/index.cjs +45 -45
- package/dist/collaboration/index.js +3 -3
- package/dist/connect/docx.cjs +3 -2
- package/dist/connect/docx.cjs.map +1 -1
- package/dist/connect/docx.js +2 -1
- package/dist/connect/docx.js.map +1 -1
- package/dist/connect/index.cjs +79 -49
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +1 -1
- package/dist/connect/index.js +39 -11
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedSettings.d.ts +13 -0
- package/dist/connection/ConnectionProvider.d.ts +5 -0
- package/dist/connection/types.d.ts +6 -0
- package/dist/document-tools/SignatureStatus.d.ts +4 -2
- package/dist/document-tools/index.cjs +14 -11
- package/dist/document-tools/index.cjs.map +1 -1
- package/dist/document-tools/index.js +12 -9
- package/dist/document-tools/index.js.map +1 -1
- package/dist/document-tools/production/ProductionSetDialog.d.ts +23 -0
- package/dist/document-tools/production/index.cjs +102 -0
- package/dist/document-tools/production/index.cjs.map +1 -0
- package/dist/document-tools/production/index.d.ts +1 -0
- package/dist/document-tools/production/index.js +100 -0
- package/dist/document-tools/production/index.js.map +1 -0
- package/dist/document-tools/viewer/index.cjs +1 -1
- package/dist/document-tools/viewer/index.js +1 -1
- package/dist/docx/index.cjs +1 -0
- package/dist/docx/index.cjs.map +1 -1
- package/dist/docx/index.js +1 -0
- package/dist/docx/index.js.map +1 -1
- package/dist/facts/index.cjs +3 -2
- package/dist/facts/index.cjs.map +1 -1
- package/dist/facts/index.js +3 -2
- package/dist/facts/index.js.map +1 -1
- package/dist/files/import/index.d.ts +0 -1
- package/dist/files/index.cjs +25 -88
- package/dist/files/index.cjs.map +1 -1
- package/dist/files/index.js +7 -68
- package/dist/files/index.js.map +1 -1
- package/dist/home/index.cjs +2 -1
- package/dist/home/index.cjs.map +1 -1
- package/dist/home/index.js +2 -1
- package/dist/home/index.js.map +1 -1
- package/dist/index.cjs +537 -537
- package/dist/index.js +14 -14
- package/dist/lib-6QPUXAQS.cjs +9674 -0
- package/dist/lib-6QPUXAQS.cjs.map +1 -0
- package/dist/lib-NRGL2JGF.js +9672 -0
- package/dist/lib-NRGL2JGF.js.map +1 -0
- package/dist/retrieval/index.cjs +1 -0
- package/dist/retrieval/index.js +1 -0
- 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 +129 -95
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.d.ts +1 -0
- package/dist/settings/index.js +65 -47
- package/dist/settings/index.js.map +1 -1
- package/dist/shell/ActionCluster.d.ts +3 -1
- package/dist/shell/index.cjs +56 -55
- package/dist/shell/index.js +4 -3
- package/dist/site/index.cjs +1 -0
- package/dist/site/index.js +1 -0
- package/dist/studio/index.cjs +8 -7
- package/dist/studio/index.cjs.map +1 -1
- package/dist/studio/index.js +6 -5
- package/dist/studio/index.js.map +1 -1
- package/dist/timeline/index.cjs +1 -0
- package/dist/timeline/index.js +1 -0
- package/dist/workspaces/index.cjs +3 -3
- package/dist/workspaces/index.js +2 -2
- package/package.json +35 -5
- package/src/calendar/calendar.css +316 -0
- package/dist/StreamedArtifactEditor-OPL4KXOT.js.map +0 -1
- package/dist/StreamedArtifactEditor-RIKG6CJQ.cjs.map +0 -1
- package/dist/chunk-2ZTONLT5.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-EHXSBH6U.js.map +0 -1
- package/dist/chunk-L5UPP2HC.js.map +0 -1
- package/dist/chunk-TJMKFY5P.js +0 -27
- package/dist/chunk-TJMKFY5P.js.map +0 -1
- package/dist/chunk-TLQQV7WW.cjs.map +0 -1
- package/dist/chunk-VUEZARW5.cjs.map +0 -1
- package/dist/chunk-VZGBCBYB.js.map +0 -1
- package/dist/files/import/CalendarImportRow.d.ts +0 -26
package/dist/timeline/index.cjs
CHANGED
package/dist/timeline/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
export { Timeline } from '../chunk-OVEQERPO.js';
|
|
3
3
|
export { TIMELINE_ZOOM, TimelineCalendar, TimelineGantt, TimelineZoomControl, dayKey, formatSpan, monthLabel, parseIso, utcDay } from '../chunk-4EZVCGRL.js';
|
|
4
|
+
import '../chunk-VUNV25KB.js';
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -7,8 +7,8 @@ var chunkOB5F4577_cjs = require('../chunk-OB5F4577.cjs');
|
|
|
7
7
|
require('../chunk-C54XEN5T.cjs');
|
|
8
8
|
var chunkKDG6FER6_cjs = require('../chunk-KDG6FER6.cjs');
|
|
9
9
|
var chunk7G2LJMUG_cjs = require('../chunk-7G2LJMUG.cjs');
|
|
10
|
-
var
|
|
11
|
-
require('../chunk-
|
|
10
|
+
var chunkULWRNGGE_cjs = require('../chunk-ULWRNGGE.cjs');
|
|
11
|
+
require('../chunk-DES3K4SD.cjs');
|
|
12
12
|
var react = require('react');
|
|
13
13
|
var lucideReact = require('lucide-react');
|
|
14
14
|
var ui = require('@arbidocs/react/ui');
|
|
@@ -544,7 +544,7 @@ function WorkspaceFormModal({
|
|
|
544
544
|
className: "flex max-h-panel w-modal max-w-modal-vw flex-col overflow-hidden p-0",
|
|
545
545
|
"data-testid": testId,
|
|
546
546
|
children: [
|
|
547
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
547
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(ModalTitleRow, { icon, title, description }) }),
|
|
548
548
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-h-0 flex-1 overflow-auto px-6 pb-6", children: [
|
|
549
549
|
intro && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "pb-4 text-sm text-muted-foreground", children: intro }),
|
|
550
550
|
children
|
package/dist/workspaces/index.js
CHANGED
|
@@ -5,8 +5,8 @@ import { ActionLink } from '../chunk-S7PSMMRG.js';
|
|
|
5
5
|
import '../chunk-76JDDMSP.js';
|
|
6
6
|
import { fromNow, fmtDate } from '../chunk-OXF2IFXG.js';
|
|
7
7
|
export { RoleBadge, WorkspaceTypeBadgeView } from '../chunk-NBV56SGU.js';
|
|
8
|
-
import { ModalHeader } from '../chunk-
|
|
9
|
-
import '../chunk-
|
|
8
|
+
import { ModalHeader } from '../chunk-TX2ZICS7.js';
|
|
9
|
+
import '../chunk-VUNV25KB.js';
|
|
10
10
|
import { createContext, useContext, useMemo, useState, useCallback, useId } from 'react';
|
|
11
11
|
import { FileText, MessagesSquare, Users, Check, ChevronRight, UserPlus, LogOut, AlertCircle, Plus, ArrowUpRight, AlignLeft, Globe, CreditCard, Loader2, FolderLock } from 'lucide-react';
|
|
12
12
|
import { cn, Popover, PopoverTrigger, PopoverContent, Button, Dialog, DialogContent, DialogTitle, DialogDescription, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, SelectSeparator, Input } from '@arbidocs/react/ui';
|
package/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arbidocs/blocks",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.72",
|
|
4
4
|
"description": "Composable, domain-neutral UI blocks for ARBI apps, organised by capability (retrieval, facts, agents, workspaces, citations, collaboration) plus shell, theme and site primitives, on top of @arbidocs/react.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
7
7
|
"module": "dist/index.js",
|
|
8
8
|
"types": "dist/index.d.ts",
|
|
9
|
+
"bin": {
|
|
10
|
+
"arbidocs-copy-pdf-assets": "./bin/arbidocs-copy-pdf-assets.mjs"
|
|
11
|
+
},
|
|
9
12
|
"exports": {
|
|
10
13
|
".": {
|
|
11
14
|
"types": "./dist/index.d.ts",
|
|
@@ -87,6 +90,12 @@
|
|
|
87
90
|
"import": "./dist/timeline/index.js",
|
|
88
91
|
"require": "./dist/timeline/index.cjs"
|
|
89
92
|
},
|
|
93
|
+
"./calendar": {
|
|
94
|
+
"types": "./dist/calendar/index.d.ts",
|
|
95
|
+
"import": "./dist/calendar/index.js",
|
|
96
|
+
"require": "./dist/calendar/index.cjs"
|
|
97
|
+
},
|
|
98
|
+
"./calendar.css": "./src/calendar/calendar.css",
|
|
90
99
|
"./studio": {
|
|
91
100
|
"types": "./dist/studio/index.d.ts",
|
|
92
101
|
"import": "./dist/studio/index.js",
|
|
@@ -133,6 +142,11 @@
|
|
|
133
142
|
"types": "./dist/document-tools/viewer/index.d.ts",
|
|
134
143
|
"import": "./dist/document-tools/viewer/index.js",
|
|
135
144
|
"require": "./dist/document-tools/viewer/index.cjs"
|
|
145
|
+
},
|
|
146
|
+
"./document-tools/production": {
|
|
147
|
+
"types": "./dist/document-tools/production/index.d.ts",
|
|
148
|
+
"import": "./dist/document-tools/production/index.js",
|
|
149
|
+
"require": "./dist/document-tools/production/index.cjs"
|
|
136
150
|
}
|
|
137
151
|
},
|
|
138
152
|
"typesVersions": {
|
|
@@ -182,6 +196,9 @@
|
|
|
182
196
|
"timeline": [
|
|
183
197
|
"./dist/timeline/index.d.ts"
|
|
184
198
|
],
|
|
199
|
+
"calendar": [
|
|
200
|
+
"./dist/calendar/index.d.ts"
|
|
201
|
+
],
|
|
185
202
|
"studio": [
|
|
186
203
|
"./dist/studio/index.d.ts"
|
|
187
204
|
],
|
|
@@ -205,10 +222,14 @@
|
|
|
205
222
|
],
|
|
206
223
|
"document-tools/viewer": [
|
|
207
224
|
"./dist/document-tools/viewer/index.d.ts"
|
|
225
|
+
],
|
|
226
|
+
"document-tools/production": [
|
|
227
|
+
"./dist/document-tools/production/index.d.ts"
|
|
208
228
|
]
|
|
209
229
|
}
|
|
210
230
|
},
|
|
211
231
|
"files": [
|
|
232
|
+
"bin",
|
|
212
233
|
"dist",
|
|
213
234
|
"src/tokens.css",
|
|
214
235
|
"src/blocks.css",
|
|
@@ -216,7 +237,8 @@
|
|
|
216
237
|
"src/components/grid.css",
|
|
217
238
|
"src/source.css",
|
|
218
239
|
"src/docx/styles.css",
|
|
219
|
-
"src/docx/README.md"
|
|
240
|
+
"src/docx/README.md",
|
|
241
|
+
"src/calendar/calendar.css"
|
|
220
242
|
],
|
|
221
243
|
"scripts": {
|
|
222
244
|
"build": "rm -rf dist && tsup && tsc -p tsconfig.build.json",
|
|
@@ -229,8 +251,16 @@
|
|
|
229
251
|
"example:test:e2e": "playwright test -c examples/custom-ui/playwright.config.ts"
|
|
230
252
|
},
|
|
231
253
|
"dependencies": {
|
|
232
|
-
"@arbidocs/client": "0.4.
|
|
254
|
+
"@arbidocs/client": "0.4.72",
|
|
233
255
|
"@dnd-kit/core": "^6.3.1",
|
|
256
|
+
"@fullcalendar/core": "6.1.21",
|
|
257
|
+
"@fullcalendar/daygrid": "6.1.21",
|
|
258
|
+
"@fullcalendar/interaction": "6.1.21",
|
|
259
|
+
"@fullcalendar/list": "6.1.21",
|
|
260
|
+
"@fullcalendar/multimonth": "6.1.21",
|
|
261
|
+
"@fullcalendar/react": "6.1.21",
|
|
262
|
+
"@fullcalendar/timegrid": "6.1.21",
|
|
263
|
+
"temporal-polyfill": "1.0.5",
|
|
234
264
|
"@dnd-kit/sortable": "^10.0.0",
|
|
235
265
|
"@dnd-kit/utilities": "^3.2.2",
|
|
236
266
|
"@radix-ui/react-radio-group": "^1.4.1",
|
|
@@ -244,10 +274,10 @@
|
|
|
244
274
|
"zustand": "^5.0.14",
|
|
245
275
|
"fflate": "^0.8.2",
|
|
246
276
|
"@hocuspocus/provider": "4.6.0",
|
|
247
|
-
"@arbidocs/coedit": "0.4.
|
|
277
|
+
"@arbidocs/coedit": "0.4.72"
|
|
248
278
|
},
|
|
249
279
|
"peerDependencies": {
|
|
250
|
-
"@arbidocs/react": "0.4.
|
|
280
|
+
"@arbidocs/react": "0.4.72",
|
|
251
281
|
"@mdxeditor/editor": "^4.0.4",
|
|
252
282
|
"@measured/puck": ">=0.20",
|
|
253
283
|
"@playwright/test": ">=1.40",
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @arbidocs/blocks/calendar.css — theme for the calendar block (FullCalendar v6 on ARBI tokens).
|
|
3
|
+
* Import once from the app stylesheet: `@import '@arbidocs/blocks/calendar.css';`.
|
|
4
|
+
* FullCalendar v6 injects its own structural CSS at runtime; this file only re-skins it through
|
|
5
|
+
* its `--fc-*` variables and styles the block's own event content. Plain CSS on the HSL triplet
|
|
6
|
+
* tokens, so light and dark themes follow automatically.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
.arbi-calendar {
|
|
10
|
+
--fc-border-color: hsl(var(--border));
|
|
11
|
+
--fc-page-bg-color: hsl(var(--background));
|
|
12
|
+
--fc-neutral-bg-color: hsl(var(--muted) / 0.6);
|
|
13
|
+
--fc-neutral-text-color: hsl(var(--muted-foreground));
|
|
14
|
+
--fc-today-bg-color: hsl(var(--primary) / 0.05);
|
|
15
|
+
--fc-now-indicator-color: hsl(var(--destructive));
|
|
16
|
+
--fc-non-business-color: hsl(var(--muted) / 0.55);
|
|
17
|
+
--fc-highlight-color: hsl(var(--primary) / 0.12);
|
|
18
|
+
--fc-list-event-hover-bg-color: hsl(var(--muted));
|
|
19
|
+
--fc-event-selected-overlay-color: hsl(var(--foreground) / 0.12);
|
|
20
|
+
--fc-small-font-size: 0.75rem;
|
|
21
|
+
color: hsl(var(--foreground));
|
|
22
|
+
font-size: 0.8125rem;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.arbi-calendar .fc {
|
|
26
|
+
height: 100%;
|
|
27
|
+
}
|
|
28
|
+
.arbi-calendar .fc-scrollgrid {
|
|
29
|
+
border-radius: 0.5rem;
|
|
30
|
+
overflow: hidden;
|
|
31
|
+
}
|
|
32
|
+
.arbi-calendar .fc a {
|
|
33
|
+
color: inherit;
|
|
34
|
+
text-decoration: none;
|
|
35
|
+
}
|
|
36
|
+
.arbi-calendar .fc .fc-col-header-cell {
|
|
37
|
+
font-weight: 500;
|
|
38
|
+
color: hsl(var(--muted-foreground));
|
|
39
|
+
}
|
|
40
|
+
.arbi-calendar .fc .fc-col-header-cell-cushion {
|
|
41
|
+
padding: 4px 2px;
|
|
42
|
+
}
|
|
43
|
+
.arbi-calendar .fc .fc-timegrid-slot {
|
|
44
|
+
height: 2.5em;
|
|
45
|
+
}
|
|
46
|
+
.arbi-calendar .fc .fc-timegrid-slot-minor {
|
|
47
|
+
border-top-style: dotted;
|
|
48
|
+
}
|
|
49
|
+
.arbi-calendar .fc .fc-timegrid-slot-label,
|
|
50
|
+
.arbi-calendar .fc .fc-timegrid-axis {
|
|
51
|
+
color: hsl(var(--muted-foreground));
|
|
52
|
+
font-size: 0.6875rem;
|
|
53
|
+
}
|
|
54
|
+
.arbi-calendar .fc .fc-timegrid-slot-label-cushion {
|
|
55
|
+
padding: 0 6px;
|
|
56
|
+
}
|
|
57
|
+
.arbi-calendar .fc .fc-daygrid-day-number {
|
|
58
|
+
font-size: 0.75rem;
|
|
59
|
+
padding: 4px 6px;
|
|
60
|
+
}
|
|
61
|
+
.arbi-calendar .fc .fc-day-today .fc-daygrid-day-number {
|
|
62
|
+
background: hsl(var(--primary));
|
|
63
|
+
color: hsl(var(--primary-foreground));
|
|
64
|
+
border-radius: 9999px;
|
|
65
|
+
min-width: 1.5rem;
|
|
66
|
+
text-align: center;
|
|
67
|
+
margin: 2px;
|
|
68
|
+
padding: 2px 6px;
|
|
69
|
+
}
|
|
70
|
+
.arbi-calendar .fc .fc-daygrid-week-number,
|
|
71
|
+
.arbi-calendar .fc .fc-timegrid-axis-cushion {
|
|
72
|
+
color: hsl(var(--muted-foreground));
|
|
73
|
+
background: transparent;
|
|
74
|
+
font-size: 0.6875rem;
|
|
75
|
+
}
|
|
76
|
+
.arbi-calendar .fc .fc-timegrid-now-indicator-line {
|
|
77
|
+
border-width: 2px 0 0;
|
|
78
|
+
}
|
|
79
|
+
.arbi-calendar .fc .fc-list-day-cushion {
|
|
80
|
+
background: hsl(var(--muted) / 0.6);
|
|
81
|
+
}
|
|
82
|
+
.arbi-calendar .fc .fc-multimonth {
|
|
83
|
+
border: 0;
|
|
84
|
+
}
|
|
85
|
+
.arbi-calendar .fc .fc-multimonth-title {
|
|
86
|
+
font-size: 0.9375rem;
|
|
87
|
+
font-weight: 600;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* Day header in time grids: weekday over a big day number; today in a primary circle. */
|
|
91
|
+
.arbi-cal-dayhead {
|
|
92
|
+
display: flex;
|
|
93
|
+
flex-direction: column;
|
|
94
|
+
align-items: center;
|
|
95
|
+
line-height: 1.1;
|
|
96
|
+
}
|
|
97
|
+
.arbi-cal-dayhead-dow {
|
|
98
|
+
font-size: 0.6875rem;
|
|
99
|
+
text-transform: uppercase;
|
|
100
|
+
letter-spacing: 0.04em;
|
|
101
|
+
}
|
|
102
|
+
.arbi-cal-dayhead-num {
|
|
103
|
+
font-size: 1.25rem;
|
|
104
|
+
font-weight: 500;
|
|
105
|
+
color: hsl(var(--foreground));
|
|
106
|
+
min-width: 2rem;
|
|
107
|
+
height: 2rem;
|
|
108
|
+
display: inline-flex;
|
|
109
|
+
align-items: center;
|
|
110
|
+
justify-content: center;
|
|
111
|
+
border-radius: 9999px;
|
|
112
|
+
}
|
|
113
|
+
.arbi-cal-dayhead-today .arbi-cal-dayhead-dow {
|
|
114
|
+
color: hsl(var(--primary));
|
|
115
|
+
}
|
|
116
|
+
.arbi-cal-dayhead-today .arbi-cal-dayhead-num {
|
|
117
|
+
background: hsl(var(--primary));
|
|
118
|
+
color: hsl(var(--primary-foreground));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* Secondary time zone: two label columns in the time axis. */
|
|
122
|
+
.arbi-cal-slot-labels {
|
|
123
|
+
display: flex;
|
|
124
|
+
gap: 0.5rem;
|
|
125
|
+
justify-content: flex-end;
|
|
126
|
+
white-space: nowrap;
|
|
127
|
+
}
|
|
128
|
+
.arbi-cal-slot-secondary {
|
|
129
|
+
color: hsl(var(--muted-foreground) / 0.75);
|
|
130
|
+
min-width: 2.75em;
|
|
131
|
+
text-align: right;
|
|
132
|
+
}
|
|
133
|
+
.arbi-cal-slot-primary {
|
|
134
|
+
min-width: 2.75em;
|
|
135
|
+
text-align: right;
|
|
136
|
+
}
|
|
137
|
+
.arbi-cal-zone-labels {
|
|
138
|
+
font-size: 0.625rem;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* ── events ─────────────────────────────────────────────────────────────────── */
|
|
142
|
+
|
|
143
|
+
.arbi-calendar .fc .arbi-cal-event {
|
|
144
|
+
border-radius: 4px;
|
|
145
|
+
box-shadow: none;
|
|
146
|
+
background: transparent;
|
|
147
|
+
}
|
|
148
|
+
.arbi-calendar .fc-timegrid-event.arbi-cal-event,
|
|
149
|
+
.arbi-calendar .fc-daygrid-block-event.arbi-cal-event {
|
|
150
|
+
border-width: 0;
|
|
151
|
+
}
|
|
152
|
+
.arbi-calendar .fc .arbi-cal-event .fc-event-main {
|
|
153
|
+
padding: 0;
|
|
154
|
+
color: inherit;
|
|
155
|
+
}
|
|
156
|
+
.arbi-calendar .fc-timegrid-event-harness-inset .fc-timegrid-event {
|
|
157
|
+
box-shadow: 0 0 0 1px hsl(var(--background));
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.arbi-cal-event-inner {
|
|
161
|
+
height: 100%;
|
|
162
|
+
overflow: hidden;
|
|
163
|
+
padding: 2px 4px;
|
|
164
|
+
border-radius: 4px;
|
|
165
|
+
background: var(--arbi-cal-color);
|
|
166
|
+
color: var(--arbi-cal-fg);
|
|
167
|
+
border-left: 3px solid color-mix(in srgb, var(--arbi-cal-color) 70%, black);
|
|
168
|
+
font-size: 0.75rem;
|
|
169
|
+
line-height: 1.25;
|
|
170
|
+
}
|
|
171
|
+
.arbi-cal-event-line {
|
|
172
|
+
display: flex;
|
|
173
|
+
align-items: center;
|
|
174
|
+
gap: 3px;
|
|
175
|
+
min-width: 0;
|
|
176
|
+
}
|
|
177
|
+
.arbi-cal-title {
|
|
178
|
+
font-weight: 500;
|
|
179
|
+
overflow: hidden;
|
|
180
|
+
text-overflow: ellipsis;
|
|
181
|
+
white-space: nowrap;
|
|
182
|
+
min-width: 0;
|
|
183
|
+
}
|
|
184
|
+
.arbi-cal-time,
|
|
185
|
+
.arbi-cal-location {
|
|
186
|
+
opacity: 0.85;
|
|
187
|
+
font-size: 0.6875rem;
|
|
188
|
+
overflow: hidden;
|
|
189
|
+
text-overflow: ellipsis;
|
|
190
|
+
white-space: nowrap;
|
|
191
|
+
}
|
|
192
|
+
.arbi-cal-location {
|
|
193
|
+
display: inline-flex;
|
|
194
|
+
align-items: center;
|
|
195
|
+
gap: 2px;
|
|
196
|
+
}
|
|
197
|
+
.arbi-cal-icon {
|
|
198
|
+
width: 0.75rem;
|
|
199
|
+
height: 0.75rem;
|
|
200
|
+
flex-shrink: 0;
|
|
201
|
+
opacity: 0.85;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/* Month view timed events: dot + time + title, no fill. */
|
|
205
|
+
.arbi-cal-dot-item {
|
|
206
|
+
display: flex;
|
|
207
|
+
align-items: center;
|
|
208
|
+
gap: 4px;
|
|
209
|
+
min-width: 0;
|
|
210
|
+
padding: 0 2px;
|
|
211
|
+
font-size: 0.75rem;
|
|
212
|
+
color: hsl(var(--foreground));
|
|
213
|
+
}
|
|
214
|
+
.arbi-cal-dot {
|
|
215
|
+
width: 0.5rem;
|
|
216
|
+
height: 0.5rem;
|
|
217
|
+
border-radius: 9999px;
|
|
218
|
+
background: var(--arbi-cal-color);
|
|
219
|
+
flex-shrink: 0;
|
|
220
|
+
}
|
|
221
|
+
.arbi-cal-dot-item .arbi-cal-time {
|
|
222
|
+
opacity: 0.7;
|
|
223
|
+
flex-shrink: 0;
|
|
224
|
+
overflow: visible;
|
|
225
|
+
text-overflow: clip;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/* Agenda list. */
|
|
229
|
+
.arbi-cal-list-item {
|
|
230
|
+
display: flex;
|
|
231
|
+
align-items: center;
|
|
232
|
+
gap: 6px;
|
|
233
|
+
min-width: 0;
|
|
234
|
+
flex-wrap: wrap;
|
|
235
|
+
}
|
|
236
|
+
.arbi-cal-list-item .arbi-cal-location {
|
|
237
|
+
color: hsl(var(--muted-foreground));
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* Free: a light tint. */
|
|
241
|
+
.arbi-cal-free .arbi-cal-event-inner {
|
|
242
|
+
background: color-mix(in srgb, var(--arbi-cal-color) 22%, hsl(var(--background)));
|
|
243
|
+
color: hsl(var(--foreground));
|
|
244
|
+
}
|
|
245
|
+
/* Tentative: diagonal stripes. */
|
|
246
|
+
.arbi-cal-tentative .arbi-cal-event-inner {
|
|
247
|
+
background: repeating-linear-gradient(
|
|
248
|
+
135deg,
|
|
249
|
+
color-mix(in srgb, var(--arbi-cal-color) 38%, hsl(var(--background))) 0 6px,
|
|
250
|
+
color-mix(in srgb, var(--arbi-cal-color) 16%, hsl(var(--background))) 6px 12px
|
|
251
|
+
);
|
|
252
|
+
color: hsl(var(--foreground));
|
|
253
|
+
}
|
|
254
|
+
/* Needs a reply: outlined. */
|
|
255
|
+
.arbi-cal-needs-action .arbi-cal-event-inner {
|
|
256
|
+
background: hsl(var(--background));
|
|
257
|
+
color: hsl(var(--foreground));
|
|
258
|
+
border: 1px solid var(--arbi-cal-color);
|
|
259
|
+
border-left-width: 3px;
|
|
260
|
+
}
|
|
261
|
+
/* Declined (only when shown): faded, struck through. */
|
|
262
|
+
.arbi-cal-declined .arbi-cal-event-inner,
|
|
263
|
+
.arbi-cal-declined .arbi-cal-dot-item,
|
|
264
|
+
.arbi-cal-declined .arbi-cal-list-item {
|
|
265
|
+
opacity: 0.5;
|
|
266
|
+
background: color-mix(in srgb, var(--arbi-cal-color) 14%, hsl(var(--background)));
|
|
267
|
+
color: hsl(var(--muted-foreground));
|
|
268
|
+
}
|
|
269
|
+
.arbi-cal-declined .arbi-cal-title,
|
|
270
|
+
.arbi-cal-cancelled .arbi-cal-title {
|
|
271
|
+
text-decoration: line-through;
|
|
272
|
+
}
|
|
273
|
+
.arbi-cal-cancelled .arbi-cal-event-inner {
|
|
274
|
+
opacity: 0.65;
|
|
275
|
+
}
|
|
276
|
+
/* Out of office: hatched with the event colour. */
|
|
277
|
+
.arbi-cal-oof .arbi-cal-event-inner {
|
|
278
|
+
background: repeating-linear-gradient(
|
|
279
|
+
45deg,
|
|
280
|
+
var(--arbi-cal-color) 0 4px,
|
|
281
|
+
color-mix(in srgb, var(--arbi-cal-color) 75%, black) 4px 8px
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
/* Overlays (facts / workflows / tasks): read-only, dashed outline on a muted tint. */
|
|
285
|
+
.arbi-cal-overlay .arbi-cal-event-inner {
|
|
286
|
+
background: color-mix(in srgb, var(--arbi-cal-color) 10%, hsl(var(--muted)));
|
|
287
|
+
color: hsl(var(--foreground));
|
|
288
|
+
border: 1px dashed var(--arbi-cal-color);
|
|
289
|
+
border-left-width: 1px;
|
|
290
|
+
font-style: italic;
|
|
291
|
+
}
|
|
292
|
+
.arbi-calendar .fc .arbi-cal-overlay {
|
|
293
|
+
cursor: pointer;
|
|
294
|
+
}
|
|
295
|
+
/* Restricted (free/busy only). */
|
|
296
|
+
.arbi-cal-restricted .arbi-cal-event-inner {
|
|
297
|
+
background: hsl(var(--muted));
|
|
298
|
+
color: hsl(var(--muted-foreground));
|
|
299
|
+
border-left-color: hsl(var(--muted-foreground) / 0.5);
|
|
300
|
+
}
|
|
301
|
+
.arbi-calendar .fc .fc-event-past .arbi-cal-event-inner {
|
|
302
|
+
filter: saturate(0.75);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/* Phone layout. */
|
|
306
|
+
.arbi-calendar-narrow .arbi-cal-toolbar {
|
|
307
|
+
gap: 0.25rem;
|
|
308
|
+
}
|
|
309
|
+
.arbi-calendar-narrow .fc .fc-timegrid-slot-label-cushion {
|
|
310
|
+
padding: 0 3px;
|
|
311
|
+
}
|
|
312
|
+
.arbi-calendar-narrow .arbi-cal-dayhead-num {
|
|
313
|
+
font-size: 1rem;
|
|
314
|
+
min-width: 1.75rem;
|
|
315
|
+
height: 1.75rem;
|
|
316
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/StreamedArtifactEditor.tsx"],"names":[],"mappings":"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","file":"StreamedArtifactEditor-OPL4KXOT.js","sourcesContent":["import { useState, type ReactNode } from 'react'\nimport { Copy, Download } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { renderArtifactMarkdown, useArtifactSession } from '@arbidocs/react/artifacts'\nimport { ArtifactEditor, ArtifactRedlineView, type ArtifactEditorLabels } from '../artifacts'\nimport {\n ArtifactMarkdownEditor,\n type ArtifactMarkdownEditorProps,\n} from '../artifacts/editor/ArtifactMarkdownEditor'\n\nexport interface StreamedArtifactEditorProps {\n workspaceId: string | undefined\n /** The stored first version (the lineage's root as far as this panel goes). */\n docId: string\n /** File name for the versions saved from here. */\n title: string\n testId: string\n className?: string\n /** Extra props of the rich-text editor (`dictation`, labels). */\n editorProps?: Partial<Omit<ArtifactMarkdownEditorProps, 'markdown' | 'onChange' | 'onNormalized'>>\n /** Called after a version is saved. */\n onSaved?: (docId: string | undefined) => void\n onSaveError?: (error: unknown) => void\n /** Extra header actions next to the toolbar. */\n actions?: (ctx: { content: string; title: string }) => ReactNode\n /** Hide the default Copy and Download buttons. */\n hideDefaultActions?: boolean\n labels?: Partial<ArtifactEditorLabels>\n}\n\n/**\n * The editing stage of `StreamedArtifact`: `ArtifactEditor` bound to `useArtifactSession`. It is\n * a separate module because it pulls the rich-text editor (Lexical), which must stay behind a\n * `lazy()` boundary.\n */\nexport default function StreamedArtifactEditor({\n workspaceId,\n docId,\n title,\n testId,\n className,\n editorProps,\n onSaved,\n onSaveError,\n actions,\n hideDefaultActions,\n labels,\n}: StreamedArtifactEditorProps) {\n const [openId, setOpenId] = useState(docId)\n const s = useArtifactSession({\n workspaceId,\n docId: openId,\n title,\n onSaved: ({ docId: next }) => {\n if (next) setOpenId(next)\n onSaved?.(next)\n },\n onSaveError,\n })\n\n const copy = () => void navigator.clipboard.writeText(s.content)\n const download = () => {\n const url = URL.createObjectURL(new Blob([s.content], { type: 'text/markdown' }))\n const a = document.createElement('a')\n a.href = url\n a.download = `${title.replace(/\\.md$/i, '')}.md`\n a.click()\n URL.revokeObjectURL(url)\n }\n\n return (\n <div\n className={cn(\n 'flex min-h-[560px] flex-col rounded-xl border border-border bg-card',\n className\n )}\n data-testid={testId}\n >\n <ArtifactEditor\n {...s.view}\n className=\"min-h-[560px] flex-1\"\n labels={labels}\n onOpenVersion={setOpenId}\n renderMarkdown={renderArtifactMarkdown}\n editor={<ArtifactMarkdownEditor {...editorProps} {...s.editorProps} />}\n redline={\n <ArtifactRedlineView {...s.redlineProps} renderMarkdown={renderArtifactMarkdown} />\n }\n actions={\n <>\n {!hideDefaultActions && (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={copy}\n data-testid={`${testId}-copy`}\n className=\"pointer-coarse:min-h-11\"\n >\n <Copy className=\"size-4\" aria-hidden /> Copy\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={download}\n data-testid={`${testId}-download`}\n className=\"pointer-coarse:min-h-11\"\n >\n <Download className=\"size-4\" aria-hidden /> Download\n </Button>\n </>\n )}\n {actions?.({ content: s.content, title })}\n </>\n }\n />\n </div>\n )\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/StreamedArtifactEditor.tsx"],"names":["useState","useArtifactSession","jsx","cn","ArtifactEditor","renderArtifactMarkdown","ArtifactMarkdownEditor","ArtifactRedlineView","jsxs","Fragment","Button","Copy","Download"],"mappings":"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","file":"StreamedArtifactEditor-RIKG6CJQ.cjs","sourcesContent":["import { useState, type ReactNode } from 'react'\nimport { Copy, Download } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { renderArtifactMarkdown, useArtifactSession } from '@arbidocs/react/artifacts'\nimport { ArtifactEditor, ArtifactRedlineView, type ArtifactEditorLabels } from '../artifacts'\nimport {\n ArtifactMarkdownEditor,\n type ArtifactMarkdownEditorProps,\n} from '../artifacts/editor/ArtifactMarkdownEditor'\n\nexport interface StreamedArtifactEditorProps {\n workspaceId: string | undefined\n /** The stored first version (the lineage's root as far as this panel goes). */\n docId: string\n /** File name for the versions saved from here. */\n title: string\n testId: string\n className?: string\n /** Extra props of the rich-text editor (`dictation`, labels). */\n editorProps?: Partial<Omit<ArtifactMarkdownEditorProps, 'markdown' | 'onChange' | 'onNormalized'>>\n /** Called after a version is saved. */\n onSaved?: (docId: string | undefined) => void\n onSaveError?: (error: unknown) => void\n /** Extra header actions next to the toolbar. */\n actions?: (ctx: { content: string; title: string }) => ReactNode\n /** Hide the default Copy and Download buttons. */\n hideDefaultActions?: boolean\n labels?: Partial<ArtifactEditorLabels>\n}\n\n/**\n * The editing stage of `StreamedArtifact`: `ArtifactEditor` bound to `useArtifactSession`. It is\n * a separate module because it pulls the rich-text editor (Lexical), which must stay behind a\n * `lazy()` boundary.\n */\nexport default function StreamedArtifactEditor({\n workspaceId,\n docId,\n title,\n testId,\n className,\n editorProps,\n onSaved,\n onSaveError,\n actions,\n hideDefaultActions,\n labels,\n}: StreamedArtifactEditorProps) {\n const [openId, setOpenId] = useState(docId)\n const s = useArtifactSession({\n workspaceId,\n docId: openId,\n title,\n onSaved: ({ docId: next }) => {\n if (next) setOpenId(next)\n onSaved?.(next)\n },\n onSaveError,\n })\n\n const copy = () => void navigator.clipboard.writeText(s.content)\n const download = () => {\n const url = URL.createObjectURL(new Blob([s.content], { type: 'text/markdown' }))\n const a = document.createElement('a')\n a.href = url\n a.download = `${title.replace(/\\.md$/i, '')}.md`\n a.click()\n URL.revokeObjectURL(url)\n }\n\n return (\n <div\n className={cn(\n 'flex min-h-[560px] flex-col rounded-xl border border-border bg-card',\n className\n )}\n data-testid={testId}\n >\n <ArtifactEditor\n {...s.view}\n className=\"min-h-[560px] flex-1\"\n labels={labels}\n onOpenVersion={setOpenId}\n renderMarkdown={renderArtifactMarkdown}\n editor={<ArtifactMarkdownEditor {...editorProps} {...s.editorProps} />}\n redline={\n <ArtifactRedlineView {...s.redlineProps} renderMarkdown={renderArtifactMarkdown} />\n }\n actions={\n <>\n {!hideDefaultActions && (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={copy}\n data-testid={`${testId}-copy`}\n className=\"pointer-coarse:min-h-11\"\n >\n <Copy className=\"size-4\" aria-hidden /> Copy\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={download}\n data-testid={`${testId}-download`}\n className=\"pointer-coarse:min-h-11\"\n >\n <Download className=\"size-4\" aria-hidden /> Download\n </Button>\n </>\n )}\n {actions?.({ content: s.content, title })}\n </>\n }\n />\n </div>\n )\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/settings/ModalScaffold.tsx"],"names":["jsx","DialogHeader","cn","DialogFooter","useRestoreFocus","Dialog","jsxs","DialogContent","DialogTitle","DialogDescription"],"mappings":";;;;;;AAcO,IAAM,yBAAA,GACX;AAGK,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAwC;AACxF,EAAA,uBACEA,cAAA;AAAA,IAACC,eAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAWC,KAAA,CAAG,0DAAA,EAA4D,SAAS,CAAA;AAAA,MAClF,GAAG;AAAA;AAAA,GACN;AAEJ;AAGO,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAC3E,EAAA,uBAAOF,cAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,eAAA,EAAgB,SAAA,EAAWE,MAAG,MAAA,EAAQ,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACrF;AAGO,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChF,EAAA,uBACEF,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAWE,KAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACN;AAEJ;AAIA,IAAM,UAAA,GAAwC;AAAA,EAC5C,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAoCA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACjE,EAAA,uBAAOF,cAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,YAAA,EAAa,SAAA,EAAWE,MAAG,WAAA,EAAa,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACvF;AAMA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAwC;AACjF,EAAA,uBACEF,cAAA;AAAA,IAACG,eAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAWD,KAAA;AAAA,QACT,iFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAMO,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,IAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,YAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,eAAA;AAAA,EACA,WAAA,GAAc,IAAA;AAAA,EACd,iBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,eAAeE,iCAAA,EAAgB;AACrC,EAAA,uBACEJ,cAAA,CAACK,SAAA,EAAA,EAAO,IAAA,EAAY,YAAA,EAClB,QAAA,kBAAAC,eAAA;AAAA,IAACC,gBAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,cAAc,YAAA,KAAiB,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,OAAO,OAAA,GAAU,QAAA,CAAA;AAAA,MAC1E,WAAWL,KAAA,CAAG,UAAA,CAAW,IAAI,CAAA,EAAG,2CAA2C,SAAS,CAAA;AAAA,MACpF,aAAA,EAAa,MAAA;AAAA,MACb,iBAAA,EAAmB,CAAC,CAAA,KAAM;AACxB,QAAA,IAAI,IAAA,KAAS,aAAA,IAAiB,CAAC,WAAA,IAAe,cAAA,EAAe;AAC7D,QAAA,iBAAA,GAAoB,CAAC,CAAA;AAAA,MACvB,CAAA;AAAA,MACA,eAAA,EAAiB,CAAC,CAAA,KAAM;AACtB,QAAA,IAAI,CAAC,WAAA,EAAa,CAAA,CAAE,cAAA,EAAe;AACnC,QAAA,eAAA,GAAkB,CAAC,CAAA;AAAA,MACrB,CAAA;AAAA,MACA,eAAA,EAAiB,CAAC,CAAA,KAAM;AACtB,QAAA,YAAA,CAAa,gBAAgB,CAAC,CAAA;AAC9B,QAAA,IAAI,iBAAiB,OAAA,EAAS;AAC5B,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,eAAA,CAAgB,QAAQ,KAAA,EAAM;AAAA,QAChC;AAAA,MACF,CAAA;AAAA,MACA,kBAAkB,YAAA,CAAa,gBAAA;AAAA,MAE/B,QAAA,EAAA;AAAA,wBAAAI,eAAA,CAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAA,eAAA,CAACE,cAAA,EAAA,EAAY,WAAU,yBAAA,EACpB,QAAA,EAAA;AAAA,YAAA,IAAA;AAAA,YACA;AAAA,WAAA,EACH,CAAA;AAAA,yCACCC,oBAAA,EAAA,EAAkB,SAAA,EAAW,kBAAkB,MAAA,GAAY,SAAA,EACzD,yBAAe,KAAA,EAClB;AAAA,SAAA,EACF,CAAA;AAAA,wBACAT,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,cAAA;AAAA,YACV,SAAA,EAAU,uEAAA;AAAA,YAET;AAAA;AAAA;AACH;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AAEA,aAAA,CAAc,IAAA,GAAO,SAAA;AACrB,aAAA,CAAc,MAAA,GAAS,WAAA","file":"chunk-2ZTONLT5.cjs","sourcesContent":["import type { ComponentProps, ReactNode, RefObject } from 'react'\nimport {\n cn,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n type DialogPresentation,\n} from '@arbidocs/react/ui'\nimport { useRestoreFocus } from '../lib/useRestoreFocus'\n\n/** Tailwind classes for a modal section heading (also usable on a `Label`). */\nexport const MODAL_SECTION_TITLE_CLASS =\n 'mb-2 flex items-center gap-1 text-sm font-medium text-muted-foreground'\n\n/** Header of a hand-assembled modal: no tinted band, just space. */\nexport function ModalHeader({ className, ...props }: ComponentProps<typeof DialogHeader>) {\n return (\n <DialogHeader\n data-slot=\"modal-header\"\n className={cn('flex-shrink-0 rounded-t-lg bg-transparent p-6 pb-3 pr-12', className)}\n {...props}\n />\n )\n}\n\n/** A padded group inside a modal body. */\nexport function ModalSection({ className, ...props }: ComponentProps<'div'>) {\n return <div data-slot=\"modal-section\" className={cn('pt-4', className)} {...props} />\n}\n\n/** Muted label above the content of a {@link ModalSection}. */\nexport function ModalSectionTitle({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"modal-section-title\"\n className={cn(MODAL_SECTION_TITLE_CLASS, className)}\n {...props}\n />\n )\n}\n\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl'\n\nconst SIZE_CLASS: Record<ModalSize, string> = {\n sm: 'sm:max-w-sm',\n md: 'sm:max-w-md',\n lg: 'sm:max-w-2xl',\n xl: 'sm:max-w-4xl',\n}\n\nexport interface ModalScaffoldProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: ReactNode\n /** Accessible description; visually hidden unless `showDescription`. */\n description?: ReactNode\n showDescription?: boolean\n /** Icon shown before the title. */\n icon?: ReactNode\n size?: ModalSize\n /** Phone presentation; defaults to a bottom sheet for `lg`/`xl`, a centred box otherwise. */\n presentation?: DialogPresentation\n className?: string\n testId?: string\n /**\n * `alertdialog` for a destructive or blocking confirmation: announced as an alert, dismissed\n * only through its own buttons or Escape (not by clicking outside).\n */\n role?: 'dialog' | 'alertdialog'\n /**\n * Block dismissal by outside click AND Escape; only the dialog's own buttons close it. For a\n * dialog that shows a secret once (a new API key). Default false. An `alertdialog` already\n * ignores outside clicks.\n */\n dismissible?: boolean\n /** Called on a pointer/focus interaction outside; `preventDefault()` keeps the dialog open. */\n onInteractOutside?: (event: Event) => void\n /** Called on Escape; `preventDefault()` keeps the dialog open. */\n onEscapeKeyDown?: (event: KeyboardEvent) => void\n /** Element that receives focus when the dialog opens (an alert dialog focuses its safe action). */\n initialFocusRef?: RefObject<HTMLElement | null>\n children?: ReactNode\n}\n\nfunction ModalBody({ className, ...props }: ComponentProps<'div'>) {\n return <div data-slot=\"modal-body\" className={cn('space-y-4', className)} {...props} />\n}\n\n/**\n * Action row. Stacked full-width on phones (primary action on top), right-aligned on wider\n * screens. Sticks to the bottom of the scrolling dialog body so the actions stay reachable.\n */\nfunction ModalFooter({ className, ...props }: ComponentProps<typeof DialogFooter>) {\n return (\n <DialogFooter\n data-slot=\"modal-footer\"\n className={cn(\n 'sticky bottom-0 -mx-6 -mb-6 mt-4 border-t border-border bg-background px-6 py-3',\n className\n )}\n {...props}\n />\n )\n}\n\n/**\n * Standard dialog: icon + title + description header, then the compound\n * `ModalScaffold.Body` / `ModalScaffold.Footer` slots.\n */\nexport function ModalScaffold({\n open,\n onOpenChange,\n title,\n description,\n showDescription = false,\n icon,\n size = 'md',\n presentation,\n className,\n testId,\n role = 'dialog',\n initialFocusRef,\n dismissible = true,\n onInteractOutside,\n onEscapeKeyDown,\n children,\n}: ModalScaffoldProps) {\n const restoreFocus = useRestoreFocus()\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n role={role}\n presentation={presentation ?? (size === 'lg' || size === 'xl' ? 'sheet' : 'center')}\n className={cn(SIZE_CLASS[size], 'flex flex-col gap-0 overflow-hidden p-0', className)}\n data-testid={testId}\n onInteractOutside={(e) => {\n if (role === 'alertdialog' || !dismissible) e.preventDefault()\n onInteractOutside?.(e)\n }}\n onEscapeKeyDown={(e) => {\n if (!dismissible) e.preventDefault()\n onEscapeKeyDown?.(e)\n }}\n onOpenAutoFocus={(e) => {\n restoreFocus.onOpenAutoFocus(e)\n if (initialFocusRef?.current) {\n e.preventDefault()\n initialFocusRef.current.focus()\n }\n }}\n onCloseAutoFocus={restoreFocus.onCloseAutoFocus}\n >\n <ModalHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n {icon}\n {title}\n </DialogTitle>\n <DialogDescription className={showDescription ? undefined : 'sr-only'}>\n {description ?? title}\n </DialogDescription>\n </ModalHeader>\n <div\n data-slot=\"modal-scroll\"\n className=\"min-h-0 flex-1 space-y-4 overflow-y-auto overscroll-contain px-6 pb-6\"\n >\n {children}\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\nModalScaffold.Body = ModalBody\nModalScaffold.Footer = ModalFooter\n"]}
|