@akira-io/ui 1.3.1 → 2.1.0
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 +2 -2
- package/dist/blocks.d.ts +100 -10
- package/dist/blocks.js +547 -270
- package/dist/blocks.js.map +1 -1
- package/dist/{chunk-3Z2VGVPI.js → chunk-53V4J7MC.js} +17 -7
- package/dist/chunk-53V4J7MC.js.map +1 -0
- package/dist/chunk-BH3B26DK.js +394 -0
- package/dist/chunk-BH3B26DK.js.map +1 -0
- package/dist/chunk-BP2YDMMI.js +29 -0
- package/dist/chunk-BP2YDMMI.js.map +1 -0
- package/dist/chunk-BR3JI3KN.js +458 -0
- package/dist/chunk-BR3JI3KN.js.map +1 -0
- package/dist/{chunk-YBXRJSR3.js → chunk-CAUTXZ4U.js} +15 -7
- package/dist/chunk-CAUTXZ4U.js.map +1 -0
- package/dist/{chunk-I6VVCFZ2.js → chunk-DPLCEU34.js} +342 -238
- package/dist/chunk-DPLCEU34.js.map +1 -0
- package/dist/chunk-IQMRJXEO.js +5 -4
- package/dist/chunk-IQMRJXEO.js.map +1 -1
- package/dist/chunk-L2H5GIF7.js +5 -4
- package/dist/chunk-L2H5GIF7.js.map +1 -1
- package/dist/{chunk-2V6HUWST.js → chunk-NKPFIA32.js} +19 -6
- package/dist/chunk-NKPFIA32.js.map +1 -0
- package/dist/{chunk-QNF4LJVT.js → chunk-OS7YY5R4.js} +8 -6
- package/dist/chunk-OS7YY5R4.js.map +1 -0
- package/dist/{chunk-IDNOI4OK.js → chunk-PCYYU332.js} +15 -8
- package/dist/chunk-PCYYU332.js.map +1 -0
- package/dist/{chunk-KHOA4TEI.js → chunk-PPWJK5T3.js} +60 -25
- package/dist/chunk-PPWJK5T3.js.map +1 -0
- package/dist/{chunk-N2KIFFI7.js → chunk-QZRSQVCN.js} +30 -34
- package/dist/chunk-QZRSQVCN.js.map +1 -0
- package/dist/{chunk-SZUXATOF.js → chunk-XLAOE5MV.js} +170 -76
- package/dist/chunk-XLAOE5MV.js.map +1 -0
- package/dist/{chunk-B3L6PRLX.js → chunk-ZQXZ4UGE.js} +208 -100
- package/dist/chunk-ZQXZ4UGE.js.map +1 -0
- package/dist/code.d.ts +2 -2
- package/dist/code.js +96 -52
- package/dist/code.js.map +1 -1
- package/dist/{context-OwSoVEri.d.ts → context-2wTOwxCk.d.ts} +13 -5
- package/dist/editor.d.ts +1 -1
- package/dist/editor.js +135 -52
- package/dist/editor.js.map +1 -1
- package/dist/{field-DWm5NXeV.d.ts → field-C1TdmC2t.d.ts} +1 -1
- package/dist/index.d.ts +15 -12
- package/dist/index.js +1105 -633
- package/dist/index.js.map +1 -1
- package/dist/inertia.d.ts +11 -3
- package/dist/inertia.js +66 -12
- package/dist/inertia.js.map +1 -1
- package/dist/{input-Dxnsxi-f.d.ts → input-B4uEClxB.d.ts} +1 -1
- package/dist/{json-viewer-BARA2RCW.d.ts → json-viewer-Bssv9mTD.d.ts} +1 -1
- package/dist/locales/fr.d.ts +44 -0
- package/dist/locales/fr.js +248 -0
- package/dist/locales/fr.js.map +1 -0
- package/dist/locales/pt.d.ts +10 -9
- package/dist/locales/pt.js +40 -3
- package/dist/locales/pt.js.map +1 -1
- package/dist/shells.d.ts +46 -5
- package/dist/shells.js +211 -71
- package/dist/shells.js.map +1 -1
- package/dist/{sidebar-Bp6Q46j-.d.ts → sidebar-BLL2tgTt.d.ts} +2 -2
- package/dist/types-1LUmNJf_.d.ts +41 -0
- package/dist/{types-cmBL8zOc.d.ts → types-CMZRvMV5.d.ts} +1 -1
- package/dist/{types-B-eGPoFD.d.ts → types-CfAUvz--.d.ts} +1 -1
- package/package.json +8 -2
- package/theme.css +11 -0
- package/dist/chunk-2V6HUWST.js.map +0 -1
- package/dist/chunk-3Z2VGVPI.js.map +0 -1
- package/dist/chunk-B3L6PRLX.js.map +0 -1
- package/dist/chunk-I6VVCFZ2.js.map +0 -1
- package/dist/chunk-IDNOI4OK.js.map +0 -1
- package/dist/chunk-KHOA4TEI.js.map +0 -1
- package/dist/chunk-N2KIFFI7.js.map +0 -1
- package/dist/chunk-NGMG2UWX.js +0 -172
- package/dist/chunk-NGMG2UWX.js.map +0 -1
- package/dist/chunk-QNF4LJVT.js.map +0 -1
- package/dist/chunk-SZUXATOF.js.map +0 -1
- package/dist/chunk-YBXRJSR3.js.map +0 -1
- package/dist/types-u1qfmJQi.d.ts +0 -28
package/dist/blocks.js
CHANGED
|
@@ -1,19 +1,105 @@
|
|
|
1
|
-
|
|
2
|
-
import { CopyButton } from './chunk-IDNOI4OK.js';
|
|
3
|
-
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, Label } from './chunk-N2KIFFI7.js';
|
|
4
|
-
import { Card } from './chunk-2V6HUWST.js';
|
|
5
|
-
export { DEFAULT_TOUR_LABELS, TourProvider, resolveSteps, shouldStartTour, stepsForBreakpoint, useTour, useTourController } from './chunk-NGMG2UWX.js';
|
|
6
|
-
import { useUiLabels, useUiLocale } from './chunk-QNF4LJVT.js';
|
|
7
|
-
export { UiLocaleProvider, useUiLabels, useUiLocale } from './chunk-QNF4LJVT.js';
|
|
8
|
-
import { resolveLink } from './chunk-L2H5GIF7.js';
|
|
9
|
-
import { Separator, Input } from './chunk-3Z2VGVPI.js';
|
|
10
|
-
import { Button, cn, elevatedSurface, nestedSurfaceReset, compactRadius, recessedSurface, focusRing, controlRadius, Spinner } from './chunk-KHOA4TEI.js';
|
|
11
|
-
import { createContext, useState, useCallback, useEffect, useContext, useId, useRef } from 'react';
|
|
12
|
-
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
13
|
-
import { TriangleAlert, CalendarDays, ArrowLeft, ChevronRight, AlertCircle, ShieldOff, EyeOff, Eye, RefreshCw, ChevronLeft, ArrowLeftToLine, X, ArrowRight, ArrowUpRight, ArrowDownRight } from 'lucide-react';
|
|
14
|
-
import { subYears, subQuarters, subMonths, subWeeks, subDays, endOfYear, endOfQuarter, endOfMonth, endOfDay, startOfYear, startOfQuarter, startOfMonth, startOfDay, isSameYear, format, endOfWeek, startOfWeek } from 'date-fns';
|
|
15
|
-
import { pt } from 'date-fns/locale';
|
|
1
|
+
'use client';
|
|
16
2
|
|
|
3
|
+
"use client";
|
|
4
|
+
import {
|
|
5
|
+
Calendar,
|
|
6
|
+
CommandDialog,
|
|
7
|
+
CommandEmpty,
|
|
8
|
+
CommandGroup,
|
|
9
|
+
CommandInput,
|
|
10
|
+
CommandItem,
|
|
11
|
+
CommandList,
|
|
12
|
+
ConfirmDialog,
|
|
13
|
+
FloatingSheet,
|
|
14
|
+
FloatingSheetBody,
|
|
15
|
+
FloatingSheetFooter,
|
|
16
|
+
InputOTP,
|
|
17
|
+
InputOTPGroup,
|
|
18
|
+
InputOTPSlot,
|
|
19
|
+
Popover,
|
|
20
|
+
PopoverContent,
|
|
21
|
+
PopoverTrigger,
|
|
22
|
+
Select,
|
|
23
|
+
SelectContent,
|
|
24
|
+
SelectItem,
|
|
25
|
+
SelectTrigger,
|
|
26
|
+
SelectValue,
|
|
27
|
+
Switch,
|
|
28
|
+
Tabs,
|
|
29
|
+
TabsContent,
|
|
30
|
+
TabsList,
|
|
31
|
+
TabsTrigger,
|
|
32
|
+
Textarea
|
|
33
|
+
} from "./chunk-DPLCEU34.js";
|
|
34
|
+
import {
|
|
35
|
+
CopyButton
|
|
36
|
+
} from "./chunk-PCYYU332.js";
|
|
37
|
+
import {
|
|
38
|
+
Dialog,
|
|
39
|
+
DialogContent,
|
|
40
|
+
DialogDescription,
|
|
41
|
+
DialogFooter,
|
|
42
|
+
DialogHeader,
|
|
43
|
+
DialogTitle
|
|
44
|
+
} from "./chunk-QZRSQVCN.js";
|
|
45
|
+
import {
|
|
46
|
+
Card
|
|
47
|
+
} from "./chunk-NKPFIA32.js";
|
|
48
|
+
import {
|
|
49
|
+
DEFAULT_TOUR_LABELS,
|
|
50
|
+
LoginForm,
|
|
51
|
+
LoginFormEmail,
|
|
52
|
+
LoginFormPassword,
|
|
53
|
+
LoginFormPreset,
|
|
54
|
+
LoginFormProvider,
|
|
55
|
+
LoginFormRemember,
|
|
56
|
+
LoginFormRoot,
|
|
57
|
+
LoginFormStatus,
|
|
58
|
+
LoginFormSubmit,
|
|
59
|
+
TourProvider,
|
|
60
|
+
loginFormLabels,
|
|
61
|
+
resolveSteps,
|
|
62
|
+
shouldStartTour,
|
|
63
|
+
stepsForBreakpoint,
|
|
64
|
+
useLoginFormContext,
|
|
65
|
+
useTour,
|
|
66
|
+
useTourController
|
|
67
|
+
} from "./chunk-BR3JI3KN.js";
|
|
68
|
+
import {
|
|
69
|
+
Alert,
|
|
70
|
+
AlertDescription,
|
|
71
|
+
FieldError
|
|
72
|
+
} from "./chunk-BH3B26DK.js";
|
|
73
|
+
import {
|
|
74
|
+
UiLocaleProvider,
|
|
75
|
+
useUiLabels,
|
|
76
|
+
useUiLocale
|
|
77
|
+
} from "./chunk-OS7YY5R4.js";
|
|
78
|
+
import {
|
|
79
|
+
Label
|
|
80
|
+
} from "./chunk-BP2YDMMI.js";
|
|
81
|
+
import {
|
|
82
|
+
resolveLink
|
|
83
|
+
} from "./chunk-L2H5GIF7.js";
|
|
84
|
+
import {
|
|
85
|
+
Input,
|
|
86
|
+
Separator
|
|
87
|
+
} from "./chunk-53V4J7MC.js";
|
|
88
|
+
import {
|
|
89
|
+
Button,
|
|
90
|
+
Spinner,
|
|
91
|
+
cn,
|
|
92
|
+
compactRadius,
|
|
93
|
+
controlRadius,
|
|
94
|
+
elevatedSurface,
|
|
95
|
+
focusRing,
|
|
96
|
+
nestedSurfaceReset,
|
|
97
|
+
recessedSurface
|
|
98
|
+
} from "./chunk-PPWJK5T3.js";
|
|
99
|
+
|
|
100
|
+
// src/blocks/command-palette.tsx
|
|
101
|
+
import { useCallback, useEffect, useState } from "react";
|
|
102
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
17
103
|
var commandPaletteDefaultLabels = {
|
|
18
104
|
placeholder: "Search...",
|
|
19
105
|
noResultsLabel: "No results found"
|
|
@@ -85,6 +171,11 @@ function useCommandPalette(initialOpen = false) {
|
|
|
85
171
|
}, [toggle]);
|
|
86
172
|
return { open, setOpen, toggle };
|
|
87
173
|
}
|
|
174
|
+
|
|
175
|
+
// src/blocks/danger-zone.tsx
|
|
176
|
+
import { TriangleAlert } from "lucide-react";
|
|
177
|
+
import { useState as useState2 } from "react";
|
|
178
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
88
179
|
var dangerZoneLabels = {
|
|
89
180
|
title: "Danger zone",
|
|
90
181
|
description: "These actions are permanent and cannot be undone.",
|
|
@@ -106,9 +197,9 @@ function DangerZone({
|
|
|
106
197
|
slotName = "danger-zone"
|
|
107
198
|
}) {
|
|
108
199
|
const copy = { ...dangerZoneLabels, ...labels };
|
|
109
|
-
const [activeId, setActiveId] =
|
|
200
|
+
const [activeId, setActiveId] = useState2(null);
|
|
110
201
|
const active = actions.find((action) => action.id === activeId) ?? null;
|
|
111
|
-
return /* @__PURE__ */
|
|
202
|
+
return /* @__PURE__ */ jsxs2(
|
|
112
203
|
"section",
|
|
113
204
|
{
|
|
114
205
|
className: cn(
|
|
@@ -119,25 +210,25 @@ function DangerZone({
|
|
|
119
210
|
),
|
|
120
211
|
"data-slot": slotName,
|
|
121
212
|
children: [
|
|
122
|
-
/* @__PURE__ */
|
|
123
|
-
/* @__PURE__ */
|
|
124
|
-
/* @__PURE__ */
|
|
125
|
-
/* @__PURE__ */
|
|
126
|
-
/* @__PURE__ */
|
|
213
|
+
/* @__PURE__ */ jsxs2("div", { "data-slot": "danger-zone-header", className: "gap-3 flex", children: [
|
|
214
|
+
/* @__PURE__ */ jsx2("span", { className: "size-11 rounded-2xl flex shrink-0 items-center justify-center bg-destructive/10 text-destructive", children: /* @__PURE__ */ jsx2(TriangleAlert, { className: "size-5" }) }),
|
|
215
|
+
/* @__PURE__ */ jsxs2("div", { children: [
|
|
216
|
+
/* @__PURE__ */ jsx2("h2", { className: "text-lg font-bold text-destructive", children: title ?? copy.title }),
|
|
217
|
+
/* @__PURE__ */ jsx2("p", { className: "text-sm font-medium text-muted-foreground", children: description ?? copy.description })
|
|
127
218
|
] })
|
|
128
219
|
] }),
|
|
129
|
-
/* @__PURE__ */
|
|
220
|
+
/* @__PURE__ */ jsx2("ul", { "data-slot": "danger-zone-actions", className: "gap-4 flex flex-col", children: actions.map((action) => /* @__PURE__ */ jsxs2(
|
|
130
221
|
"li",
|
|
131
222
|
{
|
|
132
223
|
"data-slot": "danger-zone-action",
|
|
133
224
|
"data-action-id": action.id,
|
|
134
225
|
className: "gap-4 sm:flex-row sm:items-center sm:justify-between flex flex-col",
|
|
135
226
|
children: [
|
|
136
|
-
/* @__PURE__ */
|
|
137
|
-
/* @__PURE__ */
|
|
138
|
-
action.description && /* @__PURE__ */
|
|
227
|
+
/* @__PURE__ */ jsxs2("div", { className: "min-w-0", children: [
|
|
228
|
+
/* @__PURE__ */ jsx2("p", { className: "text-sm font-semibold text-foreground", children: action.title }),
|
|
229
|
+
action.description && /* @__PURE__ */ jsx2("p", { className: "text-sm font-medium text-muted-foreground", children: action.description })
|
|
139
230
|
] }),
|
|
140
|
-
/* @__PURE__ */
|
|
231
|
+
/* @__PURE__ */ jsx2(
|
|
141
232
|
Button,
|
|
142
233
|
{
|
|
143
234
|
type: "button",
|
|
@@ -153,7 +244,7 @@ function DangerZone({
|
|
|
153
244
|
action.id
|
|
154
245
|
)) }),
|
|
155
246
|
footer,
|
|
156
|
-
/* @__PURE__ */
|
|
247
|
+
/* @__PURE__ */ jsx2(
|
|
157
248
|
ConfirmDialog,
|
|
158
249
|
{
|
|
159
250
|
open: active !== null,
|
|
@@ -177,6 +268,9 @@ function DangerZone({
|
|
|
177
268
|
}
|
|
178
269
|
);
|
|
179
270
|
}
|
|
271
|
+
|
|
272
|
+
// src/blocks/date-filter/context.tsx
|
|
273
|
+
import { createContext, useContext } from "react";
|
|
180
274
|
var DateFilterContext = createContext(null);
|
|
181
275
|
var DateFilterProvider = DateFilterContext.Provider;
|
|
182
276
|
function useDateFilter() {
|
|
@@ -186,6 +280,16 @@ function useDateFilter() {
|
|
|
186
280
|
}
|
|
187
281
|
return context;
|
|
188
282
|
}
|
|
283
|
+
|
|
284
|
+
// src/blocks/date-filter/date-filter.tsx
|
|
285
|
+
import { CalendarDays as CalendarDays2 } from "lucide-react";
|
|
286
|
+
import { useState as useState3 } from "react";
|
|
287
|
+
|
|
288
|
+
// src/blocks/date-filter/fixed-panel.tsx
|
|
289
|
+
import { format } from "date-fns";
|
|
290
|
+
import { pt } from "date-fns/locale";
|
|
291
|
+
import { ChevronLeft } from "lucide-react";
|
|
292
|
+
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
189
293
|
var CALENDAR_START = new Date(2020, 0, 1);
|
|
190
294
|
var CALENDAR_END = new Date((/* @__PURE__ */ new Date()).getFullYear() + 1, 11, 31);
|
|
191
295
|
var toDate = (value) => value ? /* @__PURE__ */ new Date(`${value}T00:00:00`) : void 0;
|
|
@@ -195,19 +299,19 @@ function DateFilterFixedPanel() {
|
|
|
195
299
|
const operator = draft.operator ?? "between";
|
|
196
300
|
const isRange = operator === "between";
|
|
197
301
|
const canApply = Boolean(draft.start) && (!isRange || Boolean(draft.end));
|
|
198
|
-
return /* @__PURE__ */
|
|
199
|
-
/* @__PURE__ */
|
|
200
|
-
/* @__PURE__ */
|
|
302
|
+
return /* @__PURE__ */ jsxs3("div", { className: "w-auto", children: [
|
|
303
|
+
/* @__PURE__ */ jsxs3("div", { className: "gap-1 px-2 py-2 flex items-center border-b", children: [
|
|
304
|
+
/* @__PURE__ */ jsx3(
|
|
201
305
|
Button,
|
|
202
306
|
{
|
|
203
307
|
variant: "ghost",
|
|
204
308
|
size: "icon",
|
|
205
309
|
onClick: backToRoot,
|
|
206
310
|
"aria-label": labels.back,
|
|
207
|
-
children: /* @__PURE__ */
|
|
311
|
+
children: /* @__PURE__ */ jsx3(ChevronLeft, { className: "size-4" })
|
|
208
312
|
}
|
|
209
313
|
),
|
|
210
|
-
operators.map((item) => /* @__PURE__ */
|
|
314
|
+
operators.map((item) => /* @__PURE__ */ jsx3(
|
|
211
315
|
"button",
|
|
212
316
|
{
|
|
213
317
|
type: "button",
|
|
@@ -224,7 +328,7 @@ function DateFilterFixedPanel() {
|
|
|
224
328
|
item.value
|
|
225
329
|
))
|
|
226
330
|
] }),
|
|
227
|
-
/* @__PURE__ */
|
|
331
|
+
/* @__PURE__ */ jsx3("div", { className: "p-3", children: isRange ? /* @__PURE__ */ jsx3(
|
|
228
332
|
Calendar,
|
|
229
333
|
{
|
|
230
334
|
mode: "range",
|
|
@@ -244,7 +348,7 @@ function DateFilterFixedPanel() {
|
|
|
244
348
|
end: toIso(range?.to)
|
|
245
349
|
})
|
|
246
350
|
}
|
|
247
|
-
) : /* @__PURE__ */
|
|
351
|
+
) : /* @__PURE__ */ jsx3(
|
|
248
352
|
Calendar,
|
|
249
353
|
{
|
|
250
354
|
mode: "single",
|
|
@@ -257,9 +361,34 @@ function DateFilterFixedPanel() {
|
|
|
257
361
|
onSelect: (date) => setDraft({ ...draft, start: toIso(date) })
|
|
258
362
|
}
|
|
259
363
|
) }),
|
|
260
|
-
/* @__PURE__ */
|
|
364
|
+
/* @__PURE__ */ jsx3("div", { className: "px-3 py-2 flex justify-end border-t", children: /* @__PURE__ */ jsx3(Button, { disabled: !canApply, onClick: () => commit(draft), children: labels.apply }) })
|
|
261
365
|
] });
|
|
262
366
|
}
|
|
367
|
+
|
|
368
|
+
// src/blocks/date-filter/relative-panel.tsx
|
|
369
|
+
import { ArrowLeftToLine, CalendarDays, ChevronLeft as ChevronLeft2, X } from "lucide-react";
|
|
370
|
+
|
|
371
|
+
// src/blocks/date-filter/range.ts
|
|
372
|
+
import {
|
|
373
|
+
endOfDay,
|
|
374
|
+
endOfMonth,
|
|
375
|
+
endOfQuarter,
|
|
376
|
+
endOfWeek,
|
|
377
|
+
endOfYear,
|
|
378
|
+
format as format2,
|
|
379
|
+
isSameYear,
|
|
380
|
+
startOfDay,
|
|
381
|
+
startOfMonth,
|
|
382
|
+
startOfQuarter,
|
|
383
|
+
startOfWeek,
|
|
384
|
+
startOfYear,
|
|
385
|
+
subDays,
|
|
386
|
+
subMonths,
|
|
387
|
+
subQuarters,
|
|
388
|
+
subWeeks,
|
|
389
|
+
subYears
|
|
390
|
+
} from "date-fns";
|
|
391
|
+
import { pt as pt2 } from "date-fns/locale";
|
|
263
392
|
var WEEK_OPTIONS = { weekStartsOn: 1 };
|
|
264
393
|
var subtract = {
|
|
265
394
|
day: subDays,
|
|
@@ -298,29 +427,32 @@ function resolveRelativeRange(unit, amount, includeCurrent, now = /* @__PURE__ *
|
|
|
298
427
|
function formatRangePreview(range) {
|
|
299
428
|
const sameYear = isSameYear(range.start, range.end);
|
|
300
429
|
const startPattern = sameYear ? "d MMM" : "d MMM yyyy";
|
|
301
|
-
return `${
|
|
430
|
+
return `${format2(range.start, startPattern, { locale: pt2 })} - ${format2(range.end, "d MMM yyyy", { locale: pt2 })}`;
|
|
302
431
|
}
|
|
432
|
+
|
|
433
|
+
// src/blocks/date-filter/relative-panel.tsx
|
|
434
|
+
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
303
435
|
function DateFilterRelativePanel() {
|
|
304
436
|
const { draft, units, labels, setDraft, backToRoot, commit } = useDateFilter();
|
|
305
437
|
const hasOffset = (draft.offset_amount ?? 0) > 0;
|
|
306
|
-
return /* @__PURE__ */
|
|
307
|
-
/* @__PURE__ */
|
|
308
|
-
/* @__PURE__ */
|
|
438
|
+
return /* @__PURE__ */ jsxs4("div", { className: "w-96", children: [
|
|
439
|
+
/* @__PURE__ */ jsxs4("div", { className: "gap-2 px-2 py-2 flex items-center border-b", children: [
|
|
440
|
+
/* @__PURE__ */ jsx4(
|
|
309
441
|
Button,
|
|
310
442
|
{
|
|
311
443
|
variant: "ghost",
|
|
312
444
|
size: "icon",
|
|
313
445
|
onClick: backToRoot,
|
|
314
446
|
"aria-label": labels.back,
|
|
315
|
-
children: /* @__PURE__ */
|
|
447
|
+
children: /* @__PURE__ */ jsx4(ChevronLeft2, { className: "size-4" })
|
|
316
448
|
}
|
|
317
449
|
),
|
|
318
|
-
/* @__PURE__ */
|
|
450
|
+
/* @__PURE__ */ jsx4("span", { className: "text-sm font-medium", children: labels.relativeTitle })
|
|
319
451
|
] }),
|
|
320
|
-
/* @__PURE__ */
|
|
321
|
-
/* @__PURE__ */
|
|
322
|
-
/* @__PURE__ */
|
|
323
|
-
/* @__PURE__ */
|
|
452
|
+
/* @__PURE__ */ jsxs4("div", { className: "gap-3 p-3 flex flex-col", children: [
|
|
453
|
+
/* @__PURE__ */ jsxs4("div", { className: "gap-2 flex items-center", children: [
|
|
454
|
+
/* @__PURE__ */ jsx4("span", { className: "text-sm", children: labels.latest }),
|
|
455
|
+
/* @__PURE__ */ jsx4(
|
|
324
456
|
Input,
|
|
325
457
|
{
|
|
326
458
|
type: "number",
|
|
@@ -334,18 +466,18 @@ function DateFilterRelativePanel() {
|
|
|
334
466
|
className: "w-20"
|
|
335
467
|
}
|
|
336
468
|
),
|
|
337
|
-
/* @__PURE__ */
|
|
469
|
+
/* @__PURE__ */ jsxs4(
|
|
338
470
|
Select,
|
|
339
471
|
{
|
|
340
472
|
value: draft.unit ?? "month",
|
|
341
473
|
onValueChange: (unit) => setDraft({ ...draft, unit }),
|
|
342
474
|
children: [
|
|
343
|
-
/* @__PURE__ */
|
|
344
|
-
/* @__PURE__ */
|
|
475
|
+
/* @__PURE__ */ jsx4(SelectTrigger, { className: "flex-1", children: /* @__PURE__ */ jsx4(SelectValue, {}) }),
|
|
476
|
+
/* @__PURE__ */ jsx4(SelectContent, { children: units.map((unit) => /* @__PURE__ */ jsx4(SelectItem, { value: unit.value, children: unit.label }, unit.value)) })
|
|
345
477
|
]
|
|
346
478
|
}
|
|
347
479
|
),
|
|
348
|
-
!hasOffset && /* @__PURE__ */
|
|
480
|
+
!hasOffset && /* @__PURE__ */ jsx4(
|
|
349
481
|
Button,
|
|
350
482
|
{
|
|
351
483
|
variant: "ghost",
|
|
@@ -357,13 +489,13 @@ function DateFilterRelativePanel() {
|
|
|
357
489
|
offset_amount: 1,
|
|
358
490
|
offset_unit: draft.unit ?? "month"
|
|
359
491
|
}),
|
|
360
|
-
children: /* @__PURE__ */
|
|
492
|
+
children: /* @__PURE__ */ jsx4(ArrowLeftToLine, { className: "size-4" })
|
|
361
493
|
}
|
|
362
494
|
)
|
|
363
495
|
] }),
|
|
364
|
-
hasOffset && /* @__PURE__ */
|
|
365
|
-
/* @__PURE__ */
|
|
366
|
-
/* @__PURE__ */
|
|
496
|
+
hasOffset && /* @__PURE__ */ jsxs4("div", { className: "gap-2 flex items-center", children: [
|
|
497
|
+
/* @__PURE__ */ jsx4("span", { className: "text-sm", children: labels.startingAgo }),
|
|
498
|
+
/* @__PURE__ */ jsx4(
|
|
367
499
|
Input,
|
|
368
500
|
{
|
|
369
501
|
type: "number",
|
|
@@ -377,7 +509,7 @@ function DateFilterRelativePanel() {
|
|
|
377
509
|
className: "w-20"
|
|
378
510
|
}
|
|
379
511
|
),
|
|
380
|
-
/* @__PURE__ */
|
|
512
|
+
/* @__PURE__ */ jsxs4(
|
|
381
513
|
Select,
|
|
382
514
|
{
|
|
383
515
|
value: draft.offset_unit ?? draft.unit ?? "month",
|
|
@@ -386,8 +518,8 @@ function DateFilterRelativePanel() {
|
|
|
386
518
|
offset_unit: unit
|
|
387
519
|
}),
|
|
388
520
|
children: [
|
|
389
|
-
/* @__PURE__ */
|
|
390
|
-
/* @__PURE__ */
|
|
521
|
+
/* @__PURE__ */ jsx4(SelectTrigger, { className: "flex-1", children: /* @__PURE__ */ jsx4(SelectValue, {}) }),
|
|
522
|
+
/* @__PURE__ */ jsx4(SelectContent, { children: units.map((unit) => /* @__PURE__ */ jsx4(
|
|
391
523
|
SelectItem,
|
|
392
524
|
{
|
|
393
525
|
value: unit.value,
|
|
@@ -398,7 +530,7 @@ function DateFilterRelativePanel() {
|
|
|
398
530
|
]
|
|
399
531
|
}
|
|
400
532
|
),
|
|
401
|
-
/* @__PURE__ */
|
|
533
|
+
/* @__PURE__ */ jsx4(
|
|
402
534
|
Button,
|
|
403
535
|
{
|
|
404
536
|
variant: "ghost",
|
|
@@ -409,13 +541,13 @@ function DateFilterRelativePanel() {
|
|
|
409
541
|
offset_amount: void 0,
|
|
410
542
|
offset_unit: void 0
|
|
411
543
|
}),
|
|
412
|
-
children: /* @__PURE__ */
|
|
544
|
+
children: /* @__PURE__ */ jsx4(X, { className: "size-4" })
|
|
413
545
|
}
|
|
414
546
|
)
|
|
415
547
|
] }),
|
|
416
|
-
/* @__PURE__ */
|
|
548
|
+
/* @__PURE__ */ jsxs4("label", { className: "text-sm flex items-center justify-between", children: [
|
|
417
549
|
labels.includeCurrent,
|
|
418
|
-
/* @__PURE__ */
|
|
550
|
+
/* @__PURE__ */ jsx4(
|
|
419
551
|
Switch,
|
|
420
552
|
{
|
|
421
553
|
checked: draft.include_current ?? false,
|
|
@@ -424,9 +556,9 @@ function DateFilterRelativePanel() {
|
|
|
424
556
|
)
|
|
425
557
|
] })
|
|
426
558
|
] }),
|
|
427
|
-
/* @__PURE__ */
|
|
428
|
-
/* @__PURE__ */
|
|
429
|
-
/* @__PURE__ */
|
|
559
|
+
/* @__PURE__ */ jsxs4("div", { className: "gap-3 px-3 py-2 flex items-center justify-between border-t", children: [
|
|
560
|
+
/* @__PURE__ */ jsx4(RangePreview, { draft }),
|
|
561
|
+
/* @__PURE__ */ jsx4(
|
|
430
562
|
Button,
|
|
431
563
|
{
|
|
432
564
|
disabled: !draft.unit || !draft.amount || draft.amount < 1,
|
|
@@ -447,15 +579,19 @@ function RangePreview({ draft }) {
|
|
|
447
579
|
draft.offset_unit
|
|
448
580
|
);
|
|
449
581
|
if (!range) {
|
|
450
|
-
return /* @__PURE__ */
|
|
582
|
+
return /* @__PURE__ */ jsx4("span", {});
|
|
451
583
|
}
|
|
452
|
-
return /* @__PURE__ */
|
|
453
|
-
/* @__PURE__ */
|
|
584
|
+
return /* @__PURE__ */ jsxs4("span", { className: "gap-2 text-sm flex items-center text-muted-foreground", children: [
|
|
585
|
+
/* @__PURE__ */ jsx4(CalendarDays, { className: "size-4" }),
|
|
454
586
|
formatRangePreview(range)
|
|
455
587
|
] });
|
|
456
588
|
}
|
|
457
|
-
|
|
458
|
-
|
|
589
|
+
|
|
590
|
+
// src/blocks/date-filter/summarise.ts
|
|
591
|
+
import { format as format3 } from "date-fns";
|
|
592
|
+
import { pt as pt3 } from "date-fns/locale";
|
|
593
|
+
var readable = (value) => value ? format3(/* @__PURE__ */ new Date(`${value}T00:00:00`), "d 'de' MMMM 'de' yyyy", {
|
|
594
|
+
locale: pt3
|
|
459
595
|
}) : "";
|
|
460
596
|
function summariseDateFilter(value, presets, operators, units, labels) {
|
|
461
597
|
if (value.mode === "preset") {
|
|
@@ -511,6 +647,9 @@ var DEFAULT_LABELS = {
|
|
|
511
647
|
removeOffset: "Remove offset",
|
|
512
648
|
fallback: "Date"
|
|
513
649
|
};
|
|
650
|
+
|
|
651
|
+
// src/blocks/date-filter/date-filter.tsx
|
|
652
|
+
import { Fragment, jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
514
653
|
function DateFilter({
|
|
515
654
|
value,
|
|
516
655
|
onChange,
|
|
@@ -522,9 +661,9 @@ function DateFilter({
|
|
|
522
661
|
}) {
|
|
523
662
|
const locale = useUiLocale();
|
|
524
663
|
const resolvedLabels = useUiLabels("dateFilter", DEFAULT_LABELS, labels);
|
|
525
|
-
const [open, setOpen] =
|
|
526
|
-
const [panel, setPanel] =
|
|
527
|
-
const [draft, setDraft] =
|
|
664
|
+
const [open, setOpen] = useState3(false);
|
|
665
|
+
const [panel, setPanel] = useState3("root");
|
|
666
|
+
const [draft, setDraft] = useState3(value);
|
|
528
667
|
const context = {
|
|
529
668
|
value,
|
|
530
669
|
draft,
|
|
@@ -545,7 +684,7 @@ function DateFilter({
|
|
|
545
684
|
setPanel("root");
|
|
546
685
|
}
|
|
547
686
|
};
|
|
548
|
-
return /* @__PURE__ */
|
|
687
|
+
return /* @__PURE__ */ jsx5(DateFilterProvider, { value: context, children: /* @__PURE__ */ jsx5(
|
|
549
688
|
Popover,
|
|
550
689
|
{
|
|
551
690
|
open,
|
|
@@ -555,15 +694,15 @@ function DateFilter({
|
|
|
555
694
|
setPanel("root");
|
|
556
695
|
}
|
|
557
696
|
},
|
|
558
|
-
children: children ?? /* @__PURE__ */
|
|
559
|
-
/* @__PURE__ */
|
|
560
|
-
/* @__PURE__ */
|
|
561
|
-
/* @__PURE__ */
|
|
562
|
-
/* @__PURE__ */
|
|
563
|
-
/* @__PURE__ */
|
|
564
|
-
/* @__PURE__ */
|
|
565
|
-
/* @__PURE__ */
|
|
566
|
-
/* @__PURE__ */
|
|
697
|
+
children: children ?? /* @__PURE__ */ jsxs5(Fragment, { children: [
|
|
698
|
+
/* @__PURE__ */ jsx5(DateFilterTrigger, {}),
|
|
699
|
+
/* @__PURE__ */ jsxs5(DateFilterContent, { children: [
|
|
700
|
+
/* @__PURE__ */ jsx5(DateFilterAll, {}),
|
|
701
|
+
/* @__PURE__ */ jsx5(DateFilterSeparator, {}),
|
|
702
|
+
/* @__PURE__ */ jsx5(DateFilterPresets, {}),
|
|
703
|
+
/* @__PURE__ */ jsx5(DateFilterSeparator, {}),
|
|
704
|
+
/* @__PURE__ */ jsx5(DateFilterFixed, {}),
|
|
705
|
+
/* @__PURE__ */ jsx5(DateFilterRelative, {})
|
|
567
706
|
] })
|
|
568
707
|
] })
|
|
569
708
|
}
|
|
@@ -574,13 +713,13 @@ function DateFilterTrigger({
|
|
|
574
713
|
children
|
|
575
714
|
}) {
|
|
576
715
|
const { value, presets, operators, units, labels } = useDateFilter();
|
|
577
|
-
return /* @__PURE__ */
|
|
716
|
+
return /* @__PURE__ */ jsx5(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs5(
|
|
578
717
|
Button,
|
|
579
718
|
{
|
|
580
719
|
variant: "outline",
|
|
581
720
|
className: cn("gap-2 justify-start", className),
|
|
582
721
|
children: [
|
|
583
|
-
/* @__PURE__ */
|
|
722
|
+
/* @__PURE__ */ jsx5(CalendarDays2, { className: "size-4" }),
|
|
584
723
|
children ?? summariseDateFilter(
|
|
585
724
|
value,
|
|
586
725
|
presets,
|
|
@@ -597,10 +736,10 @@ function DateFilterContent({
|
|
|
597
736
|
className
|
|
598
737
|
}) {
|
|
599
738
|
const { panel } = useDateFilter();
|
|
600
|
-
return /* @__PURE__ */
|
|
601
|
-
panel === "root" && /* @__PURE__ */
|
|
602
|
-
panel === "fixed" && /* @__PURE__ */
|
|
603
|
-
panel === "relative" && /* @__PURE__ */
|
|
739
|
+
return /* @__PURE__ */ jsxs5(PopoverContent, { align: "start", className: cn("p-0 w-auto", className), children: [
|
|
740
|
+
panel === "root" && /* @__PURE__ */ jsx5("div", { className: "w-64 py-2 flex flex-col", children }),
|
|
741
|
+
panel === "fixed" && /* @__PURE__ */ jsx5(DateFilterFixedPanel, {}),
|
|
742
|
+
panel === "relative" && /* @__PURE__ */ jsx5(DateFilterRelativePanel, {})
|
|
604
743
|
] });
|
|
605
744
|
}
|
|
606
745
|
function DateFilterItem({
|
|
@@ -608,7 +747,7 @@ function DateFilterItem({
|
|
|
608
747
|
onSelect,
|
|
609
748
|
children
|
|
610
749
|
}) {
|
|
611
|
-
return /* @__PURE__ */
|
|
750
|
+
return /* @__PURE__ */ jsx5(
|
|
612
751
|
"button",
|
|
613
752
|
{
|
|
614
753
|
type: "button",
|
|
@@ -623,11 +762,11 @@ function DateFilterItem({
|
|
|
623
762
|
);
|
|
624
763
|
}
|
|
625
764
|
function DateFilterSeparator() {
|
|
626
|
-
return /* @__PURE__ */
|
|
765
|
+
return /* @__PURE__ */ jsx5("div", { "data-slot": "date-filter-separator", className: "mx-1 my-2 border-t" });
|
|
627
766
|
}
|
|
628
767
|
function DateFilterAll({ children }) {
|
|
629
768
|
const { value, labels, commit } = useDateFilter();
|
|
630
|
-
return /* @__PURE__ */
|
|
769
|
+
return /* @__PURE__ */ jsx5(
|
|
631
770
|
DateFilterItem,
|
|
632
771
|
{
|
|
633
772
|
active: value.mode === "all",
|
|
@@ -639,7 +778,7 @@ function DateFilterAll({ children }) {
|
|
|
639
778
|
function DateFilterPresets({ only }) {
|
|
640
779
|
const { value, presets, commit } = useDateFilter();
|
|
641
780
|
const visible = only ? presets.filter((preset) => only.includes(preset.value)) : presets;
|
|
642
|
-
return /* @__PURE__ */
|
|
781
|
+
return /* @__PURE__ */ jsx5(Fragment, { children: visible.map((preset) => /* @__PURE__ */ jsx5(
|
|
643
782
|
DateFilterItem,
|
|
644
783
|
{
|
|
645
784
|
active: value.mode === "preset" && value.preset === preset.value,
|
|
@@ -651,7 +790,7 @@ function DateFilterPresets({ only }) {
|
|
|
651
790
|
}
|
|
652
791
|
function DateFilterFixed({ children }) {
|
|
653
792
|
const { value, labels, openPanel } = useDateFilter();
|
|
654
|
-
return /* @__PURE__ */
|
|
793
|
+
return /* @__PURE__ */ jsx5(
|
|
655
794
|
DateFilterItem,
|
|
656
795
|
{
|
|
657
796
|
active: value.mode === "fixed",
|
|
@@ -667,7 +806,7 @@ function DateFilterFixed({ children }) {
|
|
|
667
806
|
}
|
|
668
807
|
function DateFilterRelative({ children }) {
|
|
669
808
|
const { value, labels, openPanel } = useDateFilter();
|
|
670
|
-
return /* @__PURE__ */
|
|
809
|
+
return /* @__PURE__ */ jsx5(
|
|
671
810
|
DateFilterItem,
|
|
672
811
|
{
|
|
673
812
|
active: value.mode === "relative",
|
|
@@ -803,6 +942,9 @@ function encodeRelative(filter) {
|
|
|
803
942
|
}
|
|
804
943
|
return value;
|
|
805
944
|
}
|
|
945
|
+
|
|
946
|
+
// src/blocks/form-overlay.tsx
|
|
947
|
+
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
806
948
|
var formOverlayDefaultLabels = {
|
|
807
949
|
cancelLabel: "Cancel",
|
|
808
950
|
saveLabel: "Save",
|
|
@@ -818,13 +960,13 @@ function FormOverlayActions({
|
|
|
818
960
|
onSave,
|
|
819
961
|
slotName = "form-overlay-actions"
|
|
820
962
|
}) {
|
|
821
|
-
return /* @__PURE__ */
|
|
963
|
+
return /* @__PURE__ */ jsxs6(
|
|
822
964
|
"div",
|
|
823
965
|
{
|
|
824
966
|
className: cn("gap-2 flex items-center justify-end", className),
|
|
825
967
|
"data-slot": slotName,
|
|
826
968
|
children: [
|
|
827
|
-
/* @__PURE__ */
|
|
969
|
+
/* @__PURE__ */ jsx6(
|
|
828
970
|
Button,
|
|
829
971
|
{
|
|
830
972
|
type: "button",
|
|
@@ -834,7 +976,7 @@ function FormOverlayActions({
|
|
|
834
976
|
children: labels.cancelLabel
|
|
835
977
|
}
|
|
836
978
|
),
|
|
837
|
-
/* @__PURE__ */
|
|
979
|
+
/* @__PURE__ */ jsx6(
|
|
838
980
|
Button,
|
|
839
981
|
{
|
|
840
982
|
type: submit ? "submit" : "button",
|
|
@@ -850,6 +992,9 @@ function FormOverlayActions({
|
|
|
850
992
|
}
|
|
851
993
|
);
|
|
852
994
|
}
|
|
995
|
+
|
|
996
|
+
// src/blocks/detail-edit-sheet.tsx
|
|
997
|
+
import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
853
998
|
function DetailEditSheet({
|
|
854
999
|
open,
|
|
855
1000
|
onOpenChange,
|
|
@@ -878,7 +1023,7 @@ function DetailEditSheet({
|
|
|
878
1023
|
onCancel?.();
|
|
879
1024
|
onOpenChange(false);
|
|
880
1025
|
};
|
|
881
|
-
return /* @__PURE__ */
|
|
1026
|
+
return /* @__PURE__ */ jsx7(
|
|
882
1027
|
FloatingSheet,
|
|
883
1028
|
{
|
|
884
1029
|
open,
|
|
@@ -887,16 +1032,16 @@ function DetailEditSheet({
|
|
|
887
1032
|
description,
|
|
888
1033
|
persistent: true,
|
|
889
1034
|
className,
|
|
890
|
-
children: /* @__PURE__ */
|
|
1035
|
+
children: /* @__PURE__ */ jsxs7(
|
|
891
1036
|
"form",
|
|
892
1037
|
{
|
|
893
1038
|
onSubmit: handleSubmit,
|
|
894
1039
|
className: "min-h-0 flex flex-1 flex-col",
|
|
895
1040
|
"data-slot": slotName,
|
|
896
1041
|
children: [
|
|
897
|
-
/* @__PURE__ */
|
|
898
|
-
/* @__PURE__ */
|
|
899
|
-
/* @__PURE__ */
|
|
1042
|
+
/* @__PURE__ */ jsx7(FloatingSheetBody, { children }),
|
|
1043
|
+
/* @__PURE__ */ jsx7(Separator, {}),
|
|
1044
|
+
/* @__PURE__ */ jsx7(FloatingSheetFooter, { children: /* @__PURE__ */ jsx7(
|
|
900
1045
|
FormOverlayActions,
|
|
901
1046
|
{
|
|
902
1047
|
submit: true,
|
|
@@ -912,6 +1057,9 @@ function DetailEditSheet({
|
|
|
912
1057
|
}
|
|
913
1058
|
);
|
|
914
1059
|
}
|
|
1060
|
+
|
|
1061
|
+
// src/blocks/form-dialog.tsx
|
|
1062
|
+
import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
915
1063
|
function FormDialog({
|
|
916
1064
|
open,
|
|
917
1065
|
onOpenChange,
|
|
@@ -945,7 +1093,7 @@ function FormDialog({
|
|
|
945
1093
|
event.preventDefault();
|
|
946
1094
|
}
|
|
947
1095
|
};
|
|
948
|
-
return /* @__PURE__ */
|
|
1096
|
+
return /* @__PURE__ */ jsx8(
|
|
949
1097
|
Dialog,
|
|
950
1098
|
{
|
|
951
1099
|
open,
|
|
@@ -955,7 +1103,7 @@ function FormDialog({
|
|
|
955
1103
|
}
|
|
956
1104
|
onOpenChange(next);
|
|
957
1105
|
},
|
|
958
|
-
children: /* @__PURE__ */
|
|
1106
|
+
children: /* @__PURE__ */ jsx8(
|
|
959
1107
|
DialogContent,
|
|
960
1108
|
{
|
|
961
1109
|
...description ? {} : { "aria-describedby": void 0 },
|
|
@@ -963,18 +1111,18 @@ function FormDialog({
|
|
|
963
1111
|
onEscapeKeyDown: blockWhileProcessing,
|
|
964
1112
|
onInteractOutside: blockWhileProcessing,
|
|
965
1113
|
slotName,
|
|
966
|
-
children: /* @__PURE__ */
|
|
1114
|
+
children: /* @__PURE__ */ jsxs8(
|
|
967
1115
|
"form",
|
|
968
1116
|
{
|
|
969
1117
|
"data-slot": "form-dialog-form",
|
|
970
1118
|
onSubmit: handleSubmit,
|
|
971
1119
|
className: "grid max-h-[calc(100dvh-8rem)] grid-rows-[auto_minmax(0,1fr)_auto]",
|
|
972
1120
|
children: [
|
|
973
|
-
/* @__PURE__ */
|
|
974
|
-
/* @__PURE__ */
|
|
975
|
-
description ? /* @__PURE__ */
|
|
1121
|
+
/* @__PURE__ */ jsxs8(DialogHeader, { className: "text-left", children: [
|
|
1122
|
+
/* @__PURE__ */ jsx8(DialogTitle, { children: title }),
|
|
1123
|
+
description ? /* @__PURE__ */ jsx8(DialogDescription, { children: description }) : null
|
|
976
1124
|
] }),
|
|
977
|
-
/* @__PURE__ */
|
|
1125
|
+
/* @__PURE__ */ jsx8(
|
|
978
1126
|
"div",
|
|
979
1127
|
{
|
|
980
1128
|
"data-slot": "form-dialog-body",
|
|
@@ -982,7 +1130,7 @@ function FormDialog({
|
|
|
982
1130
|
children
|
|
983
1131
|
}
|
|
984
1132
|
),
|
|
985
|
-
/* @__PURE__ */
|
|
1133
|
+
/* @__PURE__ */ jsx8(DialogFooter, { children: /* @__PURE__ */ jsx8(
|
|
986
1134
|
FormOverlayActions,
|
|
987
1135
|
{
|
|
988
1136
|
submit: true,
|
|
@@ -1001,6 +1149,9 @@ function FormDialog({
|
|
|
1001
1149
|
}
|
|
1002
1150
|
);
|
|
1003
1151
|
}
|
|
1152
|
+
|
|
1153
|
+
// src/blocks/info-field.tsx
|
|
1154
|
+
import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1004
1155
|
function copyableText(value, copyValue) {
|
|
1005
1156
|
if (copyValue !== void 0) {
|
|
1006
1157
|
return copyValue.trim();
|
|
@@ -1023,15 +1174,15 @@ function InfoField({
|
|
|
1023
1174
|
slotName = "info-field"
|
|
1024
1175
|
}) {
|
|
1025
1176
|
const text = copyableText(value, copyValue);
|
|
1026
|
-
return /* @__PURE__ */
|
|
1177
|
+
return /* @__PURE__ */ jsxs9(
|
|
1027
1178
|
"div",
|
|
1028
1179
|
{
|
|
1029
1180
|
className: cn("gap-3 flex items-center", className),
|
|
1030
1181
|
"data-slot": slotName,
|
|
1031
1182
|
children: [
|
|
1032
|
-
/* @__PURE__ */
|
|
1033
|
-
/* @__PURE__ */
|
|
1034
|
-
/* @__PURE__ */
|
|
1183
|
+
/* @__PURE__ */ jsx9("div", { className: cn("p-2 rounded-xl bg-muted", iconClassName), children: /* @__PURE__ */ jsx9(Icon, { className: "size-5 text-muted-foreground" }) }),
|
|
1184
|
+
/* @__PURE__ */ jsxs9("div", { children: [
|
|
1185
|
+
/* @__PURE__ */ jsx9(
|
|
1035
1186
|
"p",
|
|
1036
1187
|
{
|
|
1037
1188
|
"data-slot": "info-field-label",
|
|
@@ -1039,14 +1190,14 @@ function InfoField({
|
|
|
1039
1190
|
children: label
|
|
1040
1191
|
}
|
|
1041
1192
|
),
|
|
1042
|
-
/* @__PURE__ */
|
|
1193
|
+
/* @__PURE__ */ jsxs9(
|
|
1043
1194
|
"p",
|
|
1044
1195
|
{
|
|
1045
1196
|
"data-slot": "info-field-value",
|
|
1046
1197
|
className: "gap-1 font-semibold flex items-center",
|
|
1047
1198
|
children: [
|
|
1048
1199
|
value,
|
|
1049
|
-
copyable && text !== "" && /* @__PURE__ */
|
|
1200
|
+
copyable && text !== "" && /* @__PURE__ */ jsx9(
|
|
1050
1201
|
CopyButton,
|
|
1051
1202
|
{
|
|
1052
1203
|
value: text,
|
|
@@ -1063,8 +1214,11 @@ function InfoField({
|
|
|
1063
1214
|
);
|
|
1064
1215
|
}
|
|
1065
1216
|
function InfoFieldGroup({ children, className }) {
|
|
1066
|
-
return /* @__PURE__ */
|
|
1217
|
+
return /* @__PURE__ */ jsx9("div", { className: cn("space-y-4", className), children });
|
|
1067
1218
|
}
|
|
1219
|
+
|
|
1220
|
+
// src/blocks/localized-fields.tsx
|
|
1221
|
+
import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1068
1222
|
function LocalizedFields({
|
|
1069
1223
|
locales,
|
|
1070
1224
|
localeLabels,
|
|
@@ -1075,13 +1229,13 @@ function LocalizedFields({
|
|
|
1075
1229
|
defaultLocale,
|
|
1076
1230
|
className
|
|
1077
1231
|
}) {
|
|
1078
|
-
return /* @__PURE__ */
|
|
1232
|
+
return /* @__PURE__ */ jsxs10(
|
|
1079
1233
|
Tabs,
|
|
1080
1234
|
{
|
|
1081
1235
|
defaultValue: defaultLocale ?? locales[0],
|
|
1082
1236
|
className: cn("w-full", className),
|
|
1083
1237
|
children: [
|
|
1084
|
-
/* @__PURE__ */
|
|
1238
|
+
/* @__PURE__ */ jsx10(TabsList, { className: "mb-4 rounded-2xl p-1.5 flex h-auto w-full justify-start overflow-x-auto bg-muted", children: locales.map((locale) => /* @__PURE__ */ jsx10(
|
|
1085
1239
|
TabsTrigger,
|
|
1086
1240
|
{
|
|
1087
1241
|
value: locale,
|
|
@@ -1090,13 +1244,13 @@ function LocalizedFields({
|
|
|
1090
1244
|
},
|
|
1091
1245
|
locale
|
|
1092
1246
|
)) }),
|
|
1093
|
-
locales.map((locale) => /* @__PURE__ */
|
|
1247
|
+
locales.map((locale) => /* @__PURE__ */ jsx10(TabsContent, { value: locale, className: "mt-0", children: /* @__PURE__ */ jsx10("div", { className: "gap-4 lg:grid-cols-2 grid", children: fields.map((field) => {
|
|
1094
1248
|
const fieldId = `${field.name}-${locale}`;
|
|
1095
1249
|
const error = errors?.[`${field.name}.${locale}`];
|
|
1096
1250
|
const value = values[field.name]?.[locale] ?? "";
|
|
1097
|
-
return /* @__PURE__ */
|
|
1098
|
-
/* @__PURE__ */
|
|
1099
|
-
field.type === "textarea" ? /* @__PURE__ */
|
|
1251
|
+
return /* @__PURE__ */ jsxs10("div", { className: "space-y-2", children: [
|
|
1252
|
+
/* @__PURE__ */ jsx10(Label, { htmlFor: fieldId, children: field.label }),
|
|
1253
|
+
field.type === "textarea" ? /* @__PURE__ */ jsx10(
|
|
1100
1254
|
Textarea,
|
|
1101
1255
|
{
|
|
1102
1256
|
id: fieldId,
|
|
@@ -1108,7 +1262,7 @@ function LocalizedFields({
|
|
|
1108
1262
|
event.target.value
|
|
1109
1263
|
)
|
|
1110
1264
|
}
|
|
1111
|
-
) : /* @__PURE__ */
|
|
1265
|
+
) : /* @__PURE__ */ jsx10(
|
|
1112
1266
|
Input,
|
|
1113
1267
|
{
|
|
1114
1268
|
id: fieldId,
|
|
@@ -1120,13 +1274,16 @@ function LocalizedFields({
|
|
|
1120
1274
|
)
|
|
1121
1275
|
}
|
|
1122
1276
|
),
|
|
1123
|
-
error && /* @__PURE__ */
|
|
1277
|
+
error && /* @__PURE__ */ jsx10("p", { className: "text-xs font-medium text-destructive", children: error })
|
|
1124
1278
|
] }, field.name);
|
|
1125
1279
|
}) }) }, locale))
|
|
1126
1280
|
]
|
|
1127
1281
|
}
|
|
1128
1282
|
);
|
|
1129
1283
|
}
|
|
1284
|
+
|
|
1285
|
+
// src/blocks/section-header.tsx
|
|
1286
|
+
import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1130
1287
|
function SectionHeader({
|
|
1131
1288
|
icon,
|
|
1132
1289
|
title,
|
|
@@ -1134,7 +1291,7 @@ function SectionHeader({
|
|
|
1134
1291
|
control,
|
|
1135
1292
|
className
|
|
1136
1293
|
}) {
|
|
1137
|
-
return /* @__PURE__ */
|
|
1294
|
+
return /* @__PURE__ */ jsxs11(
|
|
1138
1295
|
"div",
|
|
1139
1296
|
{
|
|
1140
1297
|
className: cn(
|
|
@@ -1142,11 +1299,11 @@ function SectionHeader({
|
|
|
1142
1299
|
className
|
|
1143
1300
|
),
|
|
1144
1301
|
children: [
|
|
1145
|
-
/* @__PURE__ */
|
|
1302
|
+
/* @__PURE__ */ jsxs11("div", { className: "gap-3 flex items-center", children: [
|
|
1146
1303
|
icon,
|
|
1147
|
-
/* @__PURE__ */
|
|
1148
|
-
/* @__PURE__ */
|
|
1149
|
-
description && /* @__PURE__ */
|
|
1304
|
+
/* @__PURE__ */ jsxs11("div", { children: [
|
|
1305
|
+
/* @__PURE__ */ jsx11("h2", { className: "text-lg font-bold text-foreground", children: title }),
|
|
1306
|
+
description && /* @__PURE__ */ jsx11("p", { className: "text-sm font-medium text-muted-foreground", children: description })
|
|
1150
1307
|
] })
|
|
1151
1308
|
] }),
|
|
1152
1309
|
control
|
|
@@ -1154,6 +1311,9 @@ function SectionHeader({
|
|
|
1154
1311
|
}
|
|
1155
1312
|
);
|
|
1156
1313
|
}
|
|
1314
|
+
|
|
1315
|
+
// src/blocks/settings-card.tsx
|
|
1316
|
+
import { jsx as jsx12, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1157
1317
|
function SettingsCard({
|
|
1158
1318
|
icon: Icon,
|
|
1159
1319
|
iconClassName,
|
|
@@ -1165,7 +1325,7 @@ function SettingsCard({
|
|
|
1165
1325
|
className,
|
|
1166
1326
|
slotName = "settings-card"
|
|
1167
1327
|
}) {
|
|
1168
|
-
return /* @__PURE__ */
|
|
1328
|
+
return /* @__PURE__ */ jsxs12(
|
|
1169
1329
|
"section",
|
|
1170
1330
|
{
|
|
1171
1331
|
"data-inset": inset || void 0,
|
|
@@ -1177,21 +1337,21 @@ function SettingsCard({
|
|
|
1177
1337
|
),
|
|
1178
1338
|
"data-slot": slotName,
|
|
1179
1339
|
children: [
|
|
1180
|
-
/* @__PURE__ */
|
|
1181
|
-
/* @__PURE__ */
|
|
1182
|
-
/* @__PURE__ */
|
|
1340
|
+
/* @__PURE__ */ jsxs12("div", { className: "gap-4 sm:flex-row sm:items-center sm:justify-between flex flex-col", children: [
|
|
1341
|
+
/* @__PURE__ */ jsxs12("div", { className: "gap-3 flex items-center", children: [
|
|
1342
|
+
/* @__PURE__ */ jsx12(
|
|
1183
1343
|
"div",
|
|
1184
1344
|
{
|
|
1185
1345
|
className: cn(
|
|
1186
1346
|
"size-11 rounded-2xl flex items-center justify-center",
|
|
1187
1347
|
iconClassName ?? "bg-muted text-muted-foreground"
|
|
1188
1348
|
),
|
|
1189
|
-
children: /* @__PURE__ */
|
|
1349
|
+
children: /* @__PURE__ */ jsx12(Icon, { className: "size-5" })
|
|
1190
1350
|
}
|
|
1191
1351
|
),
|
|
1192
|
-
/* @__PURE__ */
|
|
1193
|
-
/* @__PURE__ */
|
|
1194
|
-
/* @__PURE__ */
|
|
1352
|
+
/* @__PURE__ */ jsxs12("div", { children: [
|
|
1353
|
+
/* @__PURE__ */ jsx12("h2", { className: "text-lg font-bold text-foreground", children: title }),
|
|
1354
|
+
/* @__PURE__ */ jsx12("p", { className: "text-sm font-medium text-muted-foreground", children: description })
|
|
1195
1355
|
] })
|
|
1196
1356
|
] }),
|
|
1197
1357
|
control
|
|
@@ -1209,7 +1369,7 @@ function SettingsPanel({
|
|
|
1209
1369
|
className,
|
|
1210
1370
|
slotName = "settings-panel"
|
|
1211
1371
|
}) {
|
|
1212
|
-
return /* @__PURE__ */
|
|
1372
|
+
return /* @__PURE__ */ jsxs12(
|
|
1213
1373
|
"div",
|
|
1214
1374
|
{
|
|
1215
1375
|
"data-inset": inset || void 0,
|
|
@@ -1221,9 +1381,9 @@ function SettingsPanel({
|
|
|
1221
1381
|
),
|
|
1222
1382
|
"data-slot": slotName,
|
|
1223
1383
|
children: [
|
|
1224
|
-
(title || description) && /* @__PURE__ */
|
|
1225
|
-
title && /* @__PURE__ */
|
|
1226
|
-
description && /* @__PURE__ */
|
|
1384
|
+
(title || description) && /* @__PURE__ */ jsxs12("div", { children: [
|
|
1385
|
+
title && /* @__PURE__ */ jsx12("h3", { className: "text-sm font-semibold text-foreground", children: title }),
|
|
1386
|
+
description && /* @__PURE__ */ jsx12("p", { className: "mt-1 text-xs font-medium text-muted-foreground", children: description })
|
|
1227
1387
|
] }),
|
|
1228
1388
|
children
|
|
1229
1389
|
]
|
|
@@ -1238,9 +1398,9 @@ function ToggleRow({
|
|
|
1238
1398
|
onChange,
|
|
1239
1399
|
disabled
|
|
1240
1400
|
}) {
|
|
1241
|
-
return /* @__PURE__ */
|
|
1242
|
-
/* @__PURE__ */
|
|
1243
|
-
/* @__PURE__ */
|
|
1401
|
+
return /* @__PURE__ */ jsxs12("div", { className: "gap-4 py-1 flex items-center justify-between", children: [
|
|
1402
|
+
/* @__PURE__ */ jsxs12("div", { className: "space-y-0.5", children: [
|
|
1403
|
+
/* @__PURE__ */ jsx12(
|
|
1244
1404
|
Label,
|
|
1245
1405
|
{
|
|
1246
1406
|
htmlFor: id,
|
|
@@ -1248,9 +1408,9 @@ function ToggleRow({
|
|
|
1248
1408
|
children: label
|
|
1249
1409
|
}
|
|
1250
1410
|
),
|
|
1251
|
-
description && /* @__PURE__ */
|
|
1411
|
+
description && /* @__PURE__ */ jsx12("p", { className: "text-xs font-medium text-muted-foreground", children: description })
|
|
1252
1412
|
] }),
|
|
1253
|
-
/* @__PURE__ */
|
|
1413
|
+
/* @__PURE__ */ jsx12(
|
|
1254
1414
|
Switch,
|
|
1255
1415
|
{
|
|
1256
1416
|
id,
|
|
@@ -1261,6 +1421,10 @@ function ToggleRow({
|
|
|
1261
1421
|
)
|
|
1262
1422
|
] });
|
|
1263
1423
|
}
|
|
1424
|
+
|
|
1425
|
+
// src/blocks/settings-fields.tsx
|
|
1426
|
+
import { useId } from "react";
|
|
1427
|
+
import { jsx as jsx13, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1264
1428
|
function SettingsField({
|
|
1265
1429
|
id,
|
|
1266
1430
|
label,
|
|
@@ -1273,16 +1437,16 @@ function SettingsField({
|
|
|
1273
1437
|
}) {
|
|
1274
1438
|
const generated = useId();
|
|
1275
1439
|
const fieldId = id ?? generated;
|
|
1276
|
-
return /* @__PURE__ */
|
|
1440
|
+
return /* @__PURE__ */ jsxs13(
|
|
1277
1441
|
"div",
|
|
1278
1442
|
{
|
|
1279
1443
|
"data-invalid": error ? true : void 0,
|
|
1280
1444
|
className: cn("space-y-2 py-1", className),
|
|
1281
1445
|
"data-slot": slotName,
|
|
1282
1446
|
children: [
|
|
1283
|
-
/* @__PURE__ */
|
|
1447
|
+
/* @__PURE__ */ jsxs13(Label, { htmlFor: fieldId, children: [
|
|
1284
1448
|
label,
|
|
1285
|
-
required && /* @__PURE__ */
|
|
1449
|
+
required && /* @__PURE__ */ jsx13(
|
|
1286
1450
|
"span",
|
|
1287
1451
|
{
|
|
1288
1452
|
"data-slot": "settings-field-required",
|
|
@@ -1293,7 +1457,7 @@ function SettingsField({
|
|
|
1293
1457
|
)
|
|
1294
1458
|
] }),
|
|
1295
1459
|
children(fieldId),
|
|
1296
|
-
description && /* @__PURE__ */
|
|
1460
|
+
description && /* @__PURE__ */ jsx13(
|
|
1297
1461
|
"p",
|
|
1298
1462
|
{
|
|
1299
1463
|
"data-slot": "settings-field-description",
|
|
@@ -1301,7 +1465,7 @@ function SettingsField({
|
|
|
1301
1465
|
children: description
|
|
1302
1466
|
}
|
|
1303
1467
|
),
|
|
1304
|
-
/* @__PURE__ */
|
|
1468
|
+
/* @__PURE__ */ jsx13(FieldError, { message: error })
|
|
1305
1469
|
]
|
|
1306
1470
|
}
|
|
1307
1471
|
);
|
|
@@ -1315,7 +1479,7 @@ function TextField({
|
|
|
1315
1479
|
slotName = "text-field",
|
|
1316
1480
|
...field
|
|
1317
1481
|
}) {
|
|
1318
|
-
return /* @__PURE__ */
|
|
1482
|
+
return /* @__PURE__ */ jsx13(SettingsField, { ...field, children: (fieldId) => /* @__PURE__ */ jsx13(
|
|
1319
1483
|
Input,
|
|
1320
1484
|
{
|
|
1321
1485
|
id: fieldId,
|
|
@@ -1340,7 +1504,7 @@ function NumberField({
|
|
|
1340
1504
|
slotName = "number-field",
|
|
1341
1505
|
...field
|
|
1342
1506
|
}) {
|
|
1343
|
-
return /* @__PURE__ */
|
|
1507
|
+
return /* @__PURE__ */ jsx13(SettingsField, { ...field, children: (fieldId) => /* @__PURE__ */ jsx13(
|
|
1344
1508
|
Input,
|
|
1345
1509
|
{
|
|
1346
1510
|
id: fieldId,
|
|
@@ -1369,7 +1533,7 @@ function DateField({
|
|
|
1369
1533
|
slotName = "date-field",
|
|
1370
1534
|
...field
|
|
1371
1535
|
}) {
|
|
1372
|
-
return /* @__PURE__ */
|
|
1536
|
+
return /* @__PURE__ */ jsx13(SettingsField, { ...field, children: (fieldId) => /* @__PURE__ */ jsx13(
|
|
1373
1537
|
Input,
|
|
1374
1538
|
{
|
|
1375
1539
|
id: fieldId,
|
|
@@ -1393,23 +1557,23 @@ function SelectField({
|
|
|
1393
1557
|
slotName = "select-field",
|
|
1394
1558
|
...field
|
|
1395
1559
|
}) {
|
|
1396
|
-
return /* @__PURE__ */
|
|
1560
|
+
return /* @__PURE__ */ jsx13(SettingsField, { ...field, children: (fieldId) => /* @__PURE__ */ jsxs13(
|
|
1397
1561
|
Select,
|
|
1398
1562
|
{
|
|
1399
1563
|
value,
|
|
1400
1564
|
onValueChange: onChange,
|
|
1401
1565
|
disabled,
|
|
1402
1566
|
children: [
|
|
1403
|
-
/* @__PURE__ */
|
|
1567
|
+
/* @__PURE__ */ jsx13(
|
|
1404
1568
|
SelectTrigger,
|
|
1405
1569
|
{
|
|
1406
1570
|
id: fieldId,
|
|
1407
1571
|
slotName,
|
|
1408
1572
|
"aria-invalid": field.error ? true : void 0,
|
|
1409
|
-
children: /* @__PURE__ */
|
|
1573
|
+
children: /* @__PURE__ */ jsx13(SelectValue, { placeholder })
|
|
1410
1574
|
}
|
|
1411
1575
|
),
|
|
1412
|
-
/* @__PURE__ */
|
|
1576
|
+
/* @__PURE__ */ jsx13(SelectContent, { children: options.map((option) => /* @__PURE__ */ jsx13(
|
|
1413
1577
|
SelectItem,
|
|
1414
1578
|
{
|
|
1415
1579
|
value: option.value,
|
|
@@ -1422,7 +1586,12 @@ function SelectField({
|
|
|
1422
1586
|
}
|
|
1423
1587
|
) });
|
|
1424
1588
|
}
|
|
1425
|
-
|
|
1589
|
+
|
|
1590
|
+
// src/blocks/settings-page.tsx
|
|
1591
|
+
import { ArrowLeft, ChevronRight } from "lucide-react";
|
|
1592
|
+
import { createContext as createContext2, useContext as useContext2 } from "react";
|
|
1593
|
+
import { jsx as jsx14, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1594
|
+
var SettingsLinkContext = createContext2(void 0);
|
|
1426
1595
|
function SettingsPage({
|
|
1427
1596
|
title,
|
|
1428
1597
|
description,
|
|
@@ -1432,7 +1601,7 @@ function SettingsPage({
|
|
|
1432
1601
|
className,
|
|
1433
1602
|
slotName = "settings-page"
|
|
1434
1603
|
}) {
|
|
1435
|
-
return /* @__PURE__ */
|
|
1604
|
+
return /* @__PURE__ */ jsx14(SettingsLinkContext.Provider, { value: linkComponent, children: /* @__PURE__ */ jsxs14(
|
|
1436
1605
|
"div",
|
|
1437
1606
|
{
|
|
1438
1607
|
className: cn(
|
|
@@ -1441,7 +1610,7 @@ function SettingsPage({
|
|
|
1441
1610
|
),
|
|
1442
1611
|
"data-slot": slotName,
|
|
1443
1612
|
children: [
|
|
1444
|
-
title && /* @__PURE__ */
|
|
1613
|
+
title && /* @__PURE__ */ jsx14(
|
|
1445
1614
|
SectionHeader,
|
|
1446
1615
|
{
|
|
1447
1616
|
title,
|
|
@@ -1472,9 +1641,9 @@ function SettingsSection({
|
|
|
1472
1641
|
const labels = useUiLabels("settings", settingsLabels, {
|
|
1473
1642
|
back: backLabel
|
|
1474
1643
|
});
|
|
1475
|
-
const contextLink =
|
|
1644
|
+
const contextLink = useContext2(SettingsLinkContext);
|
|
1476
1645
|
const Link = resolveLink(linkComponent ?? contextLink);
|
|
1477
|
-
return /* @__PURE__ */
|
|
1646
|
+
return /* @__PURE__ */ jsxs14(
|
|
1478
1647
|
"section",
|
|
1479
1648
|
{
|
|
1480
1649
|
className: cn(
|
|
@@ -1484,19 +1653,19 @@ function SettingsSection({
|
|
|
1484
1653
|
),
|
|
1485
1654
|
"data-slot": slotName,
|
|
1486
1655
|
children: [
|
|
1487
|
-
backHref && /* @__PURE__ */
|
|
1656
|
+
backHref && /* @__PURE__ */ jsxs14(
|
|
1488
1657
|
Link,
|
|
1489
1658
|
{
|
|
1490
1659
|
"data-slot": "settings-section-back",
|
|
1491
1660
|
href: backHref,
|
|
1492
1661
|
className: "gap-2 text-sm font-medium inline-flex w-fit items-center text-muted-foreground transition-colors hover:text-foreground",
|
|
1493
1662
|
children: [
|
|
1494
|
-
/* @__PURE__ */
|
|
1663
|
+
/* @__PURE__ */ jsx14(ArrowLeft, { className: "size-4" }),
|
|
1495
1664
|
labels.back
|
|
1496
1665
|
]
|
|
1497
1666
|
}
|
|
1498
1667
|
),
|
|
1499
|
-
title && /* @__PURE__ */
|
|
1668
|
+
title && /* @__PURE__ */ jsx14(
|
|
1500
1669
|
SectionHeader,
|
|
1501
1670
|
{
|
|
1502
1671
|
title,
|
|
@@ -1516,14 +1685,14 @@ function SettingsGroup({
|
|
|
1516
1685
|
className,
|
|
1517
1686
|
slotName = "settings-group"
|
|
1518
1687
|
}) {
|
|
1519
|
-
return /* @__PURE__ */
|
|
1688
|
+
return /* @__PURE__ */ jsxs14(
|
|
1520
1689
|
"div",
|
|
1521
1690
|
{
|
|
1522
1691
|
className: cn("gap-3 flex flex-col", className),
|
|
1523
1692
|
"data-slot": slotName,
|
|
1524
1693
|
children: [
|
|
1525
|
-
label && /* @__PURE__ */
|
|
1526
|
-
/* @__PURE__ */
|
|
1694
|
+
label && /* @__PURE__ */ jsx14("p", { className: "font-bold tracking-widest text-[11px] text-muted-foreground uppercase", children: label }),
|
|
1695
|
+
/* @__PURE__ */ jsx14(
|
|
1527
1696
|
"div",
|
|
1528
1697
|
{
|
|
1529
1698
|
"data-slot": "settings-group-grid",
|
|
@@ -1550,9 +1719,9 @@ function SettingsEntry({
|
|
|
1550
1719
|
className,
|
|
1551
1720
|
slotName = "settings-entry"
|
|
1552
1721
|
}) {
|
|
1553
|
-
const contextLink =
|
|
1722
|
+
const contextLink = useContext2(SettingsLinkContext);
|
|
1554
1723
|
const Link = resolveLink(linkComponent ?? contextLink);
|
|
1555
|
-
const card = /* @__PURE__ */
|
|
1724
|
+
const card = /* @__PURE__ */ jsxs14(
|
|
1556
1725
|
Card,
|
|
1557
1726
|
{
|
|
1558
1727
|
interactive: !disabled,
|
|
@@ -1564,31 +1733,31 @@ function SettingsEntry({
|
|
|
1564
1733
|
className
|
|
1565
1734
|
),
|
|
1566
1735
|
children: [
|
|
1567
|
-
/* @__PURE__ */
|
|
1736
|
+
/* @__PURE__ */ jsx14(
|
|
1568
1737
|
"span",
|
|
1569
1738
|
{
|
|
1570
1739
|
className: cn(
|
|
1571
1740
|
"size-11 flex shrink-0 items-center justify-center rounded-full",
|
|
1572
1741
|
iconClassName ?? "bg-primary/10 text-primary"
|
|
1573
1742
|
),
|
|
1574
|
-
children: /* @__PURE__ */
|
|
1743
|
+
children: /* @__PURE__ */ jsx14(Icon, { className: "size-5" })
|
|
1575
1744
|
}
|
|
1576
1745
|
),
|
|
1577
|
-
/* @__PURE__ */
|
|
1578
|
-
/* @__PURE__ */
|
|
1579
|
-
/* @__PURE__ */
|
|
1746
|
+
/* @__PURE__ */ jsxs14("span", { className: "min-w-0 flex flex-1 flex-col", children: [
|
|
1747
|
+
/* @__PURE__ */ jsxs14("span", { className: "gap-2 flex items-center", children: [
|
|
1748
|
+
/* @__PURE__ */ jsx14("span", { className: "font-bold text-foreground", children: title }),
|
|
1580
1749
|
badge
|
|
1581
1750
|
] }),
|
|
1582
|
-
description && /* @__PURE__ */
|
|
1751
|
+
description && /* @__PURE__ */ jsx14("span", { className: "text-sm font-medium text-muted-foreground", children: description })
|
|
1583
1752
|
] }),
|
|
1584
|
-
/* @__PURE__ */
|
|
1753
|
+
/* @__PURE__ */ jsx14(ChevronRight, { className: "size-4 shrink-0 text-muted-foreground" })
|
|
1585
1754
|
]
|
|
1586
1755
|
}
|
|
1587
1756
|
);
|
|
1588
1757
|
if (disabled) {
|
|
1589
|
-
return /* @__PURE__ */
|
|
1758
|
+
return /* @__PURE__ */ jsx14("div", { "data-disabled": "true", "aria-disabled": "true", "data-slot": slotName, children: card });
|
|
1590
1759
|
}
|
|
1591
|
-
return /* @__PURE__ */
|
|
1760
|
+
return /* @__PURE__ */ jsx14(
|
|
1592
1761
|
Link,
|
|
1593
1762
|
{
|
|
1594
1763
|
href,
|
|
@@ -1598,6 +1767,14 @@ function SettingsEntry({
|
|
|
1598
1767
|
}
|
|
1599
1768
|
);
|
|
1600
1769
|
}
|
|
1770
|
+
|
|
1771
|
+
// src/blocks/stat-card.tsx
|
|
1772
|
+
import {
|
|
1773
|
+
ArrowDownRight,
|
|
1774
|
+
ArrowRight,
|
|
1775
|
+
ArrowUpRight
|
|
1776
|
+
} from "lucide-react";
|
|
1777
|
+
import { jsx as jsx15, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1601
1778
|
function resolveTrend(trend) {
|
|
1602
1779
|
if (trend === null || trend === void 0 || Number.isNaN(trend)) {
|
|
1603
1780
|
return null;
|
|
@@ -1636,7 +1813,7 @@ function StatCard({
|
|
|
1636
1813
|
slotName = "stat-card"
|
|
1637
1814
|
}) {
|
|
1638
1815
|
const resolvedTrend = resolveTrend(trend);
|
|
1639
|
-
return /* @__PURE__ */
|
|
1816
|
+
return /* @__PURE__ */ jsxs15(
|
|
1640
1817
|
"div",
|
|
1641
1818
|
{
|
|
1642
1819
|
"data-inset": inset || void 0,
|
|
@@ -1648,10 +1825,10 @@ function StatCard({
|
|
|
1648
1825
|
),
|
|
1649
1826
|
"data-slot": slotName,
|
|
1650
1827
|
children: [
|
|
1651
|
-
/* @__PURE__ */
|
|
1652
|
-
/* @__PURE__ */
|
|
1653
|
-
resolvedTrend && /* @__PURE__ */
|
|
1654
|
-
/* @__PURE__ */
|
|
1828
|
+
/* @__PURE__ */ jsxs15("div", { className: "mb-4 gap-4 flex items-start justify-between", children: [
|
|
1829
|
+
/* @__PURE__ */ jsx15("div", { className: cn("rounded-2xl p-3 shrink-0", iconClassName), children: /* @__PURE__ */ jsx15(Icon, { className: "size-6" }) }),
|
|
1830
|
+
resolvedTrend && /* @__PURE__ */ jsxs15("div", { className: "min-w-0 text-right", children: [
|
|
1831
|
+
/* @__PURE__ */ jsxs15(
|
|
1655
1832
|
"span",
|
|
1656
1833
|
{
|
|
1657
1834
|
className: cn(
|
|
@@ -1660,23 +1837,23 @@ function StatCard({
|
|
|
1660
1837
|
),
|
|
1661
1838
|
children: [
|
|
1662
1839
|
resolvedTrend.label,
|
|
1663
|
-
/* @__PURE__ */
|
|
1840
|
+
/* @__PURE__ */ jsx15(resolvedTrend.icon, { className: "ml-1 size-4" })
|
|
1664
1841
|
]
|
|
1665
1842
|
}
|
|
1666
1843
|
),
|
|
1667
|
-
comparisonLabel && /* @__PURE__ */
|
|
1844
|
+
comparisonLabel && /* @__PURE__ */ jsx15("p", { className: "mt-1 font-medium tracking-wider text-[10px] whitespace-nowrap text-muted-foreground uppercase", children: comparisonLabel })
|
|
1668
1845
|
] })
|
|
1669
1846
|
] }),
|
|
1670
|
-
/* @__PURE__ */
|
|
1671
|
-
/* @__PURE__ */
|
|
1672
|
-
/* @__PURE__ */
|
|
1847
|
+
/* @__PURE__ */ jsxs15("div", { children: [
|
|
1848
|
+
/* @__PURE__ */ jsx15("p", { className: "mb-1 text-xs font-medium tracking-wider break-words text-muted-foreground uppercase", children: title }),
|
|
1849
|
+
/* @__PURE__ */ jsx15("p", { className: "text-3xl font-bold truncate text-foreground tabular-nums", children: value })
|
|
1673
1850
|
] })
|
|
1674
1851
|
]
|
|
1675
1852
|
}
|
|
1676
1853
|
);
|
|
1677
1854
|
}
|
|
1678
1855
|
function StatsGrid({ children, className }) {
|
|
1679
|
-
return /* @__PURE__ */
|
|
1856
|
+
return /* @__PURE__ */ jsx15(
|
|
1680
1857
|
"div",
|
|
1681
1858
|
{
|
|
1682
1859
|
className: cn(
|
|
@@ -1741,6 +1918,11 @@ function messageList(errors) {
|
|
|
1741
1918
|
(message) => message.length > 0
|
|
1742
1919
|
);
|
|
1743
1920
|
}
|
|
1921
|
+
|
|
1922
|
+
// src/blocks/two-factor/verify-form.tsx
|
|
1923
|
+
import { AlertCircle } from "lucide-react";
|
|
1924
|
+
import { useId as useId2, useState as useState4 } from "react";
|
|
1925
|
+
import { jsx as jsx16, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1744
1926
|
function errorMessage(reason, fallback) {
|
|
1745
1927
|
return reason instanceof Error && reason.message ? reason.message : fallback;
|
|
1746
1928
|
}
|
|
@@ -1757,11 +1939,11 @@ function TwoFactorVerifyForm({
|
|
|
1757
1939
|
slotName = "two-factor-verify-form"
|
|
1758
1940
|
}) {
|
|
1759
1941
|
const text = resolveLabels(labels);
|
|
1760
|
-
const fieldId =
|
|
1761
|
-
const [mode, setMode] =
|
|
1762
|
-
const [value, setValue] =
|
|
1763
|
-
const [pending, setPending] =
|
|
1764
|
-
const [failure, setFailure] =
|
|
1942
|
+
const fieldId = useId2();
|
|
1943
|
+
const [mode, setMode] = useState4("code");
|
|
1944
|
+
const [value, setValue] = useState4("");
|
|
1945
|
+
const [pending, setPending] = useState4(false);
|
|
1946
|
+
const [failure, setFailure] = useState4(null);
|
|
1765
1947
|
const messages = [...messageList(errors), ...messageList(failure)];
|
|
1766
1948
|
const complete = mode === "code" ? value.length === length : value.length > 0;
|
|
1767
1949
|
const handleSubmit = async (event) => {
|
|
@@ -1784,7 +1966,7 @@ function TwoFactorVerifyForm({
|
|
|
1784
1966
|
setValue("");
|
|
1785
1967
|
setFailure(null);
|
|
1786
1968
|
};
|
|
1787
|
-
return /* @__PURE__ */
|
|
1969
|
+
return /* @__PURE__ */ jsxs16(
|
|
1788
1970
|
"form",
|
|
1789
1971
|
{
|
|
1790
1972
|
"data-mode": mode,
|
|
@@ -1793,9 +1975,9 @@ function TwoFactorVerifyForm({
|
|
|
1793
1975
|
className: cn("gap-5 flex w-full flex-col", className),
|
|
1794
1976
|
"data-slot": slotName,
|
|
1795
1977
|
children: [
|
|
1796
|
-
/* @__PURE__ */
|
|
1797
|
-
/* @__PURE__ */
|
|
1798
|
-
mode === "code" ? /* @__PURE__ */
|
|
1978
|
+
/* @__PURE__ */ jsxs16("div", { className: "gap-2 flex flex-col", children: [
|
|
1979
|
+
/* @__PURE__ */ jsx16(Label, { htmlFor: fieldId, children: mode === "code" ? text.codeLabel : text.recoveryCodeLabel }),
|
|
1980
|
+
mode === "code" ? /* @__PURE__ */ jsx16(
|
|
1799
1981
|
InputOTP,
|
|
1800
1982
|
{
|
|
1801
1983
|
id: fieldId,
|
|
@@ -1806,9 +1988,9 @@ function TwoFactorVerifyForm({
|
|
|
1806
1988
|
disabled: pending,
|
|
1807
1989
|
onChange: setValue,
|
|
1808
1990
|
"aria-label": text.codeLabel,
|
|
1809
|
-
children: /* @__PURE__ */
|
|
1991
|
+
children: /* @__PURE__ */ jsx16(InputOTPGroup, { children: Array.from({ length }, (_, index) => /* @__PURE__ */ jsx16(InputOTPSlot, { index }, index)) })
|
|
1810
1992
|
}
|
|
1811
|
-
) : /* @__PURE__ */
|
|
1993
|
+
) : /* @__PURE__ */ jsx16(
|
|
1812
1994
|
Input,
|
|
1813
1995
|
{
|
|
1814
1996
|
id: fieldId,
|
|
@@ -1823,12 +2005,12 @@ function TwoFactorVerifyForm({
|
|
|
1823
2005
|
}
|
|
1824
2006
|
)
|
|
1825
2007
|
] }),
|
|
1826
|
-
messages.length > 0 && /* @__PURE__ */
|
|
1827
|
-
/* @__PURE__ */
|
|
1828
|
-
/* @__PURE__ */
|
|
2008
|
+
messages.length > 0 && /* @__PURE__ */ jsxs16(Alert, { variant: "destructive", slotName: "two-factor-error", children: [
|
|
2009
|
+
/* @__PURE__ */ jsx16(AlertCircle, {}),
|
|
2010
|
+
/* @__PURE__ */ jsx16(AlertDescription, { children: messages.map((message) => /* @__PURE__ */ jsx16("p", { children: message }, message)) })
|
|
1829
2011
|
] }),
|
|
1830
|
-
/* @__PURE__ */
|
|
1831
|
-
/* @__PURE__ */
|
|
2012
|
+
/* @__PURE__ */ jsxs16("div", { className: "gap-3 flex flex-col", children: [
|
|
2013
|
+
/* @__PURE__ */ jsx16(
|
|
1832
2014
|
Button,
|
|
1833
2015
|
{
|
|
1834
2016
|
type: "submit",
|
|
@@ -1838,7 +2020,7 @@ function TwoFactorVerifyForm({
|
|
|
1838
2020
|
children: submitLabel ?? text.verifyLabel
|
|
1839
2021
|
}
|
|
1840
2022
|
),
|
|
1841
|
-
allowRecoveryCode && /* @__PURE__ */
|
|
2023
|
+
allowRecoveryCode && /* @__PURE__ */ jsx16(
|
|
1842
2024
|
Button,
|
|
1843
2025
|
{
|
|
1844
2026
|
type: "button",
|
|
@@ -1855,6 +2037,9 @@ function TwoFactorVerifyForm({
|
|
|
1855
2037
|
}
|
|
1856
2038
|
);
|
|
1857
2039
|
}
|
|
2040
|
+
|
|
2041
|
+
// src/blocks/two-factor/challenge.tsx
|
|
2042
|
+
import { jsx as jsx17, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1858
2043
|
function TwoFactorChallenge({
|
|
1859
2044
|
onSubmit,
|
|
1860
2045
|
errors,
|
|
@@ -1867,17 +2052,17 @@ function TwoFactorChallenge({
|
|
|
1867
2052
|
slotName = "two-factor-challenge"
|
|
1868
2053
|
}) {
|
|
1869
2054
|
const text = resolveLabels(labels);
|
|
1870
|
-
return /* @__PURE__ */
|
|
2055
|
+
return /* @__PURE__ */ jsxs17(
|
|
1871
2056
|
"section",
|
|
1872
2057
|
{
|
|
1873
2058
|
className: cn("gap-6 flex w-full flex-col", className),
|
|
1874
2059
|
"data-slot": slotName,
|
|
1875
2060
|
children: [
|
|
1876
|
-
/* @__PURE__ */
|
|
1877
|
-
/* @__PURE__ */
|
|
1878
|
-
/* @__PURE__ */
|
|
2061
|
+
/* @__PURE__ */ jsxs17("div", { className: "gap-2 flex flex-col", children: [
|
|
2062
|
+
/* @__PURE__ */ jsx17("h2", { className: "text-2xl font-bold tracking-tight text-foreground", children: title ?? text.challengeTitle }),
|
|
2063
|
+
/* @__PURE__ */ jsx17("p", { className: "text-sm font-medium text-muted-foreground", children: description ?? text.challengeDescription })
|
|
1879
2064
|
] }),
|
|
1880
|
-
/* @__PURE__ */
|
|
2065
|
+
/* @__PURE__ */ jsx17(
|
|
1881
2066
|
TwoFactorVerifyForm,
|
|
1882
2067
|
{
|
|
1883
2068
|
autoFocus: true,
|
|
@@ -1892,6 +2077,11 @@ function TwoFactorChallenge({
|
|
|
1892
2077
|
}
|
|
1893
2078
|
);
|
|
1894
2079
|
}
|
|
2080
|
+
|
|
2081
|
+
// src/blocks/two-factor/disable-button.tsx
|
|
2082
|
+
import { ShieldOff } from "lucide-react";
|
|
2083
|
+
import { useState as useState5 } from "react";
|
|
2084
|
+
import { jsx as jsx18, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1895
2085
|
function TwoFactorDisableButton({
|
|
1896
2086
|
onDisable,
|
|
1897
2087
|
disabled = false,
|
|
@@ -1902,8 +2092,8 @@ function TwoFactorDisableButton({
|
|
|
1902
2092
|
slotName = "two-factor-disable"
|
|
1903
2093
|
}) {
|
|
1904
2094
|
const text = resolveLabels(labels);
|
|
1905
|
-
const [open, setOpen] =
|
|
1906
|
-
const [processing, setProcessing] =
|
|
2095
|
+
const [open, setOpen] = useState5(false);
|
|
2096
|
+
const [processing, setProcessing] = useState5(false);
|
|
1907
2097
|
const handleConfirm = async () => {
|
|
1908
2098
|
setProcessing(true);
|
|
1909
2099
|
try {
|
|
@@ -1912,14 +2102,14 @@ function TwoFactorDisableButton({
|
|
|
1912
2102
|
setProcessing(false);
|
|
1913
2103
|
}
|
|
1914
2104
|
};
|
|
1915
|
-
return /* @__PURE__ */
|
|
2105
|
+
return /* @__PURE__ */ jsxs18(
|
|
1916
2106
|
"span",
|
|
1917
2107
|
{
|
|
1918
2108
|
"data-open": open || void 0,
|
|
1919
2109
|
className: cn("inline-flex", className),
|
|
1920
2110
|
"data-slot": slotName,
|
|
1921
2111
|
children: [
|
|
1922
|
-
/* @__PURE__ */
|
|
2112
|
+
/* @__PURE__ */ jsxs18(
|
|
1923
2113
|
Button,
|
|
1924
2114
|
{
|
|
1925
2115
|
type: "button",
|
|
@@ -1928,12 +2118,12 @@ function TwoFactorDisableButton({
|
|
|
1928
2118
|
disabled: disabled || processing,
|
|
1929
2119
|
onClick: () => setOpen(true),
|
|
1930
2120
|
children: [
|
|
1931
|
-
/* @__PURE__ */
|
|
2121
|
+
/* @__PURE__ */ jsx18(ShieldOff, {}),
|
|
1932
2122
|
text.disableLabel
|
|
1933
2123
|
]
|
|
1934
2124
|
}
|
|
1935
2125
|
),
|
|
1936
|
-
/* @__PURE__ */
|
|
2126
|
+
/* @__PURE__ */ jsx18(
|
|
1937
2127
|
ConfirmDialog,
|
|
1938
2128
|
{
|
|
1939
2129
|
open,
|
|
@@ -1950,6 +2140,11 @@ function TwoFactorDisableButton({
|
|
|
1950
2140
|
}
|
|
1951
2141
|
);
|
|
1952
2142
|
}
|
|
2143
|
+
|
|
2144
|
+
// src/blocks/two-factor/recovery-codes.tsx
|
|
2145
|
+
import { Eye, EyeOff, RefreshCw } from "lucide-react";
|
|
2146
|
+
import { useState as useState6 } from "react";
|
|
2147
|
+
import { jsx as jsx19, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1953
2148
|
function TwoFactorRecoveryCodes({
|
|
1954
2149
|
codes,
|
|
1955
2150
|
defaultRevealed = false,
|
|
@@ -1960,9 +2155,9 @@ function TwoFactorRecoveryCodes({
|
|
|
1960
2155
|
slotName = "two-factor-recovery-codes"
|
|
1961
2156
|
}) {
|
|
1962
2157
|
const text = resolveLabels(labels);
|
|
1963
|
-
const [revealed, setRevealed] =
|
|
1964
|
-
const [copyFailed, setCopyFailed] =
|
|
1965
|
-
const [regenerating, setRegenerating] =
|
|
2158
|
+
const [revealed, setRevealed] = useState6(defaultRevealed);
|
|
2159
|
+
const [copyFailed, setCopyFailed] = useState6(false);
|
|
2160
|
+
const [regenerating, setRegenerating] = useState6(false);
|
|
1966
2161
|
const handleRegenerate = async () => {
|
|
1967
2162
|
if (!onRegenerate || regenerating) {
|
|
1968
2163
|
return;
|
|
@@ -1974,22 +2169,22 @@ function TwoFactorRecoveryCodes({
|
|
|
1974
2169
|
setRegenerating(false);
|
|
1975
2170
|
}
|
|
1976
2171
|
};
|
|
1977
|
-
return /* @__PURE__ */
|
|
2172
|
+
return /* @__PURE__ */ jsxs19(
|
|
1978
2173
|
"div",
|
|
1979
2174
|
{
|
|
1980
2175
|
"data-revealed": revealed || void 0,
|
|
1981
2176
|
className: cn("gap-4 flex w-full flex-col", className),
|
|
1982
2177
|
"data-slot": slotName,
|
|
1983
2178
|
children: [
|
|
1984
|
-
showHeading && /* @__PURE__ */
|
|
1985
|
-
/* @__PURE__ */
|
|
1986
|
-
/* @__PURE__ */
|
|
2179
|
+
showHeading && /* @__PURE__ */ jsxs19("div", { className: "gap-1 flex flex-col", children: [
|
|
2180
|
+
/* @__PURE__ */ jsx19("p", { className: "text-sm font-semibold text-foreground", children: text.recoveryTitle }),
|
|
2181
|
+
/* @__PURE__ */ jsxs19("p", { className: "text-xs font-medium text-muted-foreground", children: [
|
|
1987
2182
|
text.recoveryDescription,
|
|
1988
2183
|
" ",
|
|
1989
2184
|
text.recoveryWarning
|
|
1990
2185
|
] })
|
|
1991
2186
|
] }),
|
|
1992
|
-
revealed && /* @__PURE__ */
|
|
2187
|
+
revealed && /* @__PURE__ */ jsx19(
|
|
1993
2188
|
"ul",
|
|
1994
2189
|
{
|
|
1995
2190
|
"data-slot": "two-factor-recovery-list",
|
|
@@ -1997,7 +2192,7 @@ function TwoFactorRecoveryCodes({
|
|
|
1997
2192
|
recessedSurface,
|
|
1998
2193
|
"gap-2 p-4 sm:grid-cols-2 grid"
|
|
1999
2194
|
),
|
|
2000
|
-
children: codes.map((code) => /* @__PURE__ */
|
|
2195
|
+
children: codes.map((code) => /* @__PURE__ */ jsx19(
|
|
2001
2196
|
"li",
|
|
2002
2197
|
{
|
|
2003
2198
|
"data-slot": "two-factor-recovery-code",
|
|
@@ -2011,8 +2206,8 @@ function TwoFactorRecoveryCodes({
|
|
|
2011
2206
|
))
|
|
2012
2207
|
}
|
|
2013
2208
|
),
|
|
2014
|
-
/* @__PURE__ */
|
|
2015
|
-
/* @__PURE__ */
|
|
2209
|
+
/* @__PURE__ */ jsxs19("div", { className: "gap-2 flex flex-wrap items-center", children: [
|
|
2210
|
+
/* @__PURE__ */ jsxs19(
|
|
2016
2211
|
Button,
|
|
2017
2212
|
{
|
|
2018
2213
|
type: "button",
|
|
@@ -2021,12 +2216,12 @@ function TwoFactorRecoveryCodes({
|
|
|
2021
2216
|
"aria-pressed": revealed,
|
|
2022
2217
|
onClick: () => setRevealed(!revealed),
|
|
2023
2218
|
children: [
|
|
2024
|
-
revealed ? /* @__PURE__ */
|
|
2219
|
+
revealed ? /* @__PURE__ */ jsx19(EyeOff, {}) : /* @__PURE__ */ jsx19(Eye, {}),
|
|
2025
2220
|
revealed ? text.hideLabel : text.revealLabel
|
|
2026
2221
|
]
|
|
2027
2222
|
}
|
|
2028
2223
|
),
|
|
2029
|
-
/* @__PURE__ */
|
|
2224
|
+
/* @__PURE__ */ jsx19(
|
|
2030
2225
|
CopyButton,
|
|
2031
2226
|
{
|
|
2032
2227
|
value: codes.join("\n"),
|
|
@@ -2036,7 +2231,7 @@ function TwoFactorRecoveryCodes({
|
|
|
2036
2231
|
onCopyFailed: () => setCopyFailed(true)
|
|
2037
2232
|
}
|
|
2038
2233
|
),
|
|
2039
|
-
onRegenerate && /* @__PURE__ */
|
|
2234
|
+
onRegenerate && /* @__PURE__ */ jsxs19(
|
|
2040
2235
|
Button,
|
|
2041
2236
|
{
|
|
2042
2237
|
type: "button",
|
|
@@ -2046,13 +2241,13 @@ function TwoFactorRecoveryCodes({
|
|
|
2046
2241
|
loadingLabel: text.regenerateLabel,
|
|
2047
2242
|
onClick: handleRegenerate,
|
|
2048
2243
|
children: [
|
|
2049
|
-
/* @__PURE__ */
|
|
2244
|
+
/* @__PURE__ */ jsx19(RefreshCw, {}),
|
|
2050
2245
|
text.regenerateLabel
|
|
2051
2246
|
]
|
|
2052
2247
|
}
|
|
2053
2248
|
)
|
|
2054
2249
|
] }),
|
|
2055
|
-
copyFailed && /* @__PURE__ */
|
|
2250
|
+
copyFailed && /* @__PURE__ */ jsx19(
|
|
2056
2251
|
"p",
|
|
2057
2252
|
{
|
|
2058
2253
|
"data-slot": "two-factor-copy-failed",
|
|
@@ -2064,6 +2259,11 @@ function TwoFactorRecoveryCodes({
|
|
|
2064
2259
|
}
|
|
2065
2260
|
);
|
|
2066
2261
|
}
|
|
2262
|
+
|
|
2263
|
+
// src/blocks/two-factor/scan-step.tsx
|
|
2264
|
+
import { Eye as Eye2, EyeOff as EyeOff2 } from "lucide-react";
|
|
2265
|
+
import { useState as useState7 } from "react";
|
|
2266
|
+
import { jsx as jsx20, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
2067
2267
|
function TwoFactorScanStep({
|
|
2068
2268
|
qrCode,
|
|
2069
2269
|
qrCodeSvg,
|
|
@@ -2073,14 +2273,14 @@ function TwoFactorScanStep({
|
|
|
2073
2273
|
slotName = "two-factor-scan-step"
|
|
2074
2274
|
}) {
|
|
2075
2275
|
const text = resolveLabels(labels);
|
|
2076
|
-
const [revealed, setRevealed] =
|
|
2077
|
-
return /* @__PURE__ */
|
|
2276
|
+
const [revealed, setRevealed] = useState7(false);
|
|
2277
|
+
return /* @__PURE__ */ jsxs20(
|
|
2078
2278
|
"div",
|
|
2079
2279
|
{
|
|
2080
2280
|
className: cn("gap-5 flex w-full flex-col", className),
|
|
2081
2281
|
"data-slot": slotName,
|
|
2082
2282
|
children: [
|
|
2083
|
-
/* @__PURE__ */
|
|
2283
|
+
/* @__PURE__ */ jsx20(
|
|
2084
2284
|
"div",
|
|
2085
2285
|
{
|
|
2086
2286
|
"data-slot": "two-factor-qr",
|
|
@@ -2088,26 +2288,26 @@ function TwoFactorScanStep({
|
|
|
2088
2288
|
recessedSurface,
|
|
2089
2289
|
"p-4 flex items-center justify-center [&_svg]:size-full [&_svg]:h-auto"
|
|
2090
2290
|
),
|
|
2091
|
-
children: qrCode ?? (qrCodeSvg ? /* @__PURE__ */
|
|
2291
|
+
children: qrCode ?? (qrCodeSvg ? /* @__PURE__ */ jsx20(
|
|
2092
2292
|
"div",
|
|
2093
2293
|
{
|
|
2094
2294
|
"data-slot": "two-factor-qr-markup",
|
|
2095
2295
|
className: cn(controlRadius, "p-3 bg-card"),
|
|
2096
2296
|
dangerouslySetInnerHTML: { __html: qrCodeSvg }
|
|
2097
2297
|
}
|
|
2098
|
-
) : /* @__PURE__ */
|
|
2298
|
+
) : /* @__PURE__ */ jsx20("p", { className: "text-sm font-medium text-muted-foreground", children: text.qrFallbackLabel }))
|
|
2099
2299
|
}
|
|
2100
2300
|
),
|
|
2101
|
-
manualSetupKey && /* @__PURE__ */
|
|
2301
|
+
manualSetupKey && /* @__PURE__ */ jsxs20(
|
|
2102
2302
|
"div",
|
|
2103
2303
|
{
|
|
2104
2304
|
"data-slot": "two-factor-setup-key",
|
|
2105
2305
|
className: "gap-2 flex flex-col",
|
|
2106
2306
|
children: [
|
|
2107
|
-
/* @__PURE__ */
|
|
2108
|
-
/* @__PURE__ */
|
|
2109
|
-
/* @__PURE__ */
|
|
2110
|
-
/* @__PURE__ */
|
|
2307
|
+
/* @__PURE__ */ jsx20("p", { className: "text-sm font-semibold text-foreground", children: text.manualKeyLabel }),
|
|
2308
|
+
/* @__PURE__ */ jsx20("p", { className: "text-xs font-medium text-muted-foreground", children: text.manualKeyDescription }),
|
|
2309
|
+
/* @__PURE__ */ jsxs20("div", { className: "gap-2 flex flex-wrap items-center", children: [
|
|
2310
|
+
/* @__PURE__ */ jsx20(
|
|
2111
2311
|
"code",
|
|
2112
2312
|
{
|
|
2113
2313
|
"data-slot": "two-factor-setup-key-value",
|
|
@@ -2118,7 +2318,7 @@ function TwoFactorScanStep({
|
|
|
2118
2318
|
children: revealed ? manualSetupKey : "\u2022".repeat(manualSetupKey.length)
|
|
2119
2319
|
}
|
|
2120
2320
|
),
|
|
2121
|
-
/* @__PURE__ */
|
|
2321
|
+
/* @__PURE__ */ jsxs20(
|
|
2122
2322
|
Button,
|
|
2123
2323
|
{
|
|
2124
2324
|
type: "button",
|
|
@@ -2127,12 +2327,12 @@ function TwoFactorScanStep({
|
|
|
2127
2327
|
"aria-pressed": revealed,
|
|
2128
2328
|
onClick: () => setRevealed(!revealed),
|
|
2129
2329
|
children: [
|
|
2130
|
-
revealed ? /* @__PURE__ */
|
|
2330
|
+
revealed ? /* @__PURE__ */ jsx20(EyeOff2, {}) : /* @__PURE__ */ jsx20(Eye2, {}),
|
|
2131
2331
|
revealed ? text.manualKeyHideLabel : text.manualKeyRevealLabel
|
|
2132
2332
|
]
|
|
2133
2333
|
}
|
|
2134
2334
|
),
|
|
2135
|
-
/* @__PURE__ */
|
|
2335
|
+
/* @__PURE__ */ jsx20(
|
|
2136
2336
|
CopyButton,
|
|
2137
2337
|
{
|
|
2138
2338
|
value: manualSetupKey,
|
|
@@ -2148,6 +2348,10 @@ function TwoFactorScanStep({
|
|
|
2148
2348
|
}
|
|
2149
2349
|
);
|
|
2150
2350
|
}
|
|
2351
|
+
|
|
2352
|
+
// src/blocks/two-factor/setup-dialog.tsx
|
|
2353
|
+
import { useEffect as useEffect2, useRef, useState as useState8 } from "react";
|
|
2354
|
+
import { Fragment as Fragment2, jsx as jsx21, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
2151
2355
|
function TwoFactorSetupDialog({
|
|
2152
2356
|
open,
|
|
2153
2357
|
onOpenChange,
|
|
@@ -2166,15 +2370,15 @@ function TwoFactorSetupDialog({
|
|
|
2166
2370
|
slotName = "two-factor-setup-dialog"
|
|
2167
2371
|
}) {
|
|
2168
2372
|
const text = resolveLabels(labels);
|
|
2169
|
-
const [step, setStep] =
|
|
2373
|
+
const [step, setStep] = useState8(
|
|
2170
2374
|
enabled ? "recovery" : "scan"
|
|
2171
2375
|
);
|
|
2172
2376
|
const requestSetupData = useRef(onRequestSetupData);
|
|
2173
2377
|
const openedBefore = useRef(false);
|
|
2174
|
-
|
|
2378
|
+
useEffect2(() => {
|
|
2175
2379
|
requestSetupData.current = onRequestSetupData;
|
|
2176
2380
|
}, [onRequestSetupData]);
|
|
2177
|
-
|
|
2381
|
+
useEffect2(() => {
|
|
2178
2382
|
if (!open) {
|
|
2179
2383
|
openedBefore.current = false;
|
|
2180
2384
|
return;
|
|
@@ -2210,20 +2414,20 @@ function TwoFactorSetupDialog({
|
|
|
2210
2414
|
confirm: text.confirmDescription,
|
|
2211
2415
|
recovery: `${text.recoveryDescription} ${text.recoveryWarning}`
|
|
2212
2416
|
}[step];
|
|
2213
|
-
return /* @__PURE__ */
|
|
2417
|
+
return /* @__PURE__ */ jsx21(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs21(
|
|
2214
2418
|
DialogContent,
|
|
2215
2419
|
{
|
|
2216
2420
|
"data-step": step,
|
|
2217
2421
|
className: cn("max-w-md p-0", className),
|
|
2218
2422
|
slotName,
|
|
2219
2423
|
children: [
|
|
2220
|
-
/* @__PURE__ */
|
|
2221
|
-
/* @__PURE__ */
|
|
2222
|
-
/* @__PURE__ */
|
|
2424
|
+
/* @__PURE__ */ jsxs21(DialogHeader, { className: "p-6 md:p-8", children: [
|
|
2425
|
+
/* @__PURE__ */ jsx21(DialogTitle, { children: heading }),
|
|
2426
|
+
/* @__PURE__ */ jsx21(DialogDescription, { children: description })
|
|
2223
2427
|
] }),
|
|
2224
|
-
/* @__PURE__ */
|
|
2225
|
-
step === "scan" && (ready ? /* @__PURE__ */
|
|
2226
|
-
/* @__PURE__ */
|
|
2428
|
+
/* @__PURE__ */ jsxs21("div", { className: "gap-5 p-6 md:p-8 pt-0 md:pt-0 flex flex-col", children: [
|
|
2429
|
+
step === "scan" && (ready ? /* @__PURE__ */ jsxs21(Fragment2, { children: [
|
|
2430
|
+
/* @__PURE__ */ jsx21(
|
|
2227
2431
|
TwoFactorScanStep,
|
|
2228
2432
|
{
|
|
2229
2433
|
qrCode,
|
|
@@ -2232,7 +2436,7 @@ function TwoFactorSetupDialog({
|
|
|
2232
2436
|
labels
|
|
2233
2437
|
}
|
|
2234
2438
|
),
|
|
2235
|
-
/* @__PURE__ */
|
|
2439
|
+
/* @__PURE__ */ jsx21(
|
|
2236
2440
|
Button,
|
|
2237
2441
|
{
|
|
2238
2442
|
type: "button",
|
|
@@ -2240,25 +2444,25 @@ function TwoFactorSetupDialog({
|
|
|
2240
2444
|
children: text.continueLabel
|
|
2241
2445
|
}
|
|
2242
2446
|
)
|
|
2243
|
-
] }) : /* @__PURE__ */
|
|
2447
|
+
] }) : /* @__PURE__ */ jsxs21(
|
|
2244
2448
|
"div",
|
|
2245
2449
|
{
|
|
2246
2450
|
"data-slot": "two-factor-pending",
|
|
2247
2451
|
className: "gap-3 py-6 text-sm font-medium flex items-center justify-center text-muted-foreground",
|
|
2248
2452
|
children: [
|
|
2249
|
-
/* @__PURE__ */
|
|
2453
|
+
/* @__PURE__ */ jsx21(Spinner, { label: text.pendingLabel }),
|
|
2250
2454
|
text.pendingLabel
|
|
2251
2455
|
]
|
|
2252
2456
|
}
|
|
2253
2457
|
)),
|
|
2254
|
-
step === "confirm" && /* @__PURE__ */
|
|
2458
|
+
step === "confirm" && /* @__PURE__ */ jsx21(
|
|
2255
2459
|
TwoFactorVerifyForm,
|
|
2256
2460
|
{
|
|
2257
2461
|
autoFocus: true,
|
|
2258
2462
|
errors,
|
|
2259
2463
|
labels,
|
|
2260
2464
|
onSubmit: handleConfirm,
|
|
2261
|
-
footer: /* @__PURE__ */
|
|
2465
|
+
footer: /* @__PURE__ */ jsx21(
|
|
2262
2466
|
Button,
|
|
2263
2467
|
{
|
|
2264
2468
|
type: "button",
|
|
@@ -2270,8 +2474,8 @@ function TwoFactorSetupDialog({
|
|
|
2270
2474
|
)
|
|
2271
2475
|
}
|
|
2272
2476
|
),
|
|
2273
|
-
step === "recovery" && /* @__PURE__ */
|
|
2274
|
-
/* @__PURE__ */
|
|
2477
|
+
step === "recovery" && /* @__PURE__ */ jsxs21(Fragment2, { children: [
|
|
2478
|
+
/* @__PURE__ */ jsx21(
|
|
2275
2479
|
TwoFactorRecoveryCodes,
|
|
2276
2480
|
{
|
|
2277
2481
|
codes,
|
|
@@ -2281,14 +2485,87 @@ function TwoFactorSetupDialog({
|
|
|
2281
2485
|
onRegenerate: onRegenerateRecoveryCodes
|
|
2282
2486
|
}
|
|
2283
2487
|
),
|
|
2284
|
-
/* @__PURE__ */
|
|
2488
|
+
/* @__PURE__ */ jsx21(Button, { type: "button", onClick: finish, children: text.doneLabel })
|
|
2285
2489
|
] })
|
|
2286
2490
|
] })
|
|
2287
2491
|
]
|
|
2288
2492
|
}
|
|
2289
2493
|
) });
|
|
2290
2494
|
}
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2495
|
+
export {
|
|
2496
|
+
CommandPalette,
|
|
2497
|
+
DEFAULT_LABELS as DATE_FILTER_LABELS,
|
|
2498
|
+
DEFAULT_OPERATORS as DATE_FILTER_OPERATORS,
|
|
2499
|
+
DEFAULT_PRESETS as DATE_FILTER_PRESETS,
|
|
2500
|
+
DEFAULT_UNITS as DATE_FILTER_UNITS,
|
|
2501
|
+
DEFAULT_TOUR_LABELS,
|
|
2502
|
+
DangerZone,
|
|
2503
|
+
DateField,
|
|
2504
|
+
DateFilter,
|
|
2505
|
+
DateFilterAll,
|
|
2506
|
+
DateFilterContent,
|
|
2507
|
+
DateFilterFixed,
|
|
2508
|
+
DateFilterItem,
|
|
2509
|
+
DateFilterPresets,
|
|
2510
|
+
DateFilterRelative,
|
|
2511
|
+
DateFilterSeparator,
|
|
2512
|
+
DateFilterTrigger,
|
|
2513
|
+
DetailEditSheet,
|
|
2514
|
+
FormDialog,
|
|
2515
|
+
FormOverlayActions,
|
|
2516
|
+
InfoField,
|
|
2517
|
+
InfoFieldGroup,
|
|
2518
|
+
LocalizedFields,
|
|
2519
|
+
LoginForm,
|
|
2520
|
+
LoginFormEmail,
|
|
2521
|
+
LoginFormPassword,
|
|
2522
|
+
LoginFormPreset,
|
|
2523
|
+
LoginFormProvider,
|
|
2524
|
+
LoginFormRemember,
|
|
2525
|
+
LoginFormRoot,
|
|
2526
|
+
LoginFormStatus,
|
|
2527
|
+
LoginFormSubmit,
|
|
2528
|
+
NumberField,
|
|
2529
|
+
SectionHeader,
|
|
2530
|
+
SelectField,
|
|
2531
|
+
SettingsCard,
|
|
2532
|
+
SettingsEntry,
|
|
2533
|
+
SettingsField,
|
|
2534
|
+
SettingsGroup,
|
|
2535
|
+
SettingsPage,
|
|
2536
|
+
SettingsPanel,
|
|
2537
|
+
SettingsSection,
|
|
2538
|
+
StatCard,
|
|
2539
|
+
StatsGrid,
|
|
2540
|
+
TextField,
|
|
2541
|
+
ToggleRow,
|
|
2542
|
+
TourProvider,
|
|
2543
|
+
TwoFactorChallenge,
|
|
2544
|
+
TwoFactorDisableButton,
|
|
2545
|
+
TwoFactorRecoveryCodes,
|
|
2546
|
+
TwoFactorScanStep,
|
|
2547
|
+
TwoFactorSetupDialog,
|
|
2548
|
+
TwoFactorVerifyForm,
|
|
2549
|
+
UiLocaleProvider,
|
|
2550
|
+
dangerZoneLabels,
|
|
2551
|
+
decodeDateFilter,
|
|
2552
|
+
encodeDateFilter,
|
|
2553
|
+
formOverlayDefaultLabels,
|
|
2554
|
+
formatRangePreview,
|
|
2555
|
+
loginFormLabels,
|
|
2556
|
+
resolveRelativeRange,
|
|
2557
|
+
resolveSteps,
|
|
2558
|
+
settingsLabels,
|
|
2559
|
+
shouldStartTour,
|
|
2560
|
+
stepsForBreakpoint,
|
|
2561
|
+
summariseDateFilter,
|
|
2562
|
+
twoFactorLabels,
|
|
2563
|
+
useCommandPalette,
|
|
2564
|
+
useDateFilter,
|
|
2565
|
+
useLoginFormContext,
|
|
2566
|
+
useTour,
|
|
2567
|
+
useTourController,
|
|
2568
|
+
useUiLabels,
|
|
2569
|
+
useUiLocale
|
|
2570
|
+
};
|
|
2294
2571
|
//# sourceMappingURL=blocks.js.map
|