@webdevarif/dashui 0.3.1 → 0.3.2

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,126 @@ 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 import_jsx_runtime49 = require("react/jsx-runtime");
3314
+ function parseHsl(value) {
3315
+ if (!value) return { h: 0, s: 0, l: 0 };
3316
+ const parts = value.trim().split(/\s+/);
3317
+ const h = parseFloat(parts[0]) || 0;
3318
+ const s = parseFloat(parts[1]) || 0;
3319
+ const l = parseFloat(parts[2]) || 0;
3320
+ return { h, s, l };
3321
+ }
3322
+ function formatHsl(color) {
3323
+ return `${Math.round(color.h)} ${Math.round(color.s)}% ${Math.round(color.l)}%`;
3324
+ }
3325
+ function HslColorInput({
3326
+ value,
3327
+ onChange,
3328
+ className,
3329
+ inputClassName,
3330
+ disabled
3331
+ }) {
3332
+ const [open, setOpen] = (0, import_react.useState)(false);
3333
+ const [inputVal, setInputVal] = (0, import_react.useState)(value);
3334
+ const containerRef = (0, import_react.useRef)(null);
3335
+ (0, import_react.useEffect)(() => {
3336
+ setInputVal(value);
3337
+ }, [value]);
3338
+ (0, import_react.useEffect)(() => {
3339
+ if (!open) return;
3340
+ const handler = (e) => {
3341
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
3342
+ setOpen(false);
3343
+ }
3344
+ };
3345
+ document.addEventListener("mousedown", handler);
3346
+ return () => document.removeEventListener("mousedown", handler);
3347
+ }, [open]);
3348
+ const hslColor = parseHsl(value);
3349
+ const cssColor = value ? `hsl(${value})` : "transparent";
3350
+ const handlePickerChange = (0, import_react.useCallback)((color) => {
3351
+ const formatted = formatHsl(color);
3352
+ setInputVal(formatted);
3353
+ onChange(formatted);
3354
+ }, [onChange]);
3355
+ const handleInputChange = (e) => {
3356
+ const v = e.target.value;
3357
+ setInputVal(v);
3358
+ if (/^\d+\s+\d+%?\s+\d+%?$/.test(v.trim()) || /^\d+(\.\d+)?\s+\d+(\.\d+)?%\s+\d+(\.\d+)?%$/.test(v.trim())) {
3359
+ onChange(v);
3360
+ }
3361
+ };
3362
+ const handleInputBlur = () => {
3363
+ setInputVal(value);
3364
+ };
3365
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { ref: containerRef, className: cn("relative flex items-center gap-1.5", className), children: [
3366
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3367
+ "button",
3368
+ {
3369
+ type: "button",
3370
+ disabled,
3371
+ onClick: () => setOpen((o) => !o),
3372
+ className: cn(
3373
+ "w-5 h-5 rounded border border-white/10 shrink-0 transition-all",
3374
+ "hover:scale-110 hover:border-white/30 focus:outline-none focus:ring-1 focus:ring-white/20",
3375
+ disabled && "opacity-50 cursor-not-allowed"
3376
+ ),
3377
+ style: { background: cssColor },
3378
+ title: value,
3379
+ "aria-label": "Open color picker"
3380
+ }
3381
+ ),
3382
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3383
+ "input",
3384
+ {
3385
+ type: "text",
3386
+ value: inputVal,
3387
+ onChange: handleInputChange,
3388
+ onBlur: handleInputBlur,
3389
+ disabled,
3390
+ placeholder: "0 0% 0%",
3391
+ className: cn(
3392
+ "w-28 bg-white/5 border border-white/10 rounded px-1.5 py-0.5",
3393
+ "text-xs text-white/70 font-mono outline-none",
3394
+ "focus:border-white/30 placeholder:text-white/20",
3395
+ "disabled:opacity-50 disabled:cursor-not-allowed",
3396
+ inputClassName
3397
+ )
3398
+ }
3399
+ ),
3400
+ open && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: cn(
3401
+ "absolute z-50 top-full left-0 mt-2",
3402
+ "bg-[#1a1c2e] border border-white/10 rounded-xl shadow-2xl p-3",
3403
+ "flex flex-col gap-3"
3404
+ ), children: [
3405
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3406
+ import_react_colorful.HslColorPicker,
3407
+ {
3408
+ color: hslColor,
3409
+ onChange: handlePickerChange
3410
+ }
3411
+ ),
3412
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center gap-2", children: [
3413
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3414
+ "div",
3415
+ {
3416
+ className: "w-6 h-6 rounded border border-white/10 shrink-0",
3417
+ style: { background: cssColor }
3418
+ }
3419
+ ),
3420
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "text-xs font-mono text-white/50 truncate", children: value || "none" })
3421
+ ] })
3422
+ ] })
3423
+ ] });
3424
+ }
3425
+
3426
+ // src/hooks/index.ts
3427
+ var import_react2 = require("react");
3311
3428
  function useDisclosure(initial = false) {
3312
- const [isOpen, setIsOpen] = (0, import_react.useState)(initial);
3429
+ const [isOpen, setIsOpen] = (0, import_react2.useState)(initial);
3313
3430
  return {
3314
3431
  isOpen,
3315
3432
  open: () => setIsOpen(true),
@@ -3319,15 +3436,15 @@ function useDisclosure(initial = false) {
3319
3436
  };
3320
3437
  }
3321
3438
  function usePagination(total, pageSize = 20) {
3322
- const [page, setPage] = (0, import_react.useState)(1);
3439
+ const [page, setPage] = (0, import_react2.useState)(1);
3323
3440
  const totalPages = Math.ceil(total / pageSize);
3324
3441
  return { page, setPage, pageSize, total, totalPages };
3325
3442
  }
3326
3443
 
3327
3444
  // src/components/auth/AuthShell.tsx
3328
- var import_jsx_runtime49 = require("react/jsx-runtime");
3445
+ var import_jsx_runtime50 = require("react/jsx-runtime");
3329
3446
  function AuthShell({ children, pattern = "dots", maxWidth = "520px" }) {
3330
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
3447
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
3331
3448
  "div",
3332
3449
  {
3333
3450
  style: {
@@ -3342,7 +3459,7 @@ function AuthShell({ children, pattern = "dots", maxWidth = "520px" }) {
3342
3459
  overflow: "hidden"
3343
3460
  },
3344
3461
  children: [
3345
- pattern === "dots" && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3462
+ pattern === "dots" && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
3346
3463
  "div",
3347
3464
  {
3348
3465
  "aria-hidden": true,
@@ -3356,7 +3473,7 @@ function AuthShell({ children, pattern = "dots", maxWidth = "520px" }) {
3356
3473
  }
3357
3474
  }
3358
3475
  ),
3359
- pattern === "grid" && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3476
+ pattern === "grid" && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
3360
3477
  "div",
3361
3478
  {
3362
3479
  "aria-hidden": true,
@@ -3370,16 +3487,16 @@ function AuthShell({ children, pattern = "dots", maxWidth = "520px" }) {
3370
3487
  }
3371
3488
  }
3372
3489
  ),
3373
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { style: { position: "relative", zIndex: 1, width: "100%", maxWidth }, children })
3490
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { style: { position: "relative", zIndex: 1, width: "100%", maxWidth }, children })
3374
3491
  ]
3375
3492
  }
3376
3493
  );
3377
3494
  }
3378
3495
 
3379
3496
  // src/components/auth/AuthCard.tsx
3380
- var import_jsx_runtime50 = require("react/jsx-runtime");
3497
+ var import_jsx_runtime51 = require("react/jsx-runtime");
3381
3498
  function AuthCard({ children, padding = "24px 28px" }) {
3382
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
3499
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3383
3500
  "div",
3384
3501
  {
3385
3502
  style: {
@@ -3396,10 +3513,10 @@ function AuthCard({ children, padding = "24px 28px" }) {
3396
3513
  }
3397
3514
 
3398
3515
  // src/components/auth/AuthLogo.tsx
3399
- var import_jsx_runtime51 = require("react/jsx-runtime");
3516
+ var import_jsx_runtime52 = require("react/jsx-runtime");
3400
3517
  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)(
3518
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", gap: "10px", marginBottom: "28px" }, children: [
3519
+ imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
3403
3520
  "img",
3404
3521
  {
3405
3522
  src: imageUrl,
@@ -3408,7 +3525,7 @@ function AuthLogo({ appName = "Builify CMS", letter = "B", imageUrl, size = 36 }
3408
3525
  height: size,
3409
3526
  style: { borderRadius: "calc(var(--radius, 0.5rem) * 1.2)", flexShrink: 0, display: "block" }
3410
3527
  }
3411
- ) : /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3528
+ ) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
3412
3529
  "div",
3413
3530
  {
3414
3531
  style: {
@@ -3427,7 +3544,7 @@ function AuthLogo({ appName = "Builify CMS", letter = "B", imageUrl, size = 36 }
3427
3544
  children: letter
3428
3545
  }
3429
3546
  ),
3430
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3547
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
3431
3548
  "span",
3432
3549
  {
3433
3550
  style: {
@@ -3443,10 +3560,10 @@ function AuthLogo({ appName = "Builify CMS", letter = "B", imageUrl, size = 36 }
3443
3560
  }
3444
3561
 
3445
3562
  // src/components/auth/AuthHeader.tsx
3446
- var import_jsx_runtime52 = require("react/jsx-runtime");
3563
+ var import_jsx_runtime53 = require("react/jsx-runtime");
3447
3564
  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)(
3565
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { style: { marginBottom: "24px", textAlign: "center" }, children: [
3566
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3450
3567
  "h1",
3451
3568
  {
3452
3569
  style: {
@@ -3459,7 +3576,7 @@ function AuthHeader({ title, description }) {
3459
3576
  children: title
3460
3577
  }
3461
3578
  ),
3462
- description && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
3579
+ description && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3463
3580
  "p",
3464
3581
  {
3465
3582
  style: {
@@ -3475,12 +3592,12 @@ function AuthHeader({ title, description }) {
3475
3592
  }
3476
3593
 
3477
3594
  // src/components/auth/AuthField.tsx
3478
- var import_jsx_runtime53 = require("react/jsx-runtime");
3595
+ var import_jsx_runtime54 = require("react/jsx-runtime");
3479
3596
  function AuthField({ label, error, hint, rightLabel, id, ...props }) {
3480
3597
  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)(
3598
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: [
3599
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [
3600
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
3484
3601
  "label",
3485
3602
  {
3486
3603
  htmlFor: fieldId,
@@ -3492,9 +3609,9 @@ function AuthField({ label, error, hint, rightLabel, id, ...props }) {
3492
3609
  children: label
3493
3610
  }
3494
3611
  ),
3495
- rightLabel && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { style: { fontSize: "0.8125rem" }, children: rightLabel })
3612
+ rightLabel && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { style: { fontSize: "0.8125rem" }, children: rightLabel })
3496
3613
  ] }),
3497
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3614
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
3498
3615
  "input",
3499
3616
  {
3500
3617
  id: fieldId,
@@ -3524,13 +3641,13 @@ function AuthField({ label, error, hint, rightLabel, id, ...props }) {
3524
3641
  ...props
3525
3642
  }
3526
3643
  ),
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 })
3644
+ error && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { style: { fontSize: "0.8rem", color: "var(--destructive)", margin: 0 }, children: error }),
3645
+ hint && !error && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { style: { fontSize: "0.8rem", color: "var(--muted-foreground)", margin: 0 }, children: hint })
3529
3646
  ] });
3530
3647
  }
3531
3648
 
3532
3649
  // src/components/auth/AuthButton.tsx
3533
- var import_jsx_runtime54 = require("react/jsx-runtime");
3650
+ var import_jsx_runtime55 = require("react/jsx-runtime");
3534
3651
  function AuthButton({
3535
3652
  loading,
3536
3653
  variant = "primary",
@@ -3573,7 +3690,7 @@ function AuthButton({
3573
3690
  color: "var(--foreground)"
3574
3691
  }
3575
3692
  };
3576
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
3693
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
3577
3694
  "button",
3578
3695
  {
3579
3696
  disabled: loading || disabled,
@@ -3585,8 +3702,8 @@ function AuthButton({
3585
3702
  e.currentTarget.style.filter = "none";
3586
3703
  },
3587
3704
  ...props,
3588
- children: loading ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
3589
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
3705
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment, { children: [
3706
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
3590
3707
  "span",
3591
3708
  {
3592
3709
  style: {
@@ -3607,19 +3724,19 @@ function AuthButton({
3607
3724
  }
3608
3725
 
3609
3726
  // src/components/auth/AuthDivider.tsx
3610
- var import_jsx_runtime55 = require("react/jsx-runtime");
3727
+ var import_jsx_runtime56 = require("react/jsx-runtime");
3611
3728
  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)" } })
3729
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "12px", margin: "20px 0" }, children: [
3730
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { style: { flex: 1, height: 1, background: "var(--border)" } }),
3731
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { style: { fontSize: "0.75rem", color: "var(--muted-foreground)", userSelect: "none" }, children: label }),
3732
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { style: { flex: 1, height: 1, background: "var(--border)" } })
3616
3733
  ] });
3617
3734
  }
3618
3735
 
3619
3736
  // src/components/auth/AuthFootnote.tsx
3620
- var import_jsx_runtime56 = require("react/jsx-runtime");
3737
+ var import_jsx_runtime57 = require("react/jsx-runtime");
3621
3738
  function AuthFootnote({ text, linkText, linkHref }) {
3622
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("p", { style: {
3739
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("p", { style: {
3623
3740
  textAlign: "center",
3624
3741
  marginTop: "20px",
3625
3742
  fontSize: "0.8125rem",
@@ -3627,7 +3744,7 @@ function AuthFootnote({ text, linkText, linkHref }) {
3627
3744
  }, children: [
3628
3745
  text,
3629
3746
  " ",
3630
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
3747
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
3631
3748
  "a",
3632
3749
  {
3633
3750
  href: linkHref,
@@ -3699,6 +3816,7 @@ var import_next_themes2 = require("next-themes");
3699
3816
  FormField,
3700
3817
  FormLayout,
3701
3818
  FormSection,
3819
+ HslColorInput,
3702
3820
  ImagePickerField,
3703
3821
  Input,
3704
3822
  Label,