@webdevarif/dashui 0.3.1 → 0.3.3

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/index.d.mts CHANGED
@@ -536,6 +536,15 @@ interface PostSidebarSectionProps {
536
536
  }
537
537
  declare function PostSidebarSection({ title, children, defaultOpen, className, }: PostSidebarSectionProps): react_jsx_runtime.JSX.Element;
538
538
 
539
+ interface HslColorInputProps {
540
+ value: string;
541
+ onChange: (value: string) => void;
542
+ className?: string;
543
+ inputClassName?: string;
544
+ disabled?: boolean;
545
+ }
546
+ declare function HslColorInput({ value, onChange, className, inputClassName, disabled }: HslColorInputProps): react_jsx_runtime.JSX.Element;
547
+
539
548
  declare function useDisclosure(initial?: boolean): {
540
549
  isOpen: boolean;
541
550
  open: () => void;
@@ -620,4 +629,4 @@ interface SkeletonProps {
620
629
  }
621
630
  declare function Skeleton({ width, height, rounded, style }: SkeletonProps): react_jsx_runtime.JSX.Element;
622
631
 
623
- export { Alert, type AlertProps, AppShell, type AppShellProps, AuthButton, AuthCard, AuthDivider, AuthField, AuthFootnote, AuthHeader, AuthLogo, AuthShell, Badge, type BadgeProps, type Breadcrumb, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, type Column, ConfirmDialog, type ConfirmDialogProps, DashboardLayout, type DashboardLayoutProps, DataTable, type DataTableProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, FormField, type FormFieldProps, FormLayout, type FormLayoutProps, FormSection, type FormSectionProps, ImagePickerField, type ImagePickerFieldProps, Input, type InputProps, Label, LoadingSpinner, type LoadingSpinnerProps, MediaCard, type MediaCardFile, type MediaCardProps, MediaGrid, type MediaGridProps, MediaPickerDialog, type MediaPickerDialogFolder, type MediaPickerDialogProps, type NavItem, NotificationBell, type NotificationBellProps, Page, type PageProps, PageSection, type PageSectionProps, Pagination, type PaginationProps, PlanBadge, type PlanBadgeProps, type PlanId, Popover, PopoverContent, PopoverTrigger, PostEditorShell, type PostEditorShellProps, PostFiltersBar, type PostFiltersBarProps, type PostListItem, PostListTable, type PostListTableProps, PostSidebarSection, type PostSidebarSectionProps, type PostStatus, PostStatusBadge, type PostStatusBadgeProps, SearchBar, type SearchBarProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sidebar, type SidebarItem, type SidebarProps, Skeleton, SlugInput, type SlugInputProps, type Stat, Stats, type StatsProps, StorageBar, type StorageBarProps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, ThemeToggle, type ThemeToggleProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopBar, type TopBarProps, type UploadItem, badgeVariants, buttonVariants, cn, useDisclosure, usePagination };
632
+ export { Alert, type AlertProps, AppShell, type AppShellProps, AuthButton, AuthCard, AuthDivider, AuthField, AuthFootnote, AuthHeader, AuthLogo, AuthShell, Badge, type BadgeProps, type Breadcrumb, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, type Column, ConfirmDialog, type ConfirmDialogProps, DashboardLayout, type DashboardLayoutProps, DataTable, type DataTableProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, FormField, type FormFieldProps, FormLayout, type FormLayoutProps, FormSection, type FormSectionProps, HslColorInput, ImagePickerField, type ImagePickerFieldProps, Input, type InputProps, Label, LoadingSpinner, type LoadingSpinnerProps, MediaCard, type MediaCardFile, type MediaCardProps, MediaGrid, type MediaGridProps, MediaPickerDialog, type MediaPickerDialogFolder, type MediaPickerDialogProps, type NavItem, NotificationBell, type NotificationBellProps, Page, type PageProps, PageSection, type PageSectionProps, Pagination, type PaginationProps, PlanBadge, type PlanBadgeProps, type PlanId, Popover, PopoverContent, PopoverTrigger, PostEditorShell, type PostEditorShellProps, PostFiltersBar, type PostFiltersBarProps, type PostListItem, PostListTable, type PostListTableProps, PostSidebarSection, type PostSidebarSectionProps, type PostStatus, PostStatusBadge, type PostStatusBadgeProps, SearchBar, type SearchBarProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sidebar, type SidebarItem, type SidebarProps, Skeleton, SlugInput, type SlugInputProps, type Stat, Stats, type StatsProps, StorageBar, type StorageBarProps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, ThemeToggle, type ThemeToggleProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopBar, type TopBarProps, type UploadItem, badgeVariants, buttonVariants, cn, useDisclosure, usePagination };
package/dist/index.d.ts CHANGED
@@ -536,6 +536,15 @@ interface PostSidebarSectionProps {
536
536
  }
537
537
  declare function PostSidebarSection({ title, children, defaultOpen, className, }: PostSidebarSectionProps): react_jsx_runtime.JSX.Element;
538
538
 
539
+ interface HslColorInputProps {
540
+ value: string;
541
+ onChange: (value: string) => void;
542
+ className?: string;
543
+ inputClassName?: string;
544
+ disabled?: boolean;
545
+ }
546
+ declare function HslColorInput({ value, onChange, className, inputClassName, disabled }: HslColorInputProps): react_jsx_runtime.JSX.Element;
547
+
539
548
  declare function useDisclosure(initial?: boolean): {
540
549
  isOpen: boolean;
541
550
  open: () => void;
@@ -620,4 +629,4 @@ interface SkeletonProps {
620
629
  }
621
630
  declare function Skeleton({ width, height, rounded, style }: SkeletonProps): react_jsx_runtime.JSX.Element;
622
631
 
623
- export { Alert, type AlertProps, AppShell, type AppShellProps, AuthButton, AuthCard, AuthDivider, AuthField, AuthFootnote, AuthHeader, AuthLogo, AuthShell, Badge, type BadgeProps, type Breadcrumb, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, type Column, ConfirmDialog, type ConfirmDialogProps, DashboardLayout, type DashboardLayoutProps, DataTable, type DataTableProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, FormField, type FormFieldProps, FormLayout, type FormLayoutProps, FormSection, type FormSectionProps, ImagePickerField, type ImagePickerFieldProps, Input, type InputProps, Label, LoadingSpinner, type LoadingSpinnerProps, MediaCard, type MediaCardFile, type MediaCardProps, MediaGrid, type MediaGridProps, MediaPickerDialog, type MediaPickerDialogFolder, type MediaPickerDialogProps, type NavItem, NotificationBell, type NotificationBellProps, Page, type PageProps, PageSection, type PageSectionProps, Pagination, type PaginationProps, PlanBadge, type PlanBadgeProps, type PlanId, Popover, PopoverContent, PopoverTrigger, PostEditorShell, type PostEditorShellProps, PostFiltersBar, type PostFiltersBarProps, type PostListItem, PostListTable, type PostListTableProps, PostSidebarSection, type PostSidebarSectionProps, type PostStatus, PostStatusBadge, type PostStatusBadgeProps, SearchBar, type SearchBarProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sidebar, type SidebarItem, type SidebarProps, Skeleton, SlugInput, type SlugInputProps, type Stat, Stats, type StatsProps, StorageBar, type StorageBarProps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, ThemeToggle, type ThemeToggleProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopBar, type TopBarProps, type UploadItem, badgeVariants, buttonVariants, cn, useDisclosure, usePagination };
632
+ export { Alert, type AlertProps, AppShell, type AppShellProps, AuthButton, AuthCard, AuthDivider, AuthField, AuthFootnote, AuthHeader, AuthLogo, AuthShell, Badge, type BadgeProps, type Breadcrumb, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, type Column, ConfirmDialog, type ConfirmDialogProps, DashboardLayout, type DashboardLayoutProps, DataTable, type DataTableProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, FormField, type FormFieldProps, FormLayout, type FormLayoutProps, FormSection, type FormSectionProps, HslColorInput, ImagePickerField, type ImagePickerFieldProps, Input, type InputProps, Label, LoadingSpinner, type LoadingSpinnerProps, MediaCard, type MediaCardFile, type MediaCardProps, MediaGrid, type MediaGridProps, MediaPickerDialog, type MediaPickerDialogFolder, type MediaPickerDialogProps, type NavItem, NotificationBell, type NotificationBellProps, Page, type PageProps, PageSection, type PageSectionProps, Pagination, type PaginationProps, PlanBadge, type PlanBadgeProps, type PlanId, Popover, PopoverContent, PopoverTrigger, PostEditorShell, type PostEditorShellProps, PostFiltersBar, type PostFiltersBarProps, type PostListItem, PostListTable, type PostListTableProps, PostSidebarSection, type PostSidebarSectionProps, type PostStatus, PostStatusBadge, type PostStatusBadgeProps, SearchBar, type SearchBarProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sidebar, type SidebarItem, type SidebarProps, Skeleton, SlugInput, type SlugInputProps, type Stat, Stats, type StatsProps, StorageBar, type StorageBarProps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, ThemeToggle, type ThemeToggleProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopBar, type TopBarProps, type UploadItem, badgeVariants, buttonVariants, cn, useDisclosure, usePagination };
package/dist/index.js CHANGED
@@ -81,6 +81,7 @@ __export(index_exports, {
81
81
  FormField: () => FormField,
82
82
  FormLayout: () => FormLayout,
83
83
  FormSection: () => FormSection,
84
+ HslColorInput: () => HslColorInput,
84
85
  ImagePickerField: () => ImagePickerField,
85
86
  Input: () => Input,
86
87
  Label: () => Label2,
@@ -3306,10 +3307,104 @@ function PostSidebarSection({
3306
3307
  ] });
3307
3308
  }
3308
3309
 
3309
- // src/hooks/index.ts
3310
+ // src/components/ui/hsl-color-input.tsx
3310
3311
  var import_react = require("react");
3312
+ var import_react_colorful = require("react-colorful");
3313
+ var Popover2 = __toESM(require("@radix-ui/react-popover"));
3314
+ var import_jsx_runtime49 = require("react/jsx-runtime");
3315
+ function parseHsl(value) {
3316
+ if (!value) return { h: 0, s: 0, l: 0 };
3317
+ const parts = value.trim().split(/\s+/);
3318
+ return {
3319
+ h: parseFloat(parts[0]) || 0,
3320
+ s: parseFloat(parts[1]) || 0,
3321
+ l: parseFloat(parts[2]) || 0
3322
+ };
3323
+ }
3324
+ function formatHsl(color) {
3325
+ return `${Math.round(color.h)} ${Math.round(color.s)}% ${Math.round(color.l)}%`;
3326
+ }
3327
+ function HslColorInput({ value, onChange, className, inputClassName, disabled }) {
3328
+ const [inputVal, setInputVal] = (0, import_react.useState)(value);
3329
+ (0, import_react.useEffect)(() => {
3330
+ setInputVal(value);
3331
+ }, [value]);
3332
+ const hslColor = parseHsl(value);
3333
+ const cssColor = value ? `hsl(${value})` : "transparent";
3334
+ const handlePickerChange = (0, import_react.useCallback)((color) => {
3335
+ const formatted = formatHsl(color);
3336
+ setInputVal(formatted);
3337
+ onChange(formatted);
3338
+ }, [onChange]);
3339
+ const handleInputChange = (e) => {
3340
+ const v = e.target.value;
3341
+ setInputVal(v);
3342
+ if (/^\d+(\.\d+)?\s+\d+(\.\d+)?%?\s+\d+(\.\d+)?%?$/.test(v.trim())) {
3343
+ onChange(v);
3344
+ }
3345
+ };
3346
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: cn("flex items-center gap-1.5", className), children: [
3347
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Popover2.Root, { children: [
3348
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Popover2.Trigger, { asChild: true, disabled, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3349
+ "button",
3350
+ {
3351
+ type: "button",
3352
+ className: cn(
3353
+ "w-5 h-5 rounded border border-white/10 shrink-0 transition-all",
3354
+ "hover:scale-110 hover:border-white/30 focus:outline-none focus:ring-1 focus:ring-white/20",
3355
+ disabled && "opacity-50 cursor-not-allowed"
3356
+ ),
3357
+ style: { background: cssColor },
3358
+ "aria-label": "Open color picker"
3359
+ }
3360
+ ) }),
3361
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Popover2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
3362
+ Popover2.Content,
3363
+ {
3364
+ sideOffset: 8,
3365
+ align: "start",
3366
+ className: cn(
3367
+ "z-[9999] rounded-xl shadow-2xl p-3",
3368
+ "bg-[#1a1c2e] border border-white/10",
3369
+ "flex flex-col gap-3",
3370
+ "animate-in fade-in-0 zoom-in-95"
3371
+ ),
3372
+ children: [
3373
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_react_colorful.HslColorPicker, { color: hslColor, onChange: handlePickerChange }),
3374
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center gap-2", children: [
3375
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "w-6 h-6 rounded border border-white/10 shrink-0", style: { background: cssColor } }),
3376
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "text-xs font-mono text-white/50 truncate", children: value || "none" })
3377
+ ] }),
3378
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Popover2.Arrow, { className: "fill-white/10" })
3379
+ ]
3380
+ }
3381
+ ) })
3382
+ ] }),
3383
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3384
+ "input",
3385
+ {
3386
+ type: "text",
3387
+ value: inputVal,
3388
+ onChange: handleInputChange,
3389
+ onBlur: () => setInputVal(value),
3390
+ disabled,
3391
+ placeholder: "H S% L%",
3392
+ className: cn(
3393
+ "w-28 bg-white/5 border border-white/10 rounded px-1.5 py-0.5",
3394
+ "text-xs text-white/70 font-mono outline-none",
3395
+ "focus:border-white/30 placeholder:text-white/20",
3396
+ "disabled:opacity-50 disabled:cursor-not-allowed",
3397
+ inputClassName
3398
+ )
3399
+ }
3400
+ )
3401
+ ] });
3402
+ }
3403
+
3404
+ // src/hooks/index.ts
3405
+ var import_react2 = require("react");
3311
3406
  function useDisclosure(initial = false) {
3312
- const [isOpen, setIsOpen] = (0, import_react.useState)(initial);
3407
+ const [isOpen, setIsOpen] = (0, import_react2.useState)(initial);
3313
3408
  return {
3314
3409
  isOpen,
3315
3410
  open: () => setIsOpen(true),
@@ -3319,15 +3414,15 @@ function useDisclosure(initial = false) {
3319
3414
  };
3320
3415
  }
3321
3416
  function usePagination(total, pageSize = 20) {
3322
- const [page, setPage] = (0, import_react.useState)(1);
3417
+ const [page, setPage] = (0, import_react2.useState)(1);
3323
3418
  const totalPages = Math.ceil(total / pageSize);
3324
3419
  return { page, setPage, pageSize, total, totalPages };
3325
3420
  }
3326
3421
 
3327
3422
  // src/components/auth/AuthShell.tsx
3328
- var import_jsx_runtime49 = require("react/jsx-runtime");
3423
+ var import_jsx_runtime50 = require("react/jsx-runtime");
3329
3424
  function AuthShell({ children, pattern = "dots", maxWidth = "520px" }) {
3330
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
3425
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
3331
3426
  "div",
3332
3427
  {
3333
3428
  style: {
@@ -3342,7 +3437,7 @@ function AuthShell({ children, pattern = "dots", maxWidth = "520px" }) {
3342
3437
  overflow: "hidden"
3343
3438
  },
3344
3439
  children: [
3345
- pattern === "dots" && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3440
+ pattern === "dots" && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
3346
3441
  "div",
3347
3442
  {
3348
3443
  "aria-hidden": true,
@@ -3356,7 +3451,7 @@ function AuthShell({ children, pattern = "dots", maxWidth = "520px" }) {
3356
3451
  }
3357
3452
  }
3358
3453
  ),
3359
- pattern === "grid" && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3454
+ pattern === "grid" && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
3360
3455
  "div",
3361
3456
  {
3362
3457
  "aria-hidden": true,
@@ -3370,16 +3465,16 @@ function AuthShell({ children, pattern = "dots", maxWidth = "520px" }) {
3370
3465
  }
3371
3466
  }
3372
3467
  ),
3373
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { style: { position: "relative", zIndex: 1, width: "100%", maxWidth }, children })
3468
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { style: { position: "relative", zIndex: 1, width: "100%", maxWidth }, children })
3374
3469
  ]
3375
3470
  }
3376
3471
  );
3377
3472
  }
3378
3473
 
3379
3474
  // src/components/auth/AuthCard.tsx
3380
- var import_jsx_runtime50 = require("react/jsx-runtime");
3475
+ var import_jsx_runtime51 = require("react/jsx-runtime");
3381
3476
  function AuthCard({ children, padding = "24px 28px" }) {
3382
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
3477
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3383
3478
  "div",
3384
3479
  {
3385
3480
  style: {
@@ -3396,10 +3491,10 @@ function AuthCard({ children, padding = "24px 28px" }) {
3396
3491
  }
3397
3492
 
3398
3493
  // src/components/auth/AuthLogo.tsx
3399
- var import_jsx_runtime51 = require("react/jsx-runtime");
3494
+ var import_jsx_runtime52 = require("react/jsx-runtime");
3400
3495
  function AuthLogo({ appName = "Builify CMS", letter = "B", imageUrl, size = 36 }) {
3401
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", gap: "10px", marginBottom: "28px" }, children: [
3402
- imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3496
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", gap: "10px", marginBottom: "28px" }, children: [
3497
+ imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
3403
3498
  "img",
3404
3499
  {
3405
3500
  src: imageUrl,
@@ -3408,7 +3503,7 @@ function AuthLogo({ appName = "Builify CMS", letter = "B", imageUrl, size = 36 }
3408
3503
  height: size,
3409
3504
  style: { borderRadius: "calc(var(--radius, 0.5rem) * 1.2)", flexShrink: 0, display: "block" }
3410
3505
  }
3411
- ) : /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3506
+ ) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
3412
3507
  "div",
3413
3508
  {
3414
3509
  style: {
@@ -3427,7 +3522,7 @@ function AuthLogo({ appName = "Builify CMS", letter = "B", imageUrl, size = 36 }
3427
3522
  children: letter
3428
3523
  }
3429
3524
  ),
3430
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3525
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
3431
3526
  "span",
3432
3527
  {
3433
3528
  style: {
@@ -3443,10 +3538,10 @@ function AuthLogo({ appName = "Builify CMS", letter = "B", imageUrl, size = 36 }
3443
3538
  }
3444
3539
 
3445
3540
  // src/components/auth/AuthHeader.tsx
3446
- var import_jsx_runtime52 = require("react/jsx-runtime");
3541
+ var import_jsx_runtime53 = require("react/jsx-runtime");
3447
3542
  function AuthHeader({ title, description }) {
3448
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { style: { marginBottom: "24px", textAlign: "center" }, children: [
3449
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
3543
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { style: { marginBottom: "24px", textAlign: "center" }, children: [
3544
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3450
3545
  "h1",
3451
3546
  {
3452
3547
  style: {
@@ -3459,7 +3554,7 @@ function AuthHeader({ title, description }) {
3459
3554
  children: title
3460
3555
  }
3461
3556
  ),
3462
- description && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
3557
+ description && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3463
3558
  "p",
3464
3559
  {
3465
3560
  style: {
@@ -3475,12 +3570,12 @@ function AuthHeader({ title, description }) {
3475
3570
  }
3476
3571
 
3477
3572
  // src/components/auth/AuthField.tsx
3478
- var import_jsx_runtime53 = require("react/jsx-runtime");
3573
+ var import_jsx_runtime54 = require("react/jsx-runtime");
3479
3574
  function AuthField({ label, error, hint, rightLabel, id, ...props }) {
3480
3575
  const fieldId = id ?? label.toLowerCase().replace(/\s+/g, "-");
3481
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: [
3482
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [
3483
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3576
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: [
3577
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [
3578
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
3484
3579
  "label",
3485
3580
  {
3486
3581
  htmlFor: fieldId,
@@ -3492,9 +3587,9 @@ function AuthField({ label, error, hint, rightLabel, id, ...props }) {
3492
3587
  children: label
3493
3588
  }
3494
3589
  ),
3495
- rightLabel && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { style: { fontSize: "0.8125rem" }, children: rightLabel })
3590
+ rightLabel && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { style: { fontSize: "0.8125rem" }, children: rightLabel })
3496
3591
  ] }),
3497
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3592
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
3498
3593
  "input",
3499
3594
  {
3500
3595
  id: fieldId,
@@ -3524,13 +3619,13 @@ function AuthField({ label, error, hint, rightLabel, id, ...props }) {
3524
3619
  ...props
3525
3620
  }
3526
3621
  ),
3527
- error && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { style: { fontSize: "0.8rem", color: "var(--destructive)", margin: 0 }, children: error }),
3528
- hint && !error && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { style: { fontSize: "0.8rem", color: "var(--muted-foreground)", margin: 0 }, children: hint })
3622
+ error && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { style: { fontSize: "0.8rem", color: "var(--destructive)", margin: 0 }, children: error }),
3623
+ hint && !error && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { style: { fontSize: "0.8rem", color: "var(--muted-foreground)", margin: 0 }, children: hint })
3529
3624
  ] });
3530
3625
  }
3531
3626
 
3532
3627
  // src/components/auth/AuthButton.tsx
3533
- var import_jsx_runtime54 = require("react/jsx-runtime");
3628
+ var import_jsx_runtime55 = require("react/jsx-runtime");
3534
3629
  function AuthButton({
3535
3630
  loading,
3536
3631
  variant = "primary",
@@ -3573,7 +3668,7 @@ function AuthButton({
3573
3668
  color: "var(--foreground)"
3574
3669
  }
3575
3670
  };
3576
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
3671
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
3577
3672
  "button",
3578
3673
  {
3579
3674
  disabled: loading || disabled,
@@ -3585,8 +3680,8 @@ function AuthButton({
3585
3680
  e.currentTarget.style.filter = "none";
3586
3681
  },
3587
3682
  ...props,
3588
- children: loading ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
3589
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
3683
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment, { children: [
3684
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
3590
3685
  "span",
3591
3686
  {
3592
3687
  style: {
@@ -3607,19 +3702,19 @@ function AuthButton({
3607
3702
  }
3608
3703
 
3609
3704
  // src/components/auth/AuthDivider.tsx
3610
- var import_jsx_runtime55 = require("react/jsx-runtime");
3705
+ var import_jsx_runtime56 = require("react/jsx-runtime");
3611
3706
  function AuthDivider({ label = "or" }) {
3612
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "12px", margin: "20px 0" }, children: [
3613
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { style: { flex: 1, height: 1, background: "var(--border)" } }),
3614
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { style: { fontSize: "0.75rem", color: "var(--muted-foreground)", userSelect: "none" }, children: label }),
3615
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { style: { flex: 1, height: 1, background: "var(--border)" } })
3707
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "12px", margin: "20px 0" }, children: [
3708
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { style: { flex: 1, height: 1, background: "var(--border)" } }),
3709
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { style: { fontSize: "0.75rem", color: "var(--muted-foreground)", userSelect: "none" }, children: label }),
3710
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { style: { flex: 1, height: 1, background: "var(--border)" } })
3616
3711
  ] });
3617
3712
  }
3618
3713
 
3619
3714
  // src/components/auth/AuthFootnote.tsx
3620
- var import_jsx_runtime56 = require("react/jsx-runtime");
3715
+ var import_jsx_runtime57 = require("react/jsx-runtime");
3621
3716
  function AuthFootnote({ text, linkText, linkHref }) {
3622
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("p", { style: {
3717
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("p", { style: {
3623
3718
  textAlign: "center",
3624
3719
  marginTop: "20px",
3625
3720
  fontSize: "0.8125rem",
@@ -3627,7 +3722,7 @@ function AuthFootnote({ text, linkText, linkHref }) {
3627
3722
  }, children: [
3628
3723
  text,
3629
3724
  " ",
3630
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
3725
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
3631
3726
  "a",
3632
3727
  {
3633
3728
  href: linkHref,
@@ -3699,6 +3794,7 @@ var import_next_themes2 = require("next-themes");
3699
3794
  FormField,
3700
3795
  FormLayout,
3701
3796
  FormSection,
3797
+ HslColorInput,
3702
3798
  ImagePickerField,
3703
3799
  Input,
3704
3800
  Label,