@marcoschwartz/lite-ui 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -66,6 +66,7 @@ __export(index_exports, {
66
66
  MenuIcon: () => MenuIcon,
67
67
  Modal: () => Modal,
68
68
  Navbar: () => Navbar,
69
+ NumberInput: () => NumberInput,
69
70
  Pagination: () => Pagination,
70
71
  PlusIcon: () => PlusIcon,
71
72
  ProgressBar: () => ProgressBar,
@@ -818,6 +819,7 @@ var AppShell = ({
818
819
  const [isMobileNavbarOpen, setIsMobileNavbarOpen] = (0, import_react5.useState)(defaultNavbarOpen);
819
820
  const navbarWidth = navbar?.width || "md";
820
821
  const navbarBreakpoint = navbar?.breakpoint || "md";
822
+ const navbarPosition = navbar?.position || "side";
821
823
  const widthClass = widthClasses2[navbarWidth];
822
824
  const breakpoint = breakpointClasses[navbarBreakpoint];
823
825
  if (!responsive && navbar) {
@@ -835,6 +837,51 @@ var AppShell = ({
835
837
  /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("main", { className: "flex-1 overflow-y-auto", children })
836
838
  ] });
837
839
  }
840
+ if (navbar && navbarPosition === "top") {
841
+ const mobileMenuClass = navbarBreakpoint === "sm" ? "sm:hidden" : navbarBreakpoint === "md" ? "md:hidden" : navbarBreakpoint === "lg" ? "lg:hidden" : "xl:hidden";
842
+ const desktopNavClass = navbarBreakpoint === "sm" ? "sm:flex" : navbarBreakpoint === "md" ? "md:flex" : navbarBreakpoint === "lg" ? "lg:flex" : "xl:flex";
843
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: `min-h-screen flex flex-col bg-gray-50 dark:bg-gray-900 ${className}`, children: [
844
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("nav", { className: "sticky top-0 z-30 bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex justify-between items-center h-16", children: [
845
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex items-center", children: navbarLogo ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { children: navbarLogo }) : navbarTitle ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-xl font-bold text-gray-900 dark:text-gray-100", children: navbarTitle }) : null }),
846
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: `hidden ${desktopNavClass} items-center gap-6`, children: navbar.content }),
847
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
848
+ "button",
849
+ {
850
+ className: `${mobileMenuClass} p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors`,
851
+ onClick: () => setIsMobileNavbarOpen(!isMobileNavbarOpen),
852
+ "aria-label": "Toggle menu",
853
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(MenuIcon, { size: "md" })
854
+ }
855
+ )
856
+ ] }) }) }),
857
+ header && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "w-full", children: header }),
858
+ isMobileNavbarOpen && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
859
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
860
+ "div",
861
+ {
862
+ className: `${mobileMenuClass} fixed inset-0 z-40 bg-black/60 backdrop-blur-sm animate-in fade-in duration-200`,
863
+ onClick: () => setIsMobileNavbarOpen(false)
864
+ }
865
+ ),
866
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: `${mobileMenuClass} fixed left-0 top-0 bottom-0 z-50 w-64 bg-white dark:bg-gray-800 shadow-2xl animate-in slide-in-from-left duration-300`, children: [
867
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "p-4 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between", children: [
868
+ navbarLogo ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { children: navbarLogo }) : navbarTitle ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-xl font-bold text-gray-900 dark:text-gray-100", children: navbarTitle }) : null,
869
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
870
+ "button",
871
+ {
872
+ className: "p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",
873
+ onClick: () => setIsMobileNavbarOpen(false),
874
+ "aria-label": "Close menu",
875
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
876
+ }
877
+ )
878
+ ] }),
879
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "p-4 flex flex-col gap-4", children: navbar.content })
880
+ ] })
881
+ ] }),
882
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("main", { className: "flex-1 overflow-y-auto", children })
883
+ ] });
884
+ }
838
885
  if (navbar) {
839
886
  const mobileHeaderClass = navbarBreakpoint === "sm" ? "sm:hidden" : navbarBreakpoint === "md" ? "md:hidden" : navbarBreakpoint === "lg" ? "lg:hidden" : "xl:hidden";
840
887
  const desktopNavbarClass = navbarBreakpoint === "sm" ? "sm:block" : navbarBreakpoint === "md" ? "md:block" : navbarBreakpoint === "lg" ? "lg:block" : "xl:block";
@@ -1037,25 +1084,154 @@ var TextInput = (0, import_react7.forwardRef)(
1037
1084
  );
1038
1085
  TextInput.displayName = "TextInput";
1039
1086
 
1040
- // src/components/ActionMenu.tsx
1087
+ // src/components/NumberInput.tsx
1041
1088
  var import_react8 = require("react");
1042
- var import_react_dom = require("react-dom");
1043
1089
  var import_jsx_runtime41 = require("react/jsx-runtime");
1090
+ var sizeClasses5 = {
1091
+ sm: "px-3 py-1.5 text-sm",
1092
+ md: "px-4 py-2.5 text-base",
1093
+ lg: "px-4 py-3 text-lg"
1094
+ };
1095
+ var NumberInput = ({
1096
+ label,
1097
+ error,
1098
+ helperText,
1099
+ value,
1100
+ onChange,
1101
+ min,
1102
+ max,
1103
+ step = 1,
1104
+ precision,
1105
+ disabled = false,
1106
+ hideControls = false,
1107
+ size = "md",
1108
+ fullWidth = false,
1109
+ placeholder,
1110
+ className = ""
1111
+ }) => {
1112
+ const { theme } = useTheme();
1113
+ const inputRef = (0, import_react8.useRef)(null);
1114
+ const [isFocused, setIsFocused] = (0, import_react8.useState)(false);
1115
+ const clampValue = (val) => {
1116
+ let clamped = val;
1117
+ if (min !== void 0 && clamped < min) clamped = min;
1118
+ if (max !== void 0 && clamped > max) clamped = max;
1119
+ if (precision !== void 0) {
1120
+ clamped = parseFloat(clamped.toFixed(precision));
1121
+ }
1122
+ return clamped;
1123
+ };
1124
+ const handleIncrement = () => {
1125
+ if (disabled) return;
1126
+ const currentValue = value ?? 0;
1127
+ const newValue = clampValue(currentValue + step);
1128
+ onChange?.(newValue);
1129
+ };
1130
+ const handleDecrement = () => {
1131
+ if (disabled) return;
1132
+ const currentValue = value ?? 0;
1133
+ const newValue = clampValue(currentValue - step);
1134
+ onChange?.(newValue);
1135
+ };
1136
+ const handleInputChange = (e) => {
1137
+ const inputValue = e.target.value;
1138
+ if (inputValue === "" || inputValue === "-") {
1139
+ onChange?.(void 0);
1140
+ return;
1141
+ }
1142
+ const numValue = parseFloat(inputValue);
1143
+ if (!isNaN(numValue)) {
1144
+ const clamped = clampValue(numValue);
1145
+ onChange?.(clamped);
1146
+ }
1147
+ };
1148
+ const handleKeyDown = (e) => {
1149
+ if (e.key === "ArrowUp") {
1150
+ e.preventDefault();
1151
+ handleIncrement();
1152
+ } else if (e.key === "ArrowDown") {
1153
+ e.preventDefault();
1154
+ handleDecrement();
1155
+ }
1156
+ };
1157
+ const baseStyles = "w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500";
1158
+ const sizeStyle = sizeClasses5[size];
1159
+ const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
1160
+ const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
1161
+ const widthStyle = fullWidth ? "w-full" : "";
1162
+ const paddingWithControls = !hideControls ? "pr-8" : "";
1163
+ const displayValue = value !== void 0 ? value.toString() : "";
1164
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: `${widthStyle} ${className}`, children: [
1165
+ label && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
1166
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "relative", children: [
1167
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1168
+ "input",
1169
+ {
1170
+ ref: inputRef,
1171
+ type: "number",
1172
+ value: displayValue,
1173
+ onChange: handleInputChange,
1174
+ onKeyDown: handleKeyDown,
1175
+ onFocus: () => setIsFocused(true),
1176
+ onBlur: () => setIsFocused(false),
1177
+ disabled,
1178
+ placeholder,
1179
+ min,
1180
+ max,
1181
+ step,
1182
+ className: `${baseStyles} ${sizeStyle} ${errorStyles} ${disabledStyles} ${paddingWithControls} [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none`.trim()
1183
+ }
1184
+ ),
1185
+ !hideControls && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "absolute right-1 top-1/2 -translate-y-1/2 flex flex-col", children: [
1186
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1187
+ "button",
1188
+ {
1189
+ type: "button",
1190
+ onClick: handleIncrement,
1191
+ disabled: disabled || max !== void 0 && value !== void 0 && value >= max,
1192
+ className: "px-2 py-0.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
1193
+ tabIndex: -1,
1194
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("svg", { className: "w-3 h-3 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 3, d: "M5 15l7-7 7 7" }) })
1195
+ }
1196
+ ),
1197
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1198
+ "button",
1199
+ {
1200
+ type: "button",
1201
+ onClick: handleDecrement,
1202
+ disabled: disabled || min !== void 0 && value !== void 0 && value <= min,
1203
+ className: "px-2 py-0.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
1204
+ tabIndex: -1,
1205
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("svg", { className: "w-3 h-3 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 3, d: "M19 9l-7 7-7-7" }) })
1206
+ }
1207
+ )
1208
+ ] })
1209
+ ] }),
1210
+ error && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
1211
+ helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
1212
+ ] });
1213
+ };
1214
+ NumberInput.displayName = "NumberInput";
1215
+
1216
+ // src/components/ActionMenu.tsx
1217
+ var import_react9 = require("react");
1218
+ var import_react_dom = require("react-dom");
1219
+ var import_jsx_runtime42 = require("react/jsx-runtime");
1044
1220
  var ActionMenu = ({
1045
1221
  items,
1046
1222
  trigger,
1047
1223
  position = "right"
1048
1224
  }) => {
1049
1225
  const { themeName } = useTheme();
1050
- const [isOpen, setIsOpen] = (0, import_react8.useState)(false);
1051
- const [menuPosition, setMenuPosition] = (0, import_react8.useState)(null);
1052
- const [mounted, setMounted] = (0, import_react8.useState)(false);
1053
- const menuRef = (0, import_react8.useRef)(null);
1054
- const triggerRef = (0, import_react8.useRef)(null);
1055
- (0, import_react8.useEffect)(() => {
1226
+ const [isOpen, setIsOpen] = (0, import_react9.useState)(false);
1227
+ const [menuPosition, setMenuPosition] = (0, import_react9.useState)(null);
1228
+ const [mounted, setMounted] = (0, import_react9.useState)(false);
1229
+ const menuRef = (0, import_react9.useRef)(null);
1230
+ const triggerRef = (0, import_react9.useRef)(null);
1231
+ (0, import_react9.useEffect)(() => {
1056
1232
  setMounted(true);
1057
1233
  }, []);
1058
- (0, import_react8.useEffect)(() => {
1234
+ (0, import_react9.useEffect)(() => {
1059
1235
  const handleClickOutside = (event) => {
1060
1236
  if (menuRef.current && !menuRef.current.contains(event.target) && triggerRef.current && !triggerRef.current.contains(event.target)) {
1061
1237
  setIsOpen(false);
@@ -1066,7 +1242,7 @@ var ActionMenu = ({
1066
1242
  return () => document.removeEventListener("mousedown", handleClickOutside);
1067
1243
  }
1068
1244
  }, [isOpen]);
1069
- (0, import_react8.useEffect)(() => {
1245
+ (0, import_react9.useEffect)(() => {
1070
1246
  if (isOpen && triggerRef.current) {
1071
1247
  const rect = triggerRef.current.getBoundingClientRect();
1072
1248
  const menuWidth = 224;
@@ -1085,17 +1261,17 @@ var ActionMenu = ({
1085
1261
  setIsOpen(false);
1086
1262
  }
1087
1263
  };
1088
- const defaultTrigger = /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1264
+ const defaultTrigger = /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
1089
1265
  "button",
1090
1266
  {
1091
1267
  className: "p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",
1092
1268
  "aria-label": "Open menu",
1093
- children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z" }) })
1269
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z" }) })
1094
1270
  }
1095
1271
  );
1096
1272
  const menuBaseStyles = themeName === "minimalistic" ? "bg-black border-2 border-white" : "bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 shadow-lg";
1097
1273
  const itemBaseStyles = themeName === "minimalistic" ? "text-white hover:bg-white hover:text-black transition-colors duration-200" : "text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors";
1098
- const menu = isOpen && mounted && menuPosition ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1274
+ const menu = isOpen && mounted && menuPosition ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
1099
1275
  "div",
1100
1276
  {
1101
1277
  ref: menuRef,
@@ -1107,7 +1283,7 @@ var ActionMenu = ({
1107
1283
  },
1108
1284
  children: items.map((item, index) => {
1109
1285
  if (item.type === "divider") {
1110
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1286
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
1111
1287
  "div",
1112
1288
  {
1113
1289
  className: "my-1 border-t border-gray-200 dark:border-gray-700"
@@ -1115,15 +1291,15 @@ var ActionMenu = ({
1115
1291
  index
1116
1292
  );
1117
1293
  }
1118
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
1294
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
1119
1295
  "button",
1120
1296
  {
1121
1297
  onClick: () => handleItemClick(item),
1122
1298
  disabled: item.disabled,
1123
1299
  className: `w-full text-left px-4 py-3 flex items-center gap-3 ${itemBaseStyles} ${item.disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"} ${item.variant === "danger" ? "text-red-600 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/20" : ""}`,
1124
1300
  children: [
1125
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "flex-shrink-0", children: item.icon }),
1126
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "flex-1", children: item.label })
1301
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "flex-shrink-0", children: item.icon }),
1302
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "flex-1", children: item.label })
1127
1303
  ]
1128
1304
  },
1129
1305
  index
@@ -1131,14 +1307,14 @@ var ActionMenu = ({
1131
1307
  })
1132
1308
  }
1133
1309
  ) : null;
1134
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [
1135
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "relative inline-block", ref: triggerRef, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { onClick: () => setIsOpen(!isOpen), children: trigger || defaultTrigger }) }),
1310
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
1311
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "relative inline-block", ref: triggerRef, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { onClick: () => setIsOpen(!isOpen), children: trigger || defaultTrigger }) }),
1136
1312
  mounted && (0, import_react_dom.createPortal)(menu, document.body)
1137
1313
  ] });
1138
1314
  };
1139
1315
 
1140
1316
  // src/components/Card.tsx
1141
- var import_jsx_runtime42 = require("react/jsx-runtime");
1317
+ var import_jsx_runtime43 = require("react/jsx-runtime");
1142
1318
  var paddingClasses = {
1143
1319
  none: "",
1144
1320
  sm: "p-4",
@@ -1153,8 +1329,8 @@ var Card = ({
1153
1329
  }) => {
1154
1330
  const { theme } = useTheme();
1155
1331
  const paddingClass = paddingClasses[padding];
1156
- const hoverClass = hover ? "hover:shadow-lg transition-shadow duration-200" : "";
1157
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
1332
+ const hoverClass = hover ? "hover:shadow-xl hover:scale-[1.02] hover:border-blue-400 dark:hover:border-blue-500 cursor-pointer transition-all duration-200 ease-in-out" : "";
1333
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
1158
1334
  "div",
1159
1335
  {
1160
1336
  className: `bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 ${paddingClass} ${hoverClass} ${className}`,
@@ -1164,7 +1340,7 @@ var Card = ({
1164
1340
  };
1165
1341
 
1166
1342
  // src/components/Alert.tsx
1167
- var import_jsx_runtime43 = require("react/jsx-runtime");
1343
+ var import_jsx_runtime44 = require("react/jsx-runtime");
1168
1344
  var variantStyles = {
1169
1345
  info: "bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800 text-blue-900 dark:text-blue-100",
1170
1346
  success: "bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800 text-green-900 dark:text-green-100",
@@ -1187,38 +1363,38 @@ var Alert = ({
1187
1363
  const { theme } = useTheme();
1188
1364
  const variantClass = variantStyles[variant];
1189
1365
  const iconClass = iconStyles[variant];
1190
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: `rounded-lg border p-4 ${variantClass} ${className}`, role: "alert", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex items-start gap-3", children: [
1191
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: `flex-shrink-0 ${iconClass}`, children: [
1192
- variant === "info" && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" }) }),
1193
- variant === "success" && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z", clipRule: "evenodd" }) }),
1194
- variant === "warning" && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("path", { fillRule: "evenodd", d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z", clipRule: "evenodd" }) }),
1195
- variant === "error" && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z", clipRule: "evenodd" }) })
1366
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: `rounded-lg border p-4 ${variantClass} ${className}`, role: "alert", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex items-start gap-3", children: [
1367
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: `flex-shrink-0 ${iconClass}`, children: [
1368
+ variant === "info" && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" }) }),
1369
+ variant === "success" && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z", clipRule: "evenodd" }) }),
1370
+ variant === "warning" && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("path", { fillRule: "evenodd", d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z", clipRule: "evenodd" }) }),
1371
+ variant === "error" && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z", clipRule: "evenodd" }) })
1196
1372
  ] }),
1197
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex-1", children: [
1198
- title && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("h3", { className: "font-semibold mb-1", children: title }),
1199
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "text-sm", children })
1373
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex-1", children: [
1374
+ title && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("h3", { className: "font-semibold mb-1", children: title }),
1375
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "text-sm", children })
1200
1376
  ] }),
1201
- onClose && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
1377
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
1202
1378
  "button",
1203
1379
  {
1204
1380
  onClick: onClose,
1205
1381
  className: `flex-shrink-0 ${iconClass} hover:opacity-70 transition-opacity`,
1206
1382
  "aria-label": "Close alert",
1207
- children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
1383
+ children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
1208
1384
  }
1209
1385
  )
1210
1386
  ] }) });
1211
1387
  };
1212
1388
 
1213
1389
  // src/components/Checkbox.tsx
1214
- var import_react9 = require("react");
1215
- var import_jsx_runtime44 = require("react/jsx-runtime");
1216
- var Checkbox = (0, import_react9.forwardRef)(
1390
+ var import_react10 = require("react");
1391
+ var import_jsx_runtime45 = require("react/jsx-runtime");
1392
+ var Checkbox = (0, import_react10.forwardRef)(
1217
1393
  ({ label, error, className = "", disabled, ...props }, ref) => {
1218
1394
  const { theme } = useTheme();
1219
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className, children: [
1220
- /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("label", { className: "flex items-center gap-2 cursor-pointer group", children: [
1221
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
1395
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className, children: [
1396
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("label", { className: "flex items-center gap-2 cursor-pointer group", children: [
1397
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
1222
1398
  "input",
1223
1399
  {
1224
1400
  ref,
@@ -1228,18 +1404,18 @@ var Checkbox = (0, import_react9.forwardRef)(
1228
1404
  ...props
1229
1405
  }
1230
1406
  ),
1231
- label && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: `text-sm text-gray-700 dark:text-gray-300 ${disabled ? "opacity-50 cursor-not-allowed" : "group-hover:text-gray-900 dark:group-hover:text-gray-100"}`, children: label })
1407
+ label && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: `text-sm text-gray-700 dark:text-gray-300 ${disabled ? "opacity-50 cursor-not-allowed" : "group-hover:text-gray-900 dark:group-hover:text-gray-100"}`, children: label })
1232
1408
  ] }),
1233
- error && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error })
1409
+ error && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error })
1234
1410
  ] });
1235
1411
  }
1236
1412
  );
1237
1413
  Checkbox.displayName = "Checkbox";
1238
1414
 
1239
1415
  // src/components/Toggle.tsx
1240
- var import_react10 = require("react");
1241
- var import_jsx_runtime45 = require("react/jsx-runtime");
1242
- var Toggle = (0, import_react10.forwardRef)(
1416
+ var import_react11 = require("react");
1417
+ var import_jsx_runtime46 = require("react/jsx-runtime");
1418
+ var Toggle = (0, import_react11.forwardRef)(
1243
1419
  ({ label, size = "md", className = "", disabled, checked, ...props }, ref) => {
1244
1420
  const { theme } = useTheme();
1245
1421
  const toggleClasses = {
@@ -1257,9 +1433,9 @@ var Toggle = (0, import_react10.forwardRef)(
1257
1433
  }
1258
1434
  };
1259
1435
  const currentSize = toggleClasses[size];
1260
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("label", { className: `inline-flex items-center gap-3 cursor-pointer ${disabled ? "opacity-50 cursor-not-allowed" : ""} ${className}`, children: [
1261
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "relative", children: [
1262
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
1436
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("label", { className: `inline-flex items-center gap-3 cursor-pointer ${disabled ? "opacity-50 cursor-not-allowed" : ""} ${className}`, children: [
1437
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "relative", children: [
1438
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
1263
1439
  "input",
1264
1440
  {
1265
1441
  ref,
@@ -1270,27 +1446,27 @@ var Toggle = (0, import_react10.forwardRef)(
1270
1446
  ...props
1271
1447
  }
1272
1448
  ),
1273
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
1449
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
1274
1450
  "div",
1275
1451
  {
1276
1452
  className: `${currentSize.switch} bg-gray-300 dark:bg-gray-700 peer-focus:ring-2 peer-focus:ring-blue-500 rounded-full peer peer-checked:bg-blue-600 dark:peer-checked:bg-blue-500 transition-colors`
1277
1453
  }
1278
1454
  ),
1279
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
1455
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
1280
1456
  "div",
1281
1457
  {
1282
1458
  className: `${currentSize.thumb} bg-white rounded-full shadow-md absolute top-0.5 left-0.5 transition-transform`
1283
1459
  }
1284
1460
  )
1285
1461
  ] }),
1286
- label && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: label })
1462
+ label && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: label })
1287
1463
  ] });
1288
1464
  }
1289
1465
  );
1290
1466
  Toggle.displayName = "Toggle";
1291
1467
 
1292
1468
  // src/components/Badge.tsx
1293
- var import_jsx_runtime46 = require("react/jsx-runtime");
1469
+ var import_jsx_runtime47 = require("react/jsx-runtime");
1294
1470
  var variantStyles2 = {
1295
1471
  default: "bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200",
1296
1472
  primary: "bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-200",
@@ -1313,12 +1489,12 @@ var Badge = ({
1313
1489
  const { theme } = useTheme();
1314
1490
  const variantClass = variantStyles2[variant];
1315
1491
  const sizeClass = sizeStyles[size];
1316
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: `inline-flex items-center font-medium rounded-full ${variantClass} ${sizeClass} ${className}`, children });
1492
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: `inline-flex items-center font-medium rounded-full ${variantClass} ${sizeClass} ${className}`, children });
1317
1493
  };
1318
1494
 
1319
1495
  // src/components/Spinner.tsx
1320
- var import_jsx_runtime47 = require("react/jsx-runtime");
1321
- var sizeClasses5 = {
1496
+ var import_jsx_runtime48 = require("react/jsx-runtime");
1497
+ var sizeClasses6 = {
1322
1498
  sm: "w-4 h-4 border-2",
1323
1499
  md: "w-8 h-8 border-2",
1324
1500
  lg: "w-12 h-12 border-3",
@@ -1335,22 +1511,22 @@ var Spinner = ({
1335
1511
  className = ""
1336
1512
  }) => {
1337
1513
  const { theme } = useTheme();
1338
- const sizeClass = sizeClasses5[size];
1514
+ const sizeClass = sizeClasses6[size];
1339
1515
  const colorClass = colorClasses[color];
1340
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
1516
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
1341
1517
  "div",
1342
1518
  {
1343
1519
  className: `inline-block rounded-full animate-spin ${sizeClass} ${colorClass} ${className}`,
1344
1520
  role: "status",
1345
1521
  "aria-label": "Loading",
1346
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "sr-only", children: "Loading..." })
1522
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "sr-only", children: "Loading..." })
1347
1523
  }
1348
1524
  );
1349
1525
  };
1350
1526
 
1351
1527
  // src/components/Tabs.tsx
1352
- var import_react11 = require("react");
1353
- var import_jsx_runtime48 = require("react/jsx-runtime");
1528
+ var import_react12 = require("react");
1529
+ var import_jsx_runtime49 = require("react/jsx-runtime");
1354
1530
  var Tabs = ({
1355
1531
  tabs,
1356
1532
  defaultIndex = 0,
@@ -1358,14 +1534,14 @@ var Tabs = ({
1358
1534
  className = ""
1359
1535
  }) => {
1360
1536
  const { theme } = useTheme();
1361
- const [activeIndex, setActiveIndex] = (0, import_react11.useState)(defaultIndex);
1537
+ const [activeIndex, setActiveIndex] = (0, import_react12.useState)(defaultIndex);
1362
1538
  const handleTabClick = (index) => {
1363
1539
  if (tabs[index].disabled) return;
1364
1540
  setActiveIndex(index);
1365
1541
  onChange?.(index);
1366
1542
  };
1367
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className, children: [
1368
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("nav", { className: "flex gap-8 px-6", "aria-label": "Tabs", children: tabs.map((tab, index) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
1543
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className, children: [
1544
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("nav", { className: "flex gap-8 px-6", "aria-label": "Tabs", children: tabs.map((tab, index) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
1369
1545
  "button",
1370
1546
  {
1371
1547
  onClick: () => handleTabClick(index),
@@ -1376,12 +1552,12 @@ var Tabs = ({
1376
1552
  },
1377
1553
  index
1378
1554
  )) }) }),
1379
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { children: tabs[activeIndex]?.content })
1555
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { children: tabs[activeIndex]?.content })
1380
1556
  ] });
1381
1557
  };
1382
1558
 
1383
1559
  // src/components/Table.tsx
1384
- var import_jsx_runtime49 = require("react/jsx-runtime");
1560
+ var import_jsx_runtime50 = require("react/jsx-runtime");
1385
1561
  function Table({
1386
1562
  columns,
1387
1563
  data,
@@ -1391,11 +1567,11 @@ function Table({
1391
1567
  className = ""
1392
1568
  }) {
1393
1569
  const { theme } = useTheme();
1394
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: `overflow-x-auto ${className}`, children: [
1395
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("table", { className: "w-full text-left", children: [
1396
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("thead", { className: "bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("tr", { children: columns.map((column, colIndex) => {
1570
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: `overflow-x-auto ${className}`, children: [
1571
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("table", { className: "w-full text-left", children: [
1572
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("thead", { className: "bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("tr", { children: columns.map((column, colIndex) => {
1397
1573
  const isLast = colIndex === columns.length - 1;
1398
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
1574
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
1399
1575
  "th",
1400
1576
  {
1401
1577
  className: isLast ? "px-6 py-3 text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider relative" : "px-6 py-3 text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider",
@@ -1405,18 +1581,18 @@ function Table({
1405
1581
  column.key
1406
1582
  );
1407
1583
  }) }) }),
1408
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("tbody", { className: "bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700", children: data.map((row, rowIndex) => {
1584
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("tbody", { className: "bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700", children: data.map((row, rowIndex) => {
1409
1585
  const rowClasses = [
1410
1586
  striped && rowIndex % 2 === 1 ? "bg-gray-50 dark:bg-gray-800/50" : "",
1411
1587
  hoverable ? "hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors" : ""
1412
1588
  ].filter(Boolean).join(" ");
1413
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
1589
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
1414
1590
  "tr",
1415
1591
  {
1416
1592
  className: rowClasses,
1417
1593
  children: columns.map((column, colIndex) => {
1418
1594
  const isLast = colIndex === columns.length - 1;
1419
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
1595
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
1420
1596
  "td",
1421
1597
  {
1422
1598
  className: isLast ? "px-6 py-4 text-sm text-gray-900 dark:text-gray-100 overflow-visible" : "px-6 py-4 text-sm text-gray-900 dark:text-gray-100",
@@ -1430,12 +1606,12 @@ function Table({
1430
1606
  );
1431
1607
  }) })
1432
1608
  ] }),
1433
- data.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-center py-8 text-gray-500 dark:text-gray-400", children: "No data available" })
1609
+ data.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "text-center py-8 text-gray-500 dark:text-gray-400", children: "No data available" })
1434
1610
  ] });
1435
1611
  }
1436
1612
 
1437
1613
  // src/components/Pagination.tsx
1438
- var import_jsx_runtime50 = require("react/jsx-runtime");
1614
+ var import_jsx_runtime51 = require("react/jsx-runtime");
1439
1615
  var Pagination = ({
1440
1616
  currentPage,
1441
1617
  totalPages,
@@ -1476,8 +1652,8 @@ var Pagination = ({
1476
1652
  return range(1, totalPages);
1477
1653
  };
1478
1654
  const pages = paginationRange();
1479
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("nav", { className: `flex items-center gap-1 ${className}`, "aria-label": "Pagination", children: [
1480
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
1655
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("nav", { className: `flex items-center gap-1 ${className}`, "aria-label": "Pagination", children: [
1656
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
1481
1657
  "button",
1482
1658
  {
1483
1659
  onClick: () => onPageChange(currentPage - 1),
@@ -1489,7 +1665,7 @@ var Pagination = ({
1489
1665
  ),
1490
1666
  pages.map((page, index) => {
1491
1667
  if (page === "...") {
1492
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
1668
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
1493
1669
  "span",
1494
1670
  {
1495
1671
  className: "px-3 py-2 text-gray-700 dark:text-gray-300",
@@ -1498,7 +1674,7 @@ var Pagination = ({
1498
1674
  `dots-${index}`
1499
1675
  );
1500
1676
  }
1501
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
1677
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
1502
1678
  "button",
1503
1679
  {
1504
1680
  onClick: () => onPageChange(page),
@@ -1510,7 +1686,7 @@ var Pagination = ({
1510
1686
  page
1511
1687
  );
1512
1688
  }),
1513
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
1689
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
1514
1690
  "button",
1515
1691
  {
1516
1692
  onClick: () => onPageChange(currentPage + 1),
@@ -1524,9 +1700,9 @@ var Pagination = ({
1524
1700
  };
1525
1701
 
1526
1702
  // src/components/DatePicker.tsx
1527
- var import_react12 = require("react");
1703
+ var import_react13 = require("react");
1528
1704
  var import_react_dom2 = require("react-dom");
1529
- var import_jsx_runtime51 = require("react/jsx-runtime");
1705
+ var import_jsx_runtime52 = require("react/jsx-runtime");
1530
1706
  var DAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
1531
1707
  var MONTHS = [
1532
1708
  "January",
@@ -1555,16 +1731,16 @@ var DatePicker = ({
1555
1731
  placeholder = "Select date..."
1556
1732
  }) => {
1557
1733
  const { theme } = useTheme();
1558
- const [isOpen, setIsOpen] = (0, import_react12.useState)(false);
1559
- const [viewDate, setViewDate] = (0, import_react12.useState)(value || /* @__PURE__ */ new Date());
1560
- const [mounted, setMounted] = (0, import_react12.useState)(false);
1561
- const [calendarPosition, setCalendarPosition] = (0, import_react12.useState)(null);
1562
- const inputRef = (0, import_react12.useRef)(null);
1563
- const calendarRef = (0, import_react12.useRef)(null);
1564
- (0, import_react12.useEffect)(() => {
1734
+ const [isOpen, setIsOpen] = (0, import_react13.useState)(false);
1735
+ const [viewDate, setViewDate] = (0, import_react13.useState)(value || /* @__PURE__ */ new Date());
1736
+ const [mounted, setMounted] = (0, import_react13.useState)(false);
1737
+ const [calendarPosition, setCalendarPosition] = (0, import_react13.useState)(null);
1738
+ const inputRef = (0, import_react13.useRef)(null);
1739
+ const calendarRef = (0, import_react13.useRef)(null);
1740
+ (0, import_react13.useEffect)(() => {
1565
1741
  setMounted(true);
1566
1742
  }, []);
1567
- (0, import_react12.useEffect)(() => {
1743
+ (0, import_react13.useEffect)(() => {
1568
1744
  const handleClickOutside = (event) => {
1569
1745
  if (calendarRef.current && !calendarRef.current.contains(event.target) && inputRef.current && !inputRef.current.contains(event.target)) {
1570
1746
  setIsOpen(false);
@@ -1575,7 +1751,7 @@ var DatePicker = ({
1575
1751
  return () => document.removeEventListener("mousedown", handleClickOutside);
1576
1752
  }
1577
1753
  }, [isOpen]);
1578
- (0, import_react12.useEffect)(() => {
1754
+ (0, import_react13.useEffect)(() => {
1579
1755
  if (isOpen && inputRef.current) {
1580
1756
  const rect = inputRef.current.getBoundingClientRect();
1581
1757
  setCalendarPosition({
@@ -1647,7 +1823,7 @@ var DatePicker = ({
1647
1823
  const baseStyles = "w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 px-4 py-2.5 text-base transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500 cursor-pointer";
1648
1824
  const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
1649
1825
  const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
1650
- const calendar = isOpen && mounted && calendarPosition ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
1826
+ const calendar = isOpen && mounted && calendarPosition ? /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
1651
1827
  "div",
1652
1828
  {
1653
1829
  ref: calendarRef,
@@ -1658,23 +1834,23 @@ var DatePicker = ({
1658
1834
  minWidth: "320px"
1659
1835
  },
1660
1836
  children: [
1661
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
1662
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
1837
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
1838
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
1663
1839
  "button",
1664
1840
  {
1665
1841
  onClick: handlePrevMonth,
1666
1842
  className: "p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",
1667
1843
  "aria-label": "Previous month",
1668
- children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
1844
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
1669
1845
  }
1670
1846
  ),
1671
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "flex items-center gap-2", children: [
1672
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("h2", { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: [
1847
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "flex items-center gap-2", children: [
1848
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("h2", { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: [
1673
1849
  MONTHS[month],
1674
1850
  " ",
1675
1851
  year
1676
1852
  ] }),
1677
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
1853
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
1678
1854
  "button",
1679
1855
  {
1680
1856
  onClick: handleToday,
@@ -1683,23 +1859,23 @@ var DatePicker = ({
1683
1859
  }
1684
1860
  )
1685
1861
  ] }),
1686
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
1862
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
1687
1863
  "button",
1688
1864
  {
1689
1865
  onClick: handleNextMonth,
1690
1866
  className: "p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",
1691
1867
  "aria-label": "Next month",
1692
- children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
1868
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
1693
1869
  }
1694
1870
  )
1695
1871
  ] }),
1696
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-2", children: DAYS.map((day) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-1", children: day }, day)) }),
1697
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "grid grid-cols-7 gap-1", children: calendarDays.map((date, index) => {
1872
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-2", children: DAYS.map((day) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-1", children: day }, day)) }),
1873
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "grid grid-cols-7 gap-1", children: calendarDays.map((date, index) => {
1698
1874
  const isCurrentMonthDay = isCurrentMonth(date);
1699
1875
  const isTodayDay = isToday(date);
1700
1876
  const isSelectedDay = isSelected(date);
1701
1877
  const isDisabledDay = isDisabled(date);
1702
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
1878
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
1703
1879
  "button",
1704
1880
  {
1705
1881
  onClick: () => handleDateClick(date),
@@ -1720,39 +1896,39 @@ var DatePicker = ({
1720
1896
  ]
1721
1897
  }
1722
1898
  ) : null;
1723
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className, children: [
1724
- label && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
1725
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
1899
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className, children: [
1900
+ label && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
1901
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
1726
1902
  "div",
1727
1903
  {
1728
1904
  ref: inputRef,
1729
1905
  onClick: () => !disabled && setIsOpen(!isOpen),
1730
1906
  className: `${baseStyles} ${errorStyles} ${disabledStyles} flex items-center justify-between`.trim(),
1731
1907
  children: [
1732
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: !value ? "text-gray-500 dark:text-gray-400" : "", children: value ? formatDate(value) : placeholder }),
1733
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("svg", { className: "w-5 h-5 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) })
1908
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: !value ? "text-gray-500 dark:text-gray-400" : "", children: value ? formatDate(value) : placeholder }),
1909
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("svg", { className: "w-5 h-5 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) })
1734
1910
  ]
1735
1911
  }
1736
1912
  ),
1737
- error && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
1738
- helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText }),
1913
+ error && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
1914
+ helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText }),
1739
1915
  mounted && (0, import_react_dom2.createPortal)(calendar, document.body)
1740
1916
  ] });
1741
1917
  };
1742
1918
  DatePicker.displayName = "DatePicker";
1743
1919
 
1744
1920
  // src/components/TimePicker.tsx
1745
- var import_react13 = require("react");
1746
- var import_jsx_runtime52 = require("react/jsx-runtime");
1747
- var TimePicker = (0, import_react13.forwardRef)(
1921
+ var import_react14 = require("react");
1922
+ var import_jsx_runtime53 = require("react/jsx-runtime");
1923
+ var TimePicker = (0, import_react14.forwardRef)(
1748
1924
  ({ label, error, helperText, className = "", disabled, ...props }, ref) => {
1749
1925
  const { theme } = useTheme();
1750
1926
  const baseStyles = "w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 px-4 py-2.5 text-base transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500";
1751
1927
  const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
1752
1928
  const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
1753
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className, children: [
1754
- label && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
1755
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
1929
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className, children: [
1930
+ label && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
1931
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
1756
1932
  "input",
1757
1933
  {
1758
1934
  ref,
@@ -1762,17 +1938,17 @@ var TimePicker = (0, import_react13.forwardRef)(
1762
1938
  ...props
1763
1939
  }
1764
1940
  ),
1765
- error && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
1766
- helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
1941
+ error && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
1942
+ helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
1767
1943
  ] });
1768
1944
  }
1769
1945
  );
1770
1946
  TimePicker.displayName = "TimePicker";
1771
1947
 
1772
1948
  // src/components/DateTimePicker.tsx
1773
- var import_react14 = require("react");
1949
+ var import_react15 = require("react");
1774
1950
  var import_react_dom3 = require("react-dom");
1775
- var import_jsx_runtime53 = require("react/jsx-runtime");
1951
+ var import_jsx_runtime54 = require("react/jsx-runtime");
1776
1952
  var DAYS2 = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
1777
1953
  var MONTHS2 = [
1778
1954
  "January",
@@ -1801,19 +1977,19 @@ var DateTimePicker = ({
1801
1977
  placeholder = "Select date and time..."
1802
1978
  }) => {
1803
1979
  const { theme } = useTheme();
1804
- const [isOpen, setIsOpen] = (0, import_react14.useState)(false);
1805
- const [viewDate, setViewDate] = (0, import_react14.useState)(value || /* @__PURE__ */ new Date());
1806
- const [selectedTime, setSelectedTime] = (0, import_react14.useState)(
1980
+ const [isOpen, setIsOpen] = (0, import_react15.useState)(false);
1981
+ const [viewDate, setViewDate] = (0, import_react15.useState)(value || /* @__PURE__ */ new Date());
1982
+ const [selectedTime, setSelectedTime] = (0, import_react15.useState)(
1807
1983
  value ? { hours: value.getHours(), minutes: value.getMinutes() } : { hours: 12, minutes: 0 }
1808
1984
  );
1809
- const [mounted, setMounted] = (0, import_react14.useState)(false);
1810
- const [pickerPosition, setPickerPosition] = (0, import_react14.useState)(null);
1811
- const inputRef = (0, import_react14.useRef)(null);
1812
- const pickerRef = (0, import_react14.useRef)(null);
1813
- (0, import_react14.useEffect)(() => {
1985
+ const [mounted, setMounted] = (0, import_react15.useState)(false);
1986
+ const [pickerPosition, setPickerPosition] = (0, import_react15.useState)(null);
1987
+ const inputRef = (0, import_react15.useRef)(null);
1988
+ const pickerRef = (0, import_react15.useRef)(null);
1989
+ (0, import_react15.useEffect)(() => {
1814
1990
  setMounted(true);
1815
1991
  }, []);
1816
- (0, import_react14.useEffect)(() => {
1992
+ (0, import_react15.useEffect)(() => {
1817
1993
  const handleClickOutside = (event) => {
1818
1994
  if (pickerRef.current && !pickerRef.current.contains(event.target) && inputRef.current && !inputRef.current.contains(event.target)) {
1819
1995
  setIsOpen(false);
@@ -1824,7 +2000,7 @@ var DateTimePicker = ({
1824
2000
  return () => document.removeEventListener("mousedown", handleClickOutside);
1825
2001
  }
1826
2002
  }, [isOpen]);
1827
- (0, import_react14.useEffect)(() => {
2003
+ (0, import_react15.useEffect)(() => {
1828
2004
  if (isOpen && inputRef.current) {
1829
2005
  const rect = inputRef.current.getBoundingClientRect();
1830
2006
  setPickerPosition({
@@ -1929,7 +2105,7 @@ var DateTimePicker = ({
1929
2105
  const baseStyles = "w-full appearance-none rounded-lg border border-gray-300 bg-white text-gray-900 px-4 py-2.5 text-base transition-all duration-150 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent shadow-sm hover:border-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-100 dark:hover:border-gray-500 cursor-pointer";
1930
2106
  const errorStyles = error ? "border-red-500 focus:ring-red-500 dark:border-red-500" : "";
1931
2107
  const disabledStyles = disabled ? "opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-900" : "";
1932
- const picker = isOpen && mounted && pickerPosition ? /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
2108
+ const picker = isOpen && mounted && pickerPosition ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
1933
2109
  "div",
1934
2110
  {
1935
2111
  ref: pickerRef,
@@ -1940,23 +2116,23 @@ var DateTimePicker = ({
1940
2116
  minWidth: "360px"
1941
2117
  },
1942
2118
  children: [
1943
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
1944
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
2119
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
2120
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
1945
2121
  "button",
1946
2122
  {
1947
2123
  onClick: handlePrevMonth,
1948
2124
  className: "p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",
1949
2125
  "aria-label": "Previous month",
1950
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
2126
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
1951
2127
  }
1952
2128
  ),
1953
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center gap-2", children: [
1954
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("h2", { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: [
2129
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center gap-2", children: [
2130
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("h2", { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: [
1955
2131
  MONTHS2[month],
1956
2132
  " ",
1957
2133
  year
1958
2134
  ] }),
1959
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
2135
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
1960
2136
  "button",
1961
2137
  {
1962
2138
  onClick: handleToday,
@@ -1965,23 +2141,23 @@ var DateTimePicker = ({
1965
2141
  }
1966
2142
  )
1967
2143
  ] }),
1968
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
2144
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
1969
2145
  "button",
1970
2146
  {
1971
2147
  onClick: handleNextMonth,
1972
2148
  className: "p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",
1973
2149
  "aria-label": "Next month",
1974
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
2150
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
1975
2151
  }
1976
2152
  )
1977
2153
  ] }),
1978
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-2", children: DAYS2.map((day) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-1", children: day }, day)) }),
1979
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-4", children: calendarDays.map((date, index) => {
2154
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-2", children: DAYS2.map((day) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-1", children: day }, day)) }),
2155
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-4", children: calendarDays.map((date, index) => {
1980
2156
  const isCurrentMonthDay = isCurrentMonth(date);
1981
2157
  const isTodayDay = isToday(date);
1982
2158
  const isSelectedDay = isSelected(date);
1983
2159
  const isDisabledDay = isDisabled(date);
1984
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
2160
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
1985
2161
  "button",
1986
2162
  {
1987
2163
  onClick: () => handleDateClick(date),
@@ -1999,21 +2175,21 @@ var DateTimePicker = ({
1999
2175
  index
2000
2176
  );
2001
2177
  }) }),
2002
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "border-t border-gray-200 dark:border-gray-700 pt-4", children: [
2003
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-center justify-center gap-4 mb-4", children: [
2004
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col items-center", children: [
2005
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("label", { className: "text-xs font-semibold text-gray-600 dark:text-gray-400 mb-2", children: "Hour" }),
2006
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col items-center gap-1", children: [
2007
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
2178
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "border-t border-gray-200 dark:border-gray-700 pt-4", children: [
2179
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center justify-center gap-4 mb-4", children: [
2180
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col items-center", children: [
2181
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("label", { className: "text-xs font-semibold text-gray-600 dark:text-gray-400 mb-2", children: "Hour" }),
2182
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col items-center gap-1", children: [
2183
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
2008
2184
  "button",
2009
2185
  {
2010
2186
  type: "button",
2011
2187
  onClick: () => handleTimeChange((selectedTime.hours + 1) % 24, selectedTime.minutes),
2012
2188
  className: "p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors",
2013
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("svg", { className: "w-4 h-4 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 15l7-7 7 7" }) })
2189
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("svg", { className: "w-4 h-4 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 15l7-7 7 7" }) })
2014
2190
  }
2015
2191
  ),
2016
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
2192
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
2017
2193
  "input",
2018
2194
  {
2019
2195
  type: "number",
@@ -2029,31 +2205,31 @@ var DateTimePicker = ({
2029
2205
  className: "w-16 px-2 py-2 text-center border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 text-lg font-semibold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none"
2030
2206
  }
2031
2207
  ),
2032
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
2208
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
2033
2209
  "button",
2034
2210
  {
2035
2211
  type: "button",
2036
2212
  onClick: () => handleTimeChange((selectedTime.hours - 1 + 24) % 24, selectedTime.minutes),
2037
2213
  className: "p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors",
2038
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("svg", { className: "w-4 h-4 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) })
2214
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("svg", { className: "w-4 h-4 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) })
2039
2215
  }
2040
2216
  )
2041
2217
  ] })
2042
2218
  ] }),
2043
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-2xl font-bold text-gray-600 dark:text-gray-400 mt-8", children: ":" }),
2044
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col items-center", children: [
2045
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("label", { className: "text-xs font-semibold text-gray-600 dark:text-gray-400 mb-2", children: "Minute" }),
2046
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col items-center gap-1", children: [
2047
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
2219
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-2xl font-bold text-gray-600 dark:text-gray-400 mt-8", children: ":" }),
2220
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col items-center", children: [
2221
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("label", { className: "text-xs font-semibold text-gray-600 dark:text-gray-400 mb-2", children: "Minute" }),
2222
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col items-center gap-1", children: [
2223
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
2048
2224
  "button",
2049
2225
  {
2050
2226
  type: "button",
2051
2227
  onClick: () => handleTimeChange(selectedTime.hours, (selectedTime.minutes + 1) % 60),
2052
2228
  className: "p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors",
2053
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("svg", { className: "w-4 h-4 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 15l7-7 7 7" }) })
2229
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("svg", { className: "w-4 h-4 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 15l7-7 7 7" }) })
2054
2230
  }
2055
2231
  ),
2056
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
2232
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
2057
2233
  "input",
2058
2234
  {
2059
2235
  type: "number",
@@ -2069,20 +2245,20 @@ var DateTimePicker = ({
2069
2245
  className: "w-16 px-2 py-2 text-center border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 text-lg font-semibold [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none"
2070
2246
  }
2071
2247
  ),
2072
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
2248
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
2073
2249
  "button",
2074
2250
  {
2075
2251
  type: "button",
2076
2252
  onClick: () => handleTimeChange(selectedTime.hours, (selectedTime.minutes - 1 + 60) % 60),
2077
2253
  className: "p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors",
2078
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("svg", { className: "w-4 h-4 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) })
2254
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("svg", { className: "w-4 h-4 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) })
2079
2255
  }
2080
2256
  )
2081
2257
  ] })
2082
2258
  ] })
2083
2259
  ] }),
2084
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "text-center text-sm text-gray-600 dark:text-gray-400 mb-4", children: formatTime(selectedTime.hours, selectedTime.minutes) }),
2085
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
2260
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "text-center text-sm text-gray-600 dark:text-gray-400 mb-4", children: formatTime(selectedTime.hours, selectedTime.minutes) }),
2261
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
2086
2262
  "button",
2087
2263
  {
2088
2264
  onClick: handleDone,
@@ -2094,30 +2270,30 @@ var DateTimePicker = ({
2094
2270
  ]
2095
2271
  }
2096
2272
  ) : null;
2097
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className, children: [
2098
- label && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
2099
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
2273
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className, children: [
2274
+ label && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
2275
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
2100
2276
  "div",
2101
2277
  {
2102
2278
  ref: inputRef,
2103
2279
  onClick: () => !disabled && setIsOpen(!isOpen),
2104
2280
  className: `${baseStyles} ${errorStyles} ${disabledStyles} flex items-center justify-between`.trim(),
2105
2281
  children: [
2106
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: !value ? "text-gray-500 dark:text-gray-400" : "", children: value ? formatDateTime(value) : placeholder }),
2107
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("svg", { className: "w-5 h-5 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) })
2282
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: !value ? "text-gray-500 dark:text-gray-400" : "", children: value ? formatDateTime(value) : placeholder }),
2283
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("svg", { className: "w-5 h-5 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) })
2108
2284
  ]
2109
2285
  }
2110
2286
  ),
2111
- error && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
2112
- helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText }),
2287
+ error && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
2288
+ helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText }),
2113
2289
  mounted && (0, import_react_dom3.createPortal)(picker, document.body)
2114
2290
  ] });
2115
2291
  };
2116
2292
  DateTimePicker.displayName = "DateTimePicker";
2117
2293
 
2118
2294
  // src/components/Calendar.tsx
2119
- var import_react15 = require("react");
2120
- var import_jsx_runtime54 = require("react/jsx-runtime");
2295
+ var import_react16 = require("react");
2296
+ var import_jsx_runtime55 = require("react/jsx-runtime");
2121
2297
  var DAYS3 = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
2122
2298
  var MONTHS3 = [
2123
2299
  "January",
@@ -2141,8 +2317,8 @@ var Calendar = ({
2141
2317
  className = ""
2142
2318
  }) => {
2143
2319
  const { theme } = useTheme();
2144
- const [currentDate, setCurrentDate] = (0, import_react15.useState)(value || /* @__PURE__ */ new Date());
2145
- const [viewDate, setViewDate] = (0, import_react15.useState)(value || /* @__PURE__ */ new Date());
2320
+ const [currentDate, setCurrentDate] = (0, import_react16.useState)(value || /* @__PURE__ */ new Date());
2321
+ const [viewDate, setViewDate] = (0, import_react16.useState)(value || /* @__PURE__ */ new Date());
2146
2322
  const year = viewDate.getFullYear();
2147
2323
  const month = viewDate.getMonth();
2148
2324
  const firstDayOfMonth = new Date(year, month, 1).getDay();
@@ -2193,24 +2369,24 @@ var Calendar = ({
2193
2369
  setCurrentDate(today);
2194
2370
  onChange?.(today);
2195
2371
  };
2196
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: `bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-4 ${className}`, children: [
2197
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
2198
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
2372
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: `bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 p-4 ${className}`, children: [
2373
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
2374
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
2199
2375
  "button",
2200
2376
  {
2201
2377
  onClick: handlePrevMonth,
2202
2378
  className: "p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",
2203
2379
  "aria-label": "Previous month",
2204
- children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
2380
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
2205
2381
  }
2206
2382
  ),
2207
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center gap-2", children: [
2208
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("h2", { className: "text-lg font-semibold text-gray-900 dark:text-gray-100", children: [
2383
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex items-center gap-2", children: [
2384
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("h2", { className: "text-lg font-semibold text-gray-900 dark:text-gray-100", children: [
2209
2385
  MONTHS3[month],
2210
2386
  " ",
2211
2387
  year
2212
2388
  ] }),
2213
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
2389
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
2214
2390
  "button",
2215
2391
  {
2216
2392
  onClick: handleToday,
@@ -2219,17 +2395,17 @@ var Calendar = ({
2219
2395
  }
2220
2396
  )
2221
2397
  ] }),
2222
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
2398
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
2223
2399
  "button",
2224
2400
  {
2225
2401
  onClick: handleNextMonth,
2226
2402
  className: "p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",
2227
2403
  "aria-label": "Next month",
2228
- children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
2404
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("svg", { className: "w-5 h-5 text-gray-600 dark:text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
2229
2405
  }
2230
2406
  )
2231
2407
  ] }),
2232
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-2", children: DAYS3.map((day) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
2408
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-2", children: DAYS3.map((day) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
2233
2409
  "div",
2234
2410
  {
2235
2411
  className: "text-center text-xs font-semibold text-gray-600 dark:text-gray-400 py-2",
@@ -2237,13 +2413,13 @@ var Calendar = ({
2237
2413
  },
2238
2414
  day
2239
2415
  )) }),
2240
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "grid grid-cols-7 gap-1", children: calendarDays.map((date, index) => {
2241
- if (!date) return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", {}, index);
2416
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "grid grid-cols-7 gap-1", children: calendarDays.map((date, index) => {
2417
+ if (!date) return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", {}, index);
2242
2418
  const isCurrentMonthDay = isCurrentMonth(date);
2243
2419
  const isTodayDay = isToday(date);
2244
2420
  const isSelectedDay = isSelected(date);
2245
2421
  const isDisabledDay = isDisabled(date);
2246
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
2422
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
2247
2423
  "button",
2248
2424
  {
2249
2425
  onClick: () => handleDateClick(date),
@@ -2265,8 +2441,8 @@ var Calendar = ({
2265
2441
  };
2266
2442
 
2267
2443
  // src/components/Radio.tsx
2268
- var import_react16 = __toESM(require("react"));
2269
- var import_jsx_runtime55 = require("react/jsx-runtime");
2444
+ var import_react17 = __toESM(require("react"));
2445
+ var import_jsx_runtime56 = require("react/jsx-runtime");
2270
2446
  var Radio = ({
2271
2447
  name,
2272
2448
  options,
@@ -2277,7 +2453,7 @@ var Radio = ({
2277
2453
  orientation = "vertical",
2278
2454
  className = ""
2279
2455
  }) => {
2280
- const [internalValue, setInternalValue] = import_react16.default.useState(defaultValue || "");
2456
+ const [internalValue, setInternalValue] = import_react17.default.useState(defaultValue || "");
2281
2457
  const value = controlledValue !== void 0 ? controlledValue : internalValue;
2282
2458
  const handleChange = (optionValue) => {
2283
2459
  if (disabled) return;
@@ -2285,17 +2461,17 @@ var Radio = ({
2285
2461
  onChange?.(optionValue);
2286
2462
  };
2287
2463
  const containerClass = orientation === "horizontal" ? "flex flex-wrap gap-4" : "flex flex-col gap-2";
2288
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: `${containerClass} ${className}`, role: "radiogroup", children: options.map((option) => {
2464
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: `${containerClass} ${className}`, role: "radiogroup", children: options.map((option) => {
2289
2465
  const isDisabled = disabled || option.disabled;
2290
2466
  const isChecked = value === option.value;
2291
2467
  const id = `${name}-${option.value}`;
2292
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
2468
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
2293
2469
  "label",
2294
2470
  {
2295
2471
  htmlFor: id,
2296
2472
  className: `flex items-center gap-2 cursor-pointer ${isDisabled ? "opacity-50 cursor-not-allowed" : ""}`,
2297
2473
  children: [
2298
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
2474
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
2299
2475
  "input",
2300
2476
  {
2301
2477
  type: "radio",
@@ -2308,7 +2484,7 @@ var Radio = ({
2308
2484
  className: "w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600 cursor-pointer disabled:cursor-not-allowed"
2309
2485
  }
2310
2486
  ),
2311
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-sm font-medium text-gray-900 dark:text-gray-300", children: option.label })
2487
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-sm font-medium text-gray-900 dark:text-gray-300", children: option.label })
2312
2488
  ]
2313
2489
  },
2314
2490
  option.value
@@ -2317,7 +2493,7 @@ var Radio = ({
2317
2493
  };
2318
2494
 
2319
2495
  // src/components/ProgressBar.tsx
2320
- var import_jsx_runtime56 = require("react/jsx-runtime");
2496
+ var import_jsx_runtime57 = require("react/jsx-runtime");
2321
2497
  var ProgressBar = ({
2322
2498
  value,
2323
2499
  max = 100,
@@ -2328,7 +2504,7 @@ var ProgressBar = ({
2328
2504
  className = ""
2329
2505
  }) => {
2330
2506
  const percentage = Math.min(Math.max(value / max * 100, 0), 100);
2331
- const sizeClasses6 = {
2507
+ const sizeClasses7 = {
2332
2508
  sm: "h-1",
2333
2509
  md: "h-2",
2334
2510
  lg: "h-3"
@@ -2339,26 +2515,26 @@ var ProgressBar = ({
2339
2515
  warning: "bg-yellow-500 dark:bg-yellow-400",
2340
2516
  danger: "bg-red-600 dark:bg-red-500"
2341
2517
  };
2342
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: `w-full ${className}`, children: [
2343
- (showLabel || label) && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex justify-between items-center mb-1", children: [
2344
- label && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: label }),
2345
- showLabel && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: [
2518
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: `w-full ${className}`, children: [
2519
+ (showLabel || label) && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex justify-between items-center mb-1", children: [
2520
+ label && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: label }),
2521
+ showLabel && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: [
2346
2522
  Math.round(percentage),
2347
2523
  "%"
2348
2524
  ] })
2349
2525
  ] }),
2350
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
2526
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
2351
2527
  "div",
2352
2528
  {
2353
- className: `w-full bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden ${sizeClasses6[size]}`,
2529
+ className: `w-full bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden ${sizeClasses7[size]}`,
2354
2530
  role: "progressbar",
2355
2531
  "aria-valuenow": value,
2356
2532
  "aria-valuemin": 0,
2357
2533
  "aria-valuemax": max,
2358
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
2534
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
2359
2535
  "div",
2360
2536
  {
2361
- className: `${sizeClasses6[size]} ${variantClasses[variant]} rounded-full transition-all duration-300 ease-out`,
2537
+ className: `${sizeClasses7[size]} ${variantClasses[variant]} rounded-full transition-all duration-300 ease-out`,
2362
2538
  style: { width: `${percentage}%` }
2363
2539
  }
2364
2540
  )
@@ -2368,8 +2544,8 @@ var ProgressBar = ({
2368
2544
  };
2369
2545
 
2370
2546
  // src/components/Slider.tsx
2371
- var import_react17 = __toESM(require("react"));
2372
- var import_jsx_runtime57 = require("react/jsx-runtime");
2547
+ var import_react18 = __toESM(require("react"));
2548
+ var import_jsx_runtime58 = require("react/jsx-runtime");
2373
2549
  var Slider = ({
2374
2550
  value: controlledValue,
2375
2551
  defaultValue = 50,
@@ -2382,7 +2558,7 @@ var Slider = ({
2382
2558
  label,
2383
2559
  className = ""
2384
2560
  }) => {
2385
- const [internalValue, setInternalValue] = import_react17.default.useState(defaultValue);
2561
+ const [internalValue, setInternalValue] = import_react18.default.useState(defaultValue);
2386
2562
  const value = controlledValue !== void 0 ? controlledValue : internalValue;
2387
2563
  const handleChange = (e) => {
2388
2564
  const newValue = Number(e.target.value);
@@ -2390,21 +2566,21 @@ var Slider = ({
2390
2566
  onChange?.(newValue);
2391
2567
  };
2392
2568
  const percentage = (value - min) / (max - min) * 100;
2393
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: `w-full ${className}`, children: [
2394
- (label || showValue) && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex justify-between items-center mb-2", children: [
2395
- label && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: label }),
2396
- showValue && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: value })
2569
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: `w-full ${className}`, children: [
2570
+ (label || showValue) && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex justify-between items-center mb-2", children: [
2571
+ label && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: label }),
2572
+ showValue && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: value })
2397
2573
  ] }),
2398
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "relative", children: [
2399
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "absolute inset-0 h-2 bg-gray-200 dark:bg-gray-700 rounded-full top-1/2 -translate-y-1/2" }),
2400
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
2574
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "relative", children: [
2575
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "absolute inset-0 h-2 bg-gray-200 dark:bg-gray-700 rounded-full top-1/2 -translate-y-1/2" }),
2576
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
2401
2577
  "div",
2402
2578
  {
2403
2579
  className: "absolute h-2 bg-blue-600 dark:bg-blue-500 rounded-full top-1/2 -translate-y-1/2 pointer-events-none",
2404
2580
  style: { width: `${percentage}%` }
2405
2581
  }
2406
2582
  ),
2407
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
2583
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
2408
2584
  "input",
2409
2585
  {
2410
2586
  type: "range",
@@ -2426,8 +2602,8 @@ var Slider = ({
2426
2602
  };
2427
2603
 
2428
2604
  // src/components/Avatar.tsx
2429
- var import_react18 = __toESM(require("react"));
2430
- var import_jsx_runtime58 = require("react/jsx-runtime");
2605
+ var import_react19 = __toESM(require("react"));
2606
+ var import_jsx_runtime59 = require("react/jsx-runtime");
2431
2607
  var Avatar = ({
2432
2608
  src,
2433
2609
  alt,
@@ -2437,8 +2613,8 @@ var Avatar = ({
2437
2613
  className = "",
2438
2614
  fallbackColor = "bg-blue-600"
2439
2615
  }) => {
2440
- const [imageError, setImageError] = import_react18.default.useState(false);
2441
- const sizeClasses6 = {
2616
+ const [imageError, setImageError] = import_react19.default.useState(false);
2617
+ const sizeClasses7 = {
2442
2618
  xs: "w-6 h-6 text-xs",
2443
2619
  sm: "w-8 h-8 text-sm",
2444
2620
  md: "w-10 h-10 text-base",
@@ -2455,11 +2631,11 @@ var Avatar = ({
2455
2631
  };
2456
2632
  const showImage = src && !imageError;
2457
2633
  const showInitials = !showImage && name;
2458
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
2634
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
2459
2635
  "div",
2460
2636
  {
2461
- className: `${sizeClasses6[size]} ${shapeClass} flex items-center justify-center overflow-hidden ${showImage ? "bg-gray-200 dark:bg-gray-700" : `${fallbackColor} text-white`} ${className}`,
2462
- children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
2637
+ className: `${sizeClasses7[size]} ${shapeClass} flex items-center justify-center overflow-hidden ${showImage ? "bg-gray-200 dark:bg-gray-700" : `${fallbackColor} text-white`} ${className}`,
2638
+ children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
2463
2639
  "img",
2464
2640
  {
2465
2641
  src,
@@ -2467,13 +2643,13 @@ var Avatar = ({
2467
2643
  className: "w-full h-full object-cover",
2468
2644
  onError: () => setImageError(true)
2469
2645
  }
2470
- ) : showInitials ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "font-semibold select-none", children: getInitials(name) }) : /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
2646
+ ) : showInitials ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "font-semibold select-none", children: getInitials(name) }) : /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
2471
2647
  "svg",
2472
2648
  {
2473
2649
  className: "w-full h-full text-gray-400 dark:text-gray-600",
2474
2650
  fill: "currentColor",
2475
2651
  viewBox: "0 0 24 24",
2476
- children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" })
2652
+ children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" })
2477
2653
  }
2478
2654
  )
2479
2655
  }
@@ -2481,7 +2657,7 @@ var Avatar = ({
2481
2657
  };
2482
2658
 
2483
2659
  // src/components/Textarea.tsx
2484
- var import_jsx_runtime59 = require("react/jsx-runtime");
2660
+ var import_jsx_runtime60 = require("react/jsx-runtime");
2485
2661
  var Textarea = ({
2486
2662
  label,
2487
2663
  error,
@@ -2492,7 +2668,7 @@ var Textarea = ({
2492
2668
  disabled,
2493
2669
  ...props
2494
2670
  }) => {
2495
- const sizeClasses6 = {
2671
+ const sizeClasses7 = {
2496
2672
  sm: "px-3 py-1.5 text-sm min-h-[80px]",
2497
2673
  md: "px-4 py-2 text-base min-h-[100px]",
2498
2674
  lg: "px-4 py-3 text-lg min-h-[120px]"
@@ -2508,35 +2684,35 @@ var Textarea = ({
2508
2684
  bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100
2509
2685
  placeholder:text-gray-500 dark:placeholder:text-gray-400
2510
2686
  disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-gray-50 dark:disabled:bg-gray-900`;
2511
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: `w-full ${className}`, children: [
2512
- label && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
2513
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
2687
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: `w-full ${className}`, children: [
2688
+ label && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1", children: label }),
2689
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
2514
2690
  "textarea",
2515
2691
  {
2516
- className: `${baseClasses} ${sizeClasses6[size]} ${resizeClasses[resize]}`,
2692
+ className: `${baseClasses} ${sizeClasses7[size]} ${resizeClasses[resize]}`,
2517
2693
  disabled,
2518
2694
  ...props
2519
2695
  }
2520
2696
  ),
2521
- error && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
2522
- helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
2697
+ error && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: error }),
2698
+ helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "mt-1 text-sm text-gray-500 dark:text-gray-400", children: helperText })
2523
2699
  ] });
2524
2700
  };
2525
2701
 
2526
2702
  // src/components/Toast.tsx
2527
- var import_react19 = require("react");
2528
- var import_jsx_runtime60 = require("react/jsx-runtime");
2529
- var ToastContext = (0, import_react19.createContext)(void 0);
2703
+ var import_react20 = require("react");
2704
+ var import_jsx_runtime61 = require("react/jsx-runtime");
2705
+ var ToastContext = (0, import_react20.createContext)(void 0);
2530
2706
  var useToast = () => {
2531
- const context = (0, import_react19.useContext)(ToastContext);
2707
+ const context = (0, import_react20.useContext)(ToastContext);
2532
2708
  if (!context) {
2533
2709
  throw new Error("useToast must be used within a ToastProvider");
2534
2710
  }
2535
2711
  return context;
2536
2712
  };
2537
2713
  var ToastProvider = ({ children, position = "top-right" }) => {
2538
- const [toasts, setToasts] = (0, import_react19.useState)([]);
2539
- const addToast = (0, import_react19.useCallback)((toast2) => {
2714
+ const [toasts, setToasts] = (0, import_react20.useState)([]);
2715
+ const addToast = (0, import_react20.useCallback)((toast2) => {
2540
2716
  const id = Math.random().toString(36).substring(7);
2541
2717
  const newToast = { ...toast2, id };
2542
2718
  setToasts((prev) => [...prev, newToast]);
@@ -2545,7 +2721,7 @@ var ToastProvider = ({ children, position = "top-right" }) => {
2545
2721
  removeToast(id);
2546
2722
  }, duration);
2547
2723
  }, []);
2548
- const removeToast = (0, import_react19.useCallback)((id) => {
2724
+ const removeToast = (0, import_react20.useCallback)((id) => {
2549
2725
  setToasts((prev) => prev.filter((toast2) => toast2.id !== id));
2550
2726
  }, []);
2551
2727
  const positionClasses2 = {
@@ -2556,9 +2732,9 @@ var ToastProvider = ({ children, position = "top-right" }) => {
2556
2732
  "top-center": "top-4 left-1/2 -translate-x-1/2",
2557
2733
  "bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
2558
2734
  };
2559
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(ToastContext.Provider, { value: { toasts, addToast, removeToast }, children: [
2735
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(ToastContext.Provider, { value: { toasts, addToast, removeToast }, children: [
2560
2736
  children,
2561
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: `fixed ${positionClasses2[position]} z-50 flex flex-col gap-2 max-w-md`, children: toasts.map((toast2) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ToastItem, { toast: toast2, onClose: () => removeToast(toast2.id) }, toast2.id)) })
2737
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: `fixed ${positionClasses2[position]} z-50 flex flex-col gap-2 max-w-md`, children: toasts.map((toast2) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ToastItem, { toast: toast2, onClose: () => removeToast(toast2.id) }, toast2.id)) })
2562
2738
  ] });
2563
2739
  };
2564
2740
  var ToastItem = ({ toast: toast2, onClose }) => {
@@ -2569,27 +2745,27 @@ var ToastItem = ({ toast: toast2, onClose }) => {
2569
2745
  info: "bg-blue-50 dark:bg-blue-900/30 border-blue-500 text-blue-800 dark:text-blue-200"
2570
2746
  };
2571
2747
  const typeIcons = {
2572
- success: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CheckIcon, { size: "sm", className: "text-green-600 dark:text-green-400" }),
2573
- error: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CloseIcon, { size: "sm", className: "text-red-600 dark:text-red-400" }),
2574
- warning: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("svg", { className: "w-4 h-4 text-yellow-600 dark:text-yellow-400", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("path", { fillRule: "evenodd", d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z", clipRule: "evenodd" }) }),
2575
- info: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("svg", { className: "w-4 h-4 text-blue-600 dark:text-blue-400", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" }) })
2748
+ success: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CheckIcon, { size: "sm", className: "text-green-600 dark:text-green-400" }),
2749
+ error: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CloseIcon, { size: "sm", className: "text-red-600 dark:text-red-400" }),
2750
+ warning: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("svg", { className: "w-4 h-4 text-yellow-600 dark:text-yellow-400", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("path", { fillRule: "evenodd", d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z", clipRule: "evenodd" }) }),
2751
+ info: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("svg", { className: "w-4 h-4 text-blue-600 dark:text-blue-400", fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" }) })
2576
2752
  };
2577
2753
  const type = toast2.type || "info";
2578
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
2754
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
2579
2755
  "div",
2580
2756
  {
2581
2757
  className: `flex items-start gap-3 p-4 rounded-lg border-l-4 shadow-lg backdrop-blur-sm ${typeStyles[type]} animate-slide-in`,
2582
2758
  role: "alert",
2583
2759
  children: [
2584
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "flex-shrink-0 mt-0.5", children: typeIcons[type] }),
2585
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "flex-1 text-sm font-medium", children: toast2.message }),
2586
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
2760
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "flex-shrink-0 mt-0.5", children: typeIcons[type] }),
2761
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: "flex-1 text-sm font-medium", children: toast2.message }),
2762
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
2587
2763
  "button",
2588
2764
  {
2589
2765
  onClick: onClose,
2590
2766
  className: "flex-shrink-0 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 transition-colors",
2591
2767
  "aria-label": "Close",
2592
- children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CloseIcon, { size: "sm" })
2768
+ children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CloseIcon, { size: "sm" })
2593
2769
  }
2594
2770
  )
2595
2771
  ]
@@ -2620,8 +2796,8 @@ var toast = {
2620
2796
  };
2621
2797
 
2622
2798
  // src/components/Stepper.tsx
2623
- var import_react20 = __toESM(require("react"));
2624
- var import_jsx_runtime61 = require("react/jsx-runtime");
2799
+ var import_react21 = __toESM(require("react"));
2800
+ var import_jsx_runtime62 = require("react/jsx-runtime");
2625
2801
  var Stepper = ({
2626
2802
  steps,
2627
2803
  currentStep,
@@ -2629,18 +2805,18 @@ var Stepper = ({
2629
2805
  className = ""
2630
2806
  }) => {
2631
2807
  const isHorizontal = orientation === "horizontal";
2632
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: `${isHorizontal ? "flex items-center" : "flex flex-col"} ${className}`, children: steps.map((step, index) => {
2808
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: `${isHorizontal ? "flex items-center" : "flex flex-col"} ${className}`, children: steps.map((step, index) => {
2633
2809
  const stepNumber = index + 1;
2634
2810
  const isActive = stepNumber === currentStep;
2635
2811
  const isCompleted = stepNumber < currentStep;
2636
2812
  const isLast = index === steps.length - 1;
2637
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_react20.default.Fragment, { children: [
2638
- /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: `flex ${isHorizontal ? "flex-col items-center" : "flex-row items-start"} ${isHorizontal ? "" : "flex-1"}`, children: [
2639
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "flex items-center", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
2813
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react21.default.Fragment, { children: [
2814
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: `flex ${isHorizontal ? "flex-col items-center" : "flex-row items-start"} ${isHorizontal ? "" : "flex-1"}`, children: [
2815
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "flex items-center", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
2640
2816
  "div",
2641
2817
  {
2642
2818
  className: `flex items-center justify-center w-10 h-10 rounded-full border-2 transition-all ${isCompleted ? "bg-blue-600 border-blue-600 dark:bg-blue-500 dark:border-blue-500" : isActive ? "border-blue-600 bg-white dark:border-blue-500 dark:bg-gray-800" : "border-gray-300 bg-white dark:border-gray-600 dark:bg-gray-800"}`,
2643
- children: isCompleted ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CheckIcon, { size: "sm", className: "text-white" }) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
2819
+ children: isCompleted ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(CheckIcon, { size: "sm", className: "text-white" }) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
2644
2820
  "span",
2645
2821
  {
2646
2822
  className: `text-sm font-semibold ${isActive ? "text-blue-600 dark:text-blue-400" : "text-gray-500 dark:text-gray-400"}`,
@@ -2649,18 +2825,18 @@ var Stepper = ({
2649
2825
  )
2650
2826
  }
2651
2827
  ) }),
2652
- /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: `${isHorizontal ? "mt-2 text-center" : "ml-4 pb-8"} ${isLast && !isHorizontal ? "pb-0" : ""}`, children: [
2653
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
2828
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: `${isHorizontal ? "mt-2 text-center" : "ml-4 pb-8"} ${isLast && !isHorizontal ? "pb-0" : ""}`, children: [
2829
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
2654
2830
  "p",
2655
2831
  {
2656
2832
  className: `text-sm font-medium ${isActive || isCompleted ? "text-gray-900 dark:text-gray-100" : "text-gray-500 dark:text-gray-400"}`,
2657
2833
  children: step.label
2658
2834
  }
2659
2835
  ),
2660
- step.description && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: step.description })
2836
+ step.description && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: step.description })
2661
2837
  ] })
2662
2838
  ] }),
2663
- !isLast && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
2839
+ !isLast && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
2664
2840
  "div",
2665
2841
  {
2666
2842
  className: `${isHorizontal ? "flex-1 h-0.5 mx-4" : "w-0.5 h-full ml-5 -mt-8"} ${isCompleted || isActive && stepNumber < currentStep ? "bg-blue-600 dark:bg-blue-500" : "bg-gray-300 dark:bg-gray-600"}`
@@ -2671,7 +2847,7 @@ var Stepper = ({
2671
2847
  };
2672
2848
 
2673
2849
  // src/components/Divider.tsx
2674
- var import_jsx_runtime62 = require("react/jsx-runtime");
2850
+ var import_jsx_runtime63 = require("react/jsx-runtime");
2675
2851
  var Divider = ({
2676
2852
  orientation = "horizontal",
2677
2853
  variant = "solid",
@@ -2690,14 +2866,14 @@ var Divider = ({
2690
2866
  center: "justify-center",
2691
2867
  right: "justify-end"
2692
2868
  };
2693
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: `flex items-center ${alignmentClasses[labelPosition]} ${className}`, role: "separator", children: [
2694
- labelPosition !== "left" && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: `flex-1 border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600` }),
2695
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "px-4 text-sm text-gray-500 dark:text-gray-400", children: label }),
2696
- labelPosition !== "right" && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: `flex-1 border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600` })
2869
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: `flex items-center ${alignmentClasses[labelPosition]} ${className}`, role: "separator", children: [
2870
+ labelPosition !== "left" && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: `flex-1 border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600` }),
2871
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "px-4 text-sm text-gray-500 dark:text-gray-400", children: label }),
2872
+ labelPosition !== "right" && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: `flex-1 border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600` })
2697
2873
  ] });
2698
2874
  }
2699
2875
  if (orientation === "vertical") {
2700
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
2876
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
2701
2877
  "div",
2702
2878
  {
2703
2879
  className: `inline-block h-full border-l ${variantClasses[variant]} border-gray-300 dark:border-gray-600 ${className}`,
@@ -2706,7 +2882,7 @@ var Divider = ({
2706
2882
  }
2707
2883
  );
2708
2884
  }
2709
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
2885
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
2710
2886
  "hr",
2711
2887
  {
2712
2888
  className: `border-t ${variantClasses[variant]} border-gray-300 dark:border-gray-600 ${className}`,
@@ -2716,8 +2892,8 @@ var Divider = ({
2716
2892
  };
2717
2893
 
2718
2894
  // src/components/FileUpload.tsx
2719
- var import_react21 = require("react");
2720
- var import_jsx_runtime63 = require("react/jsx-runtime");
2895
+ var import_react22 = require("react");
2896
+ var import_jsx_runtime64 = require("react/jsx-runtime");
2721
2897
  var FileUpload = ({
2722
2898
  accept,
2723
2899
  multiple = false,
@@ -2730,9 +2906,9 @@ var FileUpload = ({
2730
2906
  label,
2731
2907
  helperText
2732
2908
  }) => {
2733
- const [files, setFiles] = (0, import_react21.useState)([]);
2734
- const [isDragging, setIsDragging] = (0, import_react21.useState)(false);
2735
- const fileInputRef = (0, import_react21.useRef)(null);
2909
+ const [files, setFiles] = (0, import_react22.useState)([]);
2910
+ const [isDragging, setIsDragging] = (0, import_react22.useState)(false);
2911
+ const fileInputRef = (0, import_react22.useRef)(null);
2736
2912
  const formatFileSize = (bytes) => {
2737
2913
  if (bytes === 0) return "0 Bytes";
2738
2914
  const k = 1024;
@@ -2790,9 +2966,9 @@ var FileUpload = ({
2790
2966
  setFiles(newFiles);
2791
2967
  onChange?.(newFiles);
2792
2968
  };
2793
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: `w-full ${className}`, children: [
2794
- label && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: label }),
2795
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
2969
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: `w-full ${className}`, children: [
2970
+ label && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2", children: label }),
2971
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(
2796
2972
  "div",
2797
2973
  {
2798
2974
  onDrop: handleDrop,
@@ -2801,7 +2977,7 @@ var FileUpload = ({
2801
2977
  onClick: handleClick,
2802
2978
  className: `relative border-2 border-dashed rounded-lg p-8 text-center cursor-pointer transition-all ${isDragging ? "border-blue-500 bg-blue-50 dark:bg-blue-900/20" : "border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"} ${disabled ? "opacity-50 cursor-not-allowed" : ""}`,
2803
2979
  children: [
2804
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
2980
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
2805
2981
  "input",
2806
2982
  {
2807
2983
  ref: fileInputRef,
@@ -2813,14 +2989,14 @@ var FileUpload = ({
2813
2989
  className: "hidden"
2814
2990
  }
2815
2991
  ),
2816
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "flex flex-col items-center gap-2", children: [
2817
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "w-12 h-12 rounded-full bg-gray-100 dark:bg-gray-800 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(UploadIcon, { size: "lg", className: "text-gray-400 dark:text-gray-500" }) }),
2818
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { children: [
2819
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("p", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: [
2820
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "text-blue-600 dark:text-blue-400", children: "Click to upload" }),
2992
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "flex flex-col items-center gap-2", children: [
2993
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "w-12 h-12 rounded-full bg-gray-100 dark:bg-gray-800 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(UploadIcon, { size: "lg", className: "text-gray-400 dark:text-gray-500" }) }),
2994
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { children: [
2995
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("p", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: [
2996
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "text-blue-600 dark:text-blue-400", children: "Click to upload" }),
2821
2997
  " or drag and drop"
2822
2998
  ] }),
2823
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: [
2999
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: [
2824
3000
  accept ? `Accepted: ${accept}` : "Any file type",
2825
3001
  maxSize && ` \u2022 Max size: ${formatFileSize(maxSize)}`
2826
3002
  ] })
@@ -2829,17 +3005,17 @@ var FileUpload = ({
2829
3005
  ]
2830
3006
  }
2831
3007
  ),
2832
- helperText && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: helperText }),
2833
- files.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "mt-4 space-y-2", children: files.map((file, index) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
3008
+ helperText && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: helperText }),
3009
+ files.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "mt-4 space-y-2", children: files.map((file, index) => /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(
2834
3010
  "div",
2835
3011
  {
2836
3012
  className: "flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700",
2837
3013
  children: [
2838
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "flex-1 min-w-0", children: [
2839
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: "text-sm font-medium text-gray-900 dark:text-gray-100 truncate", children: file.name }),
2840
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: formatFileSize(file.size) })
3014
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "flex-1 min-w-0", children: [
3015
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("p", { className: "text-sm font-medium text-gray-900 dark:text-gray-100 truncate", children: file.name }),
3016
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: formatFileSize(file.size) })
2841
3017
  ] }),
2842
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
3018
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
2843
3019
  "button",
2844
3020
  {
2845
3021
  onClick: (e) => {
@@ -2848,7 +3024,7 @@ var FileUpload = ({
2848
3024
  },
2849
3025
  className: "ml-4 text-gray-400 hover:text-red-600 dark:hover:text-red-400 transition-colors",
2850
3026
  "aria-label": "Remove file",
2851
- children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CloseIcon, { size: "sm" })
3027
+ children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(CloseIcon, { size: "sm" })
2852
3028
  }
2853
3029
  )
2854
3030
  ]
@@ -2927,6 +3103,7 @@ function getThemeScript() {
2927
3103
  MenuIcon,
2928
3104
  Modal,
2929
3105
  Navbar,
3106
+ NumberInput,
2930
3107
  Pagination,
2931
3108
  PlusIcon,
2932
3109
  ProgressBar,