jett.admin.npmpackage 1.0.17 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/dist/index.css +1114 -1108
  2. package/dist/index.js +838 -737
  3. package/dist/index.mjs +789 -689
  4. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,737 +1,838 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
-
29
- // src/index.js
30
- var index_exports = {};
31
- __export(index_exports, {
32
- AppSideBar: () => AppSideBar,
33
- Chip: () => Chip,
34
- CustomAutocomplete: () => CustomAutocomplete,
35
- CustomButton: () => CustomButton,
36
- CustomCheckbox: () => CustomCheckbox,
37
- CustomInput: () => CustomInput,
38
- CustomSearch: () => CustomSearch,
39
- CustomSwitch: () => CustomSwitch,
40
- CustomTable: () => CustomTable,
41
- CustomTextarea: () => CustomTextarea,
42
- CustomUpload: () => CustomUpload,
43
- ProgressBar: () => ProgressBar,
44
- RightSheet: () => RightSheet
45
- });
46
- module.exports = __toCommonJS(index_exports);
47
-
48
- // src/utils/cn.ts
49
- var import_clsx = require("clsx");
50
- var import_tailwind_merge = require("tailwind-merge");
51
- function cn(...inputs) {
52
- return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
53
- }
54
-
55
- // src/Button.jsx
56
- var import_react = __toESM(require("react"));
57
- var variantStyles = {
58
- PRIMARY: "bg-white",
59
- SECONDARY: "bg-black text-white",
60
- DEFAULT: "bg-white text-black hover:bg-gray-100",
61
- DANGER: "bg-[#ef4444] text-white"
62
- };
63
- var CustomButton = ({
64
- variant,
65
- children,
66
- className,
67
- onClick,
68
- disabled = false,
69
- icon
70
- }) => {
71
- console.log(disabled);
72
- return /* @__PURE__ */ import_react.default.createElement(
73
- "div",
74
- {
75
- className: cn(
76
- `cursor-pointer flex items-center py-2 px-3 min-h-10 justify-center border rounded-[6px] border-[#e5e5e5] dark:border-[#303036] ${variant == "DANGER" ? "bg-[#ef4444]" : "dark:bg-[#1d1d20]"} gap-2`,
77
- variantStyles[variant],
78
- className
79
- ),
80
- onClick
81
- },
82
- icon && /* @__PURE__ */ import_react.default.createElement("div", null, icon),
83
- children
84
- );
85
- };
86
-
87
- // src/inputs/Autocomplete.jsx
88
- var import_react2 = __toESM(require("react"));
89
- var import_lucide_react = require("lucide-react");
90
- var CustomAutocomplete = ({
91
- label,
92
- value,
93
- onChange,
94
- options,
95
- placeholder = "Search & select...",
96
- isRequired = false,
97
- error,
98
- heading,
99
- disabled = false
100
- }) => {
101
- const [open, setOpen] = (0, import_react2.useState)(false);
102
- const [search, setSearch] = (0, import_react2.useState)("");
103
- const wrapperRef = (0, import_react2.useRef)(null);
104
- const selectedOptions = options.filter((opt) => value.includes(opt.value));
105
- const handleBlur = (e) => {
106
- var _a;
107
- if (!((_a = wrapperRef.current) == null ? void 0 : _a.contains(e.relatedTarget))) {
108
- setOpen(false);
109
- }
110
- };
111
- const filteredOptions = options.filter(
112
- (opt) => opt.label.toLowerCase().includes(search.toLowerCase())
113
- );
114
- const toggleValue = (val) => {
115
- if (value.includes(val)) {
116
- onChange(value.filter((v) => v !== val));
117
- } else {
118
- onChange([...value, val]);
119
- }
120
- };
121
- return /* @__PURE__ */ import_react2.default.createElement(
122
- "div",
123
- {
124
- className: "flex flex-col w-full relative",
125
- ref: wrapperRef,
126
- tabIndex: disabled ? -1 : 0,
127
- onBlur: handleBlur
128
- },
129
- heading && /* @__PURE__ */ import_react2.default.createElement("h3", { className: "text-lg font-semibold leading-6 mb-1" }, heading),
130
- label && /* @__PURE__ */ import_react2.default.createElement(
131
- "label",
132
- {
133
- className: `font-[500] text-sm leading-5 mb-1 ${heading ? "text-[#737373]" : "text-black"}`
134
- },
135
- label,
136
- " ",
137
- isRequired && /* @__PURE__ */ import_react2.default.createElement("span", { className: "text-red-500" }, "*")
138
- ),
139
- /* @__PURE__ */ import_react2.default.createElement(
140
- "div",
141
- {
142
- onClick: () => {
143
- if (!disabled) setOpen((prev) => !prev);
144
- },
145
- className: `flex justify-between items-center flex-wrap gap-1 rounded-md px-3 py-2 text-sm transition border h-auto min-h-10
146
- ${disabled ? "bg-gray-100 cursor-not-allowed text-gray-400" : "cursor-text"}
147
- ${error ? "border-red-500 bg-red-50" : "bg-white border-[hsl(0_0%_89.8%)] hover:border-gray-400"}
148
- `
149
- },
150
- /* @__PURE__ */ import_react2.default.createElement("div", { className: "flex flex-wrap gap-1 flex-1" }, selectedOptions.length > 0 ? selectedOptions.map((opt) => /* @__PURE__ */ import_react2.default.createElement(
151
- "span",
152
- {
153
- key: opt.value,
154
- className: "bg-gray-100 border border-gray-300 px-2 py-0.5 rounded text-xs flex items-center gap-1"
155
- },
156
- opt.label,
157
- /* @__PURE__ */ import_react2.default.createElement(
158
- "button",
159
- {
160
- onClick: (e) => {
161
- e.stopPropagation();
162
- toggleValue(opt.value);
163
- },
164
- className: "text-gray-500 hover:text-gray-700"
165
- },
166
- "\u2715"
167
- )
168
- )) : /* @__PURE__ */ import_react2.default.createElement("span", { className: "text-gray-400" }, placeholder)),
169
- /* @__PURE__ */ import_react2.default.createElement(
170
- import_lucide_react.ChevronDown,
171
- {
172
- className: `w-4 h-4 text-gray-500 transition-transform ${open ? "rotate-180" : ""}`
173
- }
174
- )
175
- ),
176
- !disabled && open && /* @__PURE__ */ import_react2.default.createElement("div", { className: "absolute top-full mt-1 w-full bg-white border border-gray-200 rounded-lg shadow-lg z-10 max-h-60 overflow-y-auto" }, /* @__PURE__ */ import_react2.default.createElement("div", { className: "flex items-center gap-2 p-2 border-b border-gray-200" }, /* @__PURE__ */ import_react2.default.createElement(import_lucide_react.Search, { size: 16, className: "text-gray-400" }), /* @__PURE__ */ import_react2.default.createElement(
177
- "input",
178
- {
179
- type: "text",
180
- value: search,
181
- onChange: (e) => setSearch(e.target.value),
182
- placeholder: "Search...",
183
- className: "flex-1 text-sm focus:outline-none"
184
- }
185
- )), /* @__PURE__ */ import_react2.default.createElement("ul", null, filteredOptions.length > 0 ? filteredOptions.map((opt) => {
186
- const selected = value.includes(opt.value);
187
- return /* @__PURE__ */ import_react2.default.createElement(
188
- "li",
189
- {
190
- key: opt.value,
191
- onClick: () => toggleValue(opt.value),
192
- className: `flex items-center gap-2 px-3 py-2 text-sm cursor-pointer hover:bg-gray-100 ${selected ? "bg-gray-50 font-medium" : ""}`
193
- },
194
- /* @__PURE__ */ import_react2.default.createElement(
195
- "span",
196
- {
197
- className: `w-4 h-4 flex items-center justify-center border rounded-sm ${selected ? "bg-blue-600 border-blue-600 text-white" : "border-gray-300"}`
198
- },
199
- selected && /* @__PURE__ */ import_react2.default.createElement(import_lucide_react.Check, { size: 14 })
200
- ),
201
- opt.label
202
- );
203
- }) : /* @__PURE__ */ import_react2.default.createElement("li", { className: "px-3 py-2 text-sm text-gray-400" }, "No results found")))
204
- );
205
- };
206
-
207
- // src/inputs/Checkbox.jsx
208
- var import_react3 = __toESM(require("react"));
209
- var CustomCheckbox = ({ onChange, checked }) => {
210
- const handleChange = (e) => {
211
- onChange(e.target.checked);
212
- };
213
- return /* @__PURE__ */ import_react3.default.createElement("label", { className: "inline-flex items-center cursor-pointer select-none" }, /* @__PURE__ */ import_react3.default.createElement(
214
- "input",
215
- {
216
- type: "checkbox",
217
- checked,
218
- onChange: handleChange,
219
- className: "peer hidden"
220
- }
221
- ), /* @__PURE__ */ import_react3.default.createElement(
222
- "span",
223
- {
224
- className: "\r\n w-4 h-4 flex items-center justify-center border-2 border-gray-400 rounded \r\n peer-checked:bg-black peer-checked:border-black\r\n transition-colors\r\n "
225
- },
226
- checked && /* @__PURE__ */ import_react3.default.createElement(
227
- "svg",
228
- {
229
- className: "w-4 h-4 text-white",
230
- fill: "none",
231
- stroke: "currentColor",
232
- strokeWidth: "3",
233
- viewBox: "0 0 24 24"
234
- },
235
- /* @__PURE__ */ import_react3.default.createElement("path", { d: "M5 13l4 4L19 7" })
236
- )
237
- ));
238
- };
239
-
240
- // src/inputs/Chip.jsx
241
- var import_react4 = __toESM(require("react"));
242
- var VARIANTS = {
243
- PRIMARY: "bg-gray-100 text-black",
244
- GREEN: "bg-green-100 text-green-800",
245
- RED: "bg-red-100 text-red-800",
246
- YELLOW: "bg-yellow-100 text-yellow-800"
247
- };
248
- var Chip = ({ label, variant }) => {
249
- return /* @__PURE__ */ import_react4.default.createElement(
250
- "div",
251
- {
252
- className: `inline-flex text-[12px] items-center px-3 py-1 rounded-full ${VARIANTS[variant] || VARIANTS.PRIMARY} text-sm font-[600]`
253
- },
254
- label
255
- );
256
- };
257
-
258
- // src/inputs/CustomSwitch.jsx
259
- var import_react5 = __toESM(require("react"));
260
- var CustomSwitch = ({ checked, onChange, label, description }) => {
261
- return /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex items-start gap-3 rounded-lg border border-gray-200 p-4 bg-white mb-4" }, /* @__PURE__ */ import_react5.default.createElement(
262
- "button",
263
- {
264
- type: "button",
265
- role: "switch",
266
- "aria-checked": checked,
267
- onClick: () => onChange(!checked),
268
- className: `relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition-colors ${checked ? "bg-black" : "bg-gray-300"}`
269
- },
270
- /* @__PURE__ */ import_react5.default.createElement(
271
- "span",
272
- {
273
- className: `inline-block h-4 w-4 transform rounded-full bg-white shadow transition ${checked ? "translate-x-6" : "translate-x-1"}`
274
- }
275
- )
276
- ), /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex flex-col" }, label && /* @__PURE__ */ import_react5.default.createElement("h3", { className: "font-[500] text-sm text-black mb-2" }, label), description && /* @__PURE__ */ import_react5.default.createElement("p", { className: "font-[500] text-sm text-[#737373]" }, description)));
277
- };
278
-
279
- // src/inputs/Input.jsx
280
- var import_react6 = __toESM(require("react"));
281
- var CustomInput = ({
282
- label,
283
- isRequired,
284
- value,
285
- onChange,
286
- placeholder,
287
- disabled = false,
288
- error,
289
- heading
290
- }) => {
291
- return /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-col gap-1 w-full" }, heading && /* @__PURE__ */ import_react6.default.createElement("h3", { className: "text-lg font-semibold" }, heading), /* @__PURE__ */ import_react6.default.createElement(
292
- "label",
293
- {
294
- className: `font-[500] text-sm ${heading ? "text-[#737373]" : "text-black"} dark:text-white`
295
- },
296
- label,
297
- " ",
298
- isRequired && /* @__PURE__ */ import_react6.default.createElement("span", { className: "text-red-500" }, "*")
299
- ), /* @__PURE__ */ import_react6.default.createElement(
300
- "input",
301
- {
302
- className: `border border-gray-200 rounded-md h-10 px-4 py-2 w-full text-[14px]
303
- focus:outline-2 outline-black dark:outline-white outline-offset-2
304
- dark:bg-transparent dark:text-white dark:border-[#303036]
305
- ${disabled ? "bg-gray-100 cursor-not-allowed text-gray-500 border-gray-300" : error ? "border-red-500 bg-red-50" : "bg-white border-[hsl(0_0%_89.8%)]"}
306
- `,
307
- value,
308
- onChange: (e) => onChange == null ? void 0 : onChange(e.target.value),
309
- placeholder,
310
- disabled,
311
- readOnly: disabled
312
- }
313
- ));
314
- };
315
-
316
- // src/inputs/ProgressBar.jsx
317
- var import_react7 = __toESM(require("react"));
318
- var ProgressBar = ({ step, totalSteps }) => {
319
- const progress = step / totalSteps * 100;
320
- return /* @__PURE__ */ import_react7.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react7.default.createElement("p", { className: "text-gray-600 text-sm mb-2" }, "Step ", step, " of ", totalSteps), /* @__PURE__ */ import_react7.default.createElement("div", { className: "w-full bg-gray-200 rounded-full h-2" }, /* @__PURE__ */ import_react7.default.createElement(
321
- "div",
322
- {
323
- className: "bg-black h-2 rounded-full transition-all duration-300",
324
- style: { width: `${progress}%` }
325
- }
326
- )));
327
- };
328
-
329
- // src/inputs/Search.jsx
330
- var import_react8 = __toESM(require("react"));
331
- var import_lucide_react2 = require("lucide-react");
332
- var CustomSearch = ({
333
- value,
334
- onChange,
335
- placeholder = "Search Markets..."
336
- }) => {
337
- return /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex items-center border bg-transparent text-[14px] border-[hsl(0_0%_89.8%)] \r\n rounded-md h-10 px-2 w-full focus-within:outline-2 focus-within:outline-black focus-within:outline-offset-2" }, /* @__PURE__ */ import_react8.default.createElement(import_lucide_react2.Search, { width: 16, height: 16, color: "gray", className: "mr-2" }), /* @__PURE__ */ import_react8.default.createElement(
338
- "input",
339
- {
340
- type: "text",
341
- value,
342
- onChange,
343
- placeholder,
344
- className: "bg-transparent w-full h-full focus:outline-none"
345
- }
346
- ));
347
- };
348
-
349
- // src/inputs/TextArea.jsx
350
- var import_react9 = __toESM(require("react"));
351
- var CustomTextarea = ({
352
- label,
353
- isRequired,
354
- value,
355
- onChange,
356
- placeholder,
357
- disabled = false,
358
- error,
359
- heading,
360
- rows = 4
361
- }) => {
362
- return /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex flex-col gap-1 w-full" }, heading && /* @__PURE__ */ import_react9.default.createElement("h3", { className: "text-lg font-semibold" }, heading), /* @__PURE__ */ import_react9.default.createElement(
363
- "label",
364
- {
365
- className: `font-[500] text-sm ${heading ? "text-[#737373]" : "text-black"}`
366
- },
367
- label,
368
- " ",
369
- isRequired && /* @__PURE__ */ import_react9.default.createElement("span", { className: "text-red-500" }, "*")
370
- ), /* @__PURE__ */ import_react9.default.createElement(
371
- "textarea",
372
- {
373
- rows,
374
- className: `border rounded-md px-4 py-2 w-full text-[14px]
375
- focus:outline-2 focus:outline-black focus:outline-offset-2
376
- focus:ring-0 focus:shadow-none focus:border-black
377
- ${disabled ? "bg-gray-100 text-gray-500 border-gray-300" : error ? "border-red-500 bg-red-50" : "bg-white border-[hsl(0_0%_89.8%)]"}
378
- `,
379
- value,
380
- onChange: (e) => onChange == null ? void 0 : onChange(e.target.value),
381
- placeholder,
382
- disabled,
383
- readOnly: disabled
384
- }
385
- ));
386
- };
387
-
388
- // src/inputs/Upload.jsx
389
- var import_react10 = __toESM(require("react"));
390
- var import_lucide_react3 = require("lucide-react");
391
- var CustomUpload = ({
392
- label = "Supporting documents",
393
- description = "Drop items here or Browse Files",
394
- accept = ".pdf,.jpg,.jpeg,.png",
395
- maxSizeMB = 5,
396
- onChange,
397
- error,
398
- value
399
- }) => {
400
- const inputRef = (0, import_react10.useRef)(null);
401
- const handleFileSelect = (files) => {
402
- if (!files || files.length === 0) return;
403
- const selectedFile = files[0];
404
- if (selectedFile.size > maxSizeMB * 1024 * 1024) {
405
- alert(`File size must be less than ${maxSizeMB} MB`);
406
- return;
407
- }
408
- onChange == null ? void 0 : onChange(selectedFile);
409
- };
410
- return /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex flex-col gap-2 w-full" }, label && /* @__PURE__ */ import_react10.default.createElement("label", { className: "text-sm font-medium" }, label), /* @__PURE__ */ import_react10.default.createElement(
411
- "div",
412
- {
413
- className: `border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center text-center cursor-pointer transition
414
- ${error ? "border-red-500 bg-red-50" : "border-gray-300 hover:border-gray-400 bg-gray-50"}`,
415
- onClick: () => {
416
- var _a;
417
- return (_a = inputRef.current) == null ? void 0 : _a.click();
418
- },
419
- onDragOver: (e) => e.preventDefault(),
420
- onDrop: (e) => {
421
- e.preventDefault();
422
- handleFileSelect(e.dataTransfer.files);
423
- }
424
- },
425
- /* @__PURE__ */ import_react10.default.createElement(import_lucide_react3.Upload, { className: "w-6 h-6 text-gray-500 mb-2" }),
426
- /* @__PURE__ */ import_react10.default.createElement("p", { className: "text-sm text-gray-700" }, description),
427
- /* @__PURE__ */ import_react10.default.createElement("p", { className: "text-xs text-gray-500 mt-1" }, "File Supported: PDF/JPG/PNG, up to ", maxSizeMB, " MB"),
428
- /* @__PURE__ */ import_react10.default.createElement(
429
- "input",
430
- {
431
- ref: inputRef,
432
- type: "file",
433
- accept,
434
- className: "hidden",
435
- onChange: (e) => handleFileSelect(e.target.files)
436
- }
437
- )
438
- ), value && /* @__PURE__ */ import_react10.default.createElement("span", { className: "text-sm truncate text-gray-500" }, "Selected: ", value.name), error && /* @__PURE__ */ import_react10.default.createElement("p", { className: "text-xs text-red-500" }, error));
439
- };
440
-
441
- // src/sideBar/SideBar.jsx
442
- var import_lucide_react5 = require("lucide-react");
443
- var import_react11 = __toESM(require("react"));
444
-
445
- // ConstantUI.js
446
- var import_lucide_react4 = require("lucide-react");
447
- var navItemsConstant = [
448
- {
449
- Icon: import_lucide_react4.Home,
450
- label: "Home",
451
- onClick: () => {
452
- window.location.href = "/";
453
- },
454
- isDropDown: false
455
- },
456
- {
457
- Icon: import_lucide_react4.Handshake,
458
- label: "Supplier Ecosystem",
459
- onClick: () => {
460
- },
461
- isDropDown: true,
462
- options: [
463
- { label: "Suppliers", onClick: () => {
464
- window.location.href = "/supplier/";
465
- } }
466
- ]
467
- },
468
- {
469
- Icon: import_lucide_react4.Building,
470
- label: "Consumer Ecosystem",
471
- onClick: () => {
472
- },
473
- options: [
474
- {
475
- label: "Corporate",
476
- onClick: () => {
477
- window.location.href = "/corporate/";
478
- }
479
- },
480
- { label: "Trips", onClick: () => {
481
- window.location.href = "/trips/";
482
- } },
483
- { label: "Reports", onClick: () => {
484
- window.location.href = "/reports/";
485
- } },
486
- {
487
- label: "Tags",
488
- onClick: () => {
489
- window.location.href = "/tags/";
490
- }
491
- }
492
- ],
493
- isDropDown: true
494
- },
495
- {
496
- Icon: import_lucide_react4.Banknote,
497
- label: "Finance",
498
- onClick: () => {
499
- },
500
- isDropDown: true,
501
- options: [
502
- { label: "Invoices", onClick: () => {
503
- window.location.href = "/invoices/";
504
- } },
505
- { label: "Ledger", onClick: () => {
506
- window.location.href = "/ledger/";
507
- } },
508
- { label: "Payments", onClick: () => {
509
- window.location.href = "/payments/";
510
- } }
511
- ]
512
- },
513
- {
514
- Icon: import_lucide_react4.DollarSign,
515
- label: "Revenue Management",
516
- onClick: () => {
517
- },
518
- isDropDown: true,
519
- options: [
520
- {
521
- label: "Pricing Policy",
522
- onClick: () => {
523
- window.location.href = "/pricing/";
524
- }
525
- },
526
- { label: "Offers", onClick: () => {
527
- window.location.href = "/offers/";
528
- } },
529
- { label: "Vouchers", onClick: () => {
530
- window.location.href = "/vouchers/";
531
- } },
532
- { label: "Supplier Deals", onClick: () => {
533
- window.location.href = "/supplierdeals/";
534
- } },
535
- {
536
- label: "Subscription Plans",
537
- onClick: () => {
538
- window.location.href = "/subscription/";
539
- }
540
- }
541
- ]
542
- },
543
- {
544
- Icon: import_lucide_react4.Cog,
545
- label: "Settings",
546
- onClick: () => {
547
- },
548
- isDropDown: true,
549
- options: [
550
- {
551
- label: "Admin user Management",
552
- isDropDown: true,
553
- onClick: () => {
554
- },
555
- options: [
556
- { label: "Admin Users", onClick: () => {
557
- window.location.href = "/users/";
558
- } },
559
- { label: "Admin User Attributes", onClick: () => {
560
- } }
561
- ]
562
- },
563
- { label: "TMC Markets", onClick: () => {
564
- window.location.href = "/market/";
565
- } },
566
- { label: "Permissions", onClick: () => {
567
- window.location.href = "/permissions/";
568
- } },
569
- { label: "Report Configurations", onClick: () => {
570
- window.location.href = "/reports/";
571
- } },
572
- { label: "Whitelabelling", onClick: () => {
573
- window.location.href = "/whitelabelling/";
574
- } }
575
- ]
576
- }
577
- ];
578
- var additionalItemsConstant = [
579
- { Icon: import_lucide_react4.LifeBuoy, label: "Help", onClick: () => {
580
- window.location.href = "/help";
581
- } }
582
- ];
583
-
584
- // src/assests/logo/sidebarlogo.webp
585
- var sidebarlogo_default = "./sidebarlogo-S4TNJORM.webp";
586
-
587
- // src/sideBar/SideBar.jsx
588
- var AppSideBar = ({ username, role, navItems, additionalItems, sideBarLogo }) => {
589
- var _a, _b;
590
- const [authData, setAuthData] = (0, import_react11.useState)(null);
591
- const handleIconRotate = (e, index, additionalKey) => {
592
- let dropDownIcon = e.currentTarget.children[2];
593
- if (!dropDownIcon) return;
594
- if (dropDownIcon.classList.contains("rotate-180")) {
595
- dropDownIcon.classList.remove("rotate-180");
596
- } else {
597
- dropDownIcon.classList.add("transition-all");
598
- dropDownIcon.classList.add("rotate-180");
599
- }
600
- const optionsContainer = document.getElementById(`dropDownOptions-${index}${additionalKey ? `-${additionalKey}` : ""}`);
601
- if (!optionsContainer) return;
602
- optionsContainer.classList.add("transition-all");
603
- if (optionsContainer.classList.contains("max-h-0")) {
604
- optionsContainer.classList.remove("max-h-0");
605
- optionsContainer.classList.add("min-h-[50px]");
606
- } else {
607
- optionsContainer.classList.remove("min-h-[50px]");
608
- optionsContainer.classList.add("max-h-0");
609
- }
610
- };
611
- const checkForAuthData = () => {
612
- const params = new URLSearchParams(window.location.search);
613
- let authData2 = params.get("authData");
614
- if (authData2) {
615
- authData2 = atob(authData2);
616
- localStorage.setItem("authData", authData2);
617
- setAuthData(JSON.parse(authData2));
618
- params.delete("authData");
619
- const newUrl = window.location.pathname + (params.toString() ? "?" + params.toString() : "");
620
- window.history.replaceState({}, document.title, newUrl);
621
- }
622
- };
623
- (0, import_react11.useEffect)(() => {
624
- checkForAuthData();
625
- }, []);
626
- (0, import_react11.useEffect)(() => {
627
- const storedAuthData = localStorage.getItem("authData");
628
- if (storedAuthData) {
629
- let parseData = JSON.parse(storedAuthData);
630
- setAuthData(parseData);
631
- }
632
- }, [localStorage.getItem("authData")]);
633
- const navItemsLocal = navItems ?? navItemsConstant;
634
- const additionalItemsLocal = additionalItems ?? additionalItemsConstant;
635
- const sideBarLogoLocal = sideBarLogo ?? sidebarlogo_default;
636
- return /* @__PURE__ */ import_react11.default.createElement("div", { className: "w-[320px] transition-all ease-in-out delay-100 bg-transparent border-r border-gray-200 dark:border-[#303036] flex flex-col p-4 h-full max-h-[100vh]" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "p-2 mb-4" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "w-[108px] h-[40px] flex items-center \r\n justify-center" }, /* @__PURE__ */ import_react11.default.createElement("img", { src: sideBarLogoLocal, alt: "sidebarLogo", width: 108, height: 40 }))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex ml-[20px] items-center gap-2 mb-2 dark:text-[#f4f4f5cc]" }, /* @__PURE__ */ import_react11.default.createElement(import_lucide_react5.Globe, { width: 20, height: 20 }), /* @__PURE__ */ import_react11.default.createElement("h3", { className: "text-[#3f3f46cc] dark:text-[#f4f4f5cc] font-medium" }, "Data Centers")), /* @__PURE__ */ import_react11.default.createElement("div", null, /* @__PURE__ */ import_react11.default.createElement(CustomAutocomplete, { options: [] }))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "overflow-y-auto" }, /* @__PURE__ */ import_react11.default.createElement("div", null, navItemsLocal == null ? void 0 : navItemsLocal.map((item, index) => {
637
- return /* @__PURE__ */ import_react11.default.createElement("div", { key: index, className: "" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center gap-3 p-2 hover:bg-[#f3f4f6] dark:hover:bg-[#27272a] dark:text-[#f4f4f5cc] cursor-pointer rounded-lg ml-2", onClick: (e) => {
638
- item.onClick && item.onClick(e);
639
- handleIconRotate(e, index);
640
- } }, /* @__PURE__ */ import_react11.default.createElement(item.Icon, { width: 20, height: 20 }), /* @__PURE__ */ import_react11.default.createElement("span", { className: "font-medium text-[#3f3f46cc] dark:text-[#f4f4f5cc]" }, item.label), item.isDropDown && /* @__PURE__ */ import_react11.default.createElement("div", { className: `ml-auto transition-all delay-75` }, /* @__PURE__ */ import_react11.default.createElement(import_lucide_react5.ChevronDown, { width: 20, height: 20 }))), item.options && item.options.length > 0 && /* @__PURE__ */ import_react11.default.createElement("div", { className: "ml-[20px] max-h-0 overflow-hidden flex flex-col", id: `dropDownOptions-${index}` }, item.options.map((options, optionsIndex) => {
641
- return /* @__PURE__ */ import_react11.default.createElement("div", { className: "" }, /* @__PURE__ */ import_react11.default.createElement(
642
- "div",
643
- {
644
- className: "flex items-center gap-3 p-2 hover:bg-[#f3f4f6] dark:hover:bg-[#27272a] cursor-pointer",
645
- onClick: (e) => {
646
- options.onClick && options.onClick();
647
- options.isDropDown && handleIconRotate(e, optionsIndex, "subOption");
648
- }
649
- },
650
- /* @__PURE__ */ import_react11.default.createElement("div", null),
651
- /* @__PURE__ */ import_react11.default.createElement("span", { className: "font-medium text-sm text-[#3f3f46cc] dark:text-[#f4f4f5cc]" }, options.label),
652
- options.isDropDown && /* @__PURE__ */ import_react11.default.createElement("div", { className: `ml-auto transition-all delay-75` }, /* @__PURE__ */ import_react11.default.createElement(import_lucide_react5.ChevronDown, { width: 20, height: 20 }))
653
- ), options.options && options.options.length > 1 && /* @__PURE__ */ import_react11.default.createElement("div", { className: "ml-[20px] max-h-0 overflow-hidden flex flex-col", id: `dropDownOptions-${optionsIndex}-subOption` }, options.options.map((subOption) => {
654
- return /* @__PURE__ */ import_react11.default.createElement(
655
- "div",
656
- {
657
- className: "p-2 rounded-lg hover:bg-gray-100 text-[#3f3f46cc] dark:hover:bg-[#27272a] dark:text-[#f4f4f5cc] font-medium text-sm",
658
- onClick: (e) => {
659
- subOption.onClick && subOption.onClick();
660
- }
661
- },
662
- subOption.label
663
- );
664
- })));
665
- })));
666
- })), /* @__PURE__ */ import_react11.default.createElement("div", { className: "border-t border-[#e5e5e5] dark:border-[#303036] mt-4" }, (additionalItemsLocal == null ? void 0 : additionalItemsLocal.length) > 0 && additionalItemsLocal.map((item, index) => {
667
- return /* @__PURE__ */ import_react11.default.createElement("div", { key: index, className: "flex items-center gap-3 p-2 hover:bg-[#f3f4f6] dark:hover:bg-[#27272a] dark:text-[#f4f4f5cc] cursor-pointer", onClick: () => item.onClick && item.onClick() }, /* @__PURE__ */ import_react11.default.createElement(item.Icon, { width: 20, height: 20 }), /* @__PURE__ */ import_react11.default.createElement("span", { className: "font-medium text-[#3f3f46cc] dark:text-[#f4f4f5cc]" }, item.label));
668
- }))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "mt-auto bg-[#fafafa] dark:bg-transparent sticky bottom-0 pt-2" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center justify-between p-2 rounded-lg hover:bg-[#f4f4f5] dark:hover:bg-[#27272a] cursor-pointer", onClick: () => {
669
- window.location.href = "/profile";
670
- } }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: "relative flex shrink-0 overflow-hidden rounded-full h-10 w-10" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: "flex h-full w-full items-center justify-center rounded-full bg-muted" }, ((_a = authData == null ? void 0 : authData.userInfo) == null ? void 0 : _a.UserName) ? authData.userInfo.UserName.split("")[0] : "A")), /* @__PURE__ */ import_react11.default.createElement("div", null, /* @__PURE__ */ import_react11.default.createElement("p", { className: "font-semibold" }, ((_b = authData == null ? void 0 : authData.userInfo) == null ? void 0 : _b.UserName) ? authData.userInfo.UserName : "Admin User"), /* @__PURE__ */ import_react11.default.createElement("p", { className: "text-sm text-[#3f3f46cc] dark:text-[#f4f4f5cc]" }, role))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "text-[#18181b] dark:text-[#f4f4f5cc]" }, /* @__PURE__ */ import_react11.default.createElement(import_lucide_react5.LogOut, null)))));
671
- };
672
-
673
- // src/RightSheet/RightSheet.jsx
674
- var import_react12 = __toESM(require("react"));
675
- var RightSheet = ({ open, setOpen, children, callBack }) => {
676
- const [visible, setVisible] = (0, import_react12.useState)(open);
677
- (0, import_react12.useEffect)(() => {
678
- if (open) {
679
- document.body.style.overflow = "hidden";
680
- setVisible(true);
681
- }
682
- return () => {
683
- document.body.style.overflow = "auto";
684
- };
685
- }, [open]);
686
- const handleClose = () => {
687
- setVisible(false);
688
- setTimeout(() => {
689
- setOpen(false);
690
- callBack();
691
- }, 200);
692
- };
693
- if (!visible) return null;
694
- return /* @__PURE__ */ import_react12.default.createElement("div", { className: "fixed inset-0 overflow-x-hidden bg-black/80 sheetPopIn h-full overflow-auto ", onClick: handleClose }, /* @__PURE__ */ import_react12.default.createElement(
695
- "div",
696
- {
697
- className: `absolute flex flex-col right-0 top-0 min-h-full min-w-[100%] md:min-w-[576px] bg-white
698
- ${visible ? "sheetRightSlide" : "transition-all duration-200 translate-x-[100%]"} justify-between `,
699
- onClick: (e) => e.stopPropagation()
700
- },
701
- /* @__PURE__ */ import_react12.default.createElement("div", { className: "bg-white min-h-full " }, children),
702
- /* @__PURE__ */ import_react12.default.createElement("div", { className: "h-[90px] flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 p-6 border-t sticky bottom-0 bg-white border-[#e6e6e6]" }, /* @__PURE__ */ import_react12.default.createElement(
703
- CustomButton,
704
- {
705
- variant: "SECONDARY",
706
- onClick: () => handleClose()
707
- },
708
- "Cancel"
709
- ))
710
- ));
711
- };
712
-
713
- // src/Table/CustomTable.jsx
714
- var import_react13 = __toESM(require("react"));
715
- var CustomTable = ({ tableHeader, setIsAllChecked, isAllChecked, children }) => {
716
- return /* @__PURE__ */ import_react13.default.createElement("div", { className: "border border-[#e5e5e5] rounded-lg overflow-x-auto" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "w-full relative overflow-x-auto" }, /* @__PURE__ */ import_react13.default.createElement("table", { className: "w-full caption-bottom text-sm overflow-x-auto bg-white table-fixed border-collapse" }, /* @__PURE__ */ import_react13.default.createElement("thead", { className: "border-b border-[#e5e5e5]" }, /* @__PURE__ */ import_react13.default.createElement("tr", { className: "transition-colors text-[#737373] hover:bg-muted/50 \r\n data-[state=selected]:bg-muted" }, /* @__PURE__ */ import_react13.default.createElement("th", { className: "px-4 py-3 text-left" }, /* @__PURE__ */ import_react13.default.createElement(CustomCheckbox, { checked: isAllChecked, onChange: () => {
717
- setIsAllChecked(!isAllChecked);
718
- } })), tableHeader.map((header, index) => {
719
- return /* @__PURE__ */ import_react13.default.createElement("th", { className: `px-4 py-3 text-sm font-medium ${index == tableHeader.length - 1 ? "text-right" : "text-left"}`, key: header + index }, header);
720
- }))), /* @__PURE__ */ import_react13.default.createElement("tbody", null, children))));
721
- };
722
- // Annotate the CommonJS export names for ESM import in node:
723
- 0 && (module.exports = {
724
- AppSideBar,
725
- Chip,
726
- CustomAutocomplete,
727
- CustomButton,
728
- CustomCheckbox,
729
- CustomInput,
730
- CustomSearch,
731
- CustomSwitch,
732
- CustomTable,
733
- CustomTextarea,
734
- CustomUpload,
735
- ProgressBar,
736
- RightSheet
737
- });
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/index.js
30
+ var index_exports = {};
31
+ __export(index_exports, {
32
+ AppSideBar: () => AppSideBar,
33
+ Chip: () => Chip,
34
+ CustomAutocomplete: () => CustomAutocomplete,
35
+ CustomButton: () => CustomButton,
36
+ CustomCheckbox: () => CustomCheckbox,
37
+ CustomInput: () => CustomInput,
38
+ CustomSearch: () => CustomSearch,
39
+ CustomSelect: () => CustomSelect,
40
+ CustomSwitch: () => CustomSwitch,
41
+ CustomTable: () => CustomTable,
42
+ CustomTextarea: () => CustomTextarea,
43
+ CustomUpload: () => CustomUpload,
44
+ ProgressBar: () => ProgressBar,
45
+ RightSheet: () => RightSheet
46
+ });
47
+ module.exports = __toCommonJS(index_exports);
48
+
49
+ // src/utils/cn.ts
50
+ var import_clsx = require("clsx");
51
+ var import_tailwind_merge = require("tailwind-merge");
52
+ function cn(...inputs) {
53
+ return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
54
+ }
55
+
56
+ // src/Button.jsx
57
+ var import_react = __toESM(require("react"));
58
+ var variantStyles = {
59
+ PRIMARY: "bg-white",
60
+ SECONDARY: "bg-black text-white",
61
+ DEFAULT: "bg-white text-black hover:bg-gray-100",
62
+ DANGER: "bg-[#ef4444] text-white"
63
+ };
64
+ var CustomButton = ({
65
+ variant,
66
+ children,
67
+ className,
68
+ onClick,
69
+ disabled = false,
70
+ icon
71
+ }) => {
72
+ console.log(disabled);
73
+ return /* @__PURE__ */ import_react.default.createElement(
74
+ "div",
75
+ {
76
+ className: cn(
77
+ `cursor-pointer flex items-center py-2 px-3 min-h-10 justify-center border rounded-[6px] border-[#e5e5e5] dark:border-[#303036] ${variant == "DANGER" ? "bg-[#ef4444]" : "dark:bg-[#1d1d20]"} gap-2`,
78
+ variantStyles[variant],
79
+ className
80
+ ),
81
+ onClick
82
+ },
83
+ icon && /* @__PURE__ */ import_react.default.createElement("div", null, icon),
84
+ children
85
+ );
86
+ };
87
+
88
+ // src/inputs/Autocomplete.jsx
89
+ var import_react2 = __toESM(require("react"));
90
+ var import_lucide_react = require("lucide-react");
91
+ var CustomAutocomplete = ({
92
+ label,
93
+ value,
94
+ onChange,
95
+ options,
96
+ placeholder = "Search & select...",
97
+ isRequired = false,
98
+ error,
99
+ heading,
100
+ disabled = false
101
+ }) => {
102
+ const [open, setOpen] = (0, import_react2.useState)(false);
103
+ const [search, setSearch] = (0, import_react2.useState)("");
104
+ const wrapperRef = (0, import_react2.useRef)(null);
105
+ const selectedOptions = options.filter((opt) => value.includes(opt.value));
106
+ const handleBlur = (e) => {
107
+ var _a;
108
+ if (!((_a = wrapperRef.current) == null ? void 0 : _a.contains(e.relatedTarget))) {
109
+ setOpen(false);
110
+ }
111
+ };
112
+ const filteredOptions = options.filter(
113
+ (opt) => opt.label.toLowerCase().includes(search.toLowerCase())
114
+ );
115
+ const toggleValue = (val) => {
116
+ if (value.includes(val)) {
117
+ onChange(value.filter((v) => v !== val));
118
+ } else {
119
+ onChange([...value, val]);
120
+ }
121
+ };
122
+ return /* @__PURE__ */ import_react2.default.createElement(
123
+ "div",
124
+ {
125
+ className: "flex flex-col w-full relative",
126
+ ref: wrapperRef,
127
+ tabIndex: disabled ? -1 : 0,
128
+ onBlur: handleBlur
129
+ },
130
+ heading && /* @__PURE__ */ import_react2.default.createElement("h3", { className: "text-lg font-semibold leading-6 mb-1" }, heading),
131
+ label && /* @__PURE__ */ import_react2.default.createElement(
132
+ "label",
133
+ {
134
+ className: `font-[500] text-sm leading-5 mb-1 ${heading ? "text-[#737373]" : "text-black"}`
135
+ },
136
+ label,
137
+ " ",
138
+ isRequired && /* @__PURE__ */ import_react2.default.createElement("span", { className: "text-red-500" }, "*")
139
+ ),
140
+ /* @__PURE__ */ import_react2.default.createElement(
141
+ "div",
142
+ {
143
+ onClick: () => {
144
+ if (!disabled) setOpen((prev) => !prev);
145
+ },
146
+ className: `flex justify-between items-center flex-wrap gap-1 rounded-md px-3 py-2 text-sm transition border h-auto min-h-10
147
+ ${disabled ? "bg-gray-100 cursor-not-allowed text-gray-400" : "cursor-text"}
148
+ ${error ? "border-red-500 bg-red-50" : "bg-white border-[hsl(0_0%_89.8%)] hover:border-gray-400"}
149
+ `
150
+ },
151
+ /* @__PURE__ */ import_react2.default.createElement("div", { className: "flex flex-wrap gap-1 flex-1" }, selectedOptions.length > 0 ? selectedOptions.map((opt) => /* @__PURE__ */ import_react2.default.createElement(
152
+ "span",
153
+ {
154
+ key: opt.value,
155
+ className: "bg-gray-100 border border-gray-300 px-2 py-0.5 rounded text-xs flex items-center gap-1"
156
+ },
157
+ opt.label,
158
+ /* @__PURE__ */ import_react2.default.createElement(
159
+ "button",
160
+ {
161
+ onClick: (e) => {
162
+ e.stopPropagation();
163
+ toggleValue(opt.value);
164
+ },
165
+ className: "text-gray-500 hover:text-gray-700"
166
+ },
167
+ "\u2715"
168
+ )
169
+ )) : /* @__PURE__ */ import_react2.default.createElement("span", { className: "text-gray-400" }, placeholder)),
170
+ /* @__PURE__ */ import_react2.default.createElement(
171
+ import_lucide_react.ChevronDown,
172
+ {
173
+ className: `w-4 h-4 text-gray-500 transition-transform ${open ? "rotate-180" : ""}`
174
+ }
175
+ )
176
+ ),
177
+ !disabled && open && /* @__PURE__ */ import_react2.default.createElement("div", { className: "absolute top-full mt-1 w-full bg-white border border-gray-200 rounded-lg shadow-lg z-10 max-h-60 overflow-y-auto" }, /* @__PURE__ */ import_react2.default.createElement("div", { className: "flex items-center gap-2 p-2 border-b border-gray-200" }, /* @__PURE__ */ import_react2.default.createElement(import_lucide_react.Search, { size: 16, className: "text-gray-400" }), /* @__PURE__ */ import_react2.default.createElement(
178
+ "input",
179
+ {
180
+ type: "text",
181
+ value: search,
182
+ onChange: (e) => setSearch(e.target.value),
183
+ placeholder: "Search...",
184
+ className: "flex-1 text-sm focus:outline-none"
185
+ }
186
+ )), /* @__PURE__ */ import_react2.default.createElement("ul", null, filteredOptions.length > 0 ? filteredOptions.map((opt) => {
187
+ const selected = value.includes(opt.value);
188
+ return /* @__PURE__ */ import_react2.default.createElement(
189
+ "li",
190
+ {
191
+ key: opt.value,
192
+ onClick: () => toggleValue(opt.value),
193
+ className: `flex items-center gap-2 px-3 py-2 text-sm cursor-pointer hover:bg-gray-100 ${selected ? "bg-gray-50 font-medium" : ""}`
194
+ },
195
+ /* @__PURE__ */ import_react2.default.createElement(
196
+ "span",
197
+ {
198
+ className: `w-4 h-4 flex items-center justify-center border rounded-sm ${selected ? "bg-blue-600 border-blue-600 text-white" : "border-gray-300"}`
199
+ },
200
+ selected && /* @__PURE__ */ import_react2.default.createElement(import_lucide_react.Check, { size: 14 })
201
+ ),
202
+ opt.label
203
+ );
204
+ }) : /* @__PURE__ */ import_react2.default.createElement("li", { className: "px-3 py-2 text-sm text-gray-400" }, "No results found")))
205
+ );
206
+ };
207
+
208
+ // src/inputs/Checkbox.jsx
209
+ var import_react3 = __toESM(require("react"));
210
+ var CustomCheckbox = ({ onChange, checked }) => {
211
+ const handleChange = (e) => {
212
+ onChange(e.target.checked);
213
+ };
214
+ return /* @__PURE__ */ import_react3.default.createElement("label", { className: "inline-flex items-center cursor-pointer select-none" }, /* @__PURE__ */ import_react3.default.createElement(
215
+ "input",
216
+ {
217
+ type: "checkbox",
218
+ checked,
219
+ onChange: handleChange,
220
+ className: "peer hidden"
221
+ }
222
+ ), /* @__PURE__ */ import_react3.default.createElement(
223
+ "span",
224
+ {
225
+ className: "\r\n w-4 h-4 flex items-center justify-center border-2 border-gray-400 rounded \r\n peer-checked:bg-black peer-checked:border-black\r\n transition-colors\r\n "
226
+ },
227
+ checked && /* @__PURE__ */ import_react3.default.createElement(
228
+ "svg",
229
+ {
230
+ className: "w-4 h-4 text-white",
231
+ fill: "none",
232
+ stroke: "currentColor",
233
+ strokeWidth: "3",
234
+ viewBox: "0 0 24 24"
235
+ },
236
+ /* @__PURE__ */ import_react3.default.createElement("path", { d: "M5 13l4 4L19 7" })
237
+ )
238
+ ));
239
+ };
240
+
241
+ // src/inputs/Chip.jsx
242
+ var import_react4 = __toESM(require("react"));
243
+ var VARIANTS = {
244
+ PRIMARY: "bg-gray-100 text-black",
245
+ GREEN: "bg-green-100 text-green-800",
246
+ RED: "bg-red-100 text-red-800",
247
+ YELLOW: "bg-yellow-100 text-yellow-800"
248
+ };
249
+ var Chip = ({ label, variant }) => {
250
+ return /* @__PURE__ */ import_react4.default.createElement(
251
+ "div",
252
+ {
253
+ className: `inline-flex text-[12px] items-center px-3 py-1 rounded-full ${VARIANTS[variant] || VARIANTS.PRIMARY} text-sm font-[600]`
254
+ },
255
+ label
256
+ );
257
+ };
258
+
259
+ // src/inputs/CustomSwitch.jsx
260
+ var import_react5 = __toESM(require("react"));
261
+ var CustomSwitch = ({ checked, onChange, label, description }) => {
262
+ return /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex items-start gap-3 rounded-lg border border-gray-200 p-4 bg-white mb-4" }, /* @__PURE__ */ import_react5.default.createElement(
263
+ "button",
264
+ {
265
+ type: "button",
266
+ role: "switch",
267
+ "aria-checked": checked,
268
+ onClick: () => onChange(!checked),
269
+ className: `relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition-colors ${checked ? "bg-black" : "bg-gray-300"}`
270
+ },
271
+ /* @__PURE__ */ import_react5.default.createElement(
272
+ "span",
273
+ {
274
+ className: `inline-block h-4 w-4 transform rounded-full bg-white shadow transition ${checked ? "translate-x-6" : "translate-x-1"}`
275
+ }
276
+ )
277
+ ), /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex flex-col" }, label && /* @__PURE__ */ import_react5.default.createElement("h3", { className: "font-[500] text-sm text-black mb-2" }, label), description && /* @__PURE__ */ import_react5.default.createElement("p", { className: "font-[500] text-sm text-[#737373]" }, description)));
278
+ };
279
+
280
+ // src/inputs/Input.jsx
281
+ var import_react6 = __toESM(require("react"));
282
+ var CustomInput = ({
283
+ label,
284
+ isRequired,
285
+ value,
286
+ onChange,
287
+ placeholder,
288
+ disabled = false,
289
+ error,
290
+ heading
291
+ }) => {
292
+ return /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-col gap-1 w-full" }, heading && /* @__PURE__ */ import_react6.default.createElement("h3", { className: "text-lg font-semibold" }, heading), /* @__PURE__ */ import_react6.default.createElement(
293
+ "label",
294
+ {
295
+ className: `font-[500] text-sm ${heading ? "text-[#737373]" : "text-black"} dark:text-white`
296
+ },
297
+ label,
298
+ " ",
299
+ isRequired && /* @__PURE__ */ import_react6.default.createElement("span", { className: "text-red-500" }, "*")
300
+ ), /* @__PURE__ */ import_react6.default.createElement(
301
+ "input",
302
+ {
303
+ className: `border border-gray-200 rounded-md h-10 px-4 py-2 w-full text-[14px]
304
+ focus:outline-2 outline-black dark:outline-white outline-offset-2
305
+ dark:bg-transparent dark:text-white dark:border-[#303036]
306
+ ${disabled ? "bg-gray-100 cursor-not-allowed text-gray-500 border-gray-300" : error ? "border-red-500 bg-red-50" : "bg-white border-[hsl(0_0%_89.8%)]"}
307
+ `,
308
+ value,
309
+ onChange: (e) => onChange == null ? void 0 : onChange(e.target.value),
310
+ placeholder,
311
+ disabled,
312
+ readOnly: disabled
313
+ }
314
+ ));
315
+ };
316
+
317
+ // src/inputs/ProgressBar.jsx
318
+ var import_react7 = __toESM(require("react"));
319
+ var ProgressBar = ({ step, totalSteps }) => {
320
+ const progress = step / totalSteps * 100;
321
+ return /* @__PURE__ */ import_react7.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react7.default.createElement("p", { className: "text-gray-600 text-sm mb-2" }, "Step ", step, " of ", totalSteps), /* @__PURE__ */ import_react7.default.createElement("div", { className: "w-full bg-gray-200 rounded-full h-2" }, /* @__PURE__ */ import_react7.default.createElement(
322
+ "div",
323
+ {
324
+ className: "bg-black h-2 rounded-full transition-all duration-300",
325
+ style: { width: `${progress}%` }
326
+ }
327
+ )));
328
+ };
329
+
330
+ // src/inputs/Search.jsx
331
+ var import_react8 = __toESM(require("react"));
332
+ var import_lucide_react2 = require("lucide-react");
333
+ var CustomSearch = ({
334
+ value,
335
+ onChange,
336
+ placeholder = "Search Markets..."
337
+ }) => {
338
+ return /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex items-center border bg-transparent text-[14px] border-[hsl(0_0%_89.8%)] \r\n rounded-md h-10 px-2 w-full focus-within:outline-2 focus-within:outline-black focus-within:outline-offset-2" }, /* @__PURE__ */ import_react8.default.createElement(import_lucide_react2.Search, { width: 16, height: 16, color: "gray", className: "mr-2" }), /* @__PURE__ */ import_react8.default.createElement(
339
+ "input",
340
+ {
341
+ type: "text",
342
+ value,
343
+ onChange,
344
+ placeholder,
345
+ className: "bg-transparent w-full h-full focus:outline-none"
346
+ }
347
+ ));
348
+ };
349
+
350
+ // src/inputs/TextArea.jsx
351
+ var import_react9 = __toESM(require("react"));
352
+ var CustomTextarea = ({
353
+ label,
354
+ isRequired,
355
+ value,
356
+ onChange,
357
+ placeholder,
358
+ disabled = false,
359
+ error,
360
+ heading,
361
+ rows = 4
362
+ }) => {
363
+ return /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex flex-col gap-1 w-full" }, heading && /* @__PURE__ */ import_react9.default.createElement("h3", { className: "text-lg font-semibold" }, heading), /* @__PURE__ */ import_react9.default.createElement(
364
+ "label",
365
+ {
366
+ className: `font-[500] text-sm ${heading ? "text-[#737373]" : "text-black"}`
367
+ },
368
+ label,
369
+ " ",
370
+ isRequired && /* @__PURE__ */ import_react9.default.createElement("span", { className: "text-red-500" }, "*")
371
+ ), /* @__PURE__ */ import_react9.default.createElement(
372
+ "textarea",
373
+ {
374
+ rows,
375
+ className: `border rounded-md px-4 py-2 w-full text-[14px]
376
+ focus:outline-2 focus:outline-black focus:outline-offset-2
377
+ focus:ring-0 focus:shadow-none focus:border-black
378
+ ${disabled ? "bg-gray-100 text-gray-500 border-gray-300" : error ? "border-red-500 bg-red-50" : "bg-white border-[hsl(0_0%_89.8%)]"}
379
+ `,
380
+ value,
381
+ onChange: (e) => onChange == null ? void 0 : onChange(e.target.value),
382
+ placeholder,
383
+ disabled,
384
+ readOnly: disabled
385
+ }
386
+ ));
387
+ };
388
+
389
+ // src/inputs/Upload.jsx
390
+ var import_react10 = __toESM(require("react"));
391
+ var import_lucide_react3 = require("lucide-react");
392
+ var CustomUpload = ({
393
+ label = "Supporting documents",
394
+ description = "Drop items here or Browse Files",
395
+ accept = ".pdf,.jpg,.jpeg,.png",
396
+ maxSizeMB = 5,
397
+ onChange,
398
+ error,
399
+ value
400
+ }) => {
401
+ const inputRef = (0, import_react10.useRef)(null);
402
+ const handleFileSelect = (files) => {
403
+ if (!files || files.length === 0) return;
404
+ const selectedFile = files[0];
405
+ if (selectedFile.size > maxSizeMB * 1024 * 1024) {
406
+ alert(`File size must be less than ${maxSizeMB} MB`);
407
+ return;
408
+ }
409
+ onChange == null ? void 0 : onChange(selectedFile);
410
+ };
411
+ return /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex flex-col gap-2 w-full" }, label && /* @__PURE__ */ import_react10.default.createElement("label", { className: "text-sm font-medium" }, label), /* @__PURE__ */ import_react10.default.createElement(
412
+ "div",
413
+ {
414
+ className: `border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center text-center cursor-pointer transition
415
+ ${error ? "border-red-500 bg-red-50" : "border-gray-300 hover:border-gray-400 bg-gray-50"}`,
416
+ onClick: () => {
417
+ var _a;
418
+ return (_a = inputRef.current) == null ? void 0 : _a.click();
419
+ },
420
+ onDragOver: (e) => e.preventDefault(),
421
+ onDrop: (e) => {
422
+ e.preventDefault();
423
+ handleFileSelect(e.dataTransfer.files);
424
+ }
425
+ },
426
+ /* @__PURE__ */ import_react10.default.createElement(import_lucide_react3.Upload, { className: "w-6 h-6 text-gray-500 mb-2" }),
427
+ /* @__PURE__ */ import_react10.default.createElement("p", { className: "text-sm text-gray-700" }, description),
428
+ /* @__PURE__ */ import_react10.default.createElement("p", { className: "text-xs text-gray-500 mt-1" }, "File Supported: PDF/JPG/PNG, up to ", maxSizeMB, " MB"),
429
+ /* @__PURE__ */ import_react10.default.createElement(
430
+ "input",
431
+ {
432
+ ref: inputRef,
433
+ type: "file",
434
+ accept,
435
+ className: "hidden",
436
+ onChange: (e) => handleFileSelect(e.target.files)
437
+ }
438
+ )
439
+ ), value && /* @__PURE__ */ import_react10.default.createElement("span", { className: "text-sm truncate text-gray-500" }, "Selected: ", value.name), error && /* @__PURE__ */ import_react10.default.createElement("p", { className: "text-xs text-red-500" }, error));
440
+ };
441
+
442
+ // src/sideBar/SideBar.jsx
443
+ var import_lucide_react5 = require("lucide-react");
444
+ var import_react11 = __toESM(require("react"));
445
+
446
+ // ConstantUI.js
447
+ var import_lucide_react4 = require("lucide-react");
448
+ var navItemsConstant = [
449
+ {
450
+ Icon: import_lucide_react4.Home,
451
+ label: "Home",
452
+ onClick: () => {
453
+ window.location.href = "/";
454
+ },
455
+ isDropDown: false
456
+ },
457
+ {
458
+ Icon: import_lucide_react4.Handshake,
459
+ label: "Supplier Ecosystem",
460
+ onClick: () => {
461
+ },
462
+ isDropDown: true,
463
+ options: [
464
+ { label: "Suppliers", onClick: () => {
465
+ window.location.href = "/supplier/";
466
+ } }
467
+ ]
468
+ },
469
+ {
470
+ Icon: import_lucide_react4.Building,
471
+ label: "Consumer Ecosystem",
472
+ onClick: () => {
473
+ },
474
+ options: [
475
+ {
476
+ label: "Corporate",
477
+ onClick: () => {
478
+ window.location.href = "/corporate/";
479
+ }
480
+ },
481
+ { label: "Trips", onClick: () => {
482
+ window.location.href = "/trips/";
483
+ } },
484
+ { label: "Reports", onClick: () => {
485
+ window.location.href = "/reports/";
486
+ } },
487
+ {
488
+ label: "Tags",
489
+ onClick: () => {
490
+ window.location.href = "/tags/";
491
+ }
492
+ }
493
+ ],
494
+ isDropDown: true
495
+ },
496
+ {
497
+ Icon: import_lucide_react4.Banknote,
498
+ label: "Finance",
499
+ onClick: () => {
500
+ },
501
+ isDropDown: true,
502
+ options: [
503
+ { label: "Invoices", onClick: () => {
504
+ window.location.href = "/invoices/";
505
+ } },
506
+ { label: "Ledger", onClick: () => {
507
+ window.location.href = "/ledger/";
508
+ } },
509
+ { label: "Payments", onClick: () => {
510
+ window.location.href = "/payments/";
511
+ } }
512
+ ]
513
+ },
514
+ {
515
+ Icon: import_lucide_react4.DollarSign,
516
+ label: "Revenue Management",
517
+ onClick: () => {
518
+ },
519
+ isDropDown: true,
520
+ options: [
521
+ {
522
+ label: "Pricing Policy",
523
+ onClick: () => {
524
+ window.location.href = "/pricing/";
525
+ }
526
+ },
527
+ { label: "Offers", onClick: () => {
528
+ window.location.href = "/offers/";
529
+ } },
530
+ { label: "Vouchers", onClick: () => {
531
+ window.location.href = "/vouchers/";
532
+ } },
533
+ { label: "Supplier Deals", onClick: () => {
534
+ window.location.href = "/supplierdeals/";
535
+ } },
536
+ {
537
+ label: "Subscription Plans",
538
+ onClick: () => {
539
+ window.location.href = "/subscription/";
540
+ }
541
+ }
542
+ ]
543
+ },
544
+ {
545
+ Icon: import_lucide_react4.Cog,
546
+ label: "Settings",
547
+ onClick: () => {
548
+ },
549
+ isDropDown: true,
550
+ options: [
551
+ {
552
+ label: "Admin user Management",
553
+ isDropDown: true,
554
+ onClick: () => {
555
+ },
556
+ options: [
557
+ { label: "Admin Users", onClick: () => {
558
+ window.location.href = "/users/";
559
+ } },
560
+ { label: "Admin User Attributes", onClick: () => {
561
+ } }
562
+ ]
563
+ },
564
+ { label: "TMC Markets", onClick: () => {
565
+ window.location.href = "/market/";
566
+ } },
567
+ { label: "Permissions", onClick: () => {
568
+ window.location.href = "/permissions/";
569
+ } },
570
+ { label: "Report Configurations", onClick: () => {
571
+ window.location.href = "/reports/";
572
+ } },
573
+ { label: "Whitelabelling", onClick: () => {
574
+ window.location.href = "/whitelabelling/";
575
+ } }
576
+ ]
577
+ }
578
+ ];
579
+ var additionalItemsConstant = [
580
+ { Icon: import_lucide_react4.LifeBuoy, label: "Help", onClick: () => {
581
+ window.location.href = "/help";
582
+ } }
583
+ ];
584
+
585
+ // src/assests/logo/sidebarlogo.webp
586
+ var sidebarlogo_default = "./sidebarlogo-S4TNJORM.webp";
587
+
588
+ // src/sideBar/SideBar.jsx
589
+ var AppSideBar = ({ username, role, navItems, additionalItems, sideBarLogo }) => {
590
+ var _a, _b;
591
+ const [authData, setAuthData] = (0, import_react11.useState)(null);
592
+ const handleIconRotate = (e, index, additionalKey) => {
593
+ let dropDownIcon = e.currentTarget.children[2];
594
+ if (!dropDownIcon) return;
595
+ if (dropDownIcon.classList.contains("rotate-180")) {
596
+ dropDownIcon.classList.remove("rotate-180");
597
+ } else {
598
+ dropDownIcon.classList.add("transition-all");
599
+ dropDownIcon.classList.add("rotate-180");
600
+ }
601
+ const optionsContainer = document.getElementById(`dropDownOptions-${index}${additionalKey ? `-${additionalKey}` : ""}`);
602
+ if (!optionsContainer) return;
603
+ optionsContainer.classList.add("transition-all");
604
+ if (optionsContainer.classList.contains("max-h-0")) {
605
+ optionsContainer.classList.remove("max-h-0");
606
+ optionsContainer.classList.add("min-h-[50px]");
607
+ } else {
608
+ optionsContainer.classList.remove("min-h-[50px]");
609
+ optionsContainer.classList.add("max-h-0");
610
+ }
611
+ };
612
+ const checkForAuthData = () => {
613
+ const params = new URLSearchParams(window.location.search);
614
+ let authData2 = params.get("authData");
615
+ if (authData2) {
616
+ authData2 = atob(authData2);
617
+ localStorage.setItem("authData", authData2);
618
+ setAuthData(JSON.parse(authData2));
619
+ params.delete("authData");
620
+ const newUrl = window.location.pathname + (params.toString() ? "?" + params.toString() : "");
621
+ window.history.replaceState({}, document.title, newUrl);
622
+ }
623
+ };
624
+ (0, import_react11.useEffect)(() => {
625
+ checkForAuthData();
626
+ }, []);
627
+ (0, import_react11.useEffect)(() => {
628
+ const storedAuthData = localStorage.getItem("authData");
629
+ if (storedAuthData) {
630
+ let parseData = JSON.parse(storedAuthData);
631
+ setAuthData(parseData);
632
+ }
633
+ }, [localStorage.getItem("authData")]);
634
+ const navItemsLocal = navItems ?? navItemsConstant;
635
+ const additionalItemsLocal = additionalItems ?? additionalItemsConstant;
636
+ const sideBarLogoLocal = sideBarLogo ?? sidebarlogo_default;
637
+ return /* @__PURE__ */ import_react11.default.createElement("div", { className: "w-[320px] transition-all ease-in-out delay-100 bg-transparent border-r border-gray-200 dark:border-[#303036] flex flex-col p-4 h-full max-h-[100vh]" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "p-2 mb-4" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "w-[108px] h-[40px] flex items-center \r\n justify-center" }, /* @__PURE__ */ import_react11.default.createElement("img", { src: sideBarLogoLocal, alt: "sidebarLogo", width: 108, height: 40 }))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex ml-[20px] items-center gap-2 mb-2 dark:text-[#f4f4f5cc]" }, /* @__PURE__ */ import_react11.default.createElement(import_lucide_react5.Globe, { width: 20, height: 20 }), /* @__PURE__ */ import_react11.default.createElement("h3", { className: "text-[#3f3f46cc] dark:text-[#f4f4f5cc] font-medium" }, "Data Centers")), /* @__PURE__ */ import_react11.default.createElement("div", null, /* @__PURE__ */ import_react11.default.createElement(CustomAutocomplete, { options: [] }))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "overflow-y-auto" }, /* @__PURE__ */ import_react11.default.createElement("div", null, navItemsLocal == null ? void 0 : navItemsLocal.map((item, index) => {
638
+ return /* @__PURE__ */ import_react11.default.createElement("div", { key: index, className: "" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center gap-3 p-2 hover:bg-[#f3f4f6] dark:hover:bg-[#27272a] dark:text-[#f4f4f5cc] cursor-pointer rounded-lg ml-2", onClick: (e) => {
639
+ item.onClick && item.onClick(e);
640
+ handleIconRotate(e, index);
641
+ } }, /* @__PURE__ */ import_react11.default.createElement(item.Icon, { width: 20, height: 20 }), /* @__PURE__ */ import_react11.default.createElement("span", { className: "font-medium text-[#3f3f46cc] dark:text-[#f4f4f5cc]" }, item.label), item.isDropDown && /* @__PURE__ */ import_react11.default.createElement("div", { className: `ml-auto transition-all delay-75` }, /* @__PURE__ */ import_react11.default.createElement(import_lucide_react5.ChevronDown, { width: 20, height: 20 }))), item.options && item.options.length > 0 && /* @__PURE__ */ import_react11.default.createElement("div", { className: "ml-[20px] max-h-0 overflow-hidden flex flex-col", id: `dropDownOptions-${index}` }, item.options.map((options, optionsIndex) => {
642
+ return /* @__PURE__ */ import_react11.default.createElement("div", { className: "" }, /* @__PURE__ */ import_react11.default.createElement(
643
+ "div",
644
+ {
645
+ className: "flex items-center gap-3 p-2 hover:bg-[#f3f4f6] dark:hover:bg-[#27272a] cursor-pointer",
646
+ onClick: (e) => {
647
+ options.onClick && options.onClick();
648
+ options.isDropDown && handleIconRotate(e, optionsIndex, "subOption");
649
+ }
650
+ },
651
+ /* @__PURE__ */ import_react11.default.createElement("div", null),
652
+ /* @__PURE__ */ import_react11.default.createElement("span", { className: "font-medium text-sm text-[#3f3f46cc] dark:text-[#f4f4f5cc]" }, options.label),
653
+ options.isDropDown && /* @__PURE__ */ import_react11.default.createElement("div", { className: `ml-auto transition-all delay-75` }, /* @__PURE__ */ import_react11.default.createElement(import_lucide_react5.ChevronDown, { width: 20, height: 20 }))
654
+ ), options.options && options.options.length > 1 && /* @__PURE__ */ import_react11.default.createElement("div", { className: "ml-[20px] max-h-0 overflow-hidden flex flex-col", id: `dropDownOptions-${optionsIndex}-subOption` }, options.options.map((subOption) => {
655
+ return /* @__PURE__ */ import_react11.default.createElement(
656
+ "div",
657
+ {
658
+ className: "p-2 rounded-lg hover:bg-gray-100 text-[#3f3f46cc] dark:hover:bg-[#27272a] dark:text-[#f4f4f5cc] font-medium text-sm",
659
+ onClick: (e) => {
660
+ subOption.onClick && subOption.onClick();
661
+ }
662
+ },
663
+ subOption.label
664
+ );
665
+ })));
666
+ })));
667
+ })), /* @__PURE__ */ import_react11.default.createElement("div", { className: "border-t border-[#e5e5e5] dark:border-[#303036] mt-4" }, (additionalItemsLocal == null ? void 0 : additionalItemsLocal.length) > 0 && additionalItemsLocal.map((item, index) => {
668
+ return /* @__PURE__ */ import_react11.default.createElement("div", { key: index, className: "flex items-center gap-3 p-2 hover:bg-[#f3f4f6] dark:hover:bg-[#27272a] dark:text-[#f4f4f5cc] cursor-pointer", onClick: () => item.onClick && item.onClick() }, /* @__PURE__ */ import_react11.default.createElement(item.Icon, { width: 20, height: 20 }), /* @__PURE__ */ import_react11.default.createElement("span", { className: "font-medium text-[#3f3f46cc] dark:text-[#f4f4f5cc]" }, item.label));
669
+ }))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "mt-auto bg-[#fafafa] dark:bg-transparent sticky bottom-0 pt-2" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center justify-between p-2 rounded-lg hover:bg-[#f4f4f5] dark:hover:bg-[#27272a] cursor-pointer", onClick: () => {
670
+ window.location.href = "/profile";
671
+ } }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: "relative flex shrink-0 overflow-hidden rounded-full h-10 w-10" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: "flex h-full w-full items-center justify-center rounded-full bg-muted" }, ((_a = authData == null ? void 0 : authData.userInfo) == null ? void 0 : _a.UserName) ? authData.userInfo.UserName.split("")[0] : "A")), /* @__PURE__ */ import_react11.default.createElement("div", null, /* @__PURE__ */ import_react11.default.createElement("p", { className: "font-semibold" }, ((_b = authData == null ? void 0 : authData.userInfo) == null ? void 0 : _b.UserName) ? authData.userInfo.UserName : "Admin User"), /* @__PURE__ */ import_react11.default.createElement("p", { className: "text-sm text-[#3f3f46cc] dark:text-[#f4f4f5cc]" }, role))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "text-[#18181b] dark:text-[#f4f4f5cc]" }, /* @__PURE__ */ import_react11.default.createElement(import_lucide_react5.LogOut, null)))));
672
+ };
673
+
674
+ // src/RightSheet/RightSheet.jsx
675
+ var import_react12 = __toESM(require("react"));
676
+ var RightSheet = ({
677
+ open,
678
+ setOpen,
679
+ children,
680
+ callBack,
681
+ actionLabel = "Save",
682
+ onAction = () => {
683
+ }
684
+ }) => {
685
+ const [visible, setVisible] = (0, import_react12.useState)(open);
686
+ (0, import_react12.useEffect)(() => {
687
+ if (open) {
688
+ document.body.style.overflow = "hidden";
689
+ setVisible(true);
690
+ }
691
+ return () => {
692
+ document.body.style.overflow = "auto";
693
+ };
694
+ }, [open]);
695
+ const handleClose = () => {
696
+ setVisible(false);
697
+ setTimeout(() => {
698
+ setOpen(false);
699
+ callBack();
700
+ }, 200);
701
+ };
702
+ const handleAction = () => {
703
+ onAction();
704
+ handleClose();
705
+ };
706
+ if (!visible) return null;
707
+ return /* @__PURE__ */ import_react12.default.createElement(
708
+ "div",
709
+ {
710
+ className: "fixed inset-0 overflow-x-hidden bg-black/80 sheetPopIn h-full overflow-auto ",
711
+ onClick: handleClose
712
+ },
713
+ /* @__PURE__ */ import_react12.default.createElement(
714
+ "div",
715
+ {
716
+ className: `absolute flex flex-col right-0 top-0 min-h-full min-w-[100%] md:min-w-[576px] bg-white
717
+ ${visible ? "sheetRightSlide" : "transition-all duration-200 translate-x-[100%]"} justify-between `,
718
+ onClick: (e) => e.stopPropagation()
719
+ },
720
+ /* @__PURE__ */ import_react12.default.createElement("div", { className: "bg-white min-h-full " }, children),
721
+ /* @__PURE__ */ import_react12.default.createElement("div", { className: "h-[90px] flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 p-6 border-t sticky bottom-0 bg-white border-[#e6e6e6]" }, /* @__PURE__ */ import_react12.default.createElement(CustomButton, { variant: "SECONDARY", onClick: () => handleClose() }, "Cancel"), /* @__PURE__ */ import_react12.default.createElement(CustomButton, { variant: "SECONDARY", onClick: handleAction }, actionLabel))
722
+ )
723
+ );
724
+ };
725
+
726
+ // src/Table/CustomTable.jsx
727
+ var import_react13 = __toESM(require("react"));
728
+ var CustomTable = ({ tableHeader, setIsAllChecked, isAllChecked, children }) => {
729
+ return /* @__PURE__ */ import_react13.default.createElement("div", { className: "border border-[#e5e5e5] rounded-lg overflow-x-auto" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "w-full relative overflow-x-auto" }, /* @__PURE__ */ import_react13.default.createElement("table", { className: "w-full caption-bottom text-sm overflow-x-auto bg-white table-fixed border-collapse" }, /* @__PURE__ */ import_react13.default.createElement("thead", { className: "border-b border-[#e5e5e5]" }, /* @__PURE__ */ import_react13.default.createElement("tr", { className: "transition-colors text-[#737373] hover:bg-muted/50 \r\n data-[state=selected]:bg-muted" }, /* @__PURE__ */ import_react13.default.createElement("th", { className: "px-4 py-3 text-left w-[50px]" }, /* @__PURE__ */ import_react13.default.createElement(CustomCheckbox, { checked: isAllChecked, onChange: () => {
730
+ setIsAllChecked(!isAllChecked);
731
+ } })), tableHeader.map((header, index) => {
732
+ return /* @__PURE__ */ import_react13.default.createElement("th", { className: `px-4 py-3 text-sm font-medium ${index == tableHeader.length - 1 ? "text-right" : "text-left"}`, key: header + index }, header);
733
+ }))), /* @__PURE__ */ import_react13.default.createElement("tbody", null, children))));
734
+ };
735
+
736
+ // src/inputs/CustomSelect.jsx
737
+ var import_react14 = __toESM(require("react"));
738
+ var import_lucide_react6 = require("lucide-react");
739
+ var CustomSelect = ({
740
+ label,
741
+ value,
742
+ onChange,
743
+ options,
744
+ placeholder = "Select...",
745
+ isRequired = false,
746
+ error,
747
+ heading,
748
+ disabled = false
749
+ }) => {
750
+ const [open, setOpen] = (0, import_react14.useState)(false);
751
+ const [search, setSearch] = (0, import_react14.useState)("");
752
+ const wrapperRef = (0, import_react14.useRef)(null);
753
+ const handleBlur = (e) => {
754
+ var _a;
755
+ if (!((_a = wrapperRef.current) == null ? void 0 : _a.contains(e.relatedTarget))) {
756
+ setOpen(false);
757
+ }
758
+ };
759
+ const filteredOptions = options.filter(
760
+ (opt) => opt.label.toLowerCase().includes(search.toLowerCase())
761
+ );
762
+ const handleSelect = (val) => {
763
+ onChange(val);
764
+ setOpen(false);
765
+ };
766
+ const selectedOption = options.find((opt) => opt.value === value);
767
+ return /* @__PURE__ */ import_react14.default.createElement(
768
+ "div",
769
+ {
770
+ className: "flex flex-col w-full relative",
771
+ ref: wrapperRef,
772
+ tabIndex: disabled ? -1 : 0,
773
+ onBlur: handleBlur
774
+ },
775
+ heading && /* @__PURE__ */ import_react14.default.createElement("h3", { className: "text-lg font-semibold mb-1" }, heading),
776
+ label && /* @__PURE__ */ import_react14.default.createElement(
777
+ "label",
778
+ {
779
+ className: `font-medium text-sm mb-1 ${heading ? "text-gray-500" : "text-black"}`
780
+ },
781
+ label,
782
+ " ",
783
+ isRequired && /* @__PURE__ */ import_react14.default.createElement("span", { className: "text-red-500" }, "*")
784
+ ),
785
+ /* @__PURE__ */ import_react14.default.createElement(
786
+ "div",
787
+ {
788
+ onClick: () => !disabled && setOpen((prev) => !prev),
789
+ className: `flex justify-between items-center rounded-md px-3 py-2 text-sm border h-10 cursor-pointer
790
+ ${disabled ? "bg-gray-100 text-gray-400" : "bg-white hover:border-gray-400"}
791
+ ${error ? "border-red-500" : "border-gray-300"}
792
+ `
793
+ },
794
+ /* @__PURE__ */ import_react14.default.createElement("span", { className: `${selectedOption ? "text-black" : "text-gray-400"}` }, selectedOption ? selectedOption.label : placeholder),
795
+ /* @__PURE__ */ import_react14.default.createElement(
796
+ import_lucide_react6.ChevronDown,
797
+ {
798
+ className: `w-4 h-4 text-gray-500 transition-transform ${open ? "rotate-180" : ""}`
799
+ }
800
+ )
801
+ ),
802
+ open && !disabled && /* @__PURE__ */ import_react14.default.createElement("div", { className: "absolute top-full mt-1 w-full bg-white border border-gray-200 rounded-lg shadow-lg z-10 max-h-60 overflow-y-auto" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center gap-2 p-2 border-b border-gray-200" }, /* @__PURE__ */ import_react14.default.createElement(import_lucide_react6.Search, { size: 16, className: "text-gray-400" }), /* @__PURE__ */ import_react14.default.createElement(
803
+ "input",
804
+ {
805
+ type: "text",
806
+ value: search,
807
+ onChange: (e) => setSearch(e.target.value),
808
+ placeholder: "Search...",
809
+ className: "flex-1 text-sm focus:outline-none"
810
+ }
811
+ )), /* @__PURE__ */ import_react14.default.createElement("ul", null, filteredOptions.length > 0 ? filteredOptions.map((opt) => /* @__PURE__ */ import_react14.default.createElement(
812
+ "li",
813
+ {
814
+ key: opt.value,
815
+ onClick: () => handleSelect(opt.value),
816
+ className: `px-3 py-2 text-sm cursor-pointer hover:bg-gray-100 ${value === opt.value ? "bg-gray-100 font-medium" : ""}`
817
+ },
818
+ opt.label
819
+ )) : /* @__PURE__ */ import_react14.default.createElement("li", { className: "px-3 py-2 text-sm text-gray-400" }, "No results found")))
820
+ );
821
+ };
822
+ // Annotate the CommonJS export names for ESM import in node:
823
+ 0 && (module.exports = {
824
+ AppSideBar,
825
+ Chip,
826
+ CustomAutocomplete,
827
+ CustomButton,
828
+ CustomCheckbox,
829
+ CustomInput,
830
+ CustomSearch,
831
+ CustomSelect,
832
+ CustomSwitch,
833
+ CustomTable,
834
+ CustomTextarea,
835
+ CustomUpload,
836
+ ProgressBar,
837
+ RightSheet
838
+ });