@mesob/ui 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components.d.ts +123 -3
- package/dist/components.js +1795 -365
- package/dist/components.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/locale.d.ts +37 -0
- package/dist/lib/locale.js +55 -0
- package/dist/lib/locale.js.map +1 -0
- package/package.json +21 -1
package/dist/components.js
CHANGED
|
@@ -178,7 +178,7 @@ function AppBreadcrumbs({
|
|
|
178
178
|
className
|
|
179
179
|
}) {
|
|
180
180
|
const mesob = useMesob();
|
|
181
|
-
const
|
|
181
|
+
const Link3 = linkProp ?? mesob?.linkComponent ?? mesob?.navigation?.Link;
|
|
182
182
|
const locale = mesob?.locale;
|
|
183
183
|
const { items } = useBreadcrumbs2(void 0);
|
|
184
184
|
if (items.length === 0) {
|
|
@@ -187,9 +187,9 @@ function AppBreadcrumbs({
|
|
|
187
187
|
return /* @__PURE__ */ jsx2(Breadcrumb, { className, children: /* @__PURE__ */ jsx2(BreadcrumbList, { children: items.map((crumb, index) => {
|
|
188
188
|
let content;
|
|
189
189
|
if (crumb.href) {
|
|
190
|
-
if (
|
|
190
|
+
if (Link3) {
|
|
191
191
|
content = /* @__PURE__ */ jsx2(
|
|
192
|
-
|
|
192
|
+
Link3,
|
|
193
193
|
{
|
|
194
194
|
href: crumb.href,
|
|
195
195
|
className: "hover:underline",
|
|
@@ -2004,7 +2004,7 @@ function NavItemRow({
|
|
|
2004
2004
|
onNavClick
|
|
2005
2005
|
}) {
|
|
2006
2006
|
const mesob = useMesob3();
|
|
2007
|
-
const
|
|
2007
|
+
const Link3 = mesob?.linkComponent ?? mesob?.navigation?.Link;
|
|
2008
2008
|
const locale = mesob?.locale;
|
|
2009
2009
|
const [open, toggle] = useToggle(hasActiveDescendant(item, pathname));
|
|
2010
2010
|
const hasChildren = (item.children?.length ?? 0) > 0;
|
|
@@ -2061,7 +2061,7 @@ function NavItemRow({
|
|
|
2061
2061
|
...locale && { locale }
|
|
2062
2062
|
};
|
|
2063
2063
|
return /* @__PURE__ */ jsxs12("li", { className: "relative mt-1", children: [
|
|
2064
|
-
|
|
2064
|
+
Link3 ? /* @__PURE__ */ jsx16(Link3, { ...linkProps, children: rowContent }) : /* @__PURE__ */ jsx16("a", { ...linkProps, children: rowContent }),
|
|
2065
2065
|
showChildren && /* @__PURE__ */ jsxs12("ul", { className: "relative mt-1", children: [
|
|
2066
2066
|
/* @__PURE__ */ jsx16(
|
|
2067
2067
|
"div",
|
|
@@ -4024,8 +4024,1301 @@ function Shell({
|
|
|
4024
4024
|
] }) });
|
|
4025
4025
|
}
|
|
4026
4026
|
|
|
4027
|
+
// src/components/locale/locale-input-rich-text.tsx
|
|
4028
|
+
import {
|
|
4029
|
+
IconArrowsMaximize,
|
|
4030
|
+
IconTextRecognition,
|
|
4031
|
+
IconX as IconX5
|
|
4032
|
+
} from "@tabler/icons-react";
|
|
4033
|
+
import { useState as useState15 } from "react";
|
|
4034
|
+
import { Controller } from "react-hook-form";
|
|
4035
|
+
|
|
4036
|
+
// src/lib/locale.ts
|
|
4037
|
+
import { z } from "zod";
|
|
4038
|
+
var DEFAULT_LANGUAGE = "en";
|
|
4039
|
+
var SUPPORTED_LANGUAGES = [
|
|
4040
|
+
{ value: "en", label: "English", key: "En" },
|
|
4041
|
+
{ value: "am", label: "\u12A0\u121B\u122D\u129B", key: "\u12A0\u121B" },
|
|
4042
|
+
{ value: "ar", label: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629", key: "\u0627\u0644" }
|
|
4043
|
+
];
|
|
4044
|
+
var LOCALE_INPUT_DEFAULT = Object.fromEntries(
|
|
4045
|
+
SUPPORTED_LANGUAGES.map(({ value }) => [value, ""])
|
|
4046
|
+
);
|
|
4047
|
+
function createLocalInputSchema(defaultValidation, otherValidation) {
|
|
4048
|
+
const schemaDefinition = SUPPORTED_LANGUAGES.reduce((acc, { value }) => {
|
|
4049
|
+
acc[value] = value === DEFAULT_LANGUAGE ? defaultValidation : otherValidation;
|
|
4050
|
+
return acc;
|
|
4051
|
+
}, {});
|
|
4052
|
+
return z.object(schemaDefinition);
|
|
4053
|
+
}
|
|
4054
|
+
function createLocalRequiredInputSchema(validation) {
|
|
4055
|
+
const schemaDefinition = SUPPORTED_LANGUAGES.reduce((acc, { value }) => {
|
|
4056
|
+
acc[value] = validation;
|
|
4057
|
+
return acc;
|
|
4058
|
+
}, {});
|
|
4059
|
+
return z.object(schemaDefinition).superRefine((data, ctx) => {
|
|
4060
|
+
const hasValue = Object.values(data).some(
|
|
4061
|
+
(value) => typeof value === "string" && value.trim().length > 0
|
|
4062
|
+
);
|
|
4063
|
+
if (!hasValue) {
|
|
4064
|
+
for (const { value } of SUPPORTED_LANGUAGES) {
|
|
4065
|
+
ctx.addIssue({
|
|
4066
|
+
code: z.ZodIssueCode.custom,
|
|
4067
|
+
message: "field is required",
|
|
4068
|
+
path: [value]
|
|
4069
|
+
});
|
|
4070
|
+
}
|
|
4071
|
+
}
|
|
4072
|
+
});
|
|
4073
|
+
}
|
|
4074
|
+
var LOCALE_REQUIRED_INPUT_SCHEMA = createLocalRequiredInputSchema(
|
|
4075
|
+
z.string().optional()
|
|
4076
|
+
);
|
|
4077
|
+
var LOCALE_OPTIONAL_INPUT_SCHEMA = createLocalInputSchema(
|
|
4078
|
+
z.string().optional(),
|
|
4079
|
+
z.string().optional()
|
|
4080
|
+
);
|
|
4081
|
+
|
|
4082
|
+
// src/components/rich-text/rich-text-input.tsx
|
|
4083
|
+
import {
|
|
4084
|
+
IconAlignCenter,
|
|
4085
|
+
IconAlignJustified,
|
|
4086
|
+
IconAlignLeft,
|
|
4087
|
+
IconAlignRight,
|
|
4088
|
+
IconBlockquote,
|
|
4089
|
+
IconBold,
|
|
4090
|
+
IconClearFormatting,
|
|
4091
|
+
IconCode,
|
|
4092
|
+
IconH1,
|
|
4093
|
+
IconH2,
|
|
4094
|
+
IconH3,
|
|
4095
|
+
IconH4,
|
|
4096
|
+
IconHighlight,
|
|
4097
|
+
IconItalic,
|
|
4098
|
+
IconLink,
|
|
4099
|
+
IconList as IconList2,
|
|
4100
|
+
IconListNumbers,
|
|
4101
|
+
IconStrikethrough,
|
|
4102
|
+
IconSubscript,
|
|
4103
|
+
IconSuperscript,
|
|
4104
|
+
IconUnderline,
|
|
4105
|
+
IconUnlink
|
|
4106
|
+
} from "@tabler/icons-react";
|
|
4107
|
+
import HardBreak from "@tiptap/extension-hard-break";
|
|
4108
|
+
import Highlight from "@tiptap/extension-highlight";
|
|
4109
|
+
import Image2 from "@tiptap/extension-image";
|
|
4110
|
+
import Link from "@tiptap/extension-link";
|
|
4111
|
+
import Placeholder from "@tiptap/extension-placeholder";
|
|
4112
|
+
import SubScript from "@tiptap/extension-subscript";
|
|
4113
|
+
import Superscript from "@tiptap/extension-superscript";
|
|
4114
|
+
import { Table as Table2 } from "@tiptap/extension-table";
|
|
4115
|
+
import { TableCell as TableCell2 } from "@tiptap/extension-table-cell";
|
|
4116
|
+
import { TableHeader as TableHeader2 } from "@tiptap/extension-table-header";
|
|
4117
|
+
import { TableRow as TableRow2 } from "@tiptap/extension-table-row";
|
|
4118
|
+
import TextAlign from "@tiptap/extension-text-align";
|
|
4119
|
+
import Underline from "@tiptap/extension-underline";
|
|
4120
|
+
import Youtube from "@tiptap/extension-youtube";
|
|
4121
|
+
import { EditorContent, useEditor } from "@tiptap/react";
|
|
4122
|
+
import StarterKit from "@tiptap/starter-kit";
|
|
4123
|
+
|
|
4124
|
+
// src/components/ui/label.tsx
|
|
4125
|
+
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
4126
|
+
import { jsx as jsx47 } from "react/jsx-runtime";
|
|
4127
|
+
function Label3({
|
|
4128
|
+
className,
|
|
4129
|
+
...props
|
|
4130
|
+
}) {
|
|
4131
|
+
return /* @__PURE__ */ jsx47(
|
|
4132
|
+
LabelPrimitive.Root,
|
|
4133
|
+
{
|
|
4134
|
+
"data-slot": "label",
|
|
4135
|
+
className: cn(
|
|
4136
|
+
"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
4137
|
+
className
|
|
4138
|
+
),
|
|
4139
|
+
...props
|
|
4140
|
+
}
|
|
4141
|
+
);
|
|
4142
|
+
}
|
|
4143
|
+
|
|
4144
|
+
// src/components/rich-text/controls/hardbreak-control.tsx
|
|
4145
|
+
import { IconPageBreak } from "@tabler/icons-react";
|
|
4146
|
+
|
|
4147
|
+
// src/components/rich-text/rich-text-editor.tsx
|
|
4148
|
+
import { createContext as createContext4, useContext as useContext4 } from "react";
|
|
4149
|
+
import { jsx as jsx48 } from "react/jsx-runtime";
|
|
4150
|
+
var RichTextEditorContext = createContext4({
|
|
4151
|
+
editor: null
|
|
4152
|
+
});
|
|
4153
|
+
var useRichTextEditorContext = () => useContext4(RichTextEditorContext);
|
|
4154
|
+
function RichTextEditor({
|
|
4155
|
+
editor,
|
|
4156
|
+
children,
|
|
4157
|
+
className
|
|
4158
|
+
}) {
|
|
4159
|
+
return /* @__PURE__ */ jsx48(RichTextEditorContext.Provider, { value: { editor }, children: /* @__PURE__ */ jsx48(
|
|
4160
|
+
"div",
|
|
4161
|
+
{
|
|
4162
|
+
className: cn(
|
|
4163
|
+
"border-input rounded-md border overflow-hidden",
|
|
4164
|
+
className
|
|
4165
|
+
),
|
|
4166
|
+
children
|
|
4167
|
+
}
|
|
4168
|
+
) });
|
|
4169
|
+
}
|
|
4170
|
+
function RichTextEditorToolbar({
|
|
4171
|
+
children,
|
|
4172
|
+
className,
|
|
4173
|
+
sticky,
|
|
4174
|
+
stickyOffset = 0,
|
|
4175
|
+
...props
|
|
4176
|
+
}) {
|
|
4177
|
+
return /* @__PURE__ */ jsx48(
|
|
4178
|
+
"div",
|
|
4179
|
+
{
|
|
4180
|
+
className: cn(
|
|
4181
|
+
"bg-muted/50 border-border flex flex-wrap items-center gap-1 border-b p-2",
|
|
4182
|
+
sticky && "sticky z-10",
|
|
4183
|
+
className
|
|
4184
|
+
),
|
|
4185
|
+
style: sticky ? { top: `${stickyOffset}px` } : void 0,
|
|
4186
|
+
...props,
|
|
4187
|
+
children
|
|
4188
|
+
}
|
|
4189
|
+
);
|
|
4190
|
+
}
|
|
4191
|
+
function RichTextEditorContent({
|
|
4192
|
+
className,
|
|
4193
|
+
...props
|
|
4194
|
+
}) {
|
|
4195
|
+
return /* @__PURE__ */ jsx48(
|
|
4196
|
+
"div",
|
|
4197
|
+
{
|
|
4198
|
+
className: cn(
|
|
4199
|
+
"prose dark:prose-invert max-w-none p-4 min-h-[200px] focus:outline-none",
|
|
4200
|
+
"[&_.tiptap]:outline-none [&_.tiptap]:min-h-[180px]",
|
|
4201
|
+
"[&_.tiptap_p.is-editor-empty:first-child::before]:text-muted-foreground [&_.tiptap_p.is-editor-empty:first-child::before]:content-[attr(data-placeholder)] [&_.tiptap_p.is-editor-empty:first-child::before]:float-left [&_.tiptap_p.is-editor-empty:first-child::before]:h-0 [&_.tiptap_p.is-editor-empty:first-child::before]:pointer-events-none",
|
|
4202
|
+
className
|
|
4203
|
+
),
|
|
4204
|
+
...props
|
|
4205
|
+
}
|
|
4206
|
+
);
|
|
4207
|
+
}
|
|
4208
|
+
function RichTextEditorControlsGroup({
|
|
4209
|
+
children,
|
|
4210
|
+
className,
|
|
4211
|
+
...props
|
|
4212
|
+
}) {
|
|
4213
|
+
return /* @__PURE__ */ jsx48("div", { className: cn("flex items-center gap-0.5", className), ...props, children });
|
|
4214
|
+
}
|
|
4215
|
+
function RichTextEditorControl({
|
|
4216
|
+
children,
|
|
4217
|
+
className,
|
|
4218
|
+
active,
|
|
4219
|
+
disabled,
|
|
4220
|
+
...props
|
|
4221
|
+
}) {
|
|
4222
|
+
return /* @__PURE__ */ jsx48(
|
|
4223
|
+
"button",
|
|
4224
|
+
{
|
|
4225
|
+
type: "button",
|
|
4226
|
+
className: cn(
|
|
4227
|
+
"inline-flex items-center justify-center rounded-sm p-2 text-sm font-medium transition-colors",
|
|
4228
|
+
"hover:bg-accent hover:text-accent-foreground",
|
|
4229
|
+
"focus-visible:ring-ring/50 focus-visible:ring-[2px] focus-visible:outline-none",
|
|
4230
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
4231
|
+
active && "bg-accent text-accent-foreground",
|
|
4232
|
+
className
|
|
4233
|
+
),
|
|
4234
|
+
disabled,
|
|
4235
|
+
...props,
|
|
4236
|
+
children
|
|
4237
|
+
}
|
|
4238
|
+
);
|
|
4239
|
+
}
|
|
4240
|
+
|
|
4241
|
+
// src/components/rich-text/controls/hardbreak-control.tsx
|
|
4242
|
+
import { jsx as jsx49 } from "react/jsx-runtime";
|
|
4243
|
+
function HardbreakControl({ editor }) {
|
|
4244
|
+
const handleHardbreak = (e) => {
|
|
4245
|
+
e.preventDefault();
|
|
4246
|
+
if (editor) {
|
|
4247
|
+
editor.chain().focus().setHardBreak().run();
|
|
4248
|
+
}
|
|
4249
|
+
};
|
|
4250
|
+
return /* @__PURE__ */ jsx49(RichTextEditorControlsGroup, { children: /* @__PURE__ */ jsx49(
|
|
4251
|
+
RichTextEditorControl,
|
|
4252
|
+
{
|
|
4253
|
+
onClick: handleHardbreak,
|
|
4254
|
+
disabled: !editor,
|
|
4255
|
+
"aria-label": "Insert hard break",
|
|
4256
|
+
title: "Insert hard break",
|
|
4257
|
+
children: /* @__PURE__ */ jsx49(IconPageBreak, { className: "size-4" })
|
|
4258
|
+
}
|
|
4259
|
+
) });
|
|
4260
|
+
}
|
|
4261
|
+
|
|
4262
|
+
// src/components/rich-text/controls/iframe-control.tsx
|
|
4263
|
+
import { IconExternalLink } from "@tabler/icons-react";
|
|
4264
|
+
import { useState as useState12 } from "react";
|
|
4265
|
+
import { jsx as jsx50, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
4266
|
+
function IframeControl() {
|
|
4267
|
+
const { editor } = useRichTextEditorContext();
|
|
4268
|
+
const [open, setOpen] = useState12(false);
|
|
4269
|
+
const [iframeTag, setIframeTag] = useState12("");
|
|
4270
|
+
const handleOpen = () => {
|
|
4271
|
+
const oldIframeTag = editor?.getAttributes("iframe").src ?? "";
|
|
4272
|
+
setIframeTag(oldIframeTag);
|
|
4273
|
+
setOpen(true);
|
|
4274
|
+
};
|
|
4275
|
+
const isValidIframeTag = (input) => {
|
|
4276
|
+
const iframePattern = /^<iframe.*src="https?:\/\/.*".*><\/iframe>$/;
|
|
4277
|
+
return iframePattern.test(input);
|
|
4278
|
+
};
|
|
4279
|
+
const makeIframeResponsive = (iframe) => {
|
|
4280
|
+
const srcMatch = iframe.match(/src="([^"]+)"/);
|
|
4281
|
+
if (!srcMatch) {
|
|
4282
|
+
return iframe;
|
|
4283
|
+
}
|
|
4284
|
+
const src = srcMatch[1];
|
|
4285
|
+
return `<iframe src="${src}" style="top: 0; left: 0; width: 95%; height: 480px; border: 0; margin: 0 auto; display: block;" allowfullscreen loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>`;
|
|
4286
|
+
};
|
|
4287
|
+
const handleAdd = () => {
|
|
4288
|
+
if (iframeTag && isValidIframeTag(iframeTag) && editor) {
|
|
4289
|
+
const responsiveIframeTag = makeIframeResponsive(iframeTag);
|
|
4290
|
+
editor.chain().focus().insertContent(responsiveIframeTag).run();
|
|
4291
|
+
setOpen(false);
|
|
4292
|
+
setIframeTag("");
|
|
4293
|
+
}
|
|
4294
|
+
};
|
|
4295
|
+
const handleClose = () => {
|
|
4296
|
+
setOpen(false);
|
|
4297
|
+
setIframeTag("");
|
|
4298
|
+
};
|
|
4299
|
+
return /* @__PURE__ */ jsxs31(Dialog, { open, onOpenChange: setOpen, children: [
|
|
4300
|
+
/* @__PURE__ */ jsx50(DialogTrigger, { asChild: true, children: /* @__PURE__ */ jsx50(
|
|
4301
|
+
RichTextEditorControl,
|
|
4302
|
+
{
|
|
4303
|
+
onClick: handleOpen,
|
|
4304
|
+
active: editor?.isActive("iframe"),
|
|
4305
|
+
"aria-label": "Insert iframe",
|
|
4306
|
+
title: "Insert iframe",
|
|
4307
|
+
children: /* @__PURE__ */ jsx50(IconExternalLink, { className: "size-4" })
|
|
4308
|
+
}
|
|
4309
|
+
) }),
|
|
4310
|
+
/* @__PURE__ */ jsxs31(DialogContent, { children: [
|
|
4311
|
+
/* @__PURE__ */ jsx50(DialogHeader, { children: /* @__PURE__ */ jsx50(DialogTitle, { children: "Insert Iframe" }) }),
|
|
4312
|
+
/* @__PURE__ */ jsx50("div", { className: "flex flex-col gap-4", children: /* @__PURE__ */ jsxs31("div", { className: "flex flex-col gap-2", children: [
|
|
4313
|
+
/* @__PURE__ */ jsx50(Label3, { htmlFor: "iframe-tag", children: "Iframe Tag" }),
|
|
4314
|
+
/* @__PURE__ */ jsx50(
|
|
4315
|
+
Input,
|
|
4316
|
+
{
|
|
4317
|
+
id: "iframe-tag",
|
|
4318
|
+
placeholder: '<iframe src="..." ></iframe>',
|
|
4319
|
+
value: iframeTag,
|
|
4320
|
+
onChange: (e) => setIframeTag(e.target.value),
|
|
4321
|
+
onKeyDown: (e) => {
|
|
4322
|
+
if (e.key === "Enter") {
|
|
4323
|
+
e.preventDefault();
|
|
4324
|
+
handleAdd();
|
|
4325
|
+
}
|
|
4326
|
+
}
|
|
4327
|
+
}
|
|
4328
|
+
)
|
|
4329
|
+
] }) }),
|
|
4330
|
+
/* @__PURE__ */ jsxs31(DialogFooter, { children: [
|
|
4331
|
+
/* @__PURE__ */ jsx50(Button, { variant: "outline", onClick: handleClose, children: "Cancel" }),
|
|
4332
|
+
/* @__PURE__ */ jsx50(Button, { onClick: handleAdd, children: "Add Iframe" })
|
|
4333
|
+
] })
|
|
4334
|
+
] })
|
|
4335
|
+
] });
|
|
4336
|
+
}
|
|
4337
|
+
|
|
4338
|
+
// src/components/rich-text/controls/image-control.tsx
|
|
4339
|
+
import { IconPhoto } from "@tabler/icons-react";
|
|
4340
|
+
import { useState as useState13 } from "react";
|
|
4341
|
+
import { jsx as jsx51, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
4342
|
+
function ImageControl() {
|
|
4343
|
+
const { editor } = useRichTextEditorContext();
|
|
4344
|
+
const [open, setOpen] = useState13(false);
|
|
4345
|
+
const [url, setUrl] = useState13("");
|
|
4346
|
+
const handleOpen = () => {
|
|
4347
|
+
const oldUrl = editor?.getAttributes("image").src ?? "";
|
|
4348
|
+
setUrl(oldUrl);
|
|
4349
|
+
setOpen(true);
|
|
4350
|
+
};
|
|
4351
|
+
const handleAdd = () => {
|
|
4352
|
+
if (url && editor) {
|
|
4353
|
+
editor.chain().focus().setImage({ src: url }).run();
|
|
4354
|
+
}
|
|
4355
|
+
setOpen(false);
|
|
4356
|
+
setUrl("");
|
|
4357
|
+
};
|
|
4358
|
+
const handleClose = () => {
|
|
4359
|
+
setOpen(false);
|
|
4360
|
+
setUrl("");
|
|
4361
|
+
};
|
|
4362
|
+
return /* @__PURE__ */ jsxs32(Dialog, { open, onOpenChange: setOpen, children: [
|
|
4363
|
+
/* @__PURE__ */ jsx51(DialogTrigger, { asChild: true, children: /* @__PURE__ */ jsx51(
|
|
4364
|
+
RichTextEditorControl,
|
|
4365
|
+
{
|
|
4366
|
+
onClick: handleOpen,
|
|
4367
|
+
active: editor?.isActive("image"),
|
|
4368
|
+
"aria-label": "Insert image",
|
|
4369
|
+
title: "Insert image",
|
|
4370
|
+
children: /* @__PURE__ */ jsx51(IconPhoto, { className: "size-4" })
|
|
4371
|
+
}
|
|
4372
|
+
) }),
|
|
4373
|
+
/* @__PURE__ */ jsxs32(DialogContent, { children: [
|
|
4374
|
+
/* @__PURE__ */ jsx51(DialogHeader, { children: /* @__PURE__ */ jsx51(DialogTitle, { children: "Insert Image" }) }),
|
|
4375
|
+
/* @__PURE__ */ jsx51("div", { className: "flex flex-col gap-4", children: /* @__PURE__ */ jsxs32("div", { className: "flex flex-col gap-2", children: [
|
|
4376
|
+
/* @__PURE__ */ jsx51(Label3, { htmlFor: "image-url", children: "Image URL" }),
|
|
4377
|
+
/* @__PURE__ */ jsx51(
|
|
4378
|
+
Input,
|
|
4379
|
+
{
|
|
4380
|
+
id: "image-url",
|
|
4381
|
+
placeholder: "https://example.com/image.jpg",
|
|
4382
|
+
value: url,
|
|
4383
|
+
onChange: (e) => setUrl(e.target.value),
|
|
4384
|
+
onKeyDown: (e) => {
|
|
4385
|
+
if (e.key === "Enter") {
|
|
4386
|
+
e.preventDefault();
|
|
4387
|
+
handleAdd();
|
|
4388
|
+
}
|
|
4389
|
+
}
|
|
4390
|
+
}
|
|
4391
|
+
)
|
|
4392
|
+
] }) }),
|
|
4393
|
+
/* @__PURE__ */ jsxs32(DialogFooter, { children: [
|
|
4394
|
+
/* @__PURE__ */ jsx51(Button, { variant: "outline", onClick: handleClose, children: "Cancel" }),
|
|
4395
|
+
/* @__PURE__ */ jsx51(Button, { onClick: handleAdd, children: "Add Image" })
|
|
4396
|
+
] })
|
|
4397
|
+
] })
|
|
4398
|
+
] });
|
|
4399
|
+
}
|
|
4400
|
+
|
|
4401
|
+
// src/components/rich-text/controls/table-control.tsx
|
|
4402
|
+
import {
|
|
4403
|
+
IconColumnInsertRight,
|
|
4404
|
+
IconFreezeRow,
|
|
4405
|
+
IconRowInsertBottom,
|
|
4406
|
+
IconTable as IconTable2,
|
|
4407
|
+
IconTableMinus,
|
|
4408
|
+
IconTrash as IconTrash3
|
|
4409
|
+
} from "@tabler/icons-react";
|
|
4410
|
+
import { Fragment as Fragment10, jsx as jsx52, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
4411
|
+
function TableControl({ editor }) {
|
|
4412
|
+
if (!editor) {
|
|
4413
|
+
return null;
|
|
4414
|
+
}
|
|
4415
|
+
const handleInsertTable = () => {
|
|
4416
|
+
editor.chain().focus().insertTable({ rows: 2, cols: 2, withHeaderRow: true }).run();
|
|
4417
|
+
};
|
|
4418
|
+
return /* @__PURE__ */ jsxs33(Fragment10, { children: [
|
|
4419
|
+
/* @__PURE__ */ jsx52(
|
|
4420
|
+
RichTextEditorControl,
|
|
4421
|
+
{
|
|
4422
|
+
onClick: handleInsertTable,
|
|
4423
|
+
disabled: !editor.can().insertTable(),
|
|
4424
|
+
"aria-label": "Insert table",
|
|
4425
|
+
title: "Insert table",
|
|
4426
|
+
children: /* @__PURE__ */ jsx52(IconTable2, { className: "size-4" })
|
|
4427
|
+
}
|
|
4428
|
+
),
|
|
4429
|
+
/* @__PURE__ */ jsx52(
|
|
4430
|
+
RichTextEditorControl,
|
|
4431
|
+
{
|
|
4432
|
+
onClick: () => editor.chain().focus().addColumnAfter().run(),
|
|
4433
|
+
disabled: !editor.can().addColumnAfter(),
|
|
4434
|
+
"aria-label": "Add column",
|
|
4435
|
+
title: "Add column",
|
|
4436
|
+
children: /* @__PURE__ */ jsx52(IconColumnInsertRight, { className: "size-4" })
|
|
4437
|
+
}
|
|
4438
|
+
),
|
|
4439
|
+
/* @__PURE__ */ jsx52(
|
|
4440
|
+
RichTextEditorControl,
|
|
4441
|
+
{
|
|
4442
|
+
onClick: () => editor.chain().focus().addRowAfter().run(),
|
|
4443
|
+
disabled: !editor.can().addRowAfter(),
|
|
4444
|
+
"aria-label": "Add row",
|
|
4445
|
+
title: "Add row",
|
|
4446
|
+
children: /* @__PURE__ */ jsx52(IconRowInsertBottom, { className: "size-4" })
|
|
4447
|
+
}
|
|
4448
|
+
),
|
|
4449
|
+
/* @__PURE__ */ jsx52(
|
|
4450
|
+
RichTextEditorControl,
|
|
4451
|
+
{
|
|
4452
|
+
onClick: () => editor.chain().focus().deleteColumn().run(),
|
|
4453
|
+
disabled: !editor.can().deleteColumn(),
|
|
4454
|
+
"aria-label": "Delete column",
|
|
4455
|
+
title: "Delete column",
|
|
4456
|
+
children: /* @__PURE__ */ jsx52(IconTableMinus, { className: "size-4" })
|
|
4457
|
+
}
|
|
4458
|
+
),
|
|
4459
|
+
/* @__PURE__ */ jsx52(
|
|
4460
|
+
RichTextEditorControl,
|
|
4461
|
+
{
|
|
4462
|
+
onClick: () => editor.chain().focus().deleteRow().run(),
|
|
4463
|
+
disabled: !editor.can().deleteRow(),
|
|
4464
|
+
"aria-label": "Delete row",
|
|
4465
|
+
title: "Delete row",
|
|
4466
|
+
children: /* @__PURE__ */ jsx52(IconFreezeRow, { className: "size-4" })
|
|
4467
|
+
}
|
|
4468
|
+
),
|
|
4469
|
+
/* @__PURE__ */ jsx52(
|
|
4470
|
+
RichTextEditorControl,
|
|
4471
|
+
{
|
|
4472
|
+
onClick: () => editor.chain().focus().deleteTable().run(),
|
|
4473
|
+
disabled: !editor.can().deleteTable(),
|
|
4474
|
+
"aria-label": "Delete table",
|
|
4475
|
+
title: "Delete table",
|
|
4476
|
+
children: /* @__PURE__ */ jsx52(IconTrash3, { className: "size-4" })
|
|
4477
|
+
}
|
|
4478
|
+
)
|
|
4479
|
+
] });
|
|
4480
|
+
}
|
|
4481
|
+
|
|
4482
|
+
// src/components/rich-text/controls/youtube-control.tsx
|
|
4483
|
+
import { IconBrandYoutube } from "@tabler/icons-react";
|
|
4484
|
+
import { useState as useState14 } from "react";
|
|
4485
|
+
import { jsx as jsx53, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
4486
|
+
function YoutubeControl() {
|
|
4487
|
+
const { editor } = useRichTextEditorContext();
|
|
4488
|
+
const [open, setOpen] = useState14(false);
|
|
4489
|
+
const [url, setUrl] = useState14("");
|
|
4490
|
+
const handleOpen = () => {
|
|
4491
|
+
const oldUrl = editor?.getAttributes("youtube").src ?? "";
|
|
4492
|
+
setUrl(oldUrl);
|
|
4493
|
+
setOpen(true);
|
|
4494
|
+
};
|
|
4495
|
+
const handleAdd = () => {
|
|
4496
|
+
if (url && editor) {
|
|
4497
|
+
editor.chain().focus().setYoutubeVideo({ src: url }).run();
|
|
4498
|
+
}
|
|
4499
|
+
setOpen(false);
|
|
4500
|
+
setUrl("");
|
|
4501
|
+
};
|
|
4502
|
+
const handleClose = () => {
|
|
4503
|
+
setOpen(false);
|
|
4504
|
+
setUrl("");
|
|
4505
|
+
};
|
|
4506
|
+
return /* @__PURE__ */ jsxs34(Dialog, { open, onOpenChange: setOpen, children: [
|
|
4507
|
+
/* @__PURE__ */ jsx53(DialogTrigger, { asChild: true, children: /* @__PURE__ */ jsx53(
|
|
4508
|
+
RichTextEditorControl,
|
|
4509
|
+
{
|
|
4510
|
+
onClick: handleOpen,
|
|
4511
|
+
active: editor?.isActive("youtube"),
|
|
4512
|
+
"aria-label": "Insert YouTube video",
|
|
4513
|
+
title: "Insert YouTube video",
|
|
4514
|
+
children: /* @__PURE__ */ jsx53(IconBrandYoutube, { className: "size-4" })
|
|
4515
|
+
}
|
|
4516
|
+
) }),
|
|
4517
|
+
/* @__PURE__ */ jsxs34(DialogContent, { children: [
|
|
4518
|
+
/* @__PURE__ */ jsx53(DialogHeader, { children: /* @__PURE__ */ jsx53(DialogTitle, { children: "Insert YouTube Video" }) }),
|
|
4519
|
+
/* @__PURE__ */ jsx53("div", { className: "flex flex-col gap-4", children: /* @__PURE__ */ jsxs34("div", { className: "flex flex-col gap-2", children: [
|
|
4520
|
+
/* @__PURE__ */ jsx53(Label3, { htmlFor: "youtube-url", children: "YouTube URL" }),
|
|
4521
|
+
/* @__PURE__ */ jsx53(
|
|
4522
|
+
Input,
|
|
4523
|
+
{
|
|
4524
|
+
id: "youtube-url",
|
|
4525
|
+
placeholder: "https://youtube.com/watch?v=video-id",
|
|
4526
|
+
value: url,
|
|
4527
|
+
onChange: (e) => setUrl(e.target.value),
|
|
4528
|
+
onKeyDown: (e) => {
|
|
4529
|
+
if (e.key === "Enter") {
|
|
4530
|
+
e.preventDefault();
|
|
4531
|
+
handleAdd();
|
|
4532
|
+
}
|
|
4533
|
+
}
|
|
4534
|
+
}
|
|
4535
|
+
)
|
|
4536
|
+
] }) }),
|
|
4537
|
+
/* @__PURE__ */ jsxs34(DialogFooter, { children: [
|
|
4538
|
+
/* @__PURE__ */ jsx53(Button, { variant: "outline", onClick: handleClose, children: "Cancel" }),
|
|
4539
|
+
/* @__PURE__ */ jsx53(Button, { onClick: handleAdd, children: "Add Video" })
|
|
4540
|
+
] })
|
|
4541
|
+
] })
|
|
4542
|
+
] });
|
|
4543
|
+
}
|
|
4544
|
+
|
|
4545
|
+
// src/components/rich-text/extensions/custom-heading.ts
|
|
4546
|
+
import { mergeAttributes } from "@tiptap/core";
|
|
4547
|
+
import { Heading } from "@tiptap/extension-heading";
|
|
4548
|
+
var CustomHeading = Heading.extend({
|
|
4549
|
+
addAttributes() {
|
|
4550
|
+
return {
|
|
4551
|
+
class: {
|
|
4552
|
+
default: ""
|
|
4553
|
+
}
|
|
4554
|
+
};
|
|
4555
|
+
},
|
|
4556
|
+
renderHTML({ node }) {
|
|
4557
|
+
const level = node.attrs.level;
|
|
4558
|
+
const classes = {
|
|
4559
|
+
1: "text-4xl font-bold text-foreground mb-4",
|
|
4560
|
+
2: "text-3xl font-semibold text-foreground mb-3",
|
|
4561
|
+
3: "text-2xl font-medium text-foreground mb-2",
|
|
4562
|
+
4: "text-xl font-normal text-foreground mb-1"
|
|
4563
|
+
};
|
|
4564
|
+
return [
|
|
4565
|
+
`h${level}`,
|
|
4566
|
+
mergeAttributes(this.options.HTMLAttributes, {
|
|
4567
|
+
class: classes[level]
|
|
4568
|
+
}),
|
|
4569
|
+
0
|
|
4570
|
+
];
|
|
4571
|
+
}
|
|
4572
|
+
});
|
|
4573
|
+
|
|
4574
|
+
// src/components/rich-text/extensions/iframe-extension.ts
|
|
4575
|
+
import { mergeAttributes as mergeAttributes2, Node, nodePasteRule } from "@tiptap/core";
|
|
4576
|
+
var trimSrcLink = (src) => src.trim();
|
|
4577
|
+
var getEmbedUrlFromSrc = ({ src }) => trimSrcLink(src);
|
|
4578
|
+
var Iframe = Node.create({
|
|
4579
|
+
name: "iframe",
|
|
4580
|
+
addOptions() {
|
|
4581
|
+
return {
|
|
4582
|
+
addPasteHandler: true,
|
|
4583
|
+
allowFullscreen: true,
|
|
4584
|
+
height: 480,
|
|
4585
|
+
width: 640,
|
|
4586
|
+
htmlAttributes: {},
|
|
4587
|
+
inline: false,
|
|
4588
|
+
src: "",
|
|
4589
|
+
style: "border:0;",
|
|
4590
|
+
loading: "lazy",
|
|
4591
|
+
referrerpolicy: "no-referrer-when-downgrade"
|
|
4592
|
+
};
|
|
4593
|
+
},
|
|
4594
|
+
inline() {
|
|
4595
|
+
return this.options.inline;
|
|
4596
|
+
},
|
|
4597
|
+
group() {
|
|
4598
|
+
return this.options.inline ? "inline" : "block";
|
|
4599
|
+
},
|
|
4600
|
+
draggable: true,
|
|
4601
|
+
addAttributes() {
|
|
4602
|
+
return {
|
|
4603
|
+
src: { default: null },
|
|
4604
|
+
width: { default: this.options.width },
|
|
4605
|
+
height: { default: this.options.height },
|
|
4606
|
+
style: { default: this.options.style },
|
|
4607
|
+
loading: { default: this.options.loading },
|
|
4608
|
+
referrerpolicy: { default: this.options.referrerpolicy }
|
|
4609
|
+
};
|
|
4610
|
+
},
|
|
4611
|
+
parseHTML() {
|
|
4612
|
+
return [{ tag: "iframe" }, { tag: "iframe[src]" }];
|
|
4613
|
+
},
|
|
4614
|
+
addCommands() {
|
|
4615
|
+
return {
|
|
4616
|
+
setIframe: (options) => ({ commands }) => {
|
|
4617
|
+
const trimmedSrc = trimSrcLink(options.src);
|
|
4618
|
+
if (!trimmedSrc) {
|
|
4619
|
+
return false;
|
|
4620
|
+
}
|
|
4621
|
+
return commands.insertContent({ type: this.name, attrs: options });
|
|
4622
|
+
}
|
|
4623
|
+
};
|
|
4624
|
+
},
|
|
4625
|
+
addPasteRules() {
|
|
4626
|
+
if (this.options.addPasteHandler) {
|
|
4627
|
+
return [
|
|
4628
|
+
nodePasteRule({
|
|
4629
|
+
find: /<iframe[^>]*src=["']([^"']+)["'][^>]*>/g,
|
|
4630
|
+
type: this.type,
|
|
4631
|
+
getAttributes: (match) => {
|
|
4632
|
+
return { src: match[1] };
|
|
4633
|
+
}
|
|
4634
|
+
})
|
|
4635
|
+
];
|
|
4636
|
+
}
|
|
4637
|
+
return [];
|
|
4638
|
+
},
|
|
4639
|
+
renderHTML({ HTMLAttributes }) {
|
|
4640
|
+
const embedUrl = getEmbedUrlFromSrc({
|
|
4641
|
+
src: HTMLAttributes.src
|
|
4642
|
+
});
|
|
4643
|
+
const iframeStyle = HTMLAttributes.style || this.options.style;
|
|
4644
|
+
return [
|
|
4645
|
+
"iframe",
|
|
4646
|
+
mergeAttributes2(
|
|
4647
|
+
this.options.htmlAttributes,
|
|
4648
|
+
{
|
|
4649
|
+
width: HTMLAttributes.width || this.options.width,
|
|
4650
|
+
height: HTMLAttributes.height || this.options.height,
|
|
4651
|
+
allowfullscreen: this.options.allowFullscreen,
|
|
4652
|
+
style: iframeStyle,
|
|
4653
|
+
loading: this.options.loading,
|
|
4654
|
+
referrerpolicy: this.options.referrerpolicy
|
|
4655
|
+
},
|
|
4656
|
+
{ ...HTMLAttributes, src: embedUrl }
|
|
4657
|
+
)
|
|
4658
|
+
];
|
|
4659
|
+
}
|
|
4660
|
+
});
|
|
4661
|
+
|
|
4662
|
+
// src/components/rich-text/rich-text-input.tsx
|
|
4663
|
+
import { Fragment as Fragment11, jsx as jsx54, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
4664
|
+
function RichTextInput({
|
|
4665
|
+
field,
|
|
4666
|
+
label,
|
|
4667
|
+
error,
|
|
4668
|
+
className,
|
|
4669
|
+
withAsterisk,
|
|
4670
|
+
enabledControllers = [],
|
|
4671
|
+
mode = "large",
|
|
4672
|
+
withOnUpdate = false,
|
|
4673
|
+
placeholder = "Start typing..."
|
|
4674
|
+
}) {
|
|
4675
|
+
const { value, onChange } = field;
|
|
4676
|
+
const editor = useEditor({
|
|
4677
|
+
immediatelyRender: false,
|
|
4678
|
+
extensions: [
|
|
4679
|
+
StarterKit.configure({
|
|
4680
|
+
// biome-ignore lint/style/useNamingConvention: tiptap API
|
|
4681
|
+
bulletList: { HTMLAttributes: { class: "list-disc pl-4" } },
|
|
4682
|
+
// biome-ignore lint/style/useNamingConvention: tiptap API
|
|
4683
|
+
orderedList: { HTMLAttributes: { class: "list-decimal pl-4" } }
|
|
4684
|
+
}),
|
|
4685
|
+
HardBreak.configure({ keepMarks: false }),
|
|
4686
|
+
Underline,
|
|
4687
|
+
Link.configure({
|
|
4688
|
+
// biome-ignore lint/style/useNamingConvention: tiptap API
|
|
4689
|
+
HTMLAttributes: { class: "text-primary underline" },
|
|
4690
|
+
openOnClick: false
|
|
4691
|
+
}),
|
|
4692
|
+
Superscript,
|
|
4693
|
+
SubScript,
|
|
4694
|
+
Highlight,
|
|
4695
|
+
TextAlign.configure({ types: ["heading", "paragraph"] }),
|
|
4696
|
+
Placeholder.configure({ placeholder }),
|
|
4697
|
+
Image2.configure({
|
|
4698
|
+
inline: true,
|
|
4699
|
+
allowBase64: true,
|
|
4700
|
+
// biome-ignore lint/style/useNamingConvention: tiptap API
|
|
4701
|
+
HTMLAttributes: { class: "w-full h-auto my-3 rounded-md" }
|
|
4702
|
+
}),
|
|
4703
|
+
Youtube.configure({
|
|
4704
|
+
// biome-ignore lint/style/useNamingConvention: tiptap API
|
|
4705
|
+
HTMLAttributes: { class: "w-full aspect-video my-4" }
|
|
4706
|
+
}),
|
|
4707
|
+
Table2.configure({
|
|
4708
|
+
resizable: true,
|
|
4709
|
+
// biome-ignore lint/style/useNamingConvention: tiptap API
|
|
4710
|
+
HTMLAttributes: {
|
|
4711
|
+
class: "border-collapse table-auto w-full my-4"
|
|
4712
|
+
}
|
|
4713
|
+
}),
|
|
4714
|
+
TableRow2.configure({
|
|
4715
|
+
// biome-ignore lint/style/useNamingConvention: tiptap API
|
|
4716
|
+
HTMLAttributes: { class: "border border-border" }
|
|
4717
|
+
}),
|
|
4718
|
+
TableCell2.configure({
|
|
4719
|
+
// biome-ignore lint/style/useNamingConvention: tiptap API
|
|
4720
|
+
HTMLAttributes: {
|
|
4721
|
+
class: "border border-border p-2 min-w-[100px] min-h-[40px]"
|
|
4722
|
+
}
|
|
4723
|
+
}),
|
|
4724
|
+
TableHeader2.configure({
|
|
4725
|
+
// biome-ignore lint/style/useNamingConvention: tiptap API
|
|
4726
|
+
HTMLAttributes: {
|
|
4727
|
+
class: "border border-border p-2 bg-muted font-semibold"
|
|
4728
|
+
}
|
|
4729
|
+
}),
|
|
4730
|
+
CustomHeading,
|
|
4731
|
+
Iframe
|
|
4732
|
+
],
|
|
4733
|
+
content: value || "",
|
|
4734
|
+
...withOnUpdate && {
|
|
4735
|
+
onUpdate: (props) => onChange?.(props?.editor?.getHTML() ?? "<p></p>")
|
|
4736
|
+
},
|
|
4737
|
+
...!withOnUpdate && {
|
|
4738
|
+
onBlur: (props) => onChange(props?.editor?.getHTML() ?? "<p></p>")
|
|
4739
|
+
}
|
|
4740
|
+
});
|
|
4741
|
+
const enabledControllersLength = enabledControllers.length;
|
|
4742
|
+
const isControllerEnabled = (controller) => enabledControllersLength === 0 || enabledControllers.includes(controller);
|
|
4743
|
+
return /* @__PURE__ */ jsxs35("div", { className: cn("flex flex-col gap-2", className), children: [
|
|
4744
|
+
label && /* @__PURE__ */ jsxs35(Label3, { children: [
|
|
4745
|
+
label,
|
|
4746
|
+
withAsterisk && /* @__PURE__ */ jsx54("span", { className: "text-destructive", children: "*" })
|
|
4747
|
+
] }),
|
|
4748
|
+
/* @__PURE__ */ jsxs35(RichTextEditor, { editor, children: [
|
|
4749
|
+
/* @__PURE__ */ jsxs35(RichTextEditorToolbar, { children: [
|
|
4750
|
+
/* @__PURE__ */ jsxs35(RichTextEditorControlsGroup, { children: [
|
|
4751
|
+
isControllerEnabled("bold") && /* @__PURE__ */ jsx54(
|
|
4752
|
+
RichTextEditorControl,
|
|
4753
|
+
{
|
|
4754
|
+
onClick: () => editor?.chain().focus().toggleBold().run(),
|
|
4755
|
+
active: editor?.isActive("bold"),
|
|
4756
|
+
disabled: !editor?.can().chain().focus().toggleBold().run(),
|
|
4757
|
+
"aria-label": "Bold",
|
|
4758
|
+
title: "Bold",
|
|
4759
|
+
children: /* @__PURE__ */ jsx54(IconBold, { className: "size-4" })
|
|
4760
|
+
}
|
|
4761
|
+
),
|
|
4762
|
+
isControllerEnabled("italic") && /* @__PURE__ */ jsx54(
|
|
4763
|
+
RichTextEditorControl,
|
|
4764
|
+
{
|
|
4765
|
+
onClick: () => editor?.chain().focus().toggleItalic().run(),
|
|
4766
|
+
active: editor?.isActive("italic"),
|
|
4767
|
+
disabled: !editor?.can().chain().focus().toggleItalic().run(),
|
|
4768
|
+
"aria-label": "Italic",
|
|
4769
|
+
title: "Italic",
|
|
4770
|
+
children: /* @__PURE__ */ jsx54(IconItalic, { className: "size-4" })
|
|
4771
|
+
}
|
|
4772
|
+
),
|
|
4773
|
+
isControllerEnabled("code") && /* @__PURE__ */ jsx54(
|
|
4774
|
+
RichTextEditorControl,
|
|
4775
|
+
{
|
|
4776
|
+
onClick: () => editor?.chain().focus().toggleCode().run(),
|
|
4777
|
+
active: editor?.isActive("code"),
|
|
4778
|
+
disabled: !editor?.can().chain().focus().toggleCode().run(),
|
|
4779
|
+
"aria-label": "Code",
|
|
4780
|
+
title: "Code",
|
|
4781
|
+
children: /* @__PURE__ */ jsx54(IconCode, { className: "size-4" })
|
|
4782
|
+
}
|
|
4783
|
+
),
|
|
4784
|
+
isControllerEnabled("underline") && /* @__PURE__ */ jsx54(
|
|
4785
|
+
RichTextEditorControl,
|
|
4786
|
+
{
|
|
4787
|
+
onClick: () => editor?.chain().focus().toggleUnderline().run(),
|
|
4788
|
+
active: editor?.isActive("underline"),
|
|
4789
|
+
disabled: !editor?.can().chain().focus().toggleUnderline().run(),
|
|
4790
|
+
"aria-label": "Underline",
|
|
4791
|
+
title: "Underline",
|
|
4792
|
+
children: /* @__PURE__ */ jsx54(IconUnderline, { className: "size-4" })
|
|
4793
|
+
}
|
|
4794
|
+
),
|
|
4795
|
+
isControllerEnabled("strikethrough") && /* @__PURE__ */ jsx54(
|
|
4796
|
+
RichTextEditorControl,
|
|
4797
|
+
{
|
|
4798
|
+
onClick: () => editor?.chain().focus().toggleStrike().run(),
|
|
4799
|
+
active: editor?.isActive("strike"),
|
|
4800
|
+
disabled: !editor?.can().chain().focus().toggleStrike().run(),
|
|
4801
|
+
"aria-label": "Strikethrough",
|
|
4802
|
+
title: "Strikethrough",
|
|
4803
|
+
children: /* @__PURE__ */ jsx54(IconStrikethrough, { className: "size-4" })
|
|
4804
|
+
}
|
|
4805
|
+
),
|
|
4806
|
+
isControllerEnabled("clearFormatting") && /* @__PURE__ */ jsx54(
|
|
4807
|
+
RichTextEditorControl,
|
|
4808
|
+
{
|
|
4809
|
+
onClick: () => editor?.chain().focus().clearNodes().unsetAllMarks().run(),
|
|
4810
|
+
"aria-label": "Clear formatting",
|
|
4811
|
+
title: "Clear formatting",
|
|
4812
|
+
children: /* @__PURE__ */ jsx54(IconClearFormatting, { className: "size-4" })
|
|
4813
|
+
}
|
|
4814
|
+
),
|
|
4815
|
+
isControllerEnabled("highlight") && /* @__PURE__ */ jsx54(
|
|
4816
|
+
RichTextEditorControl,
|
|
4817
|
+
{
|
|
4818
|
+
onClick: () => editor?.chain().focus().toggleHighlight().run(),
|
|
4819
|
+
active: editor?.isActive("highlight"),
|
|
4820
|
+
"aria-label": "Highlight",
|
|
4821
|
+
title: "Highlight",
|
|
4822
|
+
children: /* @__PURE__ */ jsx54(IconHighlight, { className: "size-4" })
|
|
4823
|
+
}
|
|
4824
|
+
)
|
|
4825
|
+
] }),
|
|
4826
|
+
/* @__PURE__ */ jsxs35(RichTextEditorControlsGroup, { children: [
|
|
4827
|
+
isControllerEnabled("h1") && /* @__PURE__ */ jsx54(
|
|
4828
|
+
RichTextEditorControl,
|
|
4829
|
+
{
|
|
4830
|
+
onClick: () => editor?.chain().focus().toggleHeading({ level: 1 }).run(),
|
|
4831
|
+
active: editor?.isActive("heading", { level: 1 }),
|
|
4832
|
+
"aria-label": "Heading 1",
|
|
4833
|
+
title: "Heading 1",
|
|
4834
|
+
children: /* @__PURE__ */ jsx54(IconH1, { className: "size-4" })
|
|
4835
|
+
}
|
|
4836
|
+
),
|
|
4837
|
+
isControllerEnabled("h2") && /* @__PURE__ */ jsx54(
|
|
4838
|
+
RichTextEditorControl,
|
|
4839
|
+
{
|
|
4840
|
+
onClick: () => editor?.chain().focus().toggleHeading({ level: 2 }).run(),
|
|
4841
|
+
active: editor?.isActive("heading", { level: 2 }),
|
|
4842
|
+
"aria-label": "Heading 2",
|
|
4843
|
+
title: "Heading 2",
|
|
4844
|
+
children: /* @__PURE__ */ jsx54(IconH2, { className: "size-4" })
|
|
4845
|
+
}
|
|
4846
|
+
),
|
|
4847
|
+
isControllerEnabled("h3") && /* @__PURE__ */ jsx54(
|
|
4848
|
+
RichTextEditorControl,
|
|
4849
|
+
{
|
|
4850
|
+
onClick: () => editor?.chain().focus().toggleHeading({ level: 3 }).run(),
|
|
4851
|
+
active: editor?.isActive("heading", { level: 3 }),
|
|
4852
|
+
"aria-label": "Heading 3",
|
|
4853
|
+
title: "Heading 3",
|
|
4854
|
+
children: /* @__PURE__ */ jsx54(IconH3, { className: "size-4" })
|
|
4855
|
+
}
|
|
4856
|
+
),
|
|
4857
|
+
isControllerEnabled("h4") && /* @__PURE__ */ jsx54(
|
|
4858
|
+
RichTextEditorControl,
|
|
4859
|
+
{
|
|
4860
|
+
onClick: () => editor?.chain().focus().toggleHeading({ level: 4 }).run(),
|
|
4861
|
+
active: editor?.isActive("heading", { level: 4 }),
|
|
4862
|
+
"aria-label": "Heading 4",
|
|
4863
|
+
title: "Heading 4",
|
|
4864
|
+
children: /* @__PURE__ */ jsx54(IconH4, { className: "size-4" })
|
|
4865
|
+
}
|
|
4866
|
+
)
|
|
4867
|
+
] }),
|
|
4868
|
+
/* @__PURE__ */ jsxs35(RichTextEditorControlsGroup, { children: [
|
|
4869
|
+
isControllerEnabled("bulletList") && /* @__PURE__ */ jsx54(
|
|
4870
|
+
RichTextEditorControl,
|
|
4871
|
+
{
|
|
4872
|
+
onClick: () => editor?.chain().focus().toggleBulletList().run(),
|
|
4873
|
+
active: editor?.isActive("bulletList"),
|
|
4874
|
+
"aria-label": "Bullet list",
|
|
4875
|
+
title: "Bullet list",
|
|
4876
|
+
children: /* @__PURE__ */ jsx54(IconList2, { className: "size-4" })
|
|
4877
|
+
}
|
|
4878
|
+
),
|
|
4879
|
+
isControllerEnabled("orderedList") && /* @__PURE__ */ jsx54(
|
|
4880
|
+
RichTextEditorControl,
|
|
4881
|
+
{
|
|
4882
|
+
onClick: () => editor?.chain().focus().toggleOrderedList().run(),
|
|
4883
|
+
active: editor?.isActive("orderedList"),
|
|
4884
|
+
"aria-label": "Ordered list",
|
|
4885
|
+
title: "Ordered list",
|
|
4886
|
+
children: /* @__PURE__ */ jsx54(IconListNumbers, { className: "size-4" })
|
|
4887
|
+
}
|
|
4888
|
+
)
|
|
4889
|
+
] }),
|
|
4890
|
+
/* @__PURE__ */ jsxs35(RichTextEditorControlsGroup, { children: [
|
|
4891
|
+
isControllerEnabled("link") && /* @__PURE__ */ jsxs35(Fragment11, { children: [
|
|
4892
|
+
/* @__PURE__ */ jsx54(
|
|
4893
|
+
RichTextEditorControl,
|
|
4894
|
+
{
|
|
4895
|
+
onClick: () => {
|
|
4896
|
+
const url = window.prompt("Enter URL");
|
|
4897
|
+
if (url) {
|
|
4898
|
+
editor?.chain().focus().setLink({ href: url }).run();
|
|
4899
|
+
}
|
|
4900
|
+
},
|
|
4901
|
+
active: editor?.isActive("link"),
|
|
4902
|
+
"aria-label": "Link",
|
|
4903
|
+
title: "Link",
|
|
4904
|
+
children: /* @__PURE__ */ jsx54(IconLink, { className: "size-4" })
|
|
4905
|
+
}
|
|
4906
|
+
),
|
|
4907
|
+
/* @__PURE__ */ jsx54(
|
|
4908
|
+
RichTextEditorControl,
|
|
4909
|
+
{
|
|
4910
|
+
onClick: () => editor?.chain().focus().unsetLink().run(),
|
|
4911
|
+
disabled: !editor?.isActive("link"),
|
|
4912
|
+
"aria-label": "Unlink",
|
|
4913
|
+
title: "Unlink",
|
|
4914
|
+
children: /* @__PURE__ */ jsx54(IconUnlink, { className: "size-4" })
|
|
4915
|
+
}
|
|
4916
|
+
)
|
|
4917
|
+
] }),
|
|
4918
|
+
isControllerEnabled("blockquote") && /* @__PURE__ */ jsx54(
|
|
4919
|
+
RichTextEditorControl,
|
|
4920
|
+
{
|
|
4921
|
+
onClick: () => editor?.chain().focus().toggleBlockquote().run(),
|
|
4922
|
+
active: editor?.isActive("blockquote"),
|
|
4923
|
+
"aria-label": "Blockquote",
|
|
4924
|
+
title: "Blockquote",
|
|
4925
|
+
children: /* @__PURE__ */ jsx54(IconBlockquote, { className: "size-4" })
|
|
4926
|
+
}
|
|
4927
|
+
)
|
|
4928
|
+
] }),
|
|
4929
|
+
/* @__PURE__ */ jsxs35(RichTextEditorControlsGroup, { children: [
|
|
4930
|
+
isControllerEnabled("alignLeft") && /* @__PURE__ */ jsx54(
|
|
4931
|
+
RichTextEditorControl,
|
|
4932
|
+
{
|
|
4933
|
+
onClick: () => editor?.chain().focus().setTextAlign("left").run(),
|
|
4934
|
+
active: editor?.isActive({ textAlign: "left" }),
|
|
4935
|
+
"aria-label": "Align left",
|
|
4936
|
+
title: "Align left",
|
|
4937
|
+
children: /* @__PURE__ */ jsx54(IconAlignLeft, { className: "size-4" })
|
|
4938
|
+
}
|
|
4939
|
+
),
|
|
4940
|
+
isControllerEnabled("alignCenter") && /* @__PURE__ */ jsx54(
|
|
4941
|
+
RichTextEditorControl,
|
|
4942
|
+
{
|
|
4943
|
+
onClick: () => editor?.chain().focus().setTextAlign("center").run(),
|
|
4944
|
+
active: editor?.isActive({ textAlign: "center" }),
|
|
4945
|
+
"aria-label": "Align center",
|
|
4946
|
+
title: "Align center",
|
|
4947
|
+
children: /* @__PURE__ */ jsx54(IconAlignCenter, { className: "size-4" })
|
|
4948
|
+
}
|
|
4949
|
+
),
|
|
4950
|
+
isControllerEnabled("alignRight") && /* @__PURE__ */ jsx54(
|
|
4951
|
+
RichTextEditorControl,
|
|
4952
|
+
{
|
|
4953
|
+
onClick: () => editor?.chain().focus().setTextAlign("right").run(),
|
|
4954
|
+
active: editor?.isActive({ textAlign: "right" }),
|
|
4955
|
+
"aria-label": "Align right",
|
|
4956
|
+
title: "Align right",
|
|
4957
|
+
children: /* @__PURE__ */ jsx54(IconAlignRight, { className: "size-4" })
|
|
4958
|
+
}
|
|
4959
|
+
),
|
|
4960
|
+
isControllerEnabled("alignJustify") && /* @__PURE__ */ jsx54(
|
|
4961
|
+
RichTextEditorControl,
|
|
4962
|
+
{
|
|
4963
|
+
onClick: () => editor?.chain().focus().setTextAlign("justify").run(),
|
|
4964
|
+
active: editor?.isActive({ textAlign: "justify" }),
|
|
4965
|
+
"aria-label": "Align justify",
|
|
4966
|
+
title: "Align justify",
|
|
4967
|
+
children: /* @__PURE__ */ jsx54(IconAlignJustified, { className: "size-4" })
|
|
4968
|
+
}
|
|
4969
|
+
)
|
|
4970
|
+
] }),
|
|
4971
|
+
/* @__PURE__ */ jsxs35(RichTextEditorControlsGroup, { children: [
|
|
4972
|
+
isControllerEnabled("subscript") && /* @__PURE__ */ jsx54(
|
|
4973
|
+
RichTextEditorControl,
|
|
4974
|
+
{
|
|
4975
|
+
onClick: () => editor?.chain().focus().toggleSubscript().run(),
|
|
4976
|
+
active: editor?.isActive("subscript"),
|
|
4977
|
+
"aria-label": "Subscript",
|
|
4978
|
+
title: "Subscript",
|
|
4979
|
+
children: /* @__PURE__ */ jsx54(IconSubscript, { className: "size-4" })
|
|
4980
|
+
}
|
|
4981
|
+
),
|
|
4982
|
+
isControllerEnabled("superscript") && /* @__PURE__ */ jsx54(
|
|
4983
|
+
RichTextEditorControl,
|
|
4984
|
+
{
|
|
4985
|
+
onClick: () => editor?.chain().focus().toggleSuperscript().run(),
|
|
4986
|
+
active: editor?.isActive("superscript"),
|
|
4987
|
+
"aria-label": "Superscript",
|
|
4988
|
+
title: "Superscript",
|
|
4989
|
+
children: /* @__PURE__ */ jsx54(IconSuperscript, { className: "size-4" })
|
|
4990
|
+
}
|
|
4991
|
+
)
|
|
4992
|
+
] }),
|
|
4993
|
+
editor && isControllerEnabled("hardBreak") && /* @__PURE__ */ jsx54(HardbreakControl, { editor }),
|
|
4994
|
+
mode === "large" && /* @__PURE__ */ jsxs35(Fragment11, { children: [
|
|
4995
|
+
isControllerEnabled("table") && /* @__PURE__ */ jsx54(RichTextEditorControlsGroup, { children: /* @__PURE__ */ jsx54(TableControl, { editor }) }),
|
|
4996
|
+
/* @__PURE__ */ jsxs35(RichTextEditorControlsGroup, { children: [
|
|
4997
|
+
isControllerEnabled("image") && /* @__PURE__ */ jsx54(ImageControl, {}),
|
|
4998
|
+
isControllerEnabled("youtube") && /* @__PURE__ */ jsx54(YoutubeControl, {}),
|
|
4999
|
+
isControllerEnabled("map") && /* @__PURE__ */ jsx54(IframeControl, {})
|
|
5000
|
+
] })
|
|
5001
|
+
] })
|
|
5002
|
+
] }),
|
|
5003
|
+
/* @__PURE__ */ jsx54(RichTextEditorContent, { children: /* @__PURE__ */ jsx54(EditorContent, { editor }) })
|
|
5004
|
+
] }),
|
|
5005
|
+
error?.message && /* @__PURE__ */ jsx54("p", { className: "text-destructive text-sm", children: error.message })
|
|
5006
|
+
] });
|
|
5007
|
+
}
|
|
5008
|
+
|
|
5009
|
+
// src/components/ui/visually-hidden.tsx
|
|
5010
|
+
import * as VisuallyHiddenPrimitive from "@radix-ui/react-visually-hidden";
|
|
5011
|
+
import { jsx as jsx55 } from "react/jsx-runtime";
|
|
5012
|
+
function VisuallyHidden({
|
|
5013
|
+
...props
|
|
5014
|
+
}) {
|
|
5015
|
+
return /* @__PURE__ */ jsx55(VisuallyHiddenPrimitive.Root, { ...props });
|
|
5016
|
+
}
|
|
5017
|
+
|
|
5018
|
+
// src/components/locale/locale-input-rich-text.tsx
|
|
5019
|
+
import { jsx as jsx56, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
5020
|
+
function LocaleInputRichText({
|
|
5021
|
+
label,
|
|
5022
|
+
required,
|
|
5023
|
+
field,
|
|
5024
|
+
control,
|
|
5025
|
+
errors,
|
|
5026
|
+
className,
|
|
5027
|
+
enabledControllers = [],
|
|
5028
|
+
placeholder,
|
|
5029
|
+
mode = "large"
|
|
5030
|
+
}) {
|
|
5031
|
+
const [expanded, setExpanded] = useState15(false);
|
|
5032
|
+
const [fullscreen, setFullscreen] = useState15(false);
|
|
5033
|
+
const otherLanguages = SUPPORTED_LANGUAGES.filter(
|
|
5034
|
+
(lang) => lang.value !== DEFAULT_LANGUAGE
|
|
5035
|
+
);
|
|
5036
|
+
return /* @__PURE__ */ jsxs36("div", { className: cn("space-y-2", className), children: [
|
|
5037
|
+
label && /* @__PURE__ */ jsxs36(Label3, { children: [
|
|
5038
|
+
label,
|
|
5039
|
+
required && /* @__PURE__ */ jsx56("span", { className: "text-destructive ml-1", children: "*" })
|
|
5040
|
+
] }),
|
|
5041
|
+
/* @__PURE__ */ jsxs36("div", { className: "relative", children: [
|
|
5042
|
+
/* @__PURE__ */ jsx56(
|
|
5043
|
+
Controller,
|
|
5044
|
+
{
|
|
5045
|
+
control,
|
|
5046
|
+
name: `${field}.${DEFAULT_LANGUAGE}`,
|
|
5047
|
+
render: ({ field: inputField }) => /* @__PURE__ */ jsx56(
|
|
5048
|
+
RichTextInput,
|
|
5049
|
+
{
|
|
5050
|
+
field: inputField,
|
|
5051
|
+
error: errors?.[field]?.[DEFAULT_LANGUAGE],
|
|
5052
|
+
enabledControllers,
|
|
5053
|
+
placeholder,
|
|
5054
|
+
mode
|
|
5055
|
+
}
|
|
5056
|
+
)
|
|
5057
|
+
}
|
|
5058
|
+
),
|
|
5059
|
+
/* @__PURE__ */ jsxs36("div", { className: "absolute top-2 right-2 z-10 flex items-center gap-1", children: [
|
|
5060
|
+
otherLanguages.length > 0 && /* @__PURE__ */ jsx56(
|
|
5061
|
+
"button",
|
|
5062
|
+
{
|
|
5063
|
+
type: "button",
|
|
5064
|
+
onClick: () => setExpanded(!expanded),
|
|
5065
|
+
className: "flex items-center justify-center size-7 rounded-md text-muted-foreground hover:text-foreground hover:bg-accent transition-colors cursor-pointer",
|
|
5066
|
+
children: /* @__PURE__ */ jsx56(IconTextRecognition, { size: 18 })
|
|
5067
|
+
}
|
|
5068
|
+
),
|
|
5069
|
+
/* @__PURE__ */ jsx56(
|
|
5070
|
+
"button",
|
|
5071
|
+
{
|
|
5072
|
+
type: "button",
|
|
5073
|
+
onClick: () => setFullscreen(true),
|
|
5074
|
+
className: "flex items-center justify-center size-7 rounded-md text-muted-foreground hover:text-foreground hover:bg-accent transition-colors cursor-pointer",
|
|
5075
|
+
children: /* @__PURE__ */ jsx56(IconArrowsMaximize, { size: 18 })
|
|
5076
|
+
}
|
|
5077
|
+
)
|
|
5078
|
+
] })
|
|
5079
|
+
] }),
|
|
5080
|
+
expanded && otherLanguages.length > 0 && /* @__PURE__ */ jsx56("div", { className: "space-y-4 pl-4 border-l-2 border-border mt-4", children: otherLanguages.map((lang) => /* @__PURE__ */ jsxs36("div", { className: "space-y-2", children: [
|
|
5081
|
+
/* @__PURE__ */ jsx56(Label3, { className: "text-xs text-muted-foreground", children: lang.label }),
|
|
5082
|
+
/* @__PURE__ */ jsx56(
|
|
5083
|
+
Controller,
|
|
5084
|
+
{
|
|
5085
|
+
control,
|
|
5086
|
+
name: `${field}.${lang.value}`,
|
|
5087
|
+
render: ({ field: inputField }) => /* @__PURE__ */ jsx56(
|
|
5088
|
+
RichTextInput,
|
|
5089
|
+
{
|
|
5090
|
+
field: inputField,
|
|
5091
|
+
error: errors?.[field]?.[lang.value],
|
|
5092
|
+
enabledControllers,
|
|
5093
|
+
placeholder,
|
|
5094
|
+
mode
|
|
5095
|
+
}
|
|
5096
|
+
)
|
|
5097
|
+
}
|
|
5098
|
+
)
|
|
5099
|
+
] }, lang.value)) }),
|
|
5100
|
+
/* @__PURE__ */ jsx56(Dialog, { open: fullscreen, onOpenChange: setFullscreen, children: /* @__PURE__ */ jsxs36(
|
|
5101
|
+
DialogContent,
|
|
5102
|
+
{
|
|
5103
|
+
showCloseButton: false,
|
|
5104
|
+
className: "!top-0 !left-0 !right-0 !bottom-0 !h-screen !w-screen !max-w-none !translate-x-0 !translate-y-0 !rounded-none flex flex-col p-6",
|
|
5105
|
+
children: [
|
|
5106
|
+
/* @__PURE__ */ jsx56(VisuallyHidden, { children: /* @__PURE__ */ jsxs36(DialogTitle, { children: [
|
|
5107
|
+
label || "Edit content",
|
|
5108
|
+
" - Fullscreen editor"
|
|
5109
|
+
] }) }),
|
|
5110
|
+
/* @__PURE__ */ jsx56(
|
|
5111
|
+
"button",
|
|
5112
|
+
{
|
|
5113
|
+
type: "button",
|
|
5114
|
+
onClick: () => setFullscreen(false),
|
|
5115
|
+
className: "absolute top-4 right-4 z-50 flex items-center justify-center size-10 rounded-md bg-background/80 backdrop-blur-sm border border-border text-foreground hover:bg-accent transition-colors",
|
|
5116
|
+
children: /* @__PURE__ */ jsx56(IconX5, { size: 20 })
|
|
5117
|
+
}
|
|
5118
|
+
),
|
|
5119
|
+
/* @__PURE__ */ jsx56("div", { className: "flex-1 overflow-auto flex items-start justify-center", children: /* @__PURE__ */ jsx56("div", { className: "w-full max-w-5xl", children: /* @__PURE__ */ jsx56(
|
|
5120
|
+
Controller,
|
|
5121
|
+
{
|
|
5122
|
+
control,
|
|
5123
|
+
name: `${field}.${DEFAULT_LANGUAGE}`,
|
|
5124
|
+
render: ({ field: inputField }) => /* @__PURE__ */ jsx56(
|
|
5125
|
+
RichTextInput,
|
|
5126
|
+
{
|
|
5127
|
+
field: inputField,
|
|
5128
|
+
error: errors?.[field]?.[DEFAULT_LANGUAGE],
|
|
5129
|
+
enabledControllers,
|
|
5130
|
+
placeholder,
|
|
5131
|
+
mode: "large"
|
|
5132
|
+
}
|
|
5133
|
+
)
|
|
5134
|
+
}
|
|
5135
|
+
) }) })
|
|
5136
|
+
]
|
|
5137
|
+
}
|
|
5138
|
+
) })
|
|
5139
|
+
] });
|
|
5140
|
+
}
|
|
5141
|
+
|
|
5142
|
+
// src/components/locale/locale-input-text.tsx
|
|
5143
|
+
import { IconTextRecognition as IconTextRecognition2 } from "@tabler/icons-react";
|
|
5144
|
+
import { useState as useState16 } from "react";
|
|
5145
|
+
import { jsx as jsx57, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
5146
|
+
function LocaleInputText({
|
|
5147
|
+
label,
|
|
5148
|
+
required,
|
|
5149
|
+
field,
|
|
5150
|
+
register,
|
|
5151
|
+
errors,
|
|
5152
|
+
placeholder,
|
|
5153
|
+
className,
|
|
5154
|
+
disabled
|
|
5155
|
+
}) {
|
|
5156
|
+
const [expanded, setExpanded] = useState16(false);
|
|
5157
|
+
const otherLanguages = SUPPORTED_LANGUAGES.filter(
|
|
5158
|
+
(lang) => lang.value !== DEFAULT_LANGUAGE
|
|
5159
|
+
);
|
|
5160
|
+
return /* @__PURE__ */ jsxs37("div", { className: cn("space-y-2", className), children: [
|
|
5161
|
+
label && /* @__PURE__ */ jsxs37(Label3, { children: [
|
|
5162
|
+
label,
|
|
5163
|
+
required && /* @__PURE__ */ jsx57("span", { className: "text-destructive ml-1", children: "*" })
|
|
5164
|
+
] }),
|
|
5165
|
+
/* @__PURE__ */ jsxs37("div", { className: "relative", children: [
|
|
5166
|
+
/* @__PURE__ */ jsx57(
|
|
5167
|
+
Input,
|
|
5168
|
+
{
|
|
5169
|
+
...register(`${field}.${DEFAULT_LANGUAGE}`),
|
|
5170
|
+
placeholder,
|
|
5171
|
+
disabled,
|
|
5172
|
+
"aria-invalid": !!errors?.[field]?.[DEFAULT_LANGUAGE],
|
|
5173
|
+
className: cn(otherLanguages.length > 0 && "pr-11")
|
|
5174
|
+
}
|
|
5175
|
+
),
|
|
5176
|
+
otherLanguages.length > 0 && /* @__PURE__ */ jsx57(
|
|
5177
|
+
"button",
|
|
5178
|
+
{
|
|
5179
|
+
type: "button",
|
|
5180
|
+
onClick: () => setExpanded(!expanded),
|
|
5181
|
+
disabled,
|
|
5182
|
+
className: "absolute right-2 top-1/2 -translate-y-1/2 flex items-center justify-center size-7 rounded-md text-muted-foreground hover:text-foreground hover:bg-accent transition-colors cursor-pointer disabled:opacity-50 disabled:pointer-events-none disabled:cursor-not-allowed",
|
|
5183
|
+
children: /* @__PURE__ */ jsx57(IconTextRecognition2, { size: 18 })
|
|
5184
|
+
}
|
|
5185
|
+
)
|
|
5186
|
+
] }),
|
|
5187
|
+
errors?.[field]?.[DEFAULT_LANGUAGE] && /* @__PURE__ */ jsx57("p", { className: "text-destructive text-sm", children: errors?.[field]?.[DEFAULT_LANGUAGE]?.message }),
|
|
5188
|
+
expanded && otherLanguages.length > 0 && /* @__PURE__ */ jsx57("div", { className: "space-y-3 pl-4 border-l-2 border-border mt-3", children: otherLanguages.map((lang) => /* @__PURE__ */ jsx57("div", { className: "space-y-1", children: /* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
5189
|
+
/* @__PURE__ */ jsx57(Label3, { className: "min-w-[60px] text-xs text-muted-foreground", children: lang.label }),
|
|
5190
|
+
/* @__PURE__ */ jsxs37("div", { className: "flex-1 space-y-1", children: [
|
|
5191
|
+
/* @__PURE__ */ jsx57(
|
|
5192
|
+
Input,
|
|
5193
|
+
{
|
|
5194
|
+
...register(`${field}.${lang.value}`),
|
|
5195
|
+
placeholder,
|
|
5196
|
+
disabled,
|
|
5197
|
+
className: "text-sm"
|
|
5198
|
+
}
|
|
5199
|
+
),
|
|
5200
|
+
errors?.[field]?.[lang.value] && /* @__PURE__ */ jsx57("p", { className: "text-destructive text-xs", children: errors?.[field]?.[lang.value]?.message })
|
|
5201
|
+
] })
|
|
5202
|
+
] }) }, lang.value)) })
|
|
5203
|
+
] });
|
|
5204
|
+
}
|
|
5205
|
+
|
|
5206
|
+
// src/components/locale/locale-input-textarea.tsx
|
|
5207
|
+
import { IconTextRecognition as IconTextRecognition3 } from "@tabler/icons-react";
|
|
5208
|
+
import { useState as useState17 } from "react";
|
|
5209
|
+
|
|
5210
|
+
// src/components/ui/textarea.tsx
|
|
5211
|
+
import { jsx as jsx58 } from "react/jsx-runtime";
|
|
5212
|
+
function Textarea({ className, ...props }) {
|
|
5213
|
+
return /* @__PURE__ */ jsx58(
|
|
5214
|
+
"textarea",
|
|
5215
|
+
{
|
|
5216
|
+
"data-slot": "textarea",
|
|
5217
|
+
className: cn(
|
|
5218
|
+
"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
5219
|
+
className
|
|
5220
|
+
),
|
|
5221
|
+
...props
|
|
5222
|
+
}
|
|
5223
|
+
);
|
|
5224
|
+
}
|
|
5225
|
+
|
|
5226
|
+
// src/components/locale/locale-input-textarea.tsx
|
|
5227
|
+
import { jsx as jsx59, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
5228
|
+
function LocaleInputTextarea({
|
|
5229
|
+
label,
|
|
5230
|
+
required,
|
|
5231
|
+
field,
|
|
5232
|
+
register,
|
|
5233
|
+
errors,
|
|
5234
|
+
placeholder,
|
|
5235
|
+
className,
|
|
5236
|
+
disabled,
|
|
5237
|
+
rows = 4
|
|
5238
|
+
}) {
|
|
5239
|
+
const [expanded, setExpanded] = useState17(false);
|
|
5240
|
+
const otherLanguages = SUPPORTED_LANGUAGES.filter(
|
|
5241
|
+
(lang) => lang.value !== DEFAULT_LANGUAGE
|
|
5242
|
+
);
|
|
5243
|
+
return /* @__PURE__ */ jsxs38("div", { className: cn("space-y-2", className), children: [
|
|
5244
|
+
label && /* @__PURE__ */ jsxs38(Label3, { children: [
|
|
5245
|
+
label,
|
|
5246
|
+
required && /* @__PURE__ */ jsx59("span", { className: "text-destructive ml-1", children: "*" })
|
|
5247
|
+
] }),
|
|
5248
|
+
/* @__PURE__ */ jsxs38("div", { className: "relative", children: [
|
|
5249
|
+
/* @__PURE__ */ jsx59(
|
|
5250
|
+
Textarea,
|
|
5251
|
+
{
|
|
5252
|
+
...register(`${field}.${DEFAULT_LANGUAGE}`),
|
|
5253
|
+
placeholder,
|
|
5254
|
+
disabled,
|
|
5255
|
+
rows,
|
|
5256
|
+
"aria-invalid": !!errors?.[field]?.[DEFAULT_LANGUAGE],
|
|
5257
|
+
className: cn(otherLanguages.length > 0 && "pr-11")
|
|
5258
|
+
}
|
|
5259
|
+
),
|
|
5260
|
+
otherLanguages.length > 0 && /* @__PURE__ */ jsx59(
|
|
5261
|
+
"button",
|
|
5262
|
+
{
|
|
5263
|
+
type: "button",
|
|
5264
|
+
onClick: () => setExpanded(!expanded),
|
|
5265
|
+
disabled,
|
|
5266
|
+
className: "absolute right-2 top-2 flex items-center justify-center size-7 rounded-md text-muted-foreground hover:text-foreground hover:bg-accent transition-colors cursor-pointer disabled:opacity-50 disabled:pointer-events-none disabled:cursor-not-allowed",
|
|
5267
|
+
children: /* @__PURE__ */ jsx59(IconTextRecognition3, { size: 18 })
|
|
5268
|
+
}
|
|
5269
|
+
)
|
|
5270
|
+
] }),
|
|
5271
|
+
errors?.[field]?.[DEFAULT_LANGUAGE] && /* @__PURE__ */ jsx59("p", { className: "text-destructive text-sm", children: errors?.[field]?.[DEFAULT_LANGUAGE]?.message }),
|
|
5272
|
+
expanded && otherLanguages.length > 0 && /* @__PURE__ */ jsx59("div", { className: "space-y-3 pl-4 border-l-2 border-border mt-3", children: otherLanguages.map((lang) => /* @__PURE__ */ jsx59("div", { className: "space-y-1", children: /* @__PURE__ */ jsxs38("div", { className: "flex items-start gap-2", children: [
|
|
5273
|
+
/* @__PURE__ */ jsx59(Label3, { className: "min-w-[60px] text-xs text-muted-foreground mt-2", children: lang.label }),
|
|
5274
|
+
/* @__PURE__ */ jsxs38("div", { className: "flex-1 space-y-1", children: [
|
|
5275
|
+
/* @__PURE__ */ jsx59(
|
|
5276
|
+
Textarea,
|
|
5277
|
+
{
|
|
5278
|
+
...register(`${field}.${lang.value}`),
|
|
5279
|
+
placeholder,
|
|
5280
|
+
disabled,
|
|
5281
|
+
rows,
|
|
5282
|
+
className: "text-sm"
|
|
5283
|
+
}
|
|
5284
|
+
),
|
|
5285
|
+
errors?.[field]?.[lang.value] && /* @__PURE__ */ jsx59("p", { className: "text-destructive text-xs", children: errors?.[field]?.[lang.value]?.message })
|
|
5286
|
+
] })
|
|
5287
|
+
] }) }, lang.value)) })
|
|
5288
|
+
] });
|
|
5289
|
+
}
|
|
5290
|
+
|
|
5291
|
+
// src/components/locale/locale-rich-text.tsx
|
|
5292
|
+
import parse from "html-react-parser";
|
|
5293
|
+
import { useLocale } from "next-intl";
|
|
5294
|
+
import { jsx as jsx60 } from "react/jsx-runtime";
|
|
5295
|
+
function LocaleRichText({
|
|
5296
|
+
text,
|
|
5297
|
+
defaultLocale,
|
|
5298
|
+
className
|
|
5299
|
+
}) {
|
|
5300
|
+
const locale = useLocale();
|
|
5301
|
+
const currentLocale = defaultLocale || locale || "en";
|
|
5302
|
+
if (!text) {
|
|
5303
|
+
return null;
|
|
5304
|
+
}
|
|
5305
|
+
return /* @__PURE__ */ jsx60("div", { className, children: parse(text?.[currentLocale] || text?.en || "") });
|
|
5306
|
+
}
|
|
5307
|
+
|
|
5308
|
+
// src/components/locale/locale-text.tsx
|
|
5309
|
+
import { useLocale as useLocale2 } from "next-intl";
|
|
5310
|
+
import { Fragment as Fragment12, jsx as jsx61 } from "react/jsx-runtime";
|
|
5311
|
+
function LocaleText({ text, defaultLocale }) {
|
|
5312
|
+
const locale = useLocale2();
|
|
5313
|
+
const currentLocale = defaultLocale || locale || "en";
|
|
5314
|
+
if (!text) {
|
|
5315
|
+
return null;
|
|
5316
|
+
}
|
|
5317
|
+
return /* @__PURE__ */ jsx61(Fragment12, { children: text?.[currentLocale] || text?.en || "" });
|
|
5318
|
+
}
|
|
5319
|
+
|
|
4027
5320
|
// src/components/mesob-logo.tsx
|
|
4028
|
-
import { jsx as
|
|
5321
|
+
import { jsx as jsx62, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
4029
5322
|
function MesobLogo({
|
|
4030
5323
|
width,
|
|
4031
5324
|
height,
|
|
@@ -4034,7 +5327,7 @@ function MesobLogo({
|
|
|
4034
5327
|
iconColor = "#fff",
|
|
4035
5328
|
className
|
|
4036
5329
|
}) {
|
|
4037
|
-
return /* @__PURE__ */
|
|
5330
|
+
return /* @__PURE__ */ jsxs39(
|
|
4038
5331
|
"svg",
|
|
4039
5332
|
{
|
|
4040
5333
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -4045,42 +5338,42 @@ function MesobLogo({
|
|
|
4045
5338
|
role: "presentation",
|
|
4046
5339
|
className,
|
|
4047
5340
|
children: [
|
|
4048
|
-
/* @__PURE__ */
|
|
5341
|
+
/* @__PURE__ */ jsx62(
|
|
4049
5342
|
"path",
|
|
4050
5343
|
{
|
|
4051
5344
|
d: "M158.89,21.29v44q0,9.15-5.3,14.23t-14.18,5.07q-9,0-14.5-5.21t-5.52-14.54H132a10,10,0,0,0,1.93,6.28,6.49,6.49,0,0,0,5.34,2.25,6.4,6.4,0,0,0,5.21-2.16,9,9,0,0,0,1.79-5.92v-44Z",
|
|
4052
5345
|
fill: textColor
|
|
4053
5346
|
}
|
|
4054
5347
|
),
|
|
4055
|
-
/* @__PURE__ */
|
|
5348
|
+
/* @__PURE__ */ jsx62(
|
|
4056
5349
|
"path",
|
|
4057
5350
|
{
|
|
4058
5351
|
d: "M174.38,26.18a7,7,0,0,1-2.2-5.25,7,7,0,0,1,2.2-5.25,8.28,8.28,0,0,1,11,0,7,7,0,0,1,2.2,5.25,7,7,0,0,1-2.2,5.25,8.28,8.28,0,0,1-11,0Zm11.71,8V84H173.52V34.22Z",
|
|
4059
5352
|
fill: textColor
|
|
4060
5353
|
}
|
|
4061
5354
|
),
|
|
4062
|
-
/* @__PURE__ */
|
|
5355
|
+
/* @__PURE__ */ jsx62(
|
|
4063
5356
|
"path",
|
|
4064
5357
|
{
|
|
4065
5358
|
d: "M217.38,35.74a17.65,17.65,0,0,1,8.93-2.24V46.69H223q-5.93,0-8.94,2.79t-3,9.69V84H198.48V34.22h12.57v7.72A17.57,17.57,0,0,1,217.38,35.74Z",
|
|
4066
5359
|
fill: textColor
|
|
4067
5360
|
}
|
|
4068
5361
|
),
|
|
4069
|
-
/* @__PURE__ */
|
|
5362
|
+
/* @__PURE__ */ jsx62(
|
|
4070
5363
|
"path",
|
|
4071
5364
|
{
|
|
4072
5365
|
d: "M280.62,62.85H244.26A12.38,12.38,0,0,0,248,71.29a11.62,11.62,0,0,0,8.17,3q7,0,10-6h13.55a22.59,22.59,0,0,1-8.26,11.8,24.05,24.05,0,0,1-15,4.63,25.87,25.87,0,0,1-12.88-3.19,22.44,22.44,0,0,1-8.89-9,27.7,27.7,0,0,1-3.18-13.47,28.09,28.09,0,0,1,3.14-13.55,21.92,21.92,0,0,1,8.79-9,28.27,28.27,0,0,1,25.72-.09,21.49,21.49,0,0,1,8.71,8.66A26.18,26.18,0,0,1,281,58,29.48,29.48,0,0,1,280.62,62.85ZM268,54.41a9.93,9.93,0,0,0-3.5-7.76,12.43,12.43,0,0,0-8.35-2.92,11.37,11.37,0,0,0-7.85,2.83,12.4,12.4,0,0,0-3.91,7.85Z",
|
|
4073
5366
|
fill: textColor
|
|
4074
5367
|
}
|
|
4075
5368
|
),
|
|
4076
|
-
/* @__PURE__ */
|
|
5369
|
+
/* @__PURE__ */ jsx62(
|
|
4077
5370
|
"path",
|
|
4078
5371
|
{
|
|
4079
5372
|
d: "M304.77,44.54V68.6A4.73,4.73,0,0,0,306,72.23a6,6,0,0,0,4.09,1.13h5.83V84H308q-15.88,0-15.89-15.44v-24h-5.92V34.22h5.92V21.92h12.66v12.3H315.9V44.54Z",
|
|
4080
5373
|
fill: textColor
|
|
4081
5374
|
}
|
|
4082
5375
|
),
|
|
4083
|
-
/* @__PURE__ */
|
|
5376
|
+
/* @__PURE__ */ jsx62(
|
|
4084
5377
|
"rect",
|
|
4085
5378
|
{
|
|
4086
5379
|
width: "98.15",
|
|
@@ -4089,7 +5382,7 @@ function MesobLogo({
|
|
|
4089
5382
|
fill: iconBackgroundColor
|
|
4090
5383
|
}
|
|
4091
5384
|
),
|
|
4092
|
-
/* @__PURE__ */
|
|
5385
|
+
/* @__PURE__ */ jsx62(
|
|
4093
5386
|
"path",
|
|
4094
5387
|
{
|
|
4095
5388
|
d: "M59.84,54.58a15.77,15.77,0,0,0,6.7,3.6,30.16,30.16,0,0,0,8.56.48l-.36,13.89a46.14,46.14,0,0,1-6,.43,33.3,33.3,0,0,1-6.42-.56,27.77,27.77,0,0,1-6.23-1.93,23.13,23.13,0,0,1-5.67-3.64,17.61,17.61,0,0,1-4.87-6.67c-1-2.53-1.89-4.88-2.57-7a51.59,51.59,0,0,0-1.79-4.94,10.55,10.55,0,0,0-2.82-4,17.36,17.36,0,0,0-6.66-3.74A28.24,28.24,0,0,0,23,39.8l1-14.38a44.34,44.34,0,0,1,5.87-.25,34.47,34.47,0,0,1,6.2.72A30.31,30.31,0,0,1,42.28,28a24.51,24.51,0,0,1,5.85,3.8,18.32,18.32,0,0,1,4.92,6.54,70.94,70.94,0,0,1,2.59,6.9c.53,1.7,1.06,3.42,1.59,5.18A8.77,8.77,0,0,0,59.84,54.58Z",
|
|
@@ -4102,16 +5395,16 @@ function MesobLogo({
|
|
|
4102
5395
|
}
|
|
4103
5396
|
|
|
4104
5397
|
// src/components/powered-by.tsx
|
|
4105
|
-
import { jsx as
|
|
5398
|
+
import { jsx as jsx63, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
4106
5399
|
function PoweredBy({ className }) {
|
|
4107
|
-
return /* @__PURE__ */
|
|
5400
|
+
return /* @__PURE__ */ jsx63(
|
|
4108
5401
|
"div",
|
|
4109
5402
|
{
|
|
4110
5403
|
className: cn(
|
|
4111
5404
|
"flex flex-col items-center gap-1.5 py-3 text-center",
|
|
4112
5405
|
className
|
|
4113
5406
|
),
|
|
4114
|
-
children: /* @__PURE__ */
|
|
5407
|
+
children: /* @__PURE__ */ jsxs40(
|
|
4115
5408
|
"a",
|
|
4116
5409
|
{
|
|
4117
5410
|
href: "https://mesob.com",
|
|
@@ -4119,8 +5412,8 @@ function PoweredBy({ className }) {
|
|
|
4119
5412
|
className: "text-muted-foreground hover:text-foreground flex items-center justify-center gap-1.5 text-[13px] transition-colors",
|
|
4120
5413
|
rel: "noopener noreferrer",
|
|
4121
5414
|
children: [
|
|
4122
|
-
/* @__PURE__ */
|
|
4123
|
-
/* @__PURE__ */
|
|
5415
|
+
/* @__PURE__ */ jsx63("span", { children: "Powered by" }),
|
|
5416
|
+
/* @__PURE__ */ jsx63(MesobLogo, { height: 18 })
|
|
4124
5417
|
]
|
|
4125
5418
|
}
|
|
4126
5419
|
)
|
|
@@ -4128,14 +5421,39 @@ function PoweredBy({ className }) {
|
|
|
4128
5421
|
);
|
|
4129
5422
|
}
|
|
4130
5423
|
|
|
5424
|
+
// src/components/rich-text/rich-text-display.tsx
|
|
5425
|
+
import parse2 from "html-react-parser";
|
|
5426
|
+
import { useLocale as useLocale3 } from "next-intl";
|
|
5427
|
+
import { jsx as jsx64 } from "react/jsx-runtime";
|
|
5428
|
+
function RichTextDisplay({ content, className }) {
|
|
5429
|
+
const locale = useLocale3();
|
|
5430
|
+
if (!content) {
|
|
5431
|
+
return null;
|
|
5432
|
+
}
|
|
5433
|
+
const contentString = typeof content === "string" ? content : content[locale] || Object.values(content)[0] || "";
|
|
5434
|
+
return /* @__PURE__ */ jsx64(
|
|
5435
|
+
"div",
|
|
5436
|
+
{
|
|
5437
|
+
className: cn(
|
|
5438
|
+
"prose dark:prose-invert max-w-none",
|
|
5439
|
+
"prose-headings:text-foreground prose-p:text-foreground prose-li:text-foreground",
|
|
5440
|
+
"prose-a:text-primary prose-a:no-underline hover:prose-a:underline",
|
|
5441
|
+
"prose-img:rounded-md prose-img:shadow-sm",
|
|
5442
|
+
className
|
|
5443
|
+
),
|
|
5444
|
+
children: parse2(contentString)
|
|
5445
|
+
}
|
|
5446
|
+
);
|
|
5447
|
+
}
|
|
5448
|
+
|
|
4131
5449
|
// src/components/theme-toggle.tsx
|
|
4132
5450
|
import { IconMoon, IconSun } from "@tabler/icons-react";
|
|
4133
5451
|
import { useTheme as useTheme2 } from "next-themes";
|
|
4134
|
-
import { jsx as
|
|
5452
|
+
import { jsx as jsx65, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
4135
5453
|
function ThemeToggle({ className }) {
|
|
4136
5454
|
const { resolvedTheme, setTheme, theme } = useTheme2();
|
|
4137
5455
|
const isDark = (theme ?? resolvedTheme) === "dark";
|
|
4138
|
-
return /* @__PURE__ */
|
|
5456
|
+
return /* @__PURE__ */ jsxs41(
|
|
4139
5457
|
Button,
|
|
4140
5458
|
{
|
|
4141
5459
|
variant: "ghost",
|
|
@@ -4144,8 +5462,8 @@ function ThemeToggle({ className }) {
|
|
|
4144
5462
|
onClick: () => setTheme(isDark ? "light" : "dark"),
|
|
4145
5463
|
"aria-label": isDark ? "Switch to light mode" : "Switch to dark mode",
|
|
4146
5464
|
children: [
|
|
4147
|
-
/* @__PURE__ */
|
|
4148
|
-
/* @__PURE__ */
|
|
5465
|
+
/* @__PURE__ */ jsx65(IconSun, { className: "size-5 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" }),
|
|
5466
|
+
/* @__PURE__ */ jsx65(IconMoon, { className: "absolute size-5 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" })
|
|
4149
5467
|
]
|
|
4150
5468
|
}
|
|
4151
5469
|
);
|
|
@@ -4154,17 +5472,17 @@ function ThemeToggle({ className }) {
|
|
|
4154
5472
|
// src/components/ui/accordion.tsx
|
|
4155
5473
|
import * as AccordionPrimitive from "@radix-ui/react-accordion";
|
|
4156
5474
|
import { IconChevronDown as IconChevronDown6 } from "@tabler/icons-react";
|
|
4157
|
-
import { jsx as
|
|
5475
|
+
import { jsx as jsx66, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
4158
5476
|
function Accordion({
|
|
4159
5477
|
...props
|
|
4160
5478
|
}) {
|
|
4161
|
-
return /* @__PURE__ */
|
|
5479
|
+
return /* @__PURE__ */ jsx66(AccordionPrimitive.Root, { "data-slot": "accordion", ...props });
|
|
4162
5480
|
}
|
|
4163
5481
|
function AccordionItem({
|
|
4164
5482
|
className,
|
|
4165
5483
|
...props
|
|
4166
5484
|
}) {
|
|
4167
|
-
return /* @__PURE__ */
|
|
5485
|
+
return /* @__PURE__ */ jsx66(
|
|
4168
5486
|
AccordionPrimitive.Item,
|
|
4169
5487
|
{
|
|
4170
5488
|
"data-slot": "accordion-item",
|
|
@@ -4178,7 +5496,7 @@ function AccordionTrigger({
|
|
|
4178
5496
|
children,
|
|
4179
5497
|
...props
|
|
4180
5498
|
}) {
|
|
4181
|
-
return /* @__PURE__ */
|
|
5499
|
+
return /* @__PURE__ */ jsx66(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs42(
|
|
4182
5500
|
AccordionPrimitive.Trigger,
|
|
4183
5501
|
{
|
|
4184
5502
|
"data-slot": "accordion-trigger",
|
|
@@ -4189,7 +5507,7 @@ function AccordionTrigger({
|
|
|
4189
5507
|
...props,
|
|
4190
5508
|
children: [
|
|
4191
5509
|
children,
|
|
4192
|
-
/* @__PURE__ */
|
|
5510
|
+
/* @__PURE__ */ jsx66(IconChevronDown6, { className: "text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" })
|
|
4193
5511
|
]
|
|
4194
5512
|
}
|
|
4195
5513
|
) });
|
|
@@ -4199,20 +5517,20 @@ function AccordionContent({
|
|
|
4199
5517
|
children,
|
|
4200
5518
|
...props
|
|
4201
5519
|
}) {
|
|
4202
|
-
return /* @__PURE__ */
|
|
5520
|
+
return /* @__PURE__ */ jsx66(
|
|
4203
5521
|
AccordionPrimitive.Content,
|
|
4204
5522
|
{
|
|
4205
5523
|
"data-slot": "accordion-content",
|
|
4206
5524
|
className: "data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm",
|
|
4207
5525
|
...props,
|
|
4208
|
-
children: /* @__PURE__ */
|
|
5526
|
+
children: /* @__PURE__ */ jsx66("div", { className: cn("pt-0 pb-4", className), children })
|
|
4209
5527
|
}
|
|
4210
5528
|
);
|
|
4211
5529
|
}
|
|
4212
5530
|
|
|
4213
5531
|
// src/components/ui/alert.tsx
|
|
4214
5532
|
import { cva as cva5 } from "class-variance-authority";
|
|
4215
|
-
import { jsx as
|
|
5533
|
+
import { jsx as jsx67 } from "react/jsx-runtime";
|
|
4216
5534
|
var alertVariants = cva5(
|
|
4217
5535
|
"border-border relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
|
|
4218
5536
|
{
|
|
@@ -4232,7 +5550,7 @@ function Alert({
|
|
|
4232
5550
|
variant,
|
|
4233
5551
|
...props
|
|
4234
5552
|
}) {
|
|
4235
|
-
return /* @__PURE__ */
|
|
5553
|
+
return /* @__PURE__ */ jsx67(
|
|
4236
5554
|
"div",
|
|
4237
5555
|
{
|
|
4238
5556
|
"data-slot": "alert",
|
|
@@ -4243,7 +5561,7 @@ function Alert({
|
|
|
4243
5561
|
);
|
|
4244
5562
|
}
|
|
4245
5563
|
function AlertTitle({ className, ...props }) {
|
|
4246
|
-
return /* @__PURE__ */
|
|
5564
|
+
return /* @__PURE__ */ jsx67(
|
|
4247
5565
|
"div",
|
|
4248
5566
|
{
|
|
4249
5567
|
"data-slot": "alert-title",
|
|
@@ -4259,7 +5577,7 @@ function AlertDescription({
|
|
|
4259
5577
|
className,
|
|
4260
5578
|
...props
|
|
4261
5579
|
}) {
|
|
4262
|
-
return /* @__PURE__ */
|
|
5580
|
+
return /* @__PURE__ */ jsx67(
|
|
4263
5581
|
"div",
|
|
4264
5582
|
{
|
|
4265
5583
|
"data-slot": "alert-description",
|
|
@@ -4275,8 +5593,8 @@ function AlertDescription({
|
|
|
4275
5593
|
// src/components/ui/animated-tabs.tsx
|
|
4276
5594
|
import { IconChevronDown as IconChevronDown7 } from "@tabler/icons-react";
|
|
4277
5595
|
import { motion as motion2 } from "motion/react";
|
|
4278
|
-
import { useLayoutEffect as useLayoutEffect2, useMemo as useMemo4, useRef as useRef5, useState as
|
|
4279
|
-
import { jsx as
|
|
5596
|
+
import { useLayoutEffect as useLayoutEffect2, useMemo as useMemo4, useRef as useRef5, useState as useState18 } from "react";
|
|
5597
|
+
import { jsx as jsx68, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
4280
5598
|
function AnimatedTabs({
|
|
4281
5599
|
tabs,
|
|
4282
5600
|
activeTab: controlledActiveTab,
|
|
@@ -4285,17 +5603,17 @@ function AnimatedTabs({
|
|
|
4285
5603
|
className,
|
|
4286
5604
|
linkComponent: LinkComponent
|
|
4287
5605
|
}) {
|
|
4288
|
-
const [internalActiveTab, setInternalActiveTab] =
|
|
5606
|
+
const [internalActiveTab, setInternalActiveTab] = useState18(
|
|
4289
5607
|
defaultTab ?? tabs[0]?.value ?? ""
|
|
4290
5608
|
);
|
|
4291
5609
|
const activeTab = controlledActiveTab ?? internalActiveTab;
|
|
4292
|
-
const [visibleTabs, setVisibleTabs] =
|
|
4293
|
-
const [overflowTabs, setOverflowTabs] =
|
|
5610
|
+
const [visibleTabs, setVisibleTabs] = useState18(tabs);
|
|
5611
|
+
const [overflowTabs, setOverflowTabs] = useState18([]);
|
|
4294
5612
|
const containerRef = useRef5(null);
|
|
4295
5613
|
const tabsListRef = useRef5(null);
|
|
4296
5614
|
const dropdownTriggerRef = useRef5(null);
|
|
4297
5615
|
const tabRefs = useRef5([]);
|
|
4298
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
5616
|
+
const [underlineStyle, setUnderlineStyle] = useState18({ left: 0, width: 0 });
|
|
4299
5617
|
const handleTabChange = (newValue) => {
|
|
4300
5618
|
if (!controlledActiveTab) {
|
|
4301
5619
|
setInternalActiveTab(newValue);
|
|
@@ -4403,7 +5721,7 @@ function AnimatedTabs({
|
|
|
4403
5721
|
}
|
|
4404
5722
|
};
|
|
4405
5723
|
if (tab.href && LinkComponent) {
|
|
4406
|
-
return /* @__PURE__ */
|
|
5724
|
+
return /* @__PURE__ */ jsx68(
|
|
4407
5725
|
LinkComponent,
|
|
4408
5726
|
{
|
|
4409
5727
|
href: tab.href,
|
|
@@ -4414,7 +5732,7 @@ function AnimatedTabs({
|
|
|
4414
5732
|
tab.value
|
|
4415
5733
|
);
|
|
4416
5734
|
}
|
|
4417
|
-
return /* @__PURE__ */
|
|
5735
|
+
return /* @__PURE__ */ jsx68(
|
|
4418
5736
|
"button",
|
|
4419
5737
|
{
|
|
4420
5738
|
type: "button",
|
|
@@ -4433,9 +5751,9 @@ function AnimatedTabs({
|
|
|
4433
5751
|
isActive && "bg-accent font-medium"
|
|
4434
5752
|
);
|
|
4435
5753
|
if (tab.href && LinkComponent) {
|
|
4436
|
-
return /* @__PURE__ */
|
|
5754
|
+
return /* @__PURE__ */ jsx68(DropdownMenuItem, { asChild: true, className: itemClassName, children: /* @__PURE__ */ jsx68(LinkComponent, { href: tab.href, children: tab.name }) }, tab.value);
|
|
4437
5755
|
}
|
|
4438
|
-
return /* @__PURE__ */
|
|
5756
|
+
return /* @__PURE__ */ jsx68(
|
|
4439
5757
|
DropdownMenuItem,
|
|
4440
5758
|
{
|
|
4441
5759
|
onClick: () => handleTabChange(tab.value),
|
|
@@ -4445,14 +5763,14 @@ function AnimatedTabs({
|
|
|
4445
5763
|
tab.value
|
|
4446
5764
|
);
|
|
4447
5765
|
};
|
|
4448
|
-
return /* @__PURE__ */
|
|
4449
|
-
/* @__PURE__ */
|
|
5766
|
+
return /* @__PURE__ */ jsxs43("div", { className: cn("flex flex-col", className), children: [
|
|
5767
|
+
/* @__PURE__ */ jsx68("div", { ref: containerRef, className: "w-full", children: /* @__PURE__ */ jsxs43("div", { ref: tabsListRef, className: "relative flex items-center", children: [
|
|
4450
5768
|
visibleTabs.map((tab) => {
|
|
4451
5769
|
const originalIndex = tabs.findIndex((t) => t.value === tab.value);
|
|
4452
5770
|
return renderTab(tab, originalIndex);
|
|
4453
5771
|
}),
|
|
4454
|
-
overflowTabs.length > 0 && /* @__PURE__ */
|
|
4455
|
-
/* @__PURE__ */
|
|
5772
|
+
overflowTabs.length > 0 && /* @__PURE__ */ jsxs43(DropdownMenu, { children: [
|
|
5773
|
+
/* @__PURE__ */ jsxs43(
|
|
4456
5774
|
DropdownMenuTrigger,
|
|
4457
5775
|
{
|
|
4458
5776
|
ref: dropdownTriggerRef,
|
|
@@ -4463,13 +5781,13 @@ function AnimatedTabs({
|
|
|
4463
5781
|
),
|
|
4464
5782
|
children: [
|
|
4465
5783
|
"More",
|
|
4466
|
-
/* @__PURE__ */
|
|
5784
|
+
/* @__PURE__ */ jsx68(IconChevronDown7, { className: "h-4 w-4" })
|
|
4467
5785
|
]
|
|
4468
5786
|
}
|
|
4469
5787
|
),
|
|
4470
|
-
/* @__PURE__ */
|
|
5788
|
+
/* @__PURE__ */ jsx68(DropdownMenuContent, { align: "start", className: "min-w-40", children: overflowTabs.map(renderDropdownItem) })
|
|
4471
5789
|
] }),
|
|
4472
|
-
/* @__PURE__ */
|
|
5790
|
+
/* @__PURE__ */ jsx68(
|
|
4473
5791
|
motion2.div,
|
|
4474
5792
|
{
|
|
4475
5793
|
className: "absolute bottom-0 left-0 z-20 h-0.5 bg-primary",
|
|
@@ -4485,23 +5803,23 @@ function AnimatedTabs({
|
|
|
4485
5803
|
}
|
|
4486
5804
|
)
|
|
4487
5805
|
] }) }),
|
|
4488
|
-
activeTabData?.content && /* @__PURE__ */
|
|
5806
|
+
activeTabData?.content && /* @__PURE__ */ jsx68("div", { className: "flex-1", children: activeTabData.content })
|
|
4489
5807
|
] });
|
|
4490
5808
|
}
|
|
4491
5809
|
|
|
4492
5810
|
// src/components/ui/aspect-ratio.tsx
|
|
4493
5811
|
import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
|
|
4494
|
-
import { jsx as
|
|
5812
|
+
import { jsx as jsx69 } from "react/jsx-runtime";
|
|
4495
5813
|
function AspectRatio({
|
|
4496
5814
|
...props
|
|
4497
5815
|
}) {
|
|
4498
|
-
return /* @__PURE__ */
|
|
5816
|
+
return /* @__PURE__ */ jsx69(AspectRatioPrimitive.Root, { "data-slot": "aspect-ratio", ...props });
|
|
4499
5817
|
}
|
|
4500
5818
|
|
|
4501
5819
|
// src/components/ui/badge.tsx
|
|
4502
5820
|
import { Slot as Slot4 } from "@radix-ui/react-slot";
|
|
4503
5821
|
import { cva as cva6 } from "class-variance-authority";
|
|
4504
|
-
import { jsx as
|
|
5822
|
+
import { jsx as jsx70 } from "react/jsx-runtime";
|
|
4505
5823
|
var badgeVariants = cva6(
|
|
4506
5824
|
"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
|
|
4507
5825
|
{
|
|
@@ -4525,7 +5843,7 @@ function Badge({
|
|
|
4525
5843
|
...props
|
|
4526
5844
|
}) {
|
|
4527
5845
|
const Comp = asChild ? Slot4 : "span";
|
|
4528
|
-
return /* @__PURE__ */
|
|
5846
|
+
return /* @__PURE__ */ jsx70(
|
|
4529
5847
|
Comp,
|
|
4530
5848
|
{
|
|
4531
5849
|
"data-slot": "badge",
|
|
@@ -4538,7 +5856,7 @@ function Badge({
|
|
|
4538
5856
|
// src/components/ui/button-group.tsx
|
|
4539
5857
|
import { Slot as Slot5 } from "@radix-ui/react-slot";
|
|
4540
5858
|
import { cva as cva7 } from "class-variance-authority";
|
|
4541
|
-
import { jsx as
|
|
5859
|
+
import { jsx as jsx71 } from "react/jsx-runtime";
|
|
4542
5860
|
var buttonGroupVariants = cva7(
|
|
4543
5861
|
"flex w-fit items-stretch [&>*]:focus-visible:z-10 [&>*]:focus-visible:relative [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md has-[>[data-slot=button-group]]:gap-2",
|
|
4544
5862
|
{
|
|
@@ -4558,7 +5876,7 @@ function ButtonGroup({
|
|
|
4558
5876
|
orientation,
|
|
4559
5877
|
...props
|
|
4560
5878
|
}) {
|
|
4561
|
-
return /* @__PURE__ */
|
|
5879
|
+
return /* @__PURE__ */ jsx71(
|
|
4562
5880
|
"fieldset",
|
|
4563
5881
|
{
|
|
4564
5882
|
"data-slot": "button-group",
|
|
@@ -4574,7 +5892,7 @@ function ButtonGroupText({
|
|
|
4574
5892
|
...props
|
|
4575
5893
|
}) {
|
|
4576
5894
|
const Comp = asChild ? Slot5 : "div";
|
|
4577
|
-
return /* @__PURE__ */
|
|
5895
|
+
return /* @__PURE__ */ jsx71(
|
|
4578
5896
|
Comp,
|
|
4579
5897
|
{
|
|
4580
5898
|
className: cn(
|
|
@@ -4590,7 +5908,7 @@ function ButtonGroupSeparator({
|
|
|
4590
5908
|
orientation = "vertical",
|
|
4591
5909
|
...props
|
|
4592
5910
|
}) {
|
|
4593
|
-
return /* @__PURE__ */
|
|
5911
|
+
return /* @__PURE__ */ jsx71(
|
|
4594
5912
|
Separator2,
|
|
4595
5913
|
{
|
|
4596
5914
|
"data-slot": "button-group-separator",
|
|
@@ -4615,7 +5933,7 @@ import {
|
|
|
4615
5933
|
DayPicker,
|
|
4616
5934
|
getDefaultClassNames
|
|
4617
5935
|
} from "react-day-picker";
|
|
4618
|
-
import { jsx as
|
|
5936
|
+
import { jsx as jsx72 } from "react/jsx-runtime";
|
|
4619
5937
|
function Calendar({
|
|
4620
5938
|
className,
|
|
4621
5939
|
classNames,
|
|
@@ -4627,7 +5945,7 @@ function Calendar({
|
|
|
4627
5945
|
...props
|
|
4628
5946
|
}) {
|
|
4629
5947
|
const defaultClassNames = getDefaultClassNames();
|
|
4630
|
-
return /* @__PURE__ */
|
|
5948
|
+
return /* @__PURE__ */ jsx72(
|
|
4631
5949
|
DayPicker,
|
|
4632
5950
|
{
|
|
4633
5951
|
showOutsideDays,
|
|
@@ -4727,7 +6045,7 @@ function Calendar({
|
|
|
4727
6045
|
},
|
|
4728
6046
|
components: {
|
|
4729
6047
|
Root: ({ className: className2, rootRef, ...props2 }) => {
|
|
4730
|
-
return /* @__PURE__ */
|
|
6048
|
+
return /* @__PURE__ */ jsx72(
|
|
4731
6049
|
"div",
|
|
4732
6050
|
{
|
|
4733
6051
|
"data-slot": "calendar",
|
|
@@ -4739,10 +6057,10 @@ function Calendar({
|
|
|
4739
6057
|
},
|
|
4740
6058
|
Chevron: ({ className: className2, orientation, ...props2 }) => {
|
|
4741
6059
|
if (orientation === "left") {
|
|
4742
|
-
return /* @__PURE__ */
|
|
6060
|
+
return /* @__PURE__ */ jsx72(IconChevronLeft, { className: cn("size-4", className2), ...props2 });
|
|
4743
6061
|
}
|
|
4744
6062
|
if (orientation === "right") {
|
|
4745
|
-
return /* @__PURE__ */
|
|
6063
|
+
return /* @__PURE__ */ jsx72(
|
|
4746
6064
|
IconChevronRight4,
|
|
4747
6065
|
{
|
|
4748
6066
|
className: cn("size-4", className2),
|
|
@@ -4750,11 +6068,11 @@ function Calendar({
|
|
|
4750
6068
|
}
|
|
4751
6069
|
);
|
|
4752
6070
|
}
|
|
4753
|
-
return /* @__PURE__ */
|
|
6071
|
+
return /* @__PURE__ */ jsx72(IconChevronDown8, { className: cn("size-4", className2), ...props2 });
|
|
4754
6072
|
},
|
|
4755
6073
|
DayButton: CalendarDayButton,
|
|
4756
6074
|
WeekNumber: ({ children, ...props2 }) => {
|
|
4757
|
-
return /* @__PURE__ */
|
|
6075
|
+
return /* @__PURE__ */ jsx72("td", { ...props2, children: /* @__PURE__ */ jsx72("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) });
|
|
4758
6076
|
},
|
|
4759
6077
|
...components
|
|
4760
6078
|
},
|
|
@@ -4775,7 +6093,7 @@ function CalendarDayButton({
|
|
|
4775
6093
|
ref.current?.focus();
|
|
4776
6094
|
}
|
|
4777
6095
|
}, [modifiers.focused]);
|
|
4778
|
-
return /* @__PURE__ */
|
|
6096
|
+
return /* @__PURE__ */ jsx72(
|
|
4779
6097
|
Button,
|
|
4780
6098
|
{
|
|
4781
6099
|
ref,
|
|
@@ -4800,7 +6118,7 @@ function CalendarDayButton({
|
|
|
4800
6118
|
import { IconChevronLeft as IconChevronLeft2, IconChevronRight as IconChevronRight5 } from "@tabler/icons-react";
|
|
4801
6119
|
import useEmblaCarousel from "embla-carousel-react";
|
|
4802
6120
|
import * as React7 from "react";
|
|
4803
|
-
import { jsx as
|
|
6121
|
+
import { jsx as jsx73, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
4804
6122
|
var CarouselContext = React7.createContext(null);
|
|
4805
6123
|
function useCarousel() {
|
|
4806
6124
|
const context = React7.useContext(CarouselContext);
|
|
@@ -4867,7 +6185,7 @@ function Carousel({
|
|
|
4867
6185
|
api.off("reInit", handleSelect);
|
|
4868
6186
|
};
|
|
4869
6187
|
}, [api]);
|
|
4870
|
-
return /* @__PURE__ */
|
|
6188
|
+
return /* @__PURE__ */ jsx73(
|
|
4871
6189
|
CarouselContext.Provider,
|
|
4872
6190
|
{
|
|
4873
6191
|
value: {
|
|
@@ -4880,7 +6198,7 @@ function Carousel({
|
|
|
4880
6198
|
canScrollPrev,
|
|
4881
6199
|
canScrollNext
|
|
4882
6200
|
},
|
|
4883
|
-
children: /* @__PURE__ */
|
|
6201
|
+
children: /* @__PURE__ */ jsx73(
|
|
4884
6202
|
"section",
|
|
4885
6203
|
{
|
|
4886
6204
|
onKeyDownCapture: handleKeyDown,
|
|
@@ -4895,13 +6213,13 @@ function Carousel({
|
|
|
4895
6213
|
}
|
|
4896
6214
|
function CarouselContent({ className, ...props }) {
|
|
4897
6215
|
const { carouselRef, orientation } = useCarousel();
|
|
4898
|
-
return /* @__PURE__ */
|
|
6216
|
+
return /* @__PURE__ */ jsx73(
|
|
4899
6217
|
"div",
|
|
4900
6218
|
{
|
|
4901
6219
|
ref: carouselRef,
|
|
4902
6220
|
className: "overflow-hidden",
|
|
4903
6221
|
"data-slot": "carousel-content",
|
|
4904
|
-
children: /* @__PURE__ */
|
|
6222
|
+
children: /* @__PURE__ */ jsx73(
|
|
4905
6223
|
"div",
|
|
4906
6224
|
{
|
|
4907
6225
|
className: cn(
|
|
@@ -4920,7 +6238,7 @@ function CarouselItem({
|
|
|
4920
6238
|
...props
|
|
4921
6239
|
}) {
|
|
4922
6240
|
const { orientation } = useCarousel();
|
|
4923
|
-
return /* @__PURE__ */
|
|
6241
|
+
return /* @__PURE__ */ jsx73(
|
|
4924
6242
|
"fieldset",
|
|
4925
6243
|
{
|
|
4926
6244
|
"aria-roledescription": "slide",
|
|
@@ -4941,7 +6259,7 @@ function CarouselPrevious({
|
|
|
4941
6259
|
...props
|
|
4942
6260
|
}) {
|
|
4943
6261
|
const { orientation, scrollPrev, canScrollPrev } = useCarousel();
|
|
4944
|
-
return /* @__PURE__ */
|
|
6262
|
+
return /* @__PURE__ */ jsxs44(
|
|
4945
6263
|
Button,
|
|
4946
6264
|
{
|
|
4947
6265
|
"data-slot": "carousel-previous",
|
|
@@ -4956,8 +6274,8 @@ function CarouselPrevious({
|
|
|
4956
6274
|
onClick: scrollPrev,
|
|
4957
6275
|
...props,
|
|
4958
6276
|
children: [
|
|
4959
|
-
/* @__PURE__ */
|
|
4960
|
-
/* @__PURE__ */
|
|
6277
|
+
/* @__PURE__ */ jsx73(IconChevronLeft2, {}),
|
|
6278
|
+
/* @__PURE__ */ jsx73("span", { className: "sr-only", children: "Previous slide" })
|
|
4961
6279
|
]
|
|
4962
6280
|
}
|
|
4963
6281
|
);
|
|
@@ -4969,7 +6287,7 @@ function CarouselNext({
|
|
|
4969
6287
|
...props
|
|
4970
6288
|
}) {
|
|
4971
6289
|
const { orientation, scrollNext, canScrollNext } = useCarousel();
|
|
4972
|
-
return /* @__PURE__ */
|
|
6290
|
+
return /* @__PURE__ */ jsxs44(
|
|
4973
6291
|
Button,
|
|
4974
6292
|
{
|
|
4975
6293
|
"data-slot": "carousel-next",
|
|
@@ -4984,8 +6302,8 @@ function CarouselNext({
|
|
|
4984
6302
|
onClick: scrollNext,
|
|
4985
6303
|
...props,
|
|
4986
6304
|
children: [
|
|
4987
|
-
/* @__PURE__ */
|
|
4988
|
-
/* @__PURE__ */
|
|
6305
|
+
/* @__PURE__ */ jsx73(IconChevronRight5, {}),
|
|
6306
|
+
/* @__PURE__ */ jsx73("span", { className: "sr-only", children: "Next slide" })
|
|
4989
6307
|
]
|
|
4990
6308
|
}
|
|
4991
6309
|
);
|
|
@@ -4994,7 +6312,7 @@ function CarouselNext({
|
|
|
4994
6312
|
// src/components/ui/chart.tsx
|
|
4995
6313
|
import * as React8 from "react";
|
|
4996
6314
|
import * as RechartsPrimitive from "recharts";
|
|
4997
|
-
import { Fragment as
|
|
6315
|
+
import { Fragment as Fragment13, jsx as jsx74, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
4998
6316
|
var THEMES = { light: "", dark: ".dark" };
|
|
4999
6317
|
var sanitizeToken = (value) => value.replace(/[^a-zA-Z0-9-_]/g, "");
|
|
5000
6318
|
var ChartContext = React8.createContext(null);
|
|
@@ -5016,7 +6334,7 @@ function ChartContainer({
|
|
|
5016
6334
|
const sanitizedUniqueId = sanitizeToken(uniqueId);
|
|
5017
6335
|
const chartToken = id ? sanitizeToken(id) : sanitizedUniqueId;
|
|
5018
6336
|
const chartId = `chart-${chartToken || sanitizedUniqueId}`;
|
|
5019
|
-
return /* @__PURE__ */
|
|
6337
|
+
return /* @__PURE__ */ jsx74(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs45(
|
|
5020
6338
|
"div",
|
|
5021
6339
|
{
|
|
5022
6340
|
"data-slot": "chart",
|
|
@@ -5027,8 +6345,8 @@ function ChartContainer({
|
|
|
5027
6345
|
),
|
|
5028
6346
|
...props,
|
|
5029
6347
|
children: [
|
|
5030
|
-
/* @__PURE__ */
|
|
5031
|
-
/* @__PURE__ */
|
|
6348
|
+
/* @__PURE__ */ jsx74(ChartStyle, { id: chartId, config }),
|
|
6349
|
+
/* @__PURE__ */ jsx74(RechartsPrimitive.ResponsiveContainer, { children })
|
|
5032
6350
|
]
|
|
5033
6351
|
}
|
|
5034
6352
|
) });
|
|
@@ -5040,7 +6358,7 @@ var ChartStyle = ({ id, config }) => {
|
|
|
5040
6358
|
if (!colorConfig.length) {
|
|
5041
6359
|
return null;
|
|
5042
6360
|
}
|
|
5043
|
-
return /* @__PURE__ */
|
|
6361
|
+
return /* @__PURE__ */ jsx74(
|
|
5044
6362
|
"style",
|
|
5045
6363
|
{
|
|
5046
6364
|
dangerouslySetInnerHTML: {
|
|
@@ -5095,7 +6413,7 @@ function ChartTooltipContent({
|
|
|
5095
6413
|
return null;
|
|
5096
6414
|
}
|
|
5097
6415
|
const nestLabel = payload.length === 1 && indicator !== "dot";
|
|
5098
|
-
return /* @__PURE__ */
|
|
6416
|
+
return /* @__PURE__ */ jsxs45(
|
|
5099
6417
|
"div",
|
|
5100
6418
|
{
|
|
5101
6419
|
className: cn(
|
|
@@ -5104,19 +6422,19 @@ function ChartTooltipContent({
|
|
|
5104
6422
|
),
|
|
5105
6423
|
children: [
|
|
5106
6424
|
nestLabel ? null : tooltipLabel,
|
|
5107
|
-
/* @__PURE__ */
|
|
6425
|
+
/* @__PURE__ */ jsx74("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
|
|
5108
6426
|
const key = `${nameKey || item.name || item.dataKey || "value"}`;
|
|
5109
6427
|
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
5110
6428
|
const indicatorColor = color || item.payload.fill || item.color;
|
|
5111
|
-
return /* @__PURE__ */
|
|
6429
|
+
return /* @__PURE__ */ jsx74(
|
|
5112
6430
|
"div",
|
|
5113
6431
|
{
|
|
5114
6432
|
className: cn(
|
|
5115
6433
|
"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5",
|
|
5116
6434
|
indicator === "dot" && "items-center"
|
|
5117
6435
|
),
|
|
5118
|
-
children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */
|
|
5119
|
-
itemConfig?.icon ? /* @__PURE__ */
|
|
6436
|
+
children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs45(Fragment13, { children: [
|
|
6437
|
+
itemConfig?.icon ? /* @__PURE__ */ jsx74(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx74(
|
|
5120
6438
|
"div",
|
|
5121
6439
|
{
|
|
5122
6440
|
className: cn(
|
|
@@ -5134,7 +6452,7 @@ function ChartTooltipContent({
|
|
|
5134
6452
|
}
|
|
5135
6453
|
}
|
|
5136
6454
|
),
|
|
5137
|
-
/* @__PURE__ */
|
|
6455
|
+
/* @__PURE__ */ jsxs45(
|
|
5138
6456
|
"div",
|
|
5139
6457
|
{
|
|
5140
6458
|
className: cn(
|
|
@@ -5142,11 +6460,11 @@ function ChartTooltipContent({
|
|
|
5142
6460
|
nestLabel ? "items-end" : "items-center"
|
|
5143
6461
|
),
|
|
5144
6462
|
children: [
|
|
5145
|
-
/* @__PURE__ */
|
|
6463
|
+
/* @__PURE__ */ jsxs45("div", { className: "grid gap-1.5", children: [
|
|
5146
6464
|
nestLabel ? tooltipLabel : null,
|
|
5147
|
-
/* @__PURE__ */
|
|
6465
|
+
/* @__PURE__ */ jsx74("span", { className: "text-muted-foreground", children: itemConfig?.label || item.name })
|
|
5148
6466
|
] }),
|
|
5149
|
-
item.value && /* @__PURE__ */
|
|
6467
|
+
item.value && /* @__PURE__ */ jsx74("span", { className: "text-foreground font-mono font-medium tabular-nums", children: item.value.toLocaleString() })
|
|
5150
6468
|
]
|
|
5151
6469
|
}
|
|
5152
6470
|
)
|
|
@@ -5171,7 +6489,7 @@ function ChartLegendContent({
|
|
|
5171
6489
|
if (!payload?.length) {
|
|
5172
6490
|
return null;
|
|
5173
6491
|
}
|
|
5174
|
-
return /* @__PURE__ */
|
|
6492
|
+
return /* @__PURE__ */ jsx74(
|
|
5175
6493
|
"div",
|
|
5176
6494
|
{
|
|
5177
6495
|
className: cn(
|
|
@@ -5182,14 +6500,14 @@ function ChartLegendContent({
|
|
|
5182
6500
|
children: payload.filter((item) => item.type !== "none").map((item) => {
|
|
5183
6501
|
const key = `${nameKey || item.dataKey || "value"}`;
|
|
5184
6502
|
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
5185
|
-
return /* @__PURE__ */
|
|
6503
|
+
return /* @__PURE__ */ jsxs45(
|
|
5186
6504
|
"div",
|
|
5187
6505
|
{
|
|
5188
6506
|
className: cn(
|
|
5189
6507
|
"[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3"
|
|
5190
6508
|
),
|
|
5191
6509
|
children: [
|
|
5192
|
-
itemConfig?.icon && !hideIcon ? /* @__PURE__ */
|
|
6510
|
+
itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx74(itemConfig.icon, {}) : /* @__PURE__ */ jsx74(
|
|
5193
6511
|
"div",
|
|
5194
6512
|
{
|
|
5195
6513
|
className: "h-2 w-2 shrink-0 rounded-[2px]",
|
|
@@ -5237,23 +6555,23 @@ function getTooltipLabel({
|
|
|
5237
6555
|
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
5238
6556
|
const value = !labelKey && typeof label === "string" ? config[label]?.label || label : itemConfig?.label;
|
|
5239
6557
|
if (labelFormatter) {
|
|
5240
|
-
return /* @__PURE__ */
|
|
6558
|
+
return /* @__PURE__ */ jsx74("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
|
|
5241
6559
|
}
|
|
5242
6560
|
if (!value) {
|
|
5243
6561
|
return null;
|
|
5244
6562
|
}
|
|
5245
|
-
return /* @__PURE__ */
|
|
6563
|
+
return /* @__PURE__ */ jsx74("div", { className: cn("font-medium", labelClassName), children: value });
|
|
5246
6564
|
}
|
|
5247
6565
|
|
|
5248
6566
|
// src/components/ui/checkbox.tsx
|
|
5249
6567
|
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
5250
6568
|
import { IconCheck as IconCheck3 } from "@tabler/icons-react";
|
|
5251
|
-
import { jsx as
|
|
6569
|
+
import { jsx as jsx75 } from "react/jsx-runtime";
|
|
5252
6570
|
function Checkbox({
|
|
5253
6571
|
className,
|
|
5254
6572
|
...props
|
|
5255
6573
|
}) {
|
|
5256
|
-
return /* @__PURE__ */
|
|
6574
|
+
return /* @__PURE__ */ jsx75(
|
|
5257
6575
|
CheckboxPrimitive.Root,
|
|
5258
6576
|
{
|
|
5259
6577
|
"data-slot": "checkbox",
|
|
@@ -5262,12 +6580,12 @@ function Checkbox({
|
|
|
5262
6580
|
className
|
|
5263
6581
|
),
|
|
5264
6582
|
...props,
|
|
5265
|
-
children: /* @__PURE__ */
|
|
6583
|
+
children: /* @__PURE__ */ jsx75(
|
|
5266
6584
|
CheckboxPrimitive.Indicator,
|
|
5267
6585
|
{
|
|
5268
6586
|
"data-slot": "checkbox-indicator",
|
|
5269
6587
|
className: "grid place-content-center text-current transition-none",
|
|
5270
|
-
children: /* @__PURE__ */
|
|
6588
|
+
children: /* @__PURE__ */ jsx75(IconCheck3, { className: "size-3.5" })
|
|
5271
6589
|
}
|
|
5272
6590
|
)
|
|
5273
6591
|
}
|
|
@@ -5277,36 +6595,36 @@ function Checkbox({
|
|
|
5277
6595
|
// src/components/ui/context-menu.tsx
|
|
5278
6596
|
import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
|
|
5279
6597
|
import { IconCheck as IconCheck4, IconChevronRight as IconChevronRight6, IconCircle as IconCircle2 } from "@tabler/icons-react";
|
|
5280
|
-
import { jsx as
|
|
6598
|
+
import { jsx as jsx76, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
5281
6599
|
function ContextMenu({
|
|
5282
6600
|
...props
|
|
5283
6601
|
}) {
|
|
5284
|
-
return /* @__PURE__ */
|
|
6602
|
+
return /* @__PURE__ */ jsx76(ContextMenuPrimitive.Root, { "data-slot": "context-menu", ...props });
|
|
5285
6603
|
}
|
|
5286
6604
|
function ContextMenuTrigger({
|
|
5287
6605
|
...props
|
|
5288
6606
|
}) {
|
|
5289
|
-
return /* @__PURE__ */
|
|
6607
|
+
return /* @__PURE__ */ jsx76(ContextMenuPrimitive.Trigger, { "data-slot": "context-menu-trigger", ...props });
|
|
5290
6608
|
}
|
|
5291
6609
|
function ContextMenuGroup({
|
|
5292
6610
|
...props
|
|
5293
6611
|
}) {
|
|
5294
|
-
return /* @__PURE__ */
|
|
6612
|
+
return /* @__PURE__ */ jsx76(ContextMenuPrimitive.Group, { "data-slot": "context-menu-group", ...props });
|
|
5295
6613
|
}
|
|
5296
6614
|
function ContextMenuPortal({
|
|
5297
6615
|
...props
|
|
5298
6616
|
}) {
|
|
5299
|
-
return /* @__PURE__ */
|
|
6617
|
+
return /* @__PURE__ */ jsx76(ContextMenuPrimitive.Portal, { "data-slot": "context-menu-portal", ...props });
|
|
5300
6618
|
}
|
|
5301
6619
|
function ContextMenuSub({
|
|
5302
6620
|
...props
|
|
5303
6621
|
}) {
|
|
5304
|
-
return /* @__PURE__ */
|
|
6622
|
+
return /* @__PURE__ */ jsx76(ContextMenuPrimitive.Sub, { "data-slot": "context-menu-sub", ...props });
|
|
5305
6623
|
}
|
|
5306
6624
|
function ContextMenuRadioGroup({
|
|
5307
6625
|
...props
|
|
5308
6626
|
}) {
|
|
5309
|
-
return /* @__PURE__ */
|
|
6627
|
+
return /* @__PURE__ */ jsx76(
|
|
5310
6628
|
ContextMenuPrimitive.RadioGroup,
|
|
5311
6629
|
{
|
|
5312
6630
|
"data-slot": "context-menu-radio-group",
|
|
@@ -5320,7 +6638,7 @@ function ContextMenuSubTrigger({
|
|
|
5320
6638
|
children,
|
|
5321
6639
|
...props
|
|
5322
6640
|
}) {
|
|
5323
|
-
return /* @__PURE__ */
|
|
6641
|
+
return /* @__PURE__ */ jsxs46(
|
|
5324
6642
|
ContextMenuPrimitive.SubTrigger,
|
|
5325
6643
|
{
|
|
5326
6644
|
"data-slot": "context-menu-sub-trigger",
|
|
@@ -5332,7 +6650,7 @@ function ContextMenuSubTrigger({
|
|
|
5332
6650
|
...props,
|
|
5333
6651
|
children: [
|
|
5334
6652
|
children,
|
|
5335
|
-
/* @__PURE__ */
|
|
6653
|
+
/* @__PURE__ */ jsx76(IconChevronRight6, { className: "ml-auto" })
|
|
5336
6654
|
]
|
|
5337
6655
|
}
|
|
5338
6656
|
);
|
|
@@ -5341,7 +6659,7 @@ function ContextMenuSubContent({
|
|
|
5341
6659
|
className,
|
|
5342
6660
|
...props
|
|
5343
6661
|
}) {
|
|
5344
|
-
return /* @__PURE__ */
|
|
6662
|
+
return /* @__PURE__ */ jsx76(
|
|
5345
6663
|
ContextMenuPrimitive.SubContent,
|
|
5346
6664
|
{
|
|
5347
6665
|
"data-slot": "context-menu-sub-content",
|
|
@@ -5357,7 +6675,7 @@ function ContextMenuContent({
|
|
|
5357
6675
|
className,
|
|
5358
6676
|
...props
|
|
5359
6677
|
}) {
|
|
5360
|
-
return /* @__PURE__ */
|
|
6678
|
+
return /* @__PURE__ */ jsx76(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx76(
|
|
5361
6679
|
ContextMenuPrimitive.Content,
|
|
5362
6680
|
{
|
|
5363
6681
|
"data-slot": "context-menu-content",
|
|
@@ -5375,7 +6693,7 @@ function ContextMenuItem({
|
|
|
5375
6693
|
variant = "default",
|
|
5376
6694
|
...props
|
|
5377
6695
|
}) {
|
|
5378
|
-
return /* @__PURE__ */
|
|
6696
|
+
return /* @__PURE__ */ jsx76(
|
|
5379
6697
|
ContextMenuPrimitive.Item,
|
|
5380
6698
|
{
|
|
5381
6699
|
"data-slot": "context-menu-item",
|
|
@@ -5395,7 +6713,7 @@ function ContextMenuCheckboxItem({
|
|
|
5395
6713
|
checked,
|
|
5396
6714
|
...props
|
|
5397
6715
|
}) {
|
|
5398
|
-
return /* @__PURE__ */
|
|
6716
|
+
return /* @__PURE__ */ jsxs46(
|
|
5399
6717
|
ContextMenuPrimitive.CheckboxItem,
|
|
5400
6718
|
{
|
|
5401
6719
|
"data-slot": "context-menu-checkbox-item",
|
|
@@ -5406,7 +6724,7 @@ function ContextMenuCheckboxItem({
|
|
|
5406
6724
|
checked,
|
|
5407
6725
|
...props,
|
|
5408
6726
|
children: [
|
|
5409
|
-
/* @__PURE__ */
|
|
6727
|
+
/* @__PURE__ */ jsx76("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx76(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx76(IconCheck4, { className: "size-4" }) }) }),
|
|
5410
6728
|
children
|
|
5411
6729
|
]
|
|
5412
6730
|
}
|
|
@@ -5417,7 +6735,7 @@ function ContextMenuRadioItem({
|
|
|
5417
6735
|
children,
|
|
5418
6736
|
...props
|
|
5419
6737
|
}) {
|
|
5420
|
-
return /* @__PURE__ */
|
|
6738
|
+
return /* @__PURE__ */ jsxs46(
|
|
5421
6739
|
ContextMenuPrimitive.RadioItem,
|
|
5422
6740
|
{
|
|
5423
6741
|
"data-slot": "context-menu-radio-item",
|
|
@@ -5427,7 +6745,7 @@ function ContextMenuRadioItem({
|
|
|
5427
6745
|
),
|
|
5428
6746
|
...props,
|
|
5429
6747
|
children: [
|
|
5430
|
-
/* @__PURE__ */
|
|
6748
|
+
/* @__PURE__ */ jsx76("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx76(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx76(IconCircle2, { className: "size-2 fill-current" }) }) }),
|
|
5431
6749
|
children
|
|
5432
6750
|
]
|
|
5433
6751
|
}
|
|
@@ -5438,7 +6756,7 @@ function ContextMenuLabel({
|
|
|
5438
6756
|
inset,
|
|
5439
6757
|
...props
|
|
5440
6758
|
}) {
|
|
5441
|
-
return /* @__PURE__ */
|
|
6759
|
+
return /* @__PURE__ */ jsx76(
|
|
5442
6760
|
ContextMenuPrimitive.Label,
|
|
5443
6761
|
{
|
|
5444
6762
|
"data-slot": "context-menu-label",
|
|
@@ -5455,7 +6773,7 @@ function ContextMenuSeparator({
|
|
|
5455
6773
|
className,
|
|
5456
6774
|
...props
|
|
5457
6775
|
}) {
|
|
5458
|
-
return /* @__PURE__ */
|
|
6776
|
+
return /* @__PURE__ */ jsx76(
|
|
5459
6777
|
ContextMenuPrimitive.Separator,
|
|
5460
6778
|
{
|
|
5461
6779
|
"data-slot": "context-menu-separator",
|
|
@@ -5468,7 +6786,7 @@ function ContextMenuShortcut({
|
|
|
5468
6786
|
className,
|
|
5469
6787
|
...props
|
|
5470
6788
|
}) {
|
|
5471
|
-
return /* @__PURE__ */
|
|
6789
|
+
return /* @__PURE__ */ jsx76(
|
|
5472
6790
|
"span",
|
|
5473
6791
|
{
|
|
5474
6792
|
"data-slot": "context-menu-shortcut",
|
|
@@ -5493,7 +6811,7 @@ import {
|
|
|
5493
6811
|
useReactTable
|
|
5494
6812
|
} from "@tanstack/react-table";
|
|
5495
6813
|
import * as React9 from "react";
|
|
5496
|
-
import { jsx as
|
|
6814
|
+
import { jsx as jsx77, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
5497
6815
|
function DataTable({
|
|
5498
6816
|
columns,
|
|
5499
6817
|
data,
|
|
@@ -5581,8 +6899,8 @@ function DataTable({
|
|
|
5581
6899
|
getFacetedRowModel: getFacetedRowModel(),
|
|
5582
6900
|
getFacetedUniqueValues: getFacetedUniqueValues()
|
|
5583
6901
|
});
|
|
5584
|
-
return /* @__PURE__ */
|
|
5585
|
-
/* @__PURE__ */
|
|
6902
|
+
return /* @__PURE__ */ jsx77("div", { className: "rounded-md border", children: /* @__PURE__ */ jsxs47(Table, { children: [
|
|
6903
|
+
/* @__PURE__ */ jsx77(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx77(TableRow, { children: headerGroup.headers.map((header, index) => {
|
|
5586
6904
|
const isFirst = index === 0;
|
|
5587
6905
|
const isLast = index === headerGroup.headers.length - 1;
|
|
5588
6906
|
let className;
|
|
@@ -5591,7 +6909,7 @@ function DataTable({
|
|
|
5591
6909
|
} else if (isLast) {
|
|
5592
6910
|
className = "pr-4";
|
|
5593
6911
|
}
|
|
5594
|
-
return /* @__PURE__ */
|
|
6912
|
+
return /* @__PURE__ */ jsx77(
|
|
5595
6913
|
TableHead,
|
|
5596
6914
|
{
|
|
5597
6915
|
colSpan: header.colSpan,
|
|
@@ -5605,7 +6923,7 @@ function DataTable({
|
|
|
5605
6923
|
header.id
|
|
5606
6924
|
);
|
|
5607
6925
|
}) }, headerGroup.id)) }),
|
|
5608
|
-
/* @__PURE__ */
|
|
6926
|
+
/* @__PURE__ */ jsx77(TableBody, { children: table.getRowModel().rows?.length ? table.getRowModel().rows.map((row) => /* @__PURE__ */ jsx77(
|
|
5609
6927
|
TableRow,
|
|
5610
6928
|
{
|
|
5611
6929
|
"data-state": row.getIsSelected() && "selected",
|
|
@@ -5620,7 +6938,7 @@ function DataTable({
|
|
|
5620
6938
|
} else if (isLast) {
|
|
5621
6939
|
className = "pr-4";
|
|
5622
6940
|
}
|
|
5623
|
-
return /* @__PURE__ */
|
|
6941
|
+
return /* @__PURE__ */ jsx77(
|
|
5624
6942
|
TableCell,
|
|
5625
6943
|
{
|
|
5626
6944
|
style: { width: cell.column.getSize() },
|
|
@@ -5635,19 +6953,19 @@ function DataTable({
|
|
|
5635
6953
|
})
|
|
5636
6954
|
},
|
|
5637
6955
|
row.id
|
|
5638
|
-
)) : /* @__PURE__ */
|
|
6956
|
+
)) : /* @__PURE__ */ jsx77(TableRow, { children: /* @__PURE__ */ jsx77(TableCell, { colSpan: columns.length, className: "h-24 text-center", children: "No results." }) }) })
|
|
5639
6957
|
] }) });
|
|
5640
6958
|
}
|
|
5641
6959
|
|
|
5642
6960
|
// src/components/ui/data-table/data-table-action.tsx
|
|
5643
6961
|
import { IconChevronRight as IconChevronRight7 } from "@tabler/icons-react";
|
|
5644
|
-
import { jsx as
|
|
6962
|
+
import { jsx as jsx78, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
5645
6963
|
function DataTableAction({
|
|
5646
6964
|
onClick,
|
|
5647
6965
|
disabled,
|
|
5648
6966
|
"aria-label": ariaLabel = "Open menu"
|
|
5649
6967
|
}) {
|
|
5650
|
-
return /* @__PURE__ */
|
|
6968
|
+
return /* @__PURE__ */ jsx78("div", { className: "flex justify-end align-center", children: /* @__PURE__ */ jsxs48(
|
|
5651
6969
|
Button,
|
|
5652
6970
|
{
|
|
5653
6971
|
variant: "ghost",
|
|
@@ -5655,24 +6973,24 @@ function DataTableAction({
|
|
|
5655
6973
|
onClick,
|
|
5656
6974
|
disabled,
|
|
5657
6975
|
children: [
|
|
5658
|
-
/* @__PURE__ */
|
|
5659
|
-
/* @__PURE__ */
|
|
6976
|
+
/* @__PURE__ */ jsx78("span", { className: "sr-only", children: ariaLabel }),
|
|
6977
|
+
/* @__PURE__ */ jsx78(IconChevronRight7, { className: "h-4 w-4" })
|
|
5660
6978
|
]
|
|
5661
6979
|
}
|
|
5662
6980
|
) });
|
|
5663
6981
|
}
|
|
5664
6982
|
|
|
5665
6983
|
// src/components/ui/data-table/data-table-column-header.tsx
|
|
5666
|
-
import { jsx as
|
|
6984
|
+
import { jsx as jsx79 } from "react/jsx-runtime";
|
|
5667
6985
|
function DataTableColumnHeader({
|
|
5668
6986
|
column,
|
|
5669
6987
|
title,
|
|
5670
6988
|
className
|
|
5671
6989
|
}) {
|
|
5672
6990
|
if (!column.getCanSort()) {
|
|
5673
|
-
return /* @__PURE__ */
|
|
6991
|
+
return /* @__PURE__ */ jsx79("div", { className: cn(className), children: title });
|
|
5674
6992
|
}
|
|
5675
|
-
return /* @__PURE__ */
|
|
6993
|
+
return /* @__PURE__ */ jsx79("div", { className: cn("flex items-center gap-2", className), children: /* @__PURE__ */ jsx79("span", { children: title }) });
|
|
5676
6994
|
}
|
|
5677
6995
|
|
|
5678
6996
|
// src/components/ui/data-table/data-table-pagination.tsx
|
|
@@ -5683,7 +7001,7 @@ import {
|
|
|
5683
7001
|
IconChevronsRight
|
|
5684
7002
|
} from "@tabler/icons-react";
|
|
5685
7003
|
import { useTranslations } from "next-intl";
|
|
5686
|
-
import { jsx as
|
|
7004
|
+
import { jsx as jsx80, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
5687
7005
|
function addRange(pages, start, end) {
|
|
5688
7006
|
for (let i = start; i <= end; i++) {
|
|
5689
7007
|
pages.push(i);
|
|
@@ -5737,30 +7055,30 @@ function DataTablePagination({
|
|
|
5737
7055
|
const hasSelection = selectedRows > 0;
|
|
5738
7056
|
const rowText = hasSelection ? `${selectedRows} ${t("of")} ${totalRows} ${rowLabel} ${t("selected")}` : `${totalRows} ${rowLabel} ${t("total")}`;
|
|
5739
7057
|
const pageText = `${t("page")} ${pageIndex + 1} ${t("of")} ${pageCount || 1}`;
|
|
5740
|
-
return /* @__PURE__ */
|
|
5741
|
-
/* @__PURE__ */
|
|
5742
|
-
/* @__PURE__ */
|
|
7058
|
+
return /* @__PURE__ */ jsxs49("div", { className: "flex flex-col gap-4 px-2 sm:flex-row sm:items-center sm:justify-between", children: [
|
|
7059
|
+
/* @__PURE__ */ jsxs49("div", { className: "flex items-center justify-center gap-4 sm:justify-start", children: [
|
|
7060
|
+
/* @__PURE__ */ jsx80("div", { className: "text-muted-foreground text-sm", children: /* @__PURE__ */ jsxs49("span", { children: [
|
|
5743
7061
|
rowText,
|
|
5744
|
-
/* @__PURE__ */
|
|
7062
|
+
/* @__PURE__ */ jsx80("span", { className: "mx-2", children: "\xB7" }),
|
|
5745
7063
|
pageText
|
|
5746
7064
|
] }) }),
|
|
5747
|
-
/* @__PURE__ */
|
|
5748
|
-
/* @__PURE__ */
|
|
5749
|
-
/* @__PURE__ */
|
|
7065
|
+
/* @__PURE__ */ jsxs49("div", { className: "flex items-center gap-2", children: [
|
|
7066
|
+
/* @__PURE__ */ jsx80("span", { className: "text-sm font-medium whitespace-nowrap", children: t("rowsPerPage") }),
|
|
7067
|
+
/* @__PURE__ */ jsxs49(
|
|
5750
7068
|
Select,
|
|
5751
7069
|
{
|
|
5752
7070
|
value: `${pageSize}`,
|
|
5753
7071
|
onValueChange: (value) => onPageSizeChange(Number(value)),
|
|
5754
7072
|
children: [
|
|
5755
|
-
/* @__PURE__ */
|
|
5756
|
-
/* @__PURE__ */
|
|
7073
|
+
/* @__PURE__ */ jsx80(SelectTrigger, { className: "h-8 w-[70px]", children: /* @__PURE__ */ jsx80(SelectValue, { placeholder: pageSize }) }),
|
|
7074
|
+
/* @__PURE__ */ jsx80(SelectContent, { side: "top", children: pageSizeOptions.map((size) => /* @__PURE__ */ jsx80(SelectItem, { value: `${size}`, children: size }, size)) })
|
|
5757
7075
|
]
|
|
5758
7076
|
}
|
|
5759
7077
|
)
|
|
5760
7078
|
] })
|
|
5761
7079
|
] }),
|
|
5762
|
-
/* @__PURE__ */
|
|
5763
|
-
/* @__PURE__ */
|
|
7080
|
+
/* @__PURE__ */ jsx80("div", { className: "flex justify-center sm:justify-end", children: /* @__PURE__ */ jsxs49("nav", { "aria-label": "Pagination", className: "flex items-center gap-1", children: [
|
|
7081
|
+
/* @__PURE__ */ jsxs49(
|
|
5764
7082
|
Button,
|
|
5765
7083
|
{
|
|
5766
7084
|
variant: "outline",
|
|
@@ -5770,12 +7088,12 @@ function DataTablePagination({
|
|
|
5770
7088
|
disabled: !canPreviousPage,
|
|
5771
7089
|
"aria-label": t("firstPage"),
|
|
5772
7090
|
children: [
|
|
5773
|
-
/* @__PURE__ */
|
|
5774
|
-
/* @__PURE__ */
|
|
7091
|
+
/* @__PURE__ */ jsx80(IconChevronsLeft, { className: "h-4 w-4" }),
|
|
7092
|
+
/* @__PURE__ */ jsx80("span", { className: "sr-only", children: t("firstPage") })
|
|
5775
7093
|
]
|
|
5776
7094
|
}
|
|
5777
7095
|
),
|
|
5778
|
-
/* @__PURE__ */
|
|
7096
|
+
/* @__PURE__ */ jsxs49(
|
|
5779
7097
|
Button,
|
|
5780
7098
|
{
|
|
5781
7099
|
variant: "outline",
|
|
@@ -5785,8 +7103,8 @@ function DataTablePagination({
|
|
|
5785
7103
|
disabled: !canPreviousPage,
|
|
5786
7104
|
"aria-label": t("previousPage"),
|
|
5787
7105
|
children: [
|
|
5788
|
-
/* @__PURE__ */
|
|
5789
|
-
/* @__PURE__ */
|
|
7106
|
+
/* @__PURE__ */ jsx80(IconChevronLeft3, { className: "h-4 w-4" }),
|
|
7107
|
+
/* @__PURE__ */ jsx80("span", { className: "sr-only", children: t("previousPage") })
|
|
5790
7108
|
]
|
|
5791
7109
|
}
|
|
5792
7110
|
),
|
|
@@ -5794,7 +7112,7 @@ function DataTablePagination({
|
|
|
5794
7112
|
if (page === "ellipsis") {
|
|
5795
7113
|
const prevPage = idx > 0 ? pageNumbers[idx - 1] : null;
|
|
5796
7114
|
const nextPage = idx < pageNumbers.length - 1 ? pageNumbers[idx + 1] : null;
|
|
5797
|
-
return /* @__PURE__ */
|
|
7115
|
+
return /* @__PURE__ */ jsx80(
|
|
5798
7116
|
"span",
|
|
5799
7117
|
{
|
|
5800
7118
|
className: "flex h-8 w-8 items-center justify-center text-muted-foreground",
|
|
@@ -5806,7 +7124,7 @@ function DataTablePagination({
|
|
|
5806
7124
|
}
|
|
5807
7125
|
const pageNum = page;
|
|
5808
7126
|
const isActive = pageNum === pageIndex + 1;
|
|
5809
|
-
return /* @__PURE__ */
|
|
7127
|
+
return /* @__PURE__ */ jsx80(
|
|
5810
7128
|
Button,
|
|
5811
7129
|
{
|
|
5812
7130
|
variant: isActive ? "default" : "outline",
|
|
@@ -5820,7 +7138,7 @@ function DataTablePagination({
|
|
|
5820
7138
|
pageNum
|
|
5821
7139
|
);
|
|
5822
7140
|
}),
|
|
5823
|
-
/* @__PURE__ */
|
|
7141
|
+
/* @__PURE__ */ jsxs49(
|
|
5824
7142
|
Button,
|
|
5825
7143
|
{
|
|
5826
7144
|
variant: "outline",
|
|
@@ -5830,12 +7148,12 @@ function DataTablePagination({
|
|
|
5830
7148
|
disabled: !canNextPage,
|
|
5831
7149
|
"aria-label": t("nextPage"),
|
|
5832
7150
|
children: [
|
|
5833
|
-
/* @__PURE__ */
|
|
5834
|
-
/* @__PURE__ */
|
|
7151
|
+
/* @__PURE__ */ jsx80(IconChevronRight8, { className: "h-4 w-4" }),
|
|
7152
|
+
/* @__PURE__ */ jsx80("span", { className: "sr-only", children: t("nextPage") })
|
|
5835
7153
|
]
|
|
5836
7154
|
}
|
|
5837
7155
|
),
|
|
5838
|
-
/* @__PURE__ */
|
|
7156
|
+
/* @__PURE__ */ jsxs49(
|
|
5839
7157
|
Button,
|
|
5840
7158
|
{
|
|
5841
7159
|
variant: "outline",
|
|
@@ -5845,8 +7163,8 @@ function DataTablePagination({
|
|
|
5845
7163
|
disabled: !canNextPage,
|
|
5846
7164
|
"aria-label": t("lastPage"),
|
|
5847
7165
|
children: [
|
|
5848
|
-
/* @__PURE__ */
|
|
5849
|
-
/* @__PURE__ */
|
|
7166
|
+
/* @__PURE__ */ jsx80(IconChevronsRight, { className: "h-4 w-4" }),
|
|
7167
|
+
/* @__PURE__ */ jsx80("span", { className: "sr-only", children: t("lastPage") })
|
|
5850
7168
|
]
|
|
5851
7169
|
}
|
|
5852
7170
|
)
|
|
@@ -5856,29 +7174,29 @@ function DataTablePagination({
|
|
|
5856
7174
|
|
|
5857
7175
|
// src/components/ui/data-table/data-table-view-options.tsx
|
|
5858
7176
|
import { IconSettings } from "@tabler/icons-react";
|
|
5859
|
-
import { jsx as
|
|
7177
|
+
import { jsx as jsx81, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
5860
7178
|
function DataTableViewOptions({
|
|
5861
7179
|
table
|
|
5862
7180
|
}) {
|
|
5863
|
-
return /* @__PURE__ */
|
|
5864
|
-
/* @__PURE__ */
|
|
7181
|
+
return /* @__PURE__ */ jsxs50(DropdownMenu, { children: [
|
|
7182
|
+
/* @__PURE__ */ jsx81(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs50(
|
|
5865
7183
|
Button,
|
|
5866
7184
|
{
|
|
5867
7185
|
variant: "outline",
|
|
5868
7186
|
size: "sm",
|
|
5869
7187
|
className: "ml-auto hidden h-8 lg:flex",
|
|
5870
7188
|
children: [
|
|
5871
|
-
/* @__PURE__ */
|
|
7189
|
+
/* @__PURE__ */ jsx81(IconSettings, { className: "mr-2 h-4 w-4" }),
|
|
5872
7190
|
"View"
|
|
5873
7191
|
]
|
|
5874
7192
|
}
|
|
5875
7193
|
) }),
|
|
5876
|
-
/* @__PURE__ */
|
|
5877
|
-
/* @__PURE__ */
|
|
5878
|
-
/* @__PURE__ */
|
|
7194
|
+
/* @__PURE__ */ jsxs50(DropdownMenuContent, { align: "end", className: "w-[150px]", children: [
|
|
7195
|
+
/* @__PURE__ */ jsx81(DropdownMenuLabel, { children: "Toggle columns" }),
|
|
7196
|
+
/* @__PURE__ */ jsx81(DropdownMenuSeparator, {}),
|
|
5879
7197
|
table.getAllColumns().filter(
|
|
5880
7198
|
(column) => typeof column.accessorFn !== "undefined" && column.getCanHide()
|
|
5881
|
-
).map((column) => /* @__PURE__ */
|
|
7199
|
+
).map((column) => /* @__PURE__ */ jsx81(
|
|
5882
7200
|
DropdownMenuCheckboxItem,
|
|
5883
7201
|
{
|
|
5884
7202
|
className: "capitalize",
|
|
@@ -5894,32 +7212,32 @@ function DataTableViewOptions({
|
|
|
5894
7212
|
|
|
5895
7213
|
// src/components/ui/drawer.tsx
|
|
5896
7214
|
import { Drawer as DrawerPrimitive } from "vaul";
|
|
5897
|
-
import { jsx as
|
|
7215
|
+
import { jsx as jsx82, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
5898
7216
|
function Drawer({
|
|
5899
7217
|
...props
|
|
5900
7218
|
}) {
|
|
5901
|
-
return /* @__PURE__ */
|
|
7219
|
+
return /* @__PURE__ */ jsx82(DrawerPrimitive.Root, { "data-slot": "drawer", ...props });
|
|
5902
7220
|
}
|
|
5903
7221
|
function DrawerTrigger({
|
|
5904
7222
|
...props
|
|
5905
7223
|
}) {
|
|
5906
|
-
return /* @__PURE__ */
|
|
7224
|
+
return /* @__PURE__ */ jsx82(DrawerPrimitive.Trigger, { "data-slot": "drawer-trigger", ...props });
|
|
5907
7225
|
}
|
|
5908
7226
|
function DrawerPortal({
|
|
5909
7227
|
...props
|
|
5910
7228
|
}) {
|
|
5911
|
-
return /* @__PURE__ */
|
|
7229
|
+
return /* @__PURE__ */ jsx82(DrawerPrimitive.Portal, { "data-slot": "drawer-portal", ...props });
|
|
5912
7230
|
}
|
|
5913
7231
|
function DrawerClose({
|
|
5914
7232
|
...props
|
|
5915
7233
|
}) {
|
|
5916
|
-
return /* @__PURE__ */
|
|
7234
|
+
return /* @__PURE__ */ jsx82(DrawerPrimitive.Close, { "data-slot": "drawer-close", ...props });
|
|
5917
7235
|
}
|
|
5918
7236
|
function DrawerOverlay({
|
|
5919
7237
|
className,
|
|
5920
7238
|
...props
|
|
5921
7239
|
}) {
|
|
5922
|
-
return /* @__PURE__ */
|
|
7240
|
+
return /* @__PURE__ */ jsx82(
|
|
5923
7241
|
DrawerPrimitive.Overlay,
|
|
5924
7242
|
{
|
|
5925
7243
|
"data-slot": "drawer-overlay",
|
|
@@ -5936,9 +7254,9 @@ function DrawerContent({
|
|
|
5936
7254
|
children,
|
|
5937
7255
|
...props
|
|
5938
7256
|
}) {
|
|
5939
|
-
return /* @__PURE__ */
|
|
5940
|
-
/* @__PURE__ */
|
|
5941
|
-
/* @__PURE__ */
|
|
7257
|
+
return /* @__PURE__ */ jsxs51(DrawerPortal, { "data-slot": "drawer-portal", children: [
|
|
7258
|
+
/* @__PURE__ */ jsx82(DrawerOverlay, {}),
|
|
7259
|
+
/* @__PURE__ */ jsxs51(
|
|
5942
7260
|
DrawerPrimitive.Content,
|
|
5943
7261
|
{
|
|
5944
7262
|
"data-slot": "drawer-content",
|
|
@@ -5952,7 +7270,7 @@ function DrawerContent({
|
|
|
5952
7270
|
),
|
|
5953
7271
|
...props,
|
|
5954
7272
|
children: [
|
|
5955
|
-
/* @__PURE__ */
|
|
7273
|
+
/* @__PURE__ */ jsx82("div", { className: "bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block" }),
|
|
5956
7274
|
children
|
|
5957
7275
|
]
|
|
5958
7276
|
}
|
|
@@ -5960,7 +7278,7 @@ function DrawerContent({
|
|
|
5960
7278
|
] });
|
|
5961
7279
|
}
|
|
5962
7280
|
function DrawerHeader({ className, ...props }) {
|
|
5963
|
-
return /* @__PURE__ */
|
|
7281
|
+
return /* @__PURE__ */ jsx82(
|
|
5964
7282
|
"div",
|
|
5965
7283
|
{
|
|
5966
7284
|
"data-slot": "drawer-header",
|
|
@@ -5973,7 +7291,7 @@ function DrawerHeader({ className, ...props }) {
|
|
|
5973
7291
|
);
|
|
5974
7292
|
}
|
|
5975
7293
|
function DrawerFooter({ className, ...props }) {
|
|
5976
|
-
return /* @__PURE__ */
|
|
7294
|
+
return /* @__PURE__ */ jsx82(
|
|
5977
7295
|
"div",
|
|
5978
7296
|
{
|
|
5979
7297
|
"data-slot": "drawer-footer",
|
|
@@ -5986,7 +7304,7 @@ function DrawerTitle({
|
|
|
5986
7304
|
className,
|
|
5987
7305
|
...props
|
|
5988
7306
|
}) {
|
|
5989
|
-
return /* @__PURE__ */
|
|
7307
|
+
return /* @__PURE__ */ jsx82(
|
|
5990
7308
|
DrawerPrimitive.Title,
|
|
5991
7309
|
{
|
|
5992
7310
|
"data-slot": "drawer-title",
|
|
@@ -5999,7 +7317,7 @@ function DrawerDescription({
|
|
|
5999
7317
|
className,
|
|
6000
7318
|
...props
|
|
6001
7319
|
}) {
|
|
6002
|
-
return /* @__PURE__ */
|
|
7320
|
+
return /* @__PURE__ */ jsx82(
|
|
6003
7321
|
DrawerPrimitive.Description,
|
|
6004
7322
|
{
|
|
6005
7323
|
"data-slot": "drawer-description",
|
|
@@ -6011,31 +7329,9 @@ function DrawerDescription({
|
|
|
6011
7329
|
|
|
6012
7330
|
// src/components/ui/field.tsx
|
|
6013
7331
|
import { cva as cva8 } from "class-variance-authority";
|
|
6014
|
-
|
|
6015
|
-
// src/components/ui/label.tsx
|
|
6016
|
-
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
6017
|
-
import { jsx as jsx67 } from "react/jsx-runtime";
|
|
6018
|
-
function Label4({
|
|
6019
|
-
className,
|
|
6020
|
-
...props
|
|
6021
|
-
}) {
|
|
6022
|
-
return /* @__PURE__ */ jsx67(
|
|
6023
|
-
LabelPrimitive.Root,
|
|
6024
|
-
{
|
|
6025
|
-
"data-slot": "label",
|
|
6026
|
-
className: cn(
|
|
6027
|
-
"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
6028
|
-
className
|
|
6029
|
-
),
|
|
6030
|
-
...props
|
|
6031
|
-
}
|
|
6032
|
-
);
|
|
6033
|
-
}
|
|
6034
|
-
|
|
6035
|
-
// src/components/ui/field.tsx
|
|
6036
|
-
import { jsx as jsx68, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
7332
|
+
import { jsx as jsx83, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
6037
7333
|
function FieldSet({ className, ...props }) {
|
|
6038
|
-
return /* @__PURE__ */
|
|
7334
|
+
return /* @__PURE__ */ jsx83(
|
|
6039
7335
|
"fieldset",
|
|
6040
7336
|
{
|
|
6041
7337
|
"data-slot": "field-set",
|
|
@@ -6053,7 +7349,7 @@ function FieldLegend({
|
|
|
6053
7349
|
variant = "legend",
|
|
6054
7350
|
...props
|
|
6055
7351
|
}) {
|
|
6056
|
-
return /* @__PURE__ */
|
|
7352
|
+
return /* @__PURE__ */ jsx83(
|
|
6057
7353
|
"legend",
|
|
6058
7354
|
{
|
|
6059
7355
|
"data-slot": "field-legend",
|
|
@@ -6069,7 +7365,7 @@ function FieldLegend({
|
|
|
6069
7365
|
);
|
|
6070
7366
|
}
|
|
6071
7367
|
function FieldGroup({ className, ...props }) {
|
|
6072
|
-
return /* @__PURE__ */
|
|
7368
|
+
return /* @__PURE__ */ jsx83(
|
|
6073
7369
|
"div",
|
|
6074
7370
|
{
|
|
6075
7371
|
"data-slot": "field-group",
|
|
@@ -6109,7 +7405,7 @@ function Field({
|
|
|
6109
7405
|
orientation = "vertical",
|
|
6110
7406
|
...props
|
|
6111
7407
|
}) {
|
|
6112
|
-
return /* @__PURE__ */
|
|
7408
|
+
return /* @__PURE__ */ jsx83(
|
|
6113
7409
|
"fieldset",
|
|
6114
7410
|
{
|
|
6115
7411
|
"data-slot": "field",
|
|
@@ -6124,7 +7420,7 @@ function Field({
|
|
|
6124
7420
|
);
|
|
6125
7421
|
}
|
|
6126
7422
|
function FieldContent({ className, ...props }) {
|
|
6127
|
-
return /* @__PURE__ */
|
|
7423
|
+
return /* @__PURE__ */ jsx83(
|
|
6128
7424
|
"div",
|
|
6129
7425
|
{
|
|
6130
7426
|
"data-slot": "field-content",
|
|
@@ -6140,8 +7436,8 @@ function FieldLabel({
|
|
|
6140
7436
|
className,
|
|
6141
7437
|
...props
|
|
6142
7438
|
}) {
|
|
6143
|
-
return /* @__PURE__ */
|
|
6144
|
-
|
|
7439
|
+
return /* @__PURE__ */ jsx83(
|
|
7440
|
+
Label3,
|
|
6145
7441
|
{
|
|
6146
7442
|
"data-slot": "field-label",
|
|
6147
7443
|
className: cn(
|
|
@@ -6155,7 +7451,7 @@ function FieldLabel({
|
|
|
6155
7451
|
);
|
|
6156
7452
|
}
|
|
6157
7453
|
function FieldTitle({ className, ...props }) {
|
|
6158
|
-
return /* @__PURE__ */
|
|
7454
|
+
return /* @__PURE__ */ jsx83(
|
|
6159
7455
|
"div",
|
|
6160
7456
|
{
|
|
6161
7457
|
"data-slot": "field-label",
|
|
@@ -6168,7 +7464,7 @@ function FieldTitle({ className, ...props }) {
|
|
|
6168
7464
|
);
|
|
6169
7465
|
}
|
|
6170
7466
|
function FieldDescription({ className, ...props }) {
|
|
6171
|
-
return /* @__PURE__ */
|
|
7467
|
+
return /* @__PURE__ */ jsx83(
|
|
6172
7468
|
"p",
|
|
6173
7469
|
{
|
|
6174
7470
|
"data-slot": "field-description",
|
|
@@ -6187,7 +7483,7 @@ function FieldSeparator({
|
|
|
6187
7483
|
className,
|
|
6188
7484
|
...props
|
|
6189
7485
|
}) {
|
|
6190
|
-
return /* @__PURE__ */
|
|
7486
|
+
return /* @__PURE__ */ jsxs52(
|
|
6191
7487
|
"div",
|
|
6192
7488
|
{
|
|
6193
7489
|
"data-slot": "field-separator",
|
|
@@ -6198,8 +7494,8 @@ function FieldSeparator({
|
|
|
6198
7494
|
),
|
|
6199
7495
|
...props,
|
|
6200
7496
|
children: [
|
|
6201
|
-
/* @__PURE__ */
|
|
6202
|
-
children && /* @__PURE__ */
|
|
7497
|
+
/* @__PURE__ */ jsx83(Separator2, { className: "absolute inset-0 top-1/2" }),
|
|
7498
|
+
children && /* @__PURE__ */ jsx83(
|
|
6203
7499
|
"span",
|
|
6204
7500
|
{
|
|
6205
7501
|
className: "bg-background text-muted-foreground relative mx-auto block w-fit px-2",
|
|
@@ -6225,15 +7521,15 @@ function FieldError({
|
|
|
6225
7521
|
if (uniqueErrors.length === 1) {
|
|
6226
7522
|
content = uniqueErrors[0]?.message;
|
|
6227
7523
|
} else {
|
|
6228
|
-
content = /* @__PURE__ */
|
|
6229
|
-
(error) => error?.message && /* @__PURE__ */
|
|
7524
|
+
content = /* @__PURE__ */ jsx83("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
|
|
7525
|
+
(error) => error?.message && /* @__PURE__ */ jsx83("li", { children: error.message }, error.message)
|
|
6230
7526
|
) });
|
|
6231
7527
|
}
|
|
6232
7528
|
}
|
|
6233
7529
|
if (!content) {
|
|
6234
7530
|
return null;
|
|
6235
7531
|
}
|
|
6236
|
-
return /* @__PURE__ */
|
|
7532
|
+
return /* @__PURE__ */ jsx83(
|
|
6237
7533
|
"div",
|
|
6238
7534
|
{
|
|
6239
7535
|
role: "alert",
|
|
@@ -6249,12 +7545,12 @@ function FieldError({
|
|
|
6249
7545
|
import { Slot as Slot6 } from "@radix-ui/react-slot";
|
|
6250
7546
|
import * as React10 from "react";
|
|
6251
7547
|
import {
|
|
6252
|
-
Controller,
|
|
7548
|
+
Controller as Controller2,
|
|
6253
7549
|
FormProvider,
|
|
6254
7550
|
useFormContext,
|
|
6255
7551
|
useFormState
|
|
6256
7552
|
} from "react-hook-form";
|
|
6257
|
-
import { jsx as
|
|
7553
|
+
import { jsx as jsx84 } from "react/jsx-runtime";
|
|
6258
7554
|
var Form = FormProvider;
|
|
6259
7555
|
var FormFieldContext = React10.createContext(
|
|
6260
7556
|
{}
|
|
@@ -6262,7 +7558,7 @@ var FormFieldContext = React10.createContext(
|
|
|
6262
7558
|
var FormField = ({
|
|
6263
7559
|
...props
|
|
6264
7560
|
}) => {
|
|
6265
|
-
return /* @__PURE__ */
|
|
7561
|
+
return /* @__PURE__ */ jsx84(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx84(Controller2, { ...props }) });
|
|
6266
7562
|
};
|
|
6267
7563
|
var useFormField = () => {
|
|
6268
7564
|
const fieldContext = React10.useContext(FormFieldContext);
|
|
@@ -6288,7 +7584,7 @@ var FormItemContext = React10.createContext(
|
|
|
6288
7584
|
);
|
|
6289
7585
|
function FormItem({ className, ...props }) {
|
|
6290
7586
|
const id = React10.useId();
|
|
6291
|
-
return /* @__PURE__ */
|
|
7587
|
+
return /* @__PURE__ */ jsx84(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx84(
|
|
6292
7588
|
"div",
|
|
6293
7589
|
{
|
|
6294
7590
|
"data-slot": "form-item",
|
|
@@ -6302,8 +7598,8 @@ function FormLabel({
|
|
|
6302
7598
|
...props
|
|
6303
7599
|
}) {
|
|
6304
7600
|
const { error, formItemId } = useFormField();
|
|
6305
|
-
return /* @__PURE__ */
|
|
6306
|
-
|
|
7601
|
+
return /* @__PURE__ */ jsx84(
|
|
7602
|
+
Label3,
|
|
6307
7603
|
{
|
|
6308
7604
|
"data-slot": "form-label",
|
|
6309
7605
|
"data-error": !!error,
|
|
@@ -6315,7 +7611,7 @@ function FormLabel({
|
|
|
6315
7611
|
}
|
|
6316
7612
|
function FormControl({ ...props }) {
|
|
6317
7613
|
const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
|
|
6318
|
-
return /* @__PURE__ */
|
|
7614
|
+
return /* @__PURE__ */ jsx84(
|
|
6319
7615
|
Slot6,
|
|
6320
7616
|
{
|
|
6321
7617
|
"data-slot": "form-control",
|
|
@@ -6328,7 +7624,7 @@ function FormControl({ ...props }) {
|
|
|
6328
7624
|
}
|
|
6329
7625
|
function FormDescription({ className, ...props }) {
|
|
6330
7626
|
const { formDescriptionId } = useFormField();
|
|
6331
|
-
return /* @__PURE__ */
|
|
7627
|
+
return /* @__PURE__ */ jsx84(
|
|
6332
7628
|
"p",
|
|
6333
7629
|
{
|
|
6334
7630
|
"data-slot": "form-description",
|
|
@@ -6344,7 +7640,7 @@ function FormMessage({ className, ...props }) {
|
|
|
6344
7640
|
if (!body) {
|
|
6345
7641
|
return null;
|
|
6346
7642
|
}
|
|
6347
|
-
return /* @__PURE__ */
|
|
7643
|
+
return /* @__PURE__ */ jsx84(
|
|
6348
7644
|
"p",
|
|
6349
7645
|
{
|
|
6350
7646
|
"data-slot": "form-message",
|
|
@@ -6358,16 +7654,16 @@ function FormMessage({ className, ...props }) {
|
|
|
6358
7654
|
|
|
6359
7655
|
// src/components/ui/hover-card.tsx
|
|
6360
7656
|
import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
|
|
6361
|
-
import { jsx as
|
|
7657
|
+
import { jsx as jsx85 } from "react/jsx-runtime";
|
|
6362
7658
|
function HoverCard({
|
|
6363
7659
|
...props
|
|
6364
7660
|
}) {
|
|
6365
|
-
return /* @__PURE__ */
|
|
7661
|
+
return /* @__PURE__ */ jsx85(HoverCardPrimitive.Root, { "data-slot": "hover-card", ...props });
|
|
6366
7662
|
}
|
|
6367
7663
|
function HoverCardTrigger({
|
|
6368
7664
|
...props
|
|
6369
7665
|
}) {
|
|
6370
|
-
return /* @__PURE__ */
|
|
7666
|
+
return /* @__PURE__ */ jsx85(HoverCardPrimitive.Trigger, { "data-slot": "hover-card-trigger", ...props });
|
|
6371
7667
|
}
|
|
6372
7668
|
function HoverCardContent({
|
|
6373
7669
|
className,
|
|
@@ -6375,7 +7671,7 @@ function HoverCardContent({
|
|
|
6375
7671
|
sideOffset = 4,
|
|
6376
7672
|
...props
|
|
6377
7673
|
}) {
|
|
6378
|
-
return /* @__PURE__ */
|
|
7674
|
+
return /* @__PURE__ */ jsx85(HoverCardPrimitive.Portal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsx85(
|
|
6379
7675
|
HoverCardPrimitive.Content,
|
|
6380
7676
|
{
|
|
6381
7677
|
"data-slot": "hover-card-content",
|
|
@@ -6392,27 +7688,9 @@ function HoverCardContent({
|
|
|
6392
7688
|
|
|
6393
7689
|
// src/components/ui/input-group.tsx
|
|
6394
7690
|
import { cva as cva9 } from "class-variance-authority";
|
|
6395
|
-
|
|
6396
|
-
// src/components/ui/textarea.tsx
|
|
6397
|
-
import { jsx as jsx71 } from "react/jsx-runtime";
|
|
6398
|
-
function Textarea({ className, ...props }) {
|
|
6399
|
-
return /* @__PURE__ */ jsx71(
|
|
6400
|
-
"textarea",
|
|
6401
|
-
{
|
|
6402
|
-
"data-slot": "textarea",
|
|
6403
|
-
className: cn(
|
|
6404
|
-
"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
6405
|
-
className
|
|
6406
|
-
),
|
|
6407
|
-
...props
|
|
6408
|
-
}
|
|
6409
|
-
);
|
|
6410
|
-
}
|
|
6411
|
-
|
|
6412
|
-
// src/components/ui/input-group.tsx
|
|
6413
|
-
import { jsx as jsx72 } from "react/jsx-runtime";
|
|
7691
|
+
import { jsx as jsx86 } from "react/jsx-runtime";
|
|
6414
7692
|
function InputGroup({ className, ...props }) {
|
|
6415
|
-
return /* @__PURE__ */
|
|
7693
|
+
return /* @__PURE__ */ jsx86(
|
|
6416
7694
|
"fieldset",
|
|
6417
7695
|
{
|
|
6418
7696
|
"data-slot": "input-group",
|
|
@@ -6456,7 +7734,7 @@ function InputGroupAddon({
|
|
|
6456
7734
|
align = "inline-start",
|
|
6457
7735
|
...props
|
|
6458
7736
|
}) {
|
|
6459
|
-
return /* @__PURE__ */
|
|
7737
|
+
return /* @__PURE__ */ jsx86(
|
|
6460
7738
|
"fieldset",
|
|
6461
7739
|
{
|
|
6462
7740
|
"data-slot": "input-group-addon",
|
|
@@ -6508,7 +7786,7 @@ function InputGroupButton({
|
|
|
6508
7786
|
size = "xs",
|
|
6509
7787
|
...props
|
|
6510
7788
|
}) {
|
|
6511
|
-
return /* @__PURE__ */
|
|
7789
|
+
return /* @__PURE__ */ jsx86(
|
|
6512
7790
|
Button,
|
|
6513
7791
|
{
|
|
6514
7792
|
type,
|
|
@@ -6520,7 +7798,7 @@ function InputGroupButton({
|
|
|
6520
7798
|
);
|
|
6521
7799
|
}
|
|
6522
7800
|
function InputGroupText({ className, ...props }) {
|
|
6523
|
-
return /* @__PURE__ */
|
|
7801
|
+
return /* @__PURE__ */ jsx86(
|
|
6524
7802
|
"span",
|
|
6525
7803
|
{
|
|
6526
7804
|
className: cn(
|
|
@@ -6535,7 +7813,7 @@ function InputGroupInput({
|
|
|
6535
7813
|
className,
|
|
6536
7814
|
...props
|
|
6537
7815
|
}) {
|
|
6538
|
-
return /* @__PURE__ */
|
|
7816
|
+
return /* @__PURE__ */ jsx86(
|
|
6539
7817
|
Input,
|
|
6540
7818
|
{
|
|
6541
7819
|
"data-slot": "input-group-control",
|
|
@@ -6551,7 +7829,7 @@ function InputGroupTextarea({
|
|
|
6551
7829
|
className,
|
|
6552
7830
|
...props
|
|
6553
7831
|
}) {
|
|
6554
|
-
return /* @__PURE__ */
|
|
7832
|
+
return /* @__PURE__ */ jsx86(
|
|
6555
7833
|
Textarea,
|
|
6556
7834
|
{
|
|
6557
7835
|
"data-slot": "input-group-control",
|
|
@@ -6568,13 +7846,13 @@ function InputGroupTextarea({
|
|
|
6568
7846
|
import { IconMinus } from "@tabler/icons-react";
|
|
6569
7847
|
import { OTPInput, OTPInputContext } from "input-otp";
|
|
6570
7848
|
import * as React11 from "react";
|
|
6571
|
-
import { jsx as
|
|
7849
|
+
import { jsx as jsx87, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
6572
7850
|
function InputOTP({
|
|
6573
7851
|
className,
|
|
6574
7852
|
containerClassName,
|
|
6575
7853
|
...props
|
|
6576
7854
|
}) {
|
|
6577
|
-
return /* @__PURE__ */
|
|
7855
|
+
return /* @__PURE__ */ jsx87(
|
|
6578
7856
|
OTPInput,
|
|
6579
7857
|
{
|
|
6580
7858
|
"data-slot": "input-otp",
|
|
@@ -6588,7 +7866,7 @@ function InputOTP({
|
|
|
6588
7866
|
);
|
|
6589
7867
|
}
|
|
6590
7868
|
function InputOTPGroup({ className, ...props }) {
|
|
6591
|
-
return /* @__PURE__ */
|
|
7869
|
+
return /* @__PURE__ */ jsx87(
|
|
6592
7870
|
"div",
|
|
6593
7871
|
{
|
|
6594
7872
|
"data-slot": "input-otp-group",
|
|
@@ -6604,7 +7882,7 @@ function InputOTPSlot({
|
|
|
6604
7882
|
}) {
|
|
6605
7883
|
const inputOTPContext = React11.useContext(OTPInputContext);
|
|
6606
7884
|
const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
|
|
6607
|
-
return /* @__PURE__ */
|
|
7885
|
+
return /* @__PURE__ */ jsxs53(
|
|
6608
7886
|
"div",
|
|
6609
7887
|
{
|
|
6610
7888
|
"data-slot": "input-otp-slot",
|
|
@@ -6616,21 +7894,21 @@ function InputOTPSlot({
|
|
|
6616
7894
|
...props,
|
|
6617
7895
|
children: [
|
|
6618
7896
|
char,
|
|
6619
|
-
hasFakeCaret && /* @__PURE__ */
|
|
7897
|
+
hasFakeCaret && /* @__PURE__ */ jsx87("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx87("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" }) })
|
|
6620
7898
|
]
|
|
6621
7899
|
}
|
|
6622
7900
|
);
|
|
6623
7901
|
}
|
|
6624
7902
|
function InputOTPSeparator({ ...props }) {
|
|
6625
|
-
return /* @__PURE__ */
|
|
7903
|
+
return /* @__PURE__ */ jsx87("div", { "data-slot": "input-otp-separator", "aria-hidden": "true", ...props, children: /* @__PURE__ */ jsx87(IconMinus, {}) });
|
|
6626
7904
|
}
|
|
6627
7905
|
|
|
6628
7906
|
// src/components/ui/item.tsx
|
|
6629
7907
|
import { Slot as Slot7 } from "@radix-ui/react-slot";
|
|
6630
7908
|
import { cva as cva10 } from "class-variance-authority";
|
|
6631
|
-
import { jsx as
|
|
7909
|
+
import { jsx as jsx88 } from "react/jsx-runtime";
|
|
6632
7910
|
function ItemGroup({ className, ...props }) {
|
|
6633
|
-
return /* @__PURE__ */
|
|
7911
|
+
return /* @__PURE__ */ jsx88(
|
|
6634
7912
|
"ul",
|
|
6635
7913
|
{
|
|
6636
7914
|
"data-slot": "item-group",
|
|
@@ -6646,7 +7924,7 @@ function ItemSeparator({
|
|
|
6646
7924
|
className,
|
|
6647
7925
|
...props
|
|
6648
7926
|
}) {
|
|
6649
|
-
return /* @__PURE__ */
|
|
7927
|
+
return /* @__PURE__ */ jsx88(
|
|
6650
7928
|
Separator2,
|
|
6651
7929
|
{
|
|
6652
7930
|
"data-slot": "item-separator",
|
|
@@ -6684,7 +7962,7 @@ function Item6({
|
|
|
6684
7962
|
...props
|
|
6685
7963
|
}) {
|
|
6686
7964
|
const Comp = asChild ? Slot7 : "div";
|
|
6687
|
-
return /* @__PURE__ */
|
|
7965
|
+
return /* @__PURE__ */ jsx88(
|
|
6688
7966
|
Comp,
|
|
6689
7967
|
{
|
|
6690
7968
|
"data-slot": "item",
|
|
@@ -6715,7 +7993,7 @@ function ItemMedia({
|
|
|
6715
7993
|
variant = "default",
|
|
6716
7994
|
...props
|
|
6717
7995
|
}) {
|
|
6718
|
-
return /* @__PURE__ */
|
|
7996
|
+
return /* @__PURE__ */ jsx88(
|
|
6719
7997
|
"div",
|
|
6720
7998
|
{
|
|
6721
7999
|
"data-slot": "item-media",
|
|
@@ -6726,7 +8004,7 @@ function ItemMedia({
|
|
|
6726
8004
|
);
|
|
6727
8005
|
}
|
|
6728
8006
|
function ItemContent({ className, ...props }) {
|
|
6729
|
-
return /* @__PURE__ */
|
|
8007
|
+
return /* @__PURE__ */ jsx88(
|
|
6730
8008
|
"div",
|
|
6731
8009
|
{
|
|
6732
8010
|
"data-slot": "item-content",
|
|
@@ -6739,7 +8017,7 @@ function ItemContent({ className, ...props }) {
|
|
|
6739
8017
|
);
|
|
6740
8018
|
}
|
|
6741
8019
|
function ItemTitle({ className, ...props }) {
|
|
6742
|
-
return /* @__PURE__ */
|
|
8020
|
+
return /* @__PURE__ */ jsx88(
|
|
6743
8021
|
"div",
|
|
6744
8022
|
{
|
|
6745
8023
|
"data-slot": "item-title",
|
|
@@ -6752,7 +8030,7 @@ function ItemTitle({ className, ...props }) {
|
|
|
6752
8030
|
);
|
|
6753
8031
|
}
|
|
6754
8032
|
function ItemDescription({ className, ...props }) {
|
|
6755
|
-
return /* @__PURE__ */
|
|
8033
|
+
return /* @__PURE__ */ jsx88(
|
|
6756
8034
|
"p",
|
|
6757
8035
|
{
|
|
6758
8036
|
"data-slot": "item-description",
|
|
@@ -6766,7 +8044,7 @@ function ItemDescription({ className, ...props }) {
|
|
|
6766
8044
|
);
|
|
6767
8045
|
}
|
|
6768
8046
|
function ItemActions({ className, ...props }) {
|
|
6769
|
-
return /* @__PURE__ */
|
|
8047
|
+
return /* @__PURE__ */ jsx88(
|
|
6770
8048
|
"div",
|
|
6771
8049
|
{
|
|
6772
8050
|
"data-slot": "item-actions",
|
|
@@ -6776,7 +8054,7 @@ function ItemActions({ className, ...props }) {
|
|
|
6776
8054
|
);
|
|
6777
8055
|
}
|
|
6778
8056
|
function ItemHeader({ className, ...props }) {
|
|
6779
|
-
return /* @__PURE__ */
|
|
8057
|
+
return /* @__PURE__ */ jsx88(
|
|
6780
8058
|
"div",
|
|
6781
8059
|
{
|
|
6782
8060
|
"data-slot": "item-header",
|
|
@@ -6789,7 +8067,7 @@ function ItemHeader({ className, ...props }) {
|
|
|
6789
8067
|
);
|
|
6790
8068
|
}
|
|
6791
8069
|
function ItemFooter({ className, ...props }) {
|
|
6792
|
-
return /* @__PURE__ */
|
|
8070
|
+
return /* @__PURE__ */ jsx88(
|
|
6793
8071
|
"div",
|
|
6794
8072
|
{
|
|
6795
8073
|
"data-slot": "item-footer",
|
|
@@ -6803,9 +8081,9 @@ function ItemFooter({ className, ...props }) {
|
|
|
6803
8081
|
}
|
|
6804
8082
|
|
|
6805
8083
|
// src/components/ui/kbd.tsx
|
|
6806
|
-
import { jsx as
|
|
8084
|
+
import { jsx as jsx89 } from "react/jsx-runtime";
|
|
6807
8085
|
function Kbd({ className, ...props }) {
|
|
6808
|
-
return /* @__PURE__ */
|
|
8086
|
+
return /* @__PURE__ */ jsx89(
|
|
6809
8087
|
"kbd",
|
|
6810
8088
|
{
|
|
6811
8089
|
"data-slot": "kbd",
|
|
@@ -6820,7 +8098,7 @@ function Kbd({ className, ...props }) {
|
|
|
6820
8098
|
);
|
|
6821
8099
|
}
|
|
6822
8100
|
function KbdGroup({ className, ...props }) {
|
|
6823
|
-
return /* @__PURE__ */
|
|
8101
|
+
return /* @__PURE__ */ jsx89(
|
|
6824
8102
|
"kbd",
|
|
6825
8103
|
{
|
|
6826
8104
|
"data-slot": "kbd-group",
|
|
@@ -6833,12 +8111,12 @@ function KbdGroup({ className, ...props }) {
|
|
|
6833
8111
|
// src/components/ui/menubar.tsx
|
|
6834
8112
|
import * as MenubarPrimitive from "@radix-ui/react-menubar";
|
|
6835
8113
|
import { IconCheck as IconCheck5, IconChevronRight as IconChevronRight9, IconCircle as IconCircle3 } from "@tabler/icons-react";
|
|
6836
|
-
import { jsx as
|
|
8114
|
+
import { jsx as jsx90, jsxs as jsxs54 } from "react/jsx-runtime";
|
|
6837
8115
|
function Menubar({
|
|
6838
8116
|
className,
|
|
6839
8117
|
...props
|
|
6840
8118
|
}) {
|
|
6841
|
-
return /* @__PURE__ */
|
|
8119
|
+
return /* @__PURE__ */ jsx90(
|
|
6842
8120
|
MenubarPrimitive.Root,
|
|
6843
8121
|
{
|
|
6844
8122
|
"data-slot": "menubar",
|
|
@@ -6853,28 +8131,28 @@ function Menubar({
|
|
|
6853
8131
|
function MenubarMenu({
|
|
6854
8132
|
...props
|
|
6855
8133
|
}) {
|
|
6856
|
-
return /* @__PURE__ */
|
|
8134
|
+
return /* @__PURE__ */ jsx90(MenubarPrimitive.Menu, { "data-slot": "menubar-menu", ...props });
|
|
6857
8135
|
}
|
|
6858
8136
|
function MenubarGroup({
|
|
6859
8137
|
...props
|
|
6860
8138
|
}) {
|
|
6861
|
-
return /* @__PURE__ */
|
|
8139
|
+
return /* @__PURE__ */ jsx90(MenubarPrimitive.Group, { "data-slot": "menubar-group", ...props });
|
|
6862
8140
|
}
|
|
6863
8141
|
function MenubarPortal({
|
|
6864
8142
|
...props
|
|
6865
8143
|
}) {
|
|
6866
|
-
return /* @__PURE__ */
|
|
8144
|
+
return /* @__PURE__ */ jsx90(MenubarPrimitive.Portal, { "data-slot": "menubar-portal", ...props });
|
|
6867
8145
|
}
|
|
6868
8146
|
function MenubarRadioGroup({
|
|
6869
8147
|
...props
|
|
6870
8148
|
}) {
|
|
6871
|
-
return /* @__PURE__ */
|
|
8149
|
+
return /* @__PURE__ */ jsx90(MenubarPrimitive.RadioGroup, { "data-slot": "menubar-radio-group", ...props });
|
|
6872
8150
|
}
|
|
6873
8151
|
function MenubarTrigger({
|
|
6874
8152
|
className,
|
|
6875
8153
|
...props
|
|
6876
8154
|
}) {
|
|
6877
|
-
return /* @__PURE__ */
|
|
8155
|
+
return /* @__PURE__ */ jsx90(
|
|
6878
8156
|
MenubarPrimitive.Trigger,
|
|
6879
8157
|
{
|
|
6880
8158
|
"data-slot": "menubar-trigger",
|
|
@@ -6893,7 +8171,7 @@ function MenubarContent({
|
|
|
6893
8171
|
sideOffset = 8,
|
|
6894
8172
|
...props
|
|
6895
8173
|
}) {
|
|
6896
|
-
return /* @__PURE__ */
|
|
8174
|
+
return /* @__PURE__ */ jsx90(MenubarPortal, { children: /* @__PURE__ */ jsx90(
|
|
6897
8175
|
MenubarPrimitive.Content,
|
|
6898
8176
|
{
|
|
6899
8177
|
"data-slot": "menubar-content",
|
|
@@ -6914,7 +8192,7 @@ function MenubarItem({
|
|
|
6914
8192
|
variant = "default",
|
|
6915
8193
|
...props
|
|
6916
8194
|
}) {
|
|
6917
|
-
return /* @__PURE__ */
|
|
8195
|
+
return /* @__PURE__ */ jsx90(
|
|
6918
8196
|
MenubarPrimitive.Item,
|
|
6919
8197
|
{
|
|
6920
8198
|
"data-slot": "menubar-item",
|
|
@@ -6934,7 +8212,7 @@ function MenubarCheckboxItem({
|
|
|
6934
8212
|
checked,
|
|
6935
8213
|
...props
|
|
6936
8214
|
}) {
|
|
6937
|
-
return /* @__PURE__ */
|
|
8215
|
+
return /* @__PURE__ */ jsxs54(
|
|
6938
8216
|
MenubarPrimitive.CheckboxItem,
|
|
6939
8217
|
{
|
|
6940
8218
|
"data-slot": "menubar-checkbox-item",
|
|
@@ -6945,7 +8223,7 @@ function MenubarCheckboxItem({
|
|
|
6945
8223
|
checked,
|
|
6946
8224
|
...props,
|
|
6947
8225
|
children: [
|
|
6948
|
-
/* @__PURE__ */
|
|
8226
|
+
/* @__PURE__ */ jsx90("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx90(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx90(IconCheck5, { className: "size-4" }) }) }),
|
|
6949
8227
|
children
|
|
6950
8228
|
]
|
|
6951
8229
|
}
|
|
@@ -6956,7 +8234,7 @@ function MenubarRadioItem({
|
|
|
6956
8234
|
children,
|
|
6957
8235
|
...props
|
|
6958
8236
|
}) {
|
|
6959
|
-
return /* @__PURE__ */
|
|
8237
|
+
return /* @__PURE__ */ jsxs54(
|
|
6960
8238
|
MenubarPrimitive.RadioItem,
|
|
6961
8239
|
{
|
|
6962
8240
|
"data-slot": "menubar-radio-item",
|
|
@@ -6966,7 +8244,7 @@ function MenubarRadioItem({
|
|
|
6966
8244
|
),
|
|
6967
8245
|
...props,
|
|
6968
8246
|
children: [
|
|
6969
|
-
/* @__PURE__ */
|
|
8247
|
+
/* @__PURE__ */ jsx90("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx90(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx90(IconCircle3, { className: "size-2 fill-current" }) }) }),
|
|
6970
8248
|
children
|
|
6971
8249
|
]
|
|
6972
8250
|
}
|
|
@@ -6977,7 +8255,7 @@ function MenubarLabel({
|
|
|
6977
8255
|
inset,
|
|
6978
8256
|
...props
|
|
6979
8257
|
}) {
|
|
6980
|
-
return /* @__PURE__ */
|
|
8258
|
+
return /* @__PURE__ */ jsx90(
|
|
6981
8259
|
MenubarPrimitive.Label,
|
|
6982
8260
|
{
|
|
6983
8261
|
"data-slot": "menubar-label",
|
|
@@ -6994,7 +8272,7 @@ function MenubarSeparator({
|
|
|
6994
8272
|
className,
|
|
6995
8273
|
...props
|
|
6996
8274
|
}) {
|
|
6997
|
-
return /* @__PURE__ */
|
|
8275
|
+
return /* @__PURE__ */ jsx90(
|
|
6998
8276
|
MenubarPrimitive.Separator,
|
|
6999
8277
|
{
|
|
7000
8278
|
"data-slot": "menubar-separator",
|
|
@@ -7007,7 +8285,7 @@ function MenubarShortcut({
|
|
|
7007
8285
|
className,
|
|
7008
8286
|
...props
|
|
7009
8287
|
}) {
|
|
7010
|
-
return /* @__PURE__ */
|
|
8288
|
+
return /* @__PURE__ */ jsx90(
|
|
7011
8289
|
"span",
|
|
7012
8290
|
{
|
|
7013
8291
|
"data-slot": "menubar-shortcut",
|
|
@@ -7022,7 +8300,7 @@ function MenubarShortcut({
|
|
|
7022
8300
|
function MenubarSub({
|
|
7023
8301
|
...props
|
|
7024
8302
|
}) {
|
|
7025
|
-
return /* @__PURE__ */
|
|
8303
|
+
return /* @__PURE__ */ jsx90(MenubarPrimitive.Sub, { "data-slot": "menubar-sub", ...props });
|
|
7026
8304
|
}
|
|
7027
8305
|
function MenubarSubTrigger({
|
|
7028
8306
|
className,
|
|
@@ -7030,7 +8308,7 @@ function MenubarSubTrigger({
|
|
|
7030
8308
|
children,
|
|
7031
8309
|
...props
|
|
7032
8310
|
}) {
|
|
7033
|
-
return /* @__PURE__ */
|
|
8311
|
+
return /* @__PURE__ */ jsxs54(
|
|
7034
8312
|
MenubarPrimitive.SubTrigger,
|
|
7035
8313
|
{
|
|
7036
8314
|
"data-slot": "menubar-sub-trigger",
|
|
@@ -7042,7 +8320,7 @@ function MenubarSubTrigger({
|
|
|
7042
8320
|
...props,
|
|
7043
8321
|
children: [
|
|
7044
8322
|
children,
|
|
7045
|
-
/* @__PURE__ */
|
|
8323
|
+
/* @__PURE__ */ jsx90(IconChevronRight9, { className: "ml-auto h-4 w-4" })
|
|
7046
8324
|
]
|
|
7047
8325
|
}
|
|
7048
8326
|
);
|
|
@@ -7051,7 +8329,7 @@ function MenubarSubContent({
|
|
|
7051
8329
|
className,
|
|
7052
8330
|
...props
|
|
7053
8331
|
}) {
|
|
7054
|
-
return /* @__PURE__ */
|
|
8332
|
+
return /* @__PURE__ */ jsx90(
|
|
7055
8333
|
MenubarPrimitive.SubContent,
|
|
7056
8334
|
{
|
|
7057
8335
|
"data-slot": "menubar-sub-content",
|
|
@@ -7064,18 +8342,155 @@ function MenubarSubContent({
|
|
|
7064
8342
|
);
|
|
7065
8343
|
}
|
|
7066
8344
|
|
|
8345
|
+
// src/components/ui/money-input.tsx
|
|
8346
|
+
import { forwardRef, useCallback as useCallback3, useState as useState21 } from "react";
|
|
8347
|
+
import { jsx as jsx91, jsxs as jsxs55 } from "react/jsx-runtime";
|
|
8348
|
+
var defaultCurrencies = [
|
|
8349
|
+
{ label: "ETB", value: "etb", symbol: "Br" },
|
|
8350
|
+
{ label: "USD", value: "usd", symbol: "$" },
|
|
8351
|
+
{ label: "EUR", value: "eur", symbol: "\u20AC" },
|
|
8352
|
+
{ label: "GBP", value: "gbp", symbol: "\xA3" }
|
|
8353
|
+
];
|
|
8354
|
+
var formatNumber = (num, fractionDigits) => {
|
|
8355
|
+
return num.toLocaleString("en-US", {
|
|
8356
|
+
minimumFractionDigits: fractionDigits,
|
|
8357
|
+
maximumFractionDigits: fractionDigits
|
|
8358
|
+
});
|
|
8359
|
+
};
|
|
8360
|
+
var parseFormattedNumber = (str) => {
|
|
8361
|
+
const cleaned = str.replace(/,/g, "");
|
|
8362
|
+
const parsed = Number.parseFloat(cleaned);
|
|
8363
|
+
return Number.isNaN(parsed) ? 0 : parsed;
|
|
8364
|
+
};
|
|
8365
|
+
var sizeClasses2 = {
|
|
8366
|
+
sm: {
|
|
8367
|
+
input: "!h-8 !text-xs pl-7 !py-1",
|
|
8368
|
+
symbol: "left-2 text-xs",
|
|
8369
|
+
select: "!h-8 !px-2 !py-1 !text-xs !min-h-0 w-[70px]"
|
|
8370
|
+
},
|
|
8371
|
+
md: {
|
|
8372
|
+
input: "!h-9 !text-sm pl-9 !py-2",
|
|
8373
|
+
symbol: "left-3 text-sm",
|
|
8374
|
+
select: "!h-9 !px-3 !py-2 !text-sm !min-h-0 w-[80px]"
|
|
8375
|
+
},
|
|
8376
|
+
lg: {
|
|
8377
|
+
input: "!h-10 !text-base pl-11 !py-2",
|
|
8378
|
+
symbol: "left-3.5 text-base",
|
|
8379
|
+
select: "!h-10 !px-4 !py-2 !text-base !min-h-0 w-[90px]"
|
|
8380
|
+
}
|
|
8381
|
+
};
|
|
8382
|
+
var MoneyInput = forwardRef(
|
|
8383
|
+
({
|
|
8384
|
+
value = 0,
|
|
8385
|
+
currency = "etb",
|
|
8386
|
+
onValueChange,
|
|
8387
|
+
currencies = defaultCurrencies,
|
|
8388
|
+
fractionDigits = 2,
|
|
8389
|
+
disabled = false,
|
|
8390
|
+
placeholder = fractionDigits > 0 ? `0.${"0".repeat(fractionDigits)}` : "0",
|
|
8391
|
+
className = "",
|
|
8392
|
+
size = "md",
|
|
8393
|
+
id
|
|
8394
|
+
}, ref) => {
|
|
8395
|
+
const [internalValue, setInternalValue] = useState21(value);
|
|
8396
|
+
const [internalCurrency, setInternalCurrency] = useState21(currency);
|
|
8397
|
+
const [displayValue, setDisplayValue] = useState21(
|
|
8398
|
+
formatNumber(value, fractionDigits)
|
|
8399
|
+
);
|
|
8400
|
+
const currentCurrency = currencies.find(
|
|
8401
|
+
(c) => c.value === internalCurrency
|
|
8402
|
+
);
|
|
8403
|
+
const currencySymbol = currentCurrency?.symbol || currentCurrency?.label || "";
|
|
8404
|
+
const sizes = sizeClasses2[size];
|
|
8405
|
+
const handleInputChange = useCallback3(
|
|
8406
|
+
(e) => {
|
|
8407
|
+
const rawValue = e.target.value;
|
|
8408
|
+
setDisplayValue(rawValue);
|
|
8409
|
+
const numValue = parseFormattedNumber(rawValue);
|
|
8410
|
+
setInternalValue(numValue);
|
|
8411
|
+
},
|
|
8412
|
+
[]
|
|
8413
|
+
);
|
|
8414
|
+
const handleBlur = useCallback3(() => {
|
|
8415
|
+
const formatted = formatNumber(internalValue, fractionDigits);
|
|
8416
|
+
setDisplayValue(formatted);
|
|
8417
|
+
onValueChange?.(internalValue, internalCurrency);
|
|
8418
|
+
}, [internalValue, internalCurrency, onValueChange, fractionDigits]);
|
|
8419
|
+
const handleFocus = useCallback3(() => {
|
|
8420
|
+
setDisplayValue(
|
|
8421
|
+
internalValue % 1 === 0 ? internalValue.toString() : internalValue.toFixed(fractionDigits)
|
|
8422
|
+
);
|
|
8423
|
+
}, [internalValue, fractionDigits]);
|
|
8424
|
+
const handleCurrencyChange = useCallback3(
|
|
8425
|
+
(newCurrency) => {
|
|
8426
|
+
setInternalCurrency(newCurrency);
|
|
8427
|
+
onValueChange?.(internalValue, newCurrency);
|
|
8428
|
+
},
|
|
8429
|
+
[internalValue, onValueChange]
|
|
8430
|
+
);
|
|
8431
|
+
return /* @__PURE__ */ jsxs55("div", { ref, className: cn("relative flex items-center", className), children: [
|
|
8432
|
+
/* @__PURE__ */ jsx91(
|
|
8433
|
+
"div",
|
|
8434
|
+
{
|
|
8435
|
+
className: cn(
|
|
8436
|
+
"pointer-events-none absolute z-10 flex items-center text-muted-foreground",
|
|
8437
|
+
sizes.symbol
|
|
8438
|
+
),
|
|
8439
|
+
children: currencySymbol
|
|
8440
|
+
}
|
|
8441
|
+
),
|
|
8442
|
+
/* @__PURE__ */ jsx91(
|
|
8443
|
+
Input,
|
|
8444
|
+
{
|
|
8445
|
+
id,
|
|
8446
|
+
type: "text",
|
|
8447
|
+
value: displayValue,
|
|
8448
|
+
onChange: handleInputChange,
|
|
8449
|
+
onBlur: handleBlur,
|
|
8450
|
+
onFocus: handleFocus,
|
|
8451
|
+
disabled,
|
|
8452
|
+
placeholder,
|
|
8453
|
+
className: cn("flex-1 rounded-r-none border-r-0", sizes.input)
|
|
8454
|
+
}
|
|
8455
|
+
),
|
|
8456
|
+
/* @__PURE__ */ jsxs55(
|
|
8457
|
+
Select,
|
|
8458
|
+
{
|
|
8459
|
+
value: internalCurrency,
|
|
8460
|
+
onValueChange: handleCurrencyChange,
|
|
8461
|
+
disabled,
|
|
8462
|
+
children: [
|
|
8463
|
+
/* @__PURE__ */ jsx91(
|
|
8464
|
+
SelectTrigger,
|
|
8465
|
+
{
|
|
8466
|
+
className: cn(
|
|
8467
|
+
"rounded-l-none border-l-0 !w-auto cursor-pointer",
|
|
8468
|
+
sizes.select
|
|
8469
|
+
),
|
|
8470
|
+
children: /* @__PURE__ */ jsx91(SelectValue, {})
|
|
8471
|
+
}
|
|
8472
|
+
),
|
|
8473
|
+
/* @__PURE__ */ jsx91(SelectContent, { children: currencies.map((curr) => /* @__PURE__ */ jsx91(SelectItem, { value: curr.value, children: curr.label }, curr.value)) })
|
|
8474
|
+
]
|
|
8475
|
+
}
|
|
8476
|
+
)
|
|
8477
|
+
] });
|
|
8478
|
+
}
|
|
8479
|
+
);
|
|
8480
|
+
MoneyInput.displayName = "MoneyInput";
|
|
8481
|
+
|
|
7067
8482
|
// src/components/ui/navigation-menu.tsx
|
|
7068
8483
|
import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
|
|
7069
8484
|
import { IconChevronDown as IconChevronDown9 } from "@tabler/icons-react";
|
|
7070
8485
|
import { cva as cva11 } from "class-variance-authority";
|
|
7071
|
-
import { jsx as
|
|
8486
|
+
import { jsx as jsx92, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
7072
8487
|
function NavigationMenu({
|
|
7073
8488
|
className,
|
|
7074
8489
|
children,
|
|
7075
8490
|
viewport = true,
|
|
7076
8491
|
...props
|
|
7077
8492
|
}) {
|
|
7078
|
-
return /* @__PURE__ */
|
|
8493
|
+
return /* @__PURE__ */ jsxs56(
|
|
7079
8494
|
NavigationMenuPrimitive.Root,
|
|
7080
8495
|
{
|
|
7081
8496
|
"data-slot": "navigation-menu",
|
|
@@ -7087,7 +8502,7 @@ function NavigationMenu({
|
|
|
7087
8502
|
...props,
|
|
7088
8503
|
children: [
|
|
7089
8504
|
children,
|
|
7090
|
-
viewport && /* @__PURE__ */
|
|
8505
|
+
viewport && /* @__PURE__ */ jsx92(NavigationMenuViewport, {})
|
|
7091
8506
|
]
|
|
7092
8507
|
}
|
|
7093
8508
|
);
|
|
@@ -7096,7 +8511,7 @@ function NavigationMenuList({
|
|
|
7096
8511
|
className,
|
|
7097
8512
|
...props
|
|
7098
8513
|
}) {
|
|
7099
|
-
return /* @__PURE__ */
|
|
8514
|
+
return /* @__PURE__ */ jsx92(
|
|
7100
8515
|
NavigationMenuPrimitive.List,
|
|
7101
8516
|
{
|
|
7102
8517
|
"data-slot": "navigation-menu-list",
|
|
@@ -7112,7 +8527,7 @@ function NavigationMenuItem({
|
|
|
7112
8527
|
className,
|
|
7113
8528
|
...props
|
|
7114
8529
|
}) {
|
|
7115
|
-
return /* @__PURE__ */
|
|
8530
|
+
return /* @__PURE__ */ jsx92(
|
|
7116
8531
|
NavigationMenuPrimitive.Item,
|
|
7117
8532
|
{
|
|
7118
8533
|
"data-slot": "navigation-menu-item",
|
|
@@ -7129,7 +8544,7 @@ function NavigationMenuTrigger({
|
|
|
7129
8544
|
children,
|
|
7130
8545
|
...props
|
|
7131
8546
|
}) {
|
|
7132
|
-
return /* @__PURE__ */
|
|
8547
|
+
return /* @__PURE__ */ jsxs56(
|
|
7133
8548
|
NavigationMenuPrimitive.Trigger,
|
|
7134
8549
|
{
|
|
7135
8550
|
"data-slot": "navigation-menu-trigger",
|
|
@@ -7138,7 +8553,7 @@ function NavigationMenuTrigger({
|
|
|
7138
8553
|
children: [
|
|
7139
8554
|
children,
|
|
7140
8555
|
" ",
|
|
7141
|
-
/* @__PURE__ */
|
|
8556
|
+
/* @__PURE__ */ jsx92(
|
|
7142
8557
|
IconChevronDown9,
|
|
7143
8558
|
{
|
|
7144
8559
|
className: "relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180",
|
|
@@ -7153,7 +8568,7 @@ function NavigationMenuContent({
|
|
|
7153
8568
|
className,
|
|
7154
8569
|
...props
|
|
7155
8570
|
}) {
|
|
7156
|
-
return /* @__PURE__ */
|
|
8571
|
+
return /* @__PURE__ */ jsx92(
|
|
7157
8572
|
NavigationMenuPrimitive.Content,
|
|
7158
8573
|
{
|
|
7159
8574
|
"data-slot": "navigation-menu-content",
|
|
@@ -7170,13 +8585,13 @@ function NavigationMenuViewport({
|
|
|
7170
8585
|
className,
|
|
7171
8586
|
...props
|
|
7172
8587
|
}) {
|
|
7173
|
-
return /* @__PURE__ */
|
|
8588
|
+
return /* @__PURE__ */ jsx92(
|
|
7174
8589
|
"div",
|
|
7175
8590
|
{
|
|
7176
8591
|
className: cn(
|
|
7177
8592
|
"absolute top-full left-0 isolate z-50 flex justify-center"
|
|
7178
8593
|
),
|
|
7179
|
-
children: /* @__PURE__ */
|
|
8594
|
+
children: /* @__PURE__ */ jsx92(
|
|
7180
8595
|
NavigationMenuPrimitive.Viewport,
|
|
7181
8596
|
{
|
|
7182
8597
|
"data-slot": "navigation-menu-viewport",
|
|
@@ -7194,7 +8609,7 @@ function NavigationMenuLink({
|
|
|
7194
8609
|
className,
|
|
7195
8610
|
...props
|
|
7196
8611
|
}) {
|
|
7197
|
-
return /* @__PURE__ */
|
|
8612
|
+
return /* @__PURE__ */ jsx92(
|
|
7198
8613
|
NavigationMenuPrimitive.Link,
|
|
7199
8614
|
{
|
|
7200
8615
|
"data-slot": "navigation-menu-link",
|
|
@@ -7210,7 +8625,7 @@ function NavigationMenuIndicator({
|
|
|
7210
8625
|
className,
|
|
7211
8626
|
...props
|
|
7212
8627
|
}) {
|
|
7213
|
-
return /* @__PURE__ */
|
|
8628
|
+
return /* @__PURE__ */ jsx92(
|
|
7214
8629
|
NavigationMenuPrimitive.Indicator,
|
|
7215
8630
|
{
|
|
7216
8631
|
"data-slot": "navigation-menu-indicator",
|
|
@@ -7219,7 +8634,7 @@ function NavigationMenuIndicator({
|
|
|
7219
8634
|
className
|
|
7220
8635
|
),
|
|
7221
8636
|
...props,
|
|
7222
|
-
children: /* @__PURE__ */
|
|
8637
|
+
children: /* @__PURE__ */ jsx92("div", { className: "bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" })
|
|
7223
8638
|
}
|
|
7224
8639
|
);
|
|
7225
8640
|
}
|
|
@@ -7230,9 +8645,9 @@ import {
|
|
|
7230
8645
|
IconChevronRight as IconChevronRight10,
|
|
7231
8646
|
IconDots as IconDots2
|
|
7232
8647
|
} from "@tabler/icons-react";
|
|
7233
|
-
import { jsx as
|
|
8648
|
+
import { jsx as jsx93, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
7234
8649
|
function Pagination({ className, ...props }) {
|
|
7235
|
-
return /* @__PURE__ */
|
|
8650
|
+
return /* @__PURE__ */ jsx93(
|
|
7236
8651
|
"nav",
|
|
7237
8652
|
{
|
|
7238
8653
|
"aria-label": "pagination",
|
|
@@ -7246,7 +8661,7 @@ function PaginationContent({
|
|
|
7246
8661
|
className,
|
|
7247
8662
|
...props
|
|
7248
8663
|
}) {
|
|
7249
|
-
return /* @__PURE__ */
|
|
8664
|
+
return /* @__PURE__ */ jsx93(
|
|
7250
8665
|
"ul",
|
|
7251
8666
|
{
|
|
7252
8667
|
"data-slot": "pagination-content",
|
|
@@ -7256,7 +8671,7 @@ function PaginationContent({
|
|
|
7256
8671
|
);
|
|
7257
8672
|
}
|
|
7258
8673
|
function PaginationItem({ ...props }) {
|
|
7259
|
-
return /* @__PURE__ */
|
|
8674
|
+
return /* @__PURE__ */ jsx93("li", { "data-slot": "pagination-item", ...props });
|
|
7260
8675
|
}
|
|
7261
8676
|
function PaginationLink({
|
|
7262
8677
|
className,
|
|
@@ -7264,7 +8679,7 @@ function PaginationLink({
|
|
|
7264
8679
|
size = "icon",
|
|
7265
8680
|
...props
|
|
7266
8681
|
}) {
|
|
7267
|
-
return /* @__PURE__ */
|
|
8682
|
+
return /* @__PURE__ */ jsx93(
|
|
7268
8683
|
"a",
|
|
7269
8684
|
{
|
|
7270
8685
|
"aria-current": isActive ? "page" : void 0,
|
|
@@ -7285,7 +8700,7 @@ function PaginationPrevious({
|
|
|
7285
8700
|
className,
|
|
7286
8701
|
...props
|
|
7287
8702
|
}) {
|
|
7288
|
-
return /* @__PURE__ */
|
|
8703
|
+
return /* @__PURE__ */ jsxs57(
|
|
7289
8704
|
PaginationLink,
|
|
7290
8705
|
{
|
|
7291
8706
|
"aria-label": "Go to previous page",
|
|
@@ -7293,8 +8708,8 @@ function PaginationPrevious({
|
|
|
7293
8708
|
className: cn("gap-1 px-2.5 sm:pl-2.5", className),
|
|
7294
8709
|
...props,
|
|
7295
8710
|
children: [
|
|
7296
|
-
/* @__PURE__ */
|
|
7297
|
-
/* @__PURE__ */
|
|
8711
|
+
/* @__PURE__ */ jsx93(IconChevronLeft4, {}),
|
|
8712
|
+
/* @__PURE__ */ jsx93("span", { className: "hidden sm:block", children: "Previous" })
|
|
7298
8713
|
]
|
|
7299
8714
|
}
|
|
7300
8715
|
);
|
|
@@ -7303,7 +8718,7 @@ function PaginationNext({
|
|
|
7303
8718
|
className,
|
|
7304
8719
|
...props
|
|
7305
8720
|
}) {
|
|
7306
|
-
return /* @__PURE__ */
|
|
8721
|
+
return /* @__PURE__ */ jsxs57(
|
|
7307
8722
|
PaginationLink,
|
|
7308
8723
|
{
|
|
7309
8724
|
"aria-label": "Go to next page",
|
|
@@ -7311,8 +8726,8 @@ function PaginationNext({
|
|
|
7311
8726
|
className: cn("gap-1 px-2.5 sm:pr-2.5", className),
|
|
7312
8727
|
...props,
|
|
7313
8728
|
children: [
|
|
7314
|
-
/* @__PURE__ */
|
|
7315
|
-
/* @__PURE__ */
|
|
8729
|
+
/* @__PURE__ */ jsx93("span", { className: "hidden sm:block", children: "Next" }),
|
|
8730
|
+
/* @__PURE__ */ jsx93(IconChevronRight10, {})
|
|
7316
8731
|
]
|
|
7317
8732
|
}
|
|
7318
8733
|
);
|
|
@@ -7321,7 +8736,7 @@ function PaginationEllipsis({
|
|
|
7321
8736
|
className,
|
|
7322
8737
|
...props
|
|
7323
8738
|
}) {
|
|
7324
|
-
return /* @__PURE__ */
|
|
8739
|
+
return /* @__PURE__ */ jsxs57(
|
|
7325
8740
|
"span",
|
|
7326
8741
|
{
|
|
7327
8742
|
"aria-hidden": true,
|
|
@@ -7329,8 +8744,8 @@ function PaginationEllipsis({
|
|
|
7329
8744
|
className: cn("flex size-9 items-center justify-center", className),
|
|
7330
8745
|
...props,
|
|
7331
8746
|
children: [
|
|
7332
|
-
/* @__PURE__ */
|
|
7333
|
-
/* @__PURE__ */
|
|
8747
|
+
/* @__PURE__ */ jsx93(IconDots2, { className: "size-4" }),
|
|
8748
|
+
/* @__PURE__ */ jsx93("span", { className: "sr-only", children: "More pages" })
|
|
7334
8749
|
]
|
|
7335
8750
|
}
|
|
7336
8751
|
);
|
|
@@ -7338,16 +8753,16 @@ function PaginationEllipsis({
|
|
|
7338
8753
|
|
|
7339
8754
|
// src/components/ui/popover.tsx
|
|
7340
8755
|
import * as PopoverPrimitive from "@radix-ui/react-popover";
|
|
7341
|
-
import { jsx as
|
|
8756
|
+
import { jsx as jsx94 } from "react/jsx-runtime";
|
|
7342
8757
|
function Popover({
|
|
7343
8758
|
...props
|
|
7344
8759
|
}) {
|
|
7345
|
-
return /* @__PURE__ */
|
|
8760
|
+
return /* @__PURE__ */ jsx94(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
|
|
7346
8761
|
}
|
|
7347
8762
|
function PopoverTrigger({
|
|
7348
8763
|
...props
|
|
7349
8764
|
}) {
|
|
7350
|
-
return /* @__PURE__ */
|
|
8765
|
+
return /* @__PURE__ */ jsx94(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
|
|
7351
8766
|
}
|
|
7352
8767
|
function PopoverContent({
|
|
7353
8768
|
className,
|
|
@@ -7355,7 +8770,7 @@ function PopoverContent({
|
|
|
7355
8770
|
sideOffset = 4,
|
|
7356
8771
|
...props
|
|
7357
8772
|
}) {
|
|
7358
|
-
return /* @__PURE__ */
|
|
8773
|
+
return /* @__PURE__ */ jsx94(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx94(
|
|
7359
8774
|
PopoverPrimitive.Content,
|
|
7360
8775
|
{
|
|
7361
8776
|
"data-slot": "popover-content",
|
|
@@ -7372,18 +8787,18 @@ function PopoverContent({
|
|
|
7372
8787
|
function PopoverAnchor({
|
|
7373
8788
|
...props
|
|
7374
8789
|
}) {
|
|
7375
|
-
return /* @__PURE__ */
|
|
8790
|
+
return /* @__PURE__ */ jsx94(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
|
|
7376
8791
|
}
|
|
7377
8792
|
|
|
7378
8793
|
// src/components/ui/progress.tsx
|
|
7379
8794
|
import * as ProgressPrimitive from "@radix-ui/react-progress";
|
|
7380
|
-
import { jsx as
|
|
8795
|
+
import { jsx as jsx95 } from "react/jsx-runtime";
|
|
7381
8796
|
function Progress({
|
|
7382
8797
|
className,
|
|
7383
8798
|
value,
|
|
7384
8799
|
...props
|
|
7385
8800
|
}) {
|
|
7386
|
-
return /* @__PURE__ */
|
|
8801
|
+
return /* @__PURE__ */ jsx95(
|
|
7387
8802
|
ProgressPrimitive.Root,
|
|
7388
8803
|
{
|
|
7389
8804
|
"data-slot": "progress",
|
|
@@ -7392,7 +8807,7 @@ function Progress({
|
|
|
7392
8807
|
className
|
|
7393
8808
|
),
|
|
7394
8809
|
...props,
|
|
7395
|
-
children: /* @__PURE__ */
|
|
8810
|
+
children: /* @__PURE__ */ jsx95(
|
|
7396
8811
|
ProgressPrimitive.Indicator,
|
|
7397
8812
|
{
|
|
7398
8813
|
"data-slot": "progress-indicator",
|
|
@@ -7407,12 +8822,12 @@ function Progress({
|
|
|
7407
8822
|
// src/components/ui/radio-group.tsx
|
|
7408
8823
|
import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
|
|
7409
8824
|
import { IconCircle as IconCircle4 } from "@tabler/icons-react";
|
|
7410
|
-
import { jsx as
|
|
8825
|
+
import { jsx as jsx96 } from "react/jsx-runtime";
|
|
7411
8826
|
function RadioGroup4({
|
|
7412
8827
|
className,
|
|
7413
8828
|
...props
|
|
7414
8829
|
}) {
|
|
7415
|
-
return /* @__PURE__ */
|
|
8830
|
+
return /* @__PURE__ */ jsx96(
|
|
7416
8831
|
RadioGroupPrimitive.Root,
|
|
7417
8832
|
{
|
|
7418
8833
|
"data-slot": "radio-group",
|
|
@@ -7425,7 +8840,7 @@ function RadioGroupItem({
|
|
|
7425
8840
|
className,
|
|
7426
8841
|
...props
|
|
7427
8842
|
}) {
|
|
7428
|
-
return /* @__PURE__ */
|
|
8843
|
+
return /* @__PURE__ */ jsx96(
|
|
7429
8844
|
RadioGroupPrimitive.Item,
|
|
7430
8845
|
{
|
|
7431
8846
|
"data-slot": "radio-group-item",
|
|
@@ -7434,12 +8849,12 @@ function RadioGroupItem({
|
|
|
7434
8849
|
className
|
|
7435
8850
|
),
|
|
7436
8851
|
...props,
|
|
7437
|
-
children: /* @__PURE__ */
|
|
8852
|
+
children: /* @__PURE__ */ jsx96(
|
|
7438
8853
|
RadioGroupPrimitive.Indicator,
|
|
7439
8854
|
{
|
|
7440
8855
|
"data-slot": "radio-group-indicator",
|
|
7441
8856
|
className: "relative flex items-center justify-center",
|
|
7442
|
-
children: /* @__PURE__ */
|
|
8857
|
+
children: /* @__PURE__ */ jsx96(IconCircle4, { className: "fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2" })
|
|
7443
8858
|
}
|
|
7444
8859
|
)
|
|
7445
8860
|
}
|
|
@@ -7449,12 +8864,12 @@ function RadioGroupItem({
|
|
|
7449
8864
|
// src/components/ui/resizable.tsx
|
|
7450
8865
|
import { IconGripVertical } from "@tabler/icons-react";
|
|
7451
8866
|
import * as ResizablePrimitive from "react-resizable-panels";
|
|
7452
|
-
import { jsx as
|
|
8867
|
+
import { jsx as jsx97 } from "react/jsx-runtime";
|
|
7453
8868
|
function ResizablePanelGroup({
|
|
7454
8869
|
className,
|
|
7455
8870
|
...props
|
|
7456
8871
|
}) {
|
|
7457
|
-
return /* @__PURE__ */
|
|
8872
|
+
return /* @__PURE__ */ jsx97(
|
|
7458
8873
|
ResizablePrimitive.PanelGroup,
|
|
7459
8874
|
{
|
|
7460
8875
|
"data-slot": "resizable-panel-group",
|
|
@@ -7469,14 +8884,14 @@ function ResizablePanelGroup({
|
|
|
7469
8884
|
function ResizablePanel({
|
|
7470
8885
|
...props
|
|
7471
8886
|
}) {
|
|
7472
|
-
return /* @__PURE__ */
|
|
8887
|
+
return /* @__PURE__ */ jsx97(ResizablePrimitive.Panel, { "data-slot": "resizable-panel", ...props });
|
|
7473
8888
|
}
|
|
7474
8889
|
function ResizableHandle({
|
|
7475
8890
|
withHandle,
|
|
7476
8891
|
className,
|
|
7477
8892
|
...props
|
|
7478
8893
|
}) {
|
|
7479
|
-
return /* @__PURE__ */
|
|
8894
|
+
return /* @__PURE__ */ jsx97(
|
|
7480
8895
|
ResizablePrimitive.PanelResizeHandle,
|
|
7481
8896
|
{
|
|
7482
8897
|
"data-slot": "resizable-handle",
|
|
@@ -7485,27 +8900,27 @@ function ResizableHandle({
|
|
|
7485
8900
|
className
|
|
7486
8901
|
),
|
|
7487
8902
|
...props,
|
|
7488
|
-
children: withHandle && /* @__PURE__ */
|
|
8903
|
+
children: withHandle && /* @__PURE__ */ jsx97("div", { className: "bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border", children: /* @__PURE__ */ jsx97(IconGripVertical, { className: "size-2.5" }) })
|
|
7489
8904
|
}
|
|
7490
8905
|
);
|
|
7491
8906
|
}
|
|
7492
8907
|
|
|
7493
8908
|
// src/components/ui/scroll-area.tsx
|
|
7494
8909
|
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
|
|
7495
|
-
import { jsx as
|
|
8910
|
+
import { jsx as jsx98, jsxs as jsxs58 } from "react/jsx-runtime";
|
|
7496
8911
|
function ScrollArea({
|
|
7497
8912
|
className,
|
|
7498
8913
|
children,
|
|
7499
8914
|
...props
|
|
7500
8915
|
}) {
|
|
7501
|
-
return /* @__PURE__ */
|
|
8916
|
+
return /* @__PURE__ */ jsxs58(
|
|
7502
8917
|
ScrollAreaPrimitive.Root,
|
|
7503
8918
|
{
|
|
7504
8919
|
"data-slot": "scroll-area",
|
|
7505
8920
|
className: cn("relative", className),
|
|
7506
8921
|
...props,
|
|
7507
8922
|
children: [
|
|
7508
|
-
/* @__PURE__ */
|
|
8923
|
+
/* @__PURE__ */ jsx98(
|
|
7509
8924
|
ScrollAreaPrimitive.Viewport,
|
|
7510
8925
|
{
|
|
7511
8926
|
"data-slot": "scroll-area-viewport",
|
|
@@ -7513,8 +8928,8 @@ function ScrollArea({
|
|
|
7513
8928
|
children
|
|
7514
8929
|
}
|
|
7515
8930
|
),
|
|
7516
|
-
/* @__PURE__ */
|
|
7517
|
-
/* @__PURE__ */
|
|
8931
|
+
/* @__PURE__ */ jsx98(ScrollBar, {}),
|
|
8932
|
+
/* @__PURE__ */ jsx98(ScrollAreaPrimitive.Corner, {})
|
|
7518
8933
|
]
|
|
7519
8934
|
}
|
|
7520
8935
|
);
|
|
@@ -7524,7 +8939,7 @@ function ScrollBar({
|
|
|
7524
8939
|
orientation = "vertical",
|
|
7525
8940
|
...props
|
|
7526
8941
|
}) {
|
|
7527
|
-
return /* @__PURE__ */
|
|
8942
|
+
return /* @__PURE__ */ jsx98(
|
|
7528
8943
|
ScrollAreaPrimitive.ScrollAreaScrollbar,
|
|
7529
8944
|
{
|
|
7530
8945
|
"data-slot": "scroll-area-scrollbar",
|
|
@@ -7536,7 +8951,7 @@ function ScrollBar({
|
|
|
7536
8951
|
className
|
|
7537
8952
|
),
|
|
7538
8953
|
...props,
|
|
7539
|
-
children: /* @__PURE__ */
|
|
8954
|
+
children: /* @__PURE__ */ jsx98(
|
|
7540
8955
|
ScrollAreaPrimitive.ScrollAreaThumb,
|
|
7541
8956
|
{
|
|
7542
8957
|
"data-slot": "scroll-area-thumb",
|
|
@@ -7549,7 +8964,7 @@ function ScrollBar({
|
|
|
7549
8964
|
|
|
7550
8965
|
// src/components/ui/slider.tsx
|
|
7551
8966
|
import * as SliderPrimitive from "@radix-ui/react-slider";
|
|
7552
|
-
import { jsx as
|
|
8967
|
+
import { jsx as jsx99, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
7553
8968
|
function Slider({
|
|
7554
8969
|
className,
|
|
7555
8970
|
defaultValue,
|
|
@@ -7566,7 +8981,7 @@ function Slider({
|
|
|
7566
8981
|
} else {
|
|
7567
8982
|
thumbValues = [min, max];
|
|
7568
8983
|
}
|
|
7569
|
-
return /* @__PURE__ */
|
|
8984
|
+
return /* @__PURE__ */ jsxs59(
|
|
7570
8985
|
SliderPrimitive.Root,
|
|
7571
8986
|
{
|
|
7572
8987
|
"data-slot": "slider",
|
|
@@ -7580,14 +8995,14 @@ function Slider({
|
|
|
7580
8995
|
),
|
|
7581
8996
|
...props,
|
|
7582
8997
|
children: [
|
|
7583
|
-
/* @__PURE__ */
|
|
8998
|
+
/* @__PURE__ */ jsx99(
|
|
7584
8999
|
SliderPrimitive.Track,
|
|
7585
9000
|
{
|
|
7586
9001
|
"data-slot": "slider-track",
|
|
7587
9002
|
className: cn(
|
|
7588
9003
|
"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5"
|
|
7589
9004
|
),
|
|
7590
|
-
children: /* @__PURE__ */
|
|
9005
|
+
children: /* @__PURE__ */ jsx99(
|
|
7591
9006
|
SliderPrimitive.Range,
|
|
7592
9007
|
{
|
|
7593
9008
|
"data-slot": "slider-range",
|
|
@@ -7598,7 +9013,7 @@ function Slider({
|
|
|
7598
9013
|
)
|
|
7599
9014
|
}
|
|
7600
9015
|
),
|
|
7601
|
-
thumbValues.map((thumbValue) => /* @__PURE__ */
|
|
9016
|
+
thumbValues.map((thumbValue) => /* @__PURE__ */ jsx99(
|
|
7602
9017
|
SliderPrimitive.Thumb,
|
|
7603
9018
|
{
|
|
7604
9019
|
"data-slot": "slider-thumb",
|
|
@@ -7613,12 +9028,12 @@ function Slider({
|
|
|
7613
9028
|
|
|
7614
9029
|
// src/components/ui/switch.tsx
|
|
7615
9030
|
import * as SwitchPrimitive from "@radix-ui/react-switch";
|
|
7616
|
-
import { jsx as
|
|
9031
|
+
import { jsx as jsx100 } from "react/jsx-runtime";
|
|
7617
9032
|
function Switch({
|
|
7618
9033
|
className,
|
|
7619
9034
|
...props
|
|
7620
9035
|
}) {
|
|
7621
|
-
return /* @__PURE__ */
|
|
9036
|
+
return /* @__PURE__ */ jsx100(
|
|
7622
9037
|
SwitchPrimitive.Root,
|
|
7623
9038
|
{
|
|
7624
9039
|
"data-slot": "switch",
|
|
@@ -7627,7 +9042,7 @@ function Switch({
|
|
|
7627
9042
|
className
|
|
7628
9043
|
),
|
|
7629
9044
|
...props,
|
|
7630
|
-
children: /* @__PURE__ */
|
|
9045
|
+
children: /* @__PURE__ */ jsx100(
|
|
7631
9046
|
SwitchPrimitive.Thumb,
|
|
7632
9047
|
{
|
|
7633
9048
|
"data-slot": "switch-thumb",
|
|
@@ -7642,12 +9057,12 @@ function Switch({
|
|
|
7642
9057
|
|
|
7643
9058
|
// src/components/ui/tabs.tsx
|
|
7644
9059
|
import * as TabsPrimitive from "@radix-ui/react-tabs";
|
|
7645
|
-
import { jsx as
|
|
9060
|
+
import { jsx as jsx101 } from "react/jsx-runtime";
|
|
7646
9061
|
function Tabs({
|
|
7647
9062
|
className,
|
|
7648
9063
|
...props
|
|
7649
9064
|
}) {
|
|
7650
|
-
return /* @__PURE__ */
|
|
9065
|
+
return /* @__PURE__ */ jsx101(
|
|
7651
9066
|
TabsPrimitive.Root,
|
|
7652
9067
|
{
|
|
7653
9068
|
"data-slot": "tabs",
|
|
@@ -7660,7 +9075,7 @@ function TabsList({
|
|
|
7660
9075
|
className,
|
|
7661
9076
|
...props
|
|
7662
9077
|
}) {
|
|
7663
|
-
return /* @__PURE__ */
|
|
9078
|
+
return /* @__PURE__ */ jsx101(
|
|
7664
9079
|
TabsPrimitive.List,
|
|
7665
9080
|
{
|
|
7666
9081
|
"data-slot": "tabs-list",
|
|
@@ -7676,7 +9091,7 @@ function TabsTrigger({
|
|
|
7676
9091
|
className,
|
|
7677
9092
|
...props
|
|
7678
9093
|
}) {
|
|
7679
|
-
return /* @__PURE__ */
|
|
9094
|
+
return /* @__PURE__ */ jsx101(
|
|
7680
9095
|
TabsPrimitive.Trigger,
|
|
7681
9096
|
{
|
|
7682
9097
|
"data-slot": "tabs-trigger",
|
|
@@ -7692,7 +9107,7 @@ function TabsContent({
|
|
|
7692
9107
|
className,
|
|
7693
9108
|
...props
|
|
7694
9109
|
}) {
|
|
7695
|
-
return /* @__PURE__ */
|
|
9110
|
+
return /* @__PURE__ */ jsx101(
|
|
7696
9111
|
TabsPrimitive.Content,
|
|
7697
9112
|
{
|
|
7698
9113
|
"data-slot": "tabs-content",
|
|
@@ -7891,7 +9306,12 @@ export {
|
|
|
7891
9306
|
ItemTitle,
|
|
7892
9307
|
Kbd,
|
|
7893
9308
|
KbdGroup,
|
|
7894
|
-
|
|
9309
|
+
Label3 as Label,
|
|
9310
|
+
LocaleInputRichText,
|
|
9311
|
+
LocaleInputText,
|
|
9312
|
+
LocaleInputTextarea,
|
|
9313
|
+
LocaleRichText,
|
|
9314
|
+
LocaleText,
|
|
7895
9315
|
Menubar,
|
|
7896
9316
|
MenubarCheckboxItem,
|
|
7897
9317
|
MenubarContent,
|
|
@@ -7909,6 +9329,7 @@ export {
|
|
|
7909
9329
|
MenubarSubTrigger,
|
|
7910
9330
|
MenubarTrigger,
|
|
7911
9331
|
MesobLogo,
|
|
9332
|
+
MoneyInput,
|
|
7912
9333
|
NavigationMenu,
|
|
7913
9334
|
NavigationMenuContent,
|
|
7914
9335
|
NavigationMenuIndicator,
|
|
@@ -7941,6 +9362,13 @@ export {
|
|
|
7941
9362
|
ResizableHandle,
|
|
7942
9363
|
ResizablePanel,
|
|
7943
9364
|
ResizablePanelGroup,
|
|
9365
|
+
RichTextDisplay,
|
|
9366
|
+
RichTextEditor,
|
|
9367
|
+
RichTextEditorContent,
|
|
9368
|
+
RichTextEditorControl,
|
|
9369
|
+
RichTextEditorControlsGroup,
|
|
9370
|
+
RichTextEditorToolbar,
|
|
9371
|
+
RichTextInput,
|
|
7944
9372
|
ScrollArea,
|
|
7945
9373
|
ScrollBar,
|
|
7946
9374
|
Section,
|
|
@@ -8015,6 +9443,7 @@ export {
|
|
|
8015
9443
|
TooltipContent,
|
|
8016
9444
|
TooltipProvider,
|
|
8017
9445
|
TooltipTrigger,
|
|
9446
|
+
VisuallyHidden,
|
|
8018
9447
|
badgeVariants,
|
|
8019
9448
|
buttonGroupVariants,
|
|
8020
9449
|
buttonVariants,
|
|
@@ -8025,6 +9454,7 @@ export {
|
|
|
8025
9454
|
useEntityPagination,
|
|
8026
9455
|
useEntityParams,
|
|
8027
9456
|
useFormField,
|
|
9457
|
+
useRichTextEditorContext,
|
|
8028
9458
|
useSidebar
|
|
8029
9459
|
};
|
|
8030
9460
|
//# sourceMappingURL=components.js.map
|