@kyro-cms/admin 0.9.0 → 0.9.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.
Files changed (114) hide show
  1. package/dist/index.cjs +11715 -11292
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.css +67 -65
  4. package/dist/index.css.map +1 -1
  5. package/dist/index.d.cts +564 -0
  6. package/dist/index.d.ts +11 -10
  7. package/dist/index.js +11326 -10912
  8. package/dist/index.js.map +1 -1
  9. package/package.json +16 -12
  10. package/src/components/ActionBar.tsx +25 -161
  11. package/src/components/Admin.tsx +2 -4
  12. package/src/components/ApiKeysManager.tsx +5 -5
  13. package/src/components/AuditLogsPage.tsx +2 -13
  14. package/src/components/AutoForm.tsx +572 -461
  15. package/src/components/BrandingHub.tsx +7 -4
  16. package/src/components/CreateView.tsx +2 -0
  17. package/src/components/DetailView.tsx +52 -65
  18. package/src/components/DeveloperCenter.tsx +8 -6
  19. package/src/components/FieldRenderer.tsx +94 -19
  20. package/src/components/ListView.tsx +57 -216
  21. package/src/components/MediaGallery.tsx +334 -367
  22. package/src/components/PluginsManager.tsx +197 -70
  23. package/src/components/RestPlayground.tsx +59 -52
  24. package/src/components/SessionsManager.tsx +1 -1
  25. package/src/components/SettingsPage.tsx +22 -0
  26. package/src/components/Sidebar.astro +13 -41
  27. package/src/components/UserManagement.tsx +153 -15
  28. package/src/components/UserMenu.tsx +30 -4
  29. package/src/components/VersionHistoryPanel.tsx +112 -119
  30. package/src/components/WebhookManager.tsx +6 -4
  31. package/src/components/blocks/ArrayBlock.tsx +6 -23
  32. package/src/components/blocks/BlockEditModal.tsx +82 -309
  33. package/src/components/blocks/CardBlock.tsx +35 -0
  34. package/src/components/blocks/ChildBlocksTree.tsx +57 -31
  35. package/src/components/blocks/GenericBlock.tsx +44 -0
  36. package/src/components/blocks/HeadingSubheadingBlock.tsx +32 -0
  37. package/src/components/blocks/HeroBlock.tsx +5 -14
  38. package/src/components/blocks/RichTextBlock.tsx +5 -5
  39. package/src/components/blocks/index.ts +5 -3
  40. package/src/components/fields/AccordionField.tsx +2 -2
  41. package/src/components/fields/ArrayField.tsx +1 -1
  42. package/src/components/fields/ArrayLayout.tsx +120 -29
  43. package/src/components/fields/BlocksField.tsx +433 -55
  44. package/src/components/fields/CardField.tsx +73 -0
  45. package/src/components/fields/CheckboxField.tsx +7 -3
  46. package/src/components/fields/DateField.tsx +4 -1
  47. package/src/components/fields/GroupLayout.tsx +2 -2
  48. package/src/components/fields/HeadingSubheadingField.tsx +43 -0
  49. package/src/components/fields/ListField.tsx +2 -2
  50. package/src/components/fields/NumberField.tsx +4 -1
  51. package/src/components/fields/RelationshipBlockField.tsx +2 -3
  52. package/src/components/fields/RelationshipField.tsx +155 -90
  53. package/src/components/fields/RichTextField.tsx +781 -0
  54. package/src/components/fields/SecretField.tsx +102 -0
  55. package/src/components/fields/SelectField.tsx +19 -6
  56. package/src/components/fields/TabsLayout.tsx +19 -9
  57. package/src/components/fields/TextField.tsx +4 -1
  58. package/src/components/fields/UploadField.tsx +122 -56
  59. package/src/components/fields/extensions/blockComponents.tsx +103 -174
  60. package/src/components/fields/extensions/blocksStore.ts +8 -1
  61. package/src/components/fields/index.ts +4 -2
  62. package/src/components/fix_imports.cjs +23 -0
  63. package/src/components/fix_imports2.cjs +19 -0
  64. package/src/components/replace_svgs.cjs +63 -0
  65. package/src/components/ui/Dropdown.tsx +7 -2
  66. package/src/components/ui/Modal.tsx +24 -27
  67. package/src/components/ui/PageHeader.tsx +5 -5
  68. package/src/components/ui/PromptModal.tsx +2 -10
  69. package/src/components/ui/SlidePanel.tsx +10 -13
  70. package/src/components/ui/SplitButton.tsx +107 -0
  71. package/src/components/ui/Toaster.tsx +0 -1
  72. package/src/components/ui/icons.tsx +110 -109
  73. package/src/components/users/UserDetail.tsx +79 -16
  74. package/src/components/users/UsersList.tsx +8 -85
  75. package/src/hooks/useAutoFormState.ts +187 -196
  76. package/src/hooks/useQueue.ts +60 -0
  77. package/src/integration.ts +148 -46
  78. package/src/kyro-cms.d.ts +7 -2
  79. package/src/layouts/AdminLayout.astro +22 -2
  80. package/src/layouts/AuthLayout.astro +67 -7
  81. package/src/lib/autoform-store.ts +90 -53
  82. package/src/lib/change-source.ts +9 -0
  83. package/src/lib/config.ts +104 -8
  84. package/src/lib/globals.ts +48 -11
  85. package/src/lib/normalize-upload-fields.ts +41 -0
  86. package/src/lib/paths.ts +2 -2
  87. package/src/lib/resolve-field-value.ts +110 -0
  88. package/src/lib/shim/use-sync-external-store-with-selector.js +30 -0
  89. package/src/lib/shim/use-sync-external-store.js +1 -0
  90. package/src/lib/stores/index.ts +1 -0
  91. package/src/lib/useResourceManager.ts +4 -4
  92. package/src/lib/vite-shim-plugin.ts +100 -0
  93. package/src/pages/[collection]/[id].astro +1 -1
  94. package/src/pages/auth/register.astro +5 -2
  95. package/src/pages/preview/[collection]/[id].astro +4 -4
  96. package/src/pages/settings/[slug].astro +2 -2
  97. package/src/styles/main.css +60 -54
  98. package/README.md +0 -46
  99. package/dist/EditorClient-Q23UXR37.cjs +0 -468
  100. package/dist/EditorClient-Q23UXR37.cjs.map +0 -1
  101. package/dist/EditorClient-T5PASFNR.js +0 -466
  102. package/dist/EditorClient-T5PASFNR.js.map +0 -1
  103. package/dist/chunk-3BGDYKTD.cjs +0 -348
  104. package/dist/chunk-3BGDYKTD.cjs.map +0 -1
  105. package/dist/chunk-EEFXLQVT.js +0 -3
  106. package/dist/chunk-EEFXLQVT.js.map +0 -1
  107. package/src/components/blocks/ButtonBlock.tsx +0 -64
  108. package/src/components/blocks/ColumnsBlock.tsx +0 -55
  109. package/src/components/blocks/DividerBlock.tsx +0 -43
  110. package/src/components/blocks/LinkBlock.tsx +0 -65
  111. package/src/components/blocks/VStackBlock.tsx +0 -29
  112. package/src/components/fields/EditorClient.tsx +0 -535
  113. package/src/components/fields/PortableTextField.tsx +0 -155
  114. package/src/components/fields/PortableTextRenderer.tsx +0 -68
@@ -1,5 +1,5 @@
1
1
  import React, { type ReactNode } from "react";
2
- import type { IconType } from "react-icons";
2
+ import type { ComponentType, SVGAttributes } from "react";
3
3
 
4
4
  interface Breadcrumb {
5
5
  label: string;
@@ -10,7 +10,7 @@ interface Breadcrumb {
10
10
  interface Action {
11
11
  label: string;
12
12
  onClick: () => void;
13
- icon?: IconType;
13
+ icon?: ComponentType<SVGAttributes<SVGSVGElement>>;
14
14
  variant?: "primary" | "outline" | "ghost";
15
15
  className?: string;
16
16
  }
@@ -18,7 +18,7 @@ interface Action {
18
18
  interface PageHeaderProps {
19
19
  title?: string;
20
20
  description?: string;
21
- icon?: IconType;
21
+ icon?: ComponentType<SVGAttributes<SVGSVGElement>>;
22
22
  breadcrumbs?: Breadcrumb[];
23
23
  metadata?: ReactNode[];
24
24
  back?: { label?: string; href?: string; onClick?: () => void };
@@ -129,7 +129,7 @@ export function PageHeader({
129
129
  ? "border border-[var(--kyro-border)] text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)]"
130
130
  : act.variant === "ghost"
131
131
  ? "text-[var(--kyro-text-secondary)] hover:bg-[var(--kyro-surface-accent)] shadow-none"
132
- : "bg-[var(--kyro-primary)] text-white hover:opacity-90"
132
+ : "kyro-btn-primary hover:opacity-90"
133
133
  } ${act.className || ""}`}
134
134
  >
135
135
  {act.icon && <act.icon className="w-4 h-4" />}
@@ -145,7 +145,7 @@ export function PageHeader({
145
145
  <button
146
146
  type="button"
147
147
  onClick={action.onClick}
148
- className={`flex items-center gap-2 px-6 py-2.5 rounded-xl font-bold text-sm bg-[var(--kyro-primary)] text-white hover:opacity-90 transition-all shadow-lg shadow-[var(--kyro-primary)]/10 ${action.className || ""}`}
148
+ className={`kyro-btn kyro-btn-primary flex items-center gap-2 px-6 py-2.5 rounded-xl font-bold text-sm hover:opacity-90 transition-all shadow-lg shadow-[var(--kyro-primary)]/10 ${action.className || ""}`}
149
149
  >
150
150
  {action.icon && <action.icon className="w-4 h-4" />}
151
151
  {action.label}
@@ -1,3 +1,4 @@
1
+ import { X } from "./icons";
1
2
  import React, { useState } from "react";
2
3
  import { createPortal } from "react-dom";
3
4
 
@@ -47,16 +48,7 @@ export function PromptModal({
47
48
  onClick={onClose}
48
49
  className="p-1 text-[var(--kyro-text-muted)] hover:text-[var(--kyro-text-primary)] rounded-lg hover:bg-[var(--kyro-surface-accent)] transition-colors"
49
50
  >
50
- <svg
51
- width="20"
52
- height="20"
53
- viewBox="0 0 24 24"
54
- fill="none"
55
- stroke="currentColor"
56
- strokeWidth="2"
57
- >
58
- <path d="M18 6L6 18M6 6l12 12" />
59
- </svg>
51
+ <X className="w-4 h-4" />
60
52
  </button>
61
53
  </div>
62
54
  <form onSubmit={handleSubmit}>
@@ -1,3 +1,4 @@
1
+ import { X } from "./icons";
1
2
  import React, { useEffect, useRef, useState, type ReactNode } from "react";
2
3
  import { createPortal } from "react-dom";
3
4
 
@@ -10,6 +11,7 @@ interface SlidePanelProps {
10
11
  children: ReactNode;
11
12
  width?: "sm" | "md" | "lg" | "xl";
12
13
  showOverlay?: boolean;
14
+ accentClass?: string;
13
15
  }
14
16
 
15
17
  export function SlidePanel({
@@ -19,6 +21,7 @@ export function SlidePanel({
19
21
  children,
20
22
  width = "md",
21
23
  showOverlay = false,
24
+ accentClass,
22
25
  }: SlidePanelProps) {
23
26
  const panelRef = useRef<HTMLDivElement>(null);
24
27
  const [hydrated, setHydrated] = useState(false);
@@ -46,8 +49,8 @@ export function SlidePanel({
46
49
  const widthClasses = {
47
50
  sm: "w-[320px]",
48
51
  md: "w-[400px]",
49
- lg: "w-[500px]",
50
- xl: "w-[600px]",
52
+ lg: "w-[550px]",
53
+ xl: "w-[700px]",
51
54
  };
52
55
 
53
56
  if (!open || !hydrated) return null;
@@ -62,7 +65,10 @@ export function SlidePanel({
62
65
  )}
63
66
  <div
64
67
  ref={panelRef}
65
- className={`fixed right-0 top-0 bottom-0 z-[99999] ${widthClasses[width]} bg-[var(--kyro-surface)] border-l border-[var(--kyro-border)] shadow-2xl flex flex-col animate-slideIn`}
68
+ data-kyro-slide-panel="true"
69
+ data-kyro-slide-width={width}
70
+ className={`fixed right-0 top-0 bottom-0 z-[99999] ${widthClasses[width]} bg-[var(--kyro-surface)] ${accentClass ? `border-l-2 ${accentClass}` : "border-l border-[var(--kyro-border)]"
71
+ } shadow-2xl flex flex-col animate-slideIn`}
66
72
  >
67
73
  <div className="flex items-center justify-between px-4 py-3 border-b border-[var(--kyro-border)] bg-[var(--kyro-surface)]">
68
74
  <h2 className="text-sm font-semibold text-[var(--kyro-text-primary)]">
@@ -73,16 +79,7 @@ export function SlidePanel({
73
79
  onClick={onClose}
74
80
  className="p-1.5 text-[var(--kyro-text-muted)] hover:text-[var(--kyro-text-primary)] hover:bg-[var(--kyro-surface-accent)] rounded-lg transition-colors"
75
81
  >
76
- <svg
77
- width="16"
78
- height="16"
79
- viewBox="0 0 24 24"
80
- fill="none"
81
- stroke="currentColor"
82
- strokeWidth="2"
83
- >
84
- <path d="M18 6L6 18M6 6l12 12" />
85
- </svg>
82
+ <X className="w-4 h-4" />
86
83
  </button>
87
84
  </div>
88
85
  <div className="flex-1 overflow-y-auto p-4">{children}</div>
@@ -0,0 +1,107 @@
1
+ import React from "react";
2
+ import type { ReactNode } from "react";
3
+ import { Dropdown } from "./Dropdown";
4
+ import { Spinner } from "./Spinner";
5
+
6
+ export type SplitButtonStatus = "draft" | "published" | "scheduled" | "archived";
7
+ export type SplitButtonSaveStatus = "idle" | "saving" | "saved" | "error";
8
+
9
+ export interface SplitButtonProps {
10
+ /** Current publish status of the document */
11
+ status: SplitButtonStatus;
12
+ /** Live save operation status driven by the parent */
13
+ saveStatus: SplitButtonSaveStatus;
14
+ /** True when the form has unsaved changes vs last persisted version */
15
+ hasChanges: boolean;
16
+ /** Called when the main publish button is clicked */
17
+ onPublish: () => void;
18
+ /** Publish-variant items for the chevron dropdown (Save as Draft, Schedule) */
19
+ children?: ReactNode;
20
+ disabled?: boolean;
21
+ direction?: "up" | "down";
22
+ }
23
+
24
+ export function SplitButton({
25
+ status,
26
+ saveStatus,
27
+ hasChanges,
28
+ onPublish,
29
+ children,
30
+ disabled,
31
+ direction = "down",
32
+ }: SplitButtonProps) {
33
+ const isPublishedIdle =
34
+ status === "published" && !hasChanges && saveStatus !== "saving" && saveStatus !== "error";
35
+
36
+ const isDisabled = disabled || saveStatus === "saving" || isPublishedIdle;
37
+
38
+ // ── button colour ──────────────────────────────────────────────────────────
39
+ const btnBase =
40
+ "kyro-btn kyro-btn-sm text-[11px] font-regular tracking-widest transition-all duration-300 rounded-lg";
41
+
42
+ const getBtnClass = () => {
43
+ if (saveStatus === "saving") return `${btnBase} bg-[var(--kyro-primary)]/70 border-[var(--kyro-primary)]/70 text-[var(--kyro-sidebar-text-active)] cursor-wait`;
44
+ if (saveStatus === "saved") return `${btnBase} bg-[var(--kyro-success)] border-[var(--kyro-success)] text-[var(--kyro-sidebar-text-active)]`;
45
+ if (saveStatus === "error") return `${btnBase} bg-[var(--kyro-error)] border-[var(--kyro-error)] text-[var(--kyro-sidebar-text-active)]`;
46
+ if (isPublishedIdle) return `${btnBase} bg-[var(--kyro-gray-200)] border-[var(--kyro-gray-200)] text-[var(--kyro-text-muted)] cursor-not-allowed`;
47
+ // has changes → accent
48
+ return `${btnBase} bg-[var(--kyro-primary)] border-[var(--kyro-primary)] hover:bg-[var(--kyro-primary-hover)]`;
49
+ };
50
+
51
+ const chevronBase =
52
+ "kyro-btn kyro-btn-md px-2 rounded-l-none border-l-[1px] border-white/20 transition-all duration-300";
53
+
54
+ const getChevronClass = () => {
55
+ if (saveStatus === "saving") return `${chevronBase} bg-[var(--kyro-primary)]/70 text-[var(--kyro-sidebar-text-active)] border-[var(--kyro-primary)]/70`;
56
+ if (saveStatus === "saved") return `${chevronBase} bg-[var(--kyro-success)] text-[var(--kyro-sidebar-text-active)] border-[var(--kyro-success)]`;
57
+ if (saveStatus === "error") return `${chevronBase} bg-[var(--kyro-error)] text-[var(--kyro-sidebar-text-active)] border-[var(--kyro-error)]`;
58
+ if (isPublishedIdle) return `${chevronBase} bg-[var(--kyro-gray-200)] text-[var(--kyro-text-muted)] border-[var(--kyro-gray-200)]`;
59
+ return `${chevronBase} bg-[var(--kyro-primary)] text-[var(--kyro-sidebar-text-active)] border-[var(--kyro-primary)] hover:bg-[var(--kyro-primary-hover)]`;
60
+ };
61
+
62
+ // ── label ──────────────────────────────────────────────────────────────────
63
+ const getLabel = () => {
64
+ if (saveStatus === "saving") return "Publishing...";
65
+ if (saveStatus === "saved") return "Published ✓";
66
+ if (saveStatus === "error") return "Retry";
67
+ if (isPublishedIdle) return "Published";
68
+ return "Publish Changes";
69
+ };
70
+
71
+ return (
72
+ <div className="inline-flex items-center">
73
+ {/* Main publish button */}
74
+ <button
75
+ type="button"
76
+ onClick={onPublish}
77
+ disabled={isDisabled}
78
+ className={`${getBtnClass()} ${!children ? "rounded-r-lg border-r border-[var(--kyro-border)]" : ""}`}
79
+ >
80
+ {saveStatus === "saving" && <Spinner size="sm" className="inline mr-1.5" />}
81
+ {isPublishedIdle && (
82
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" className="inline mr-1">
83
+ <polyline points="20 6 9 17 4 12" />
84
+ </svg>
85
+ )}
86
+ {getLabel()}
87
+ </button>
88
+
89
+ {/* Chevron → publish-variant actions only */}
90
+ {children && (
91
+ <Dropdown
92
+ trigger={
93
+ <button type="button" className={getChevronClass()} disabled={saveStatus === "saving"}>
94
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5">
95
+ <path d="m6 9 6 6 6-6" />
96
+ </svg>
97
+ </button>
98
+ }
99
+ direction={direction}
100
+ >
101
+ {children}
102
+ </Dropdown>
103
+ )}
104
+ </div>
105
+ );
106
+ }
107
+
@@ -2,7 +2,6 @@ import { useToastStore } from "../../lib/stores";
2
2
  import { Toast } from "./Toast";
3
3
 
4
4
  export function Toaster() {
5
- console.log('Toaster mounted');
6
5
  const toasts = useToastStore((state) => state.toasts);
7
6
  const removeToast = useToastStore((state) => state.removeToast);
8
7
 
@@ -1,112 +1,113 @@
1
- // Re-exported from react-icons/lu (Lucide icons via React Icons, ISC license)
2
- // Allows mixing packs or swapping individual icons without touching consumers.
1
+ // Re-exported from lucide-react (ISC license)
2
+ // Allows swapping individual icons without touching consumers.
3
3
 
4
- export { LuActivity as IconActivity } from "react-icons/lu";
5
- export { LuTriangleAlert as IconAlertTriangle } from "react-icons/lu";
6
- export { LuAlignLeft as IconAlignLeft } from "react-icons/lu";
7
- export { LuArchive as IconArchive } from "react-icons/lu";
8
- export { LuArrowDown as IconArrowDown } from "react-icons/lu";
9
- export { LuArrowRight as IconArrowRight } from "react-icons/lu";
10
- export { LuArrowUpRight as IconArrowUpRight } from "react-icons/lu";
11
- export { LuBlocks as IconBlocks } from "react-icons/lu";
12
- export { LuBold as IconBold } from "react-icons/lu";
13
- export { LuBook as IconBook } from "react-icons/lu";
14
- export { LuBox as IconBox } from "react-icons/lu";
15
- export { LuCircleCheck as IconCheckCircle2 } from "react-icons/lu";
16
- export { LuCheck as IconCheck } from "react-icons/lu";
17
- export { LuChevronDown as IconChevronDown } from "react-icons/lu";
18
- export { LuChevronLeft as IconChevronLeft } from "react-icons/lu";
19
- export { LuChevronRight as IconChevronRight } from "react-icons/lu";
20
- export { LuChevronUp as IconChevronUp } from "react-icons/lu";
21
- export { LuClock as IconClock } from "react-icons/lu";
22
- export { LuCode as IconCode } from "react-icons/lu";
23
- export { LuCodeXml as IconCode2 } from "react-icons/lu";
24
- export { LuColumns3 as IconColumns3 } from "react-icons/lu";
25
- export { LuCopy as IconCopy } from "react-icons/lu";
26
- export { LuCrop as IconCrop } from "react-icons/lu";
27
- export { LuDatabase as IconDatabase } from "react-icons/lu";
28
- export { LuDownload as IconDownload } from "react-icons/lu";
29
- export { LuCloudDownload as IconDownloadCloud } from "react-icons/lu";
30
- export { LuExternalLink as IconExternalLink } from "react-icons/lu";
31
- export { LuEye as IconEye } from "react-icons/lu";
32
- export { LuEyeOff as IconEyeOff } from "react-icons/lu";
33
- export { LuFile as IconFile } from "react-icons/lu";
34
- export { LuGlobe as IconGlobe } from "react-icons/lu";
35
- export { LuFilm as IconFilm } from "react-icons/lu";
36
- export { LuFilter as IconFilter } from "react-icons/lu";
37
- export { LuFolder as IconFolder } from "react-icons/lu";
38
- export { LuFolderInput as IconFolderInput } from "react-icons/lu";
39
- export { LuFolderPlus as IconFolderPlus } from "react-icons/lu";
40
- export { LuGrid3X3 as IconGrid } from "react-icons/lu";
41
- export { LuGripVertical as IconGripVertical } from "react-icons/lu";
42
- export { LuHeading1 as IconHeading1 } from "react-icons/lu";
43
- export { LuHexagon as IconHexagon } from "react-icons/lu";
44
- export { LuHouse as IconHome } from "react-icons/lu";
45
- export { LuImage as IconImage } from "react-icons/lu";
46
- export { LuInfo as IconInfo } from "react-icons/lu";
47
- export { LuItalic as IconItalic } from "react-icons/lu";
48
- export { LuKey as IconKey } from "react-icons/lu";
49
- export { LuLayoutPanelTop as IconLayout } from "react-icons/lu";
50
- export { LuLayoutDashboard as IconLayoutDashboard } from "react-icons/lu";
51
- export { LuLink as IconLink } from "react-icons/lu";
52
- export { LuLink2 as IconLink2 } from "react-icons/lu";
53
- export { LuList as IconList } from "react-icons/lu";
54
- export { LuListOrdered as IconListOrdered } from "react-icons/lu";
55
- export { LuLoaderCircle as IconLoader2 } from "react-icons/lu";
56
- export { LuLock as IconLock } from "react-icons/lu";
57
- export { LuLogOut as IconLogOut } from "react-icons/lu";
58
- export { LuMail as IconMail } from "react-icons/lu";
59
- export { LuMaximize2 as IconMaximize2 } from "react-icons/lu";
60
- export { LuMenu as IconMenu } from "react-icons/lu";
61
- export { LuMinus as IconMinus } from "react-icons/lu";
62
- export { LuMonitor as IconMonitor } from "react-icons/lu";
63
- export { LuMoon as IconMoon } from "react-icons/lu";
64
- export { LuEllipsisVertical as IconMoreVertical } from "react-icons/lu";
65
- export { LuMousePointerClick as IconMousePointerClick } from "react-icons/lu";
66
- export { LuMusic as IconMusic } from "react-icons/lu";
67
- export { LuNetwork as IconNetwork } from "react-icons/lu";
68
- export { LuPalette as IconPalette } from "react-icons/lu";
69
- export { LuPause as IconPause } from "react-icons/lu";
70
- export { LuPencil as IconPencil } from "react-icons/lu";
71
- export { LuPlay as IconPlay } from "react-icons/lu";
72
- export { LuCirclePlay as IconPlayCircle } from "react-icons/lu";
73
- export { LuPlus as IconPlus } from "react-icons/lu";
74
- export { LuRedo as IconRedo } from "react-icons/lu";
75
- export { LuRefreshCcw as IconRefreshCcw } from "react-icons/lu";
76
- export { LuRefreshCw as IconRefreshCw } from "react-icons/lu";
77
- export { LuSave as IconSave } from "react-icons/lu";
78
- export { LuSearch as IconSearch } from "react-icons/lu";
79
- export { LuSend as IconSend } from "react-icons/lu";
80
- export { LuSettings as IconSettings } from "react-icons/lu";
81
- export { LuShield as IconShield } from "react-icons/lu";
82
- export { LuShieldCheck as IconShieldCheck } from "react-icons/lu";
83
- export { LuSparkles as IconSparkles } from "react-icons/lu";
84
- export { LuStar as IconStar } from "react-icons/lu";
85
- export { LuStrikethrough as IconStrikethrough } from "react-icons/lu";
86
- export { LuSun as IconSun } from "react-icons/lu";
87
- export { LuTag as IconTag } from "react-icons/lu";
88
- export { LuTerminal as IconTerminal } from "react-icons/lu";
89
- export { LuToggleLeft as IconToggleLeft } from "react-icons/lu";
90
- export { LuToggleRight as IconToggleRight } from "react-icons/lu";
91
- export { LuTrash2 as IconTrash2 } from "react-icons/lu";
92
- export { LuTrendingUp as IconTrendingUp } from "react-icons/lu";
93
- export { LuType as IconType } from "react-icons/lu";
94
- export { LuUnderline as IconUnderline } from "react-icons/lu";
95
- export { LuUndo as IconUndo } from "react-icons/lu";
96
- export { LuLockOpen as IconUnlock } from "react-icons/lu";
97
- export { LuUser as IconUser } from "react-icons/lu";
98
- export { LuUserPlus as IconUserPlus } from "react-icons/lu";
99
- export { LuUsers as IconUsers } from "react-icons/lu";
100
- export { LuVideo as IconVideo } from "react-icons/lu";
101
- export { LuWebhook as IconWebhook } from "react-icons/lu";
102
- export { LuX as IconX } from "react-icons/lu";
103
- export { LuZap as IconZap } from "react-icons/lu";
104
- export { LuDot as IconDot } from "react-icons/lu";
105
- export { LuShieldAlert as IconShieldAlert } from "react-icons/lu";
106
- export { LuPencil as IconEdit2 } from "react-icons/lu";
107
- export { LuCalendar as IconCalendar } from "react-icons/lu";
108
- export { LuGrid3X3 as IconGrid3X3 } from "react-icons/lu";
4
+ export { Activity as IconActivity } from "lucide-react";
5
+ export { TriangleAlert as IconAlertTriangle } from "lucide-react";
6
+ export { AlignLeft as IconAlignLeft } from "lucide-react";
7
+ export { Archive as IconArchive } from "lucide-react";
8
+ export { ArrowDown as IconArrowDown } from "lucide-react";
9
+ export { ArrowRight as IconArrowRight } from "lucide-react";
10
+ export { ArrowUpRight as IconArrowUpRight } from "lucide-react";
11
+ export { Blocks as IconBlocks } from "lucide-react";
12
+ export { Bold as IconBold } from "lucide-react";
13
+ export { Book as IconBook } from "lucide-react";
14
+ export { Box as IconBox } from "lucide-react";
15
+ export { CircleCheck as IconCheckCircle2 } from "lucide-react";
16
+ export { Check as IconCheck } from "lucide-react";
17
+ export { ChevronDown as IconChevronDown } from "lucide-react";
18
+ export { ChevronLeft as IconChevronLeft } from "lucide-react";
19
+ export { ChevronRight as IconChevronRight } from "lucide-react";
20
+ export { ChevronUp as IconChevronUp } from "lucide-react";
21
+ export { Clock as IconClock } from "lucide-react";
22
+ export { Code as IconCode } from "lucide-react";
23
+ export { CodeXml as IconCode2 } from "lucide-react";
24
+ export { Columns3 as IconColumns3 } from "lucide-react";
25
+ export { Copy as IconCopy } from "lucide-react";
26
+ export { Crop as IconCrop } from "lucide-react";
27
+ export { Database as IconDatabase } from "lucide-react";
28
+ export { Download as IconDownload } from "lucide-react";
29
+ export { CloudDownload as IconDownloadCloud } from "lucide-react";
30
+ export { ExternalLink as IconExternalLink } from "lucide-react";
31
+ export { Eye as IconEye } from "lucide-react";
32
+ export { EyeOff as IconEyeOff } from "lucide-react";
33
+ export { File as IconFile } from "lucide-react";
34
+ export { Globe as IconGlobe } from "lucide-react";
35
+ export { Film as IconFilm } from "lucide-react";
36
+ export { Filter as IconFilter } from "lucide-react";
37
+ export { Folder as IconFolder } from "lucide-react";
38
+ export { FolderInput as IconFolderInput } from "lucide-react";
39
+ export { FolderPlus as IconFolderPlus } from "lucide-react";
40
+ export { Grid3X3 as IconGrid } from "lucide-react";
41
+ export { GripVertical as IconGripVertical } from "lucide-react";
42
+ export { Heading1 as IconHeading1 } from "lucide-react";
43
+ export { Hexagon as IconHexagon } from "lucide-react";
44
+ export { House as IconHome } from "lucide-react";
45
+ export { Image as IconImage } from "lucide-react";
46
+ export { Info as IconInfo } from "lucide-react";
47
+ export { Italic as IconItalic } from "lucide-react";
48
+ export { Key as IconKey } from "lucide-react";
49
+ export { LayoutPanelTop as IconLayout } from "lucide-react";
50
+ export { LayoutDashboard as IconLayoutDashboard } from "lucide-react";
51
+ export { Link as IconLink } from "lucide-react";
52
+ export { Link2 as IconLink2 } from "lucide-react";
53
+ export { List as IconList } from "lucide-react";
54
+ export { ListOrdered as IconListOrdered } from "lucide-react";
55
+ export { LoaderCircle as IconLoader2 } from "lucide-react";
56
+ export { Lock as IconLock } from "lucide-react";
57
+ export { LogOut as IconLogOut } from "lucide-react";
58
+ export { Mail as IconMail } from "lucide-react";
59
+ export { Maximize2 as IconMaximize2 } from "lucide-react";
60
+ export { Menu as IconMenu } from "lucide-react";
61
+ export { Minus as IconMinus } from "lucide-react";
62
+ export { Monitor as IconMonitor } from "lucide-react";
63
+ export { Moon as IconMoon } from "lucide-react";
64
+ export { EllipsisVertical as IconMoreVertical } from "lucide-react";
65
+ export { MousePointerClick as IconMousePointerClick } from "lucide-react";
66
+ export { Music as IconMusic } from "lucide-react";
67
+ export { Network as IconNetwork } from "lucide-react";
68
+ export { Palette as IconPalette } from "lucide-react";
69
+ export { Pause as IconPause } from "lucide-react";
70
+ export { Pencil as IconPencil } from "lucide-react";
71
+ export { Play as IconPlay } from "lucide-react";
72
+ export { CirclePlay as IconPlayCircle } from "lucide-react";
73
+ export { Plus as IconPlus } from "lucide-react";
74
+ export { Redo as IconRedo } from "lucide-react";
75
+ export { RefreshCcw as IconRefreshCcw } from "lucide-react";
76
+ export { RefreshCw as IconRefreshCw } from "lucide-react";
77
+ export { Save as IconSave } from "lucide-react";
78
+ export { Search as IconSearch } from "lucide-react";
79
+ export { Send as IconSend } from "lucide-react";
80
+ export { Settings as IconSettings } from "lucide-react";
81
+ export { Shield as IconShield } from "lucide-react";
82
+ export { ShieldCheck as IconShieldCheck } from "lucide-react";
83
+ export { Sparkles as IconSparkles } from "lucide-react";
84
+ export { Star as IconStar } from "lucide-react";
85
+ export { Strikethrough as IconStrikethrough } from "lucide-react";
86
+ export { Sun as IconSun } from "lucide-react";
87
+ export { Tag as IconTag } from "lucide-react";
88
+ export { Terminal as IconTerminal } from "lucide-react";
89
+ export { ToggleLeft as IconToggleLeft } from "lucide-react";
90
+ export { ToggleRight as IconToggleRight } from "lucide-react";
91
+ export { Trash2 as IconTrash2 } from "lucide-react";
92
+ export { TrendingUp as IconTrendingUp } from "lucide-react";
93
+ export { Type as IconType } from "lucide-react";
94
+ export { Underline as IconUnderline } from "lucide-react";
95
+ export { Undo as IconUndo } from "lucide-react";
96
+ export { LockOpen as IconUnlock } from "lucide-react";
97
+ export { User as IconUser } from "lucide-react";
98
+ export { UserPlus as IconUserPlus } from "lucide-react";
99
+ export { Users as IconUsers } from "lucide-react";
100
+ export { Video as IconVideo } from "lucide-react";
101
+ export { Webhook as IconWebhook } from "lucide-react";
102
+ export { X as IconX } from "lucide-react";
103
+ export { Zap as IconZap } from "lucide-react";
104
+ export { Dot as IconDot } from "lucide-react";
105
+ export { ShieldAlert as IconShieldAlert } from "lucide-react";
106
+ export { Pencil as IconEdit2 } from "lucide-react";
107
+ export { Calendar as IconCalendar } from "lucide-react";
108
+ export { Grid3X3 as IconGrid3X3 } from "lucide-react";
109
109
 
110
110
  // Direct re-exports for files that still use original lucide-react names
111
- export { LuActivity as Activity, LuAlignLeft as AlignLeft, LuArchive as Archive, LuArrowDown as ArrowDown, LuArrowRight as ArrowRight, LuArrowUpRight as ArrowUpRight, LuBlocks as Blocks, LuBox as Box, LuCalendar as Calendar, LuCheck as Check, LuChevronDown as ChevronDown, LuChevronLeft as ChevronLeft, LuChevronRight as ChevronRight, LuChevronUp as ChevronUp, LuClock as Clock, LuCode as Code, LuColumns3 as Columns3, LuCopy as Copy, LuCrop as Crop, LuDownload as Download, LuExternalLink as ExternalLink, LuEye as Eye, LuEyeOff as EyeOff, LuFile as File, LuFile as FileIcon, LuFileText as FileText, LuGlobe as Globe, LuFilm as Film, LuFilter as Filter, LuFolder as Folder, LuFolderInput as FolderInput, LuFolderPlus as FolderPlus, LuGripVertical as GripVertical, LuHeading1 as Heading1, LuImage as Image, LuInfo as Info, LuKey as Key, LuLayoutDashboard as LayoutDashboard, LuLink as Link, LuLink2 as Link2, LuList as List, LuListOrdered as ListOrdered, LuLock as Lock, LuMail as Mail, LuMaximize2 as Maximize2, LuMenu as Menu, LuMinus as Minus, LuMonitor as Monitor, LuMousePointerClick as MousePointerClick, LuMusic as Music, LuPalette as Palette, LuPause as Pause, LuPlay as Play, LuPlus as Plus, LuRefreshCcw as RefreshCcw, LuRefreshCw as RefreshCw, LuSave as Save, LuSearch as Search, LuSend as Send, LuSettings as Settings, LuShield as Shield, LuSparkles as Sparkles, LuStar as Star, LuTag as Tag, LuTerminal as Terminal, LuToggleLeft as ToggleLeft, LuToggleRight as ToggleRight, LuTrash2 as Trash2, LuTrendingUp as TrendingUp, LuType as Type, LuUser as User, LuUserPlus as UserPlus, LuUsers as Users, LuVideo as Video, LuWebhook as Webhook, LuX as X, LuZap as Zap, LuCircleHelp as HelpCircle } from "react-icons/lu";
112
- export { LuCircleCheck as CheckCircle2, LuGrid3X3 as Grid, LuHouse as Home, LuLayoutPanelTop as Layout, LuLoaderCircle as Loader2, LuLockOpen as Unlock, LuCirclePlay as PlayCircle, LuTriangleAlert as AlertTriangle, LuCodeXml as Code2, LuCloudDownload as DownloadCloud, LuEllipsisVertical as MoreVertical, LuShieldCheck as ShieldCheck, LuShieldAlert as ShieldAlert, LuPencil as Edit2, LuMoon as Moon, LuSun as Sun, LuLogOut as LogOut, LuDatabase as Database, LuHexagon as Hexagon, LuNetwork as Network, LuBook as Book, LuBold as Bold, LuItalic as Italic, LuUnderline as Underline, LuStrikethrough as Strikethrough, LuUndo as Undo, LuRedo as Redo, LuDot as Dot, LuGrid3X3, LuLaptop as Laptop, LuSmartphone as Smartphone } from "react-icons/lu";
111
+ export { Activity as Activity, AlignLeft as AlignLeft, Archive as Archive, ArrowDown as ArrowDown, ArrowRight as ArrowRight, ArrowUpRight as ArrowUpRight, Blocks as Blocks, Box as Box, Calendar as Calendar, Check as Check, ChevronDown as ChevronDown, ChevronLeft as ChevronLeft, ChevronRight as ChevronRight, ChevronUp as ChevronUp, Clock as Clock, Code as Code, Columns3 as Columns3, Copy as Copy, Crop as Crop, Download as Download, ExternalLink as ExternalLink, Eye as Eye, EyeOff as EyeOff, File as File, File as FileIcon, FileText as FileText, Globe as Globe, Film as Film, Filter as Filter, Folder as Folder, FolderInput as FolderInput, FolderPlus as FolderPlus, GripVertical as GripVertical, Heading1 as Heading1, Image as Image, Info as Info, Key as Key, LayoutDashboard as LayoutDashboard, Link as Link, Link2 as Link2, List as List, ListOrdered as ListOrdered, Lock as Lock, Mail as Mail, Maximize2 as Maximize2, Menu as Menu, Minus as Minus, Monitor as Monitor, MousePointerClick as MousePointerClick, Music as Music, Palette as Palette, Pause as Pause, Play as Play, Plus as Plus, RefreshCcw as RefreshCcw, RefreshCw as RefreshCw, Save as Save, Search as Search, Send as Send, Settings as Settings, Shield as Shield, Sparkles as Sparkles, Star as Star, Tag as Tag, Terminal as Terminal, ToggleLeft as ToggleLeft, ToggleRight as ToggleRight, Trash2 as Trash2, TrendingUp as TrendingUp, Type as Type, User as User, UserPlus as UserPlus, Users as Users, Video as Video, Webhook as Webhook, X as X, Zap as Zap, CircleHelp as HelpCircle } from "lucide-react";
112
+ export { CircleCheck as CheckCircle2, Grid3X3 as Grid, House as Home, LayoutPanelTop as Layout, LoaderCircle as Loader2, LockOpen as Unlock, CirclePlay as PlayCircle, TriangleAlert as AlertTriangle, CodeXml as Code2, CloudDownload as DownloadCloud, EllipsisVertical as MoreVertical, ShieldCheck as ShieldCheck, ShieldAlert as ShieldAlert, Pencil as Edit2, Moon as Moon, Sun as Sun, LogOut as LogOut, Database as Database, Hexagon as Hexagon, Network as Network, Book as Book, Bold as Bold, Italic as Italic, Underline as Underline, Strikethrough as Strikethrough, Undo as Undo, Redo as Redo, Dot as Dot, Grid3X3, Laptop as Laptop, Smartphone as Smartphone } from "lucide-react";
113
+ export { Server as Server, XCircle as XCircle, Clipboard as Clipboard, Upload as Upload } from "lucide-react";