@itilite/lumina-ui 1.0.4-alpha → 1.0.6-alpha

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.
@@ -0,0 +1,439 @@
1
+ import {
2
+ Select_default
3
+ } from "./chunk-GU5F7Z7I.mjs";
4
+ import {
5
+ InternalCalendar_default
6
+ } from "./chunk-6XIT27XY.mjs";
7
+ import {
8
+ Button_default
9
+ } from "./chunk-AF2RKLH6.mjs";
10
+
11
+ // src/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.tsx
12
+ import { memo, useCallback, useEffect, useMemo, useState } from "react";
13
+ import clsx from "clsx";
14
+ import dayjs from "dayjs";
15
+ import customParseFormat from "dayjs/plugin/customParseFormat.js";
16
+ import isSameOrBefore from "dayjs/plugin/isSameOrBefore.js";
17
+
18
+ // src/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.module.scss
19
+ var AdvancedDateRangePicker_module_default = { "root": "AdvancedDateRangePicker-module__root___udir8", "singleCalendar": "AdvancedDateRangePicker-module__singleCalendar___qy2-H", "inner": "AdvancedDateRangePicker-module__inner___P4OHa", "left": "AdvancedDateRangePicker-module__left___T6E84", "sidebarItem": "AdvancedDateRangePicker-module__sidebarItem___-NXPm", "sidebarItemActive": "AdvancedDateRangePicker-module__sidebarItemActive___5GmBY", "main": "AdvancedDateRangePicker-module__main___G4MU9", "header": "AdvancedDateRangePicker-module__header___mxXEE", "timezoneWrapper": "AdvancedDateRangePicker-module__timezoneWrapper___886Qm", "dateTimeWrapper": "AdvancedDateRangePicker-module__dateTimeWrapper___unDQJ", "headerGroup": "AdvancedDateRangePicker-module__headerGroup___J7mJB", "headerLabel": "AdvancedDateRangePicker-module__headerLabel___Yvhkr", "headerSeparator": "AdvancedDateRangePicker-module__headerSeparator___Vwx6P", "timezoneSelect": "AdvancedDateRangePicker-module__timezoneSelect___f4oln", "timezoneSelectContainer": "AdvancedDateRangePicker-module__timezoneSelectContainer___8SMc4", "timezoneSelectInput": "AdvancedDateRangePicker-module__timezoneSelectInput___ol0-7", "timezoneDisabledBadge": "AdvancedDateRangePicker-module__timezoneDisabledBadge___VBxOd", "inputWrapper": "AdvancedDateRangePicker-module__inputWrapper___bFFNF", "dateTimeColumn": "AdvancedDateRangePicker-module__dateTimeColumn___tdDV3", "dateTimeGroup": "AdvancedDateRangePicker-module__dateTimeGroup___azF09", "dateInput": "AdvancedDateRangePicker-module__dateInput___0t9ww", "inputError": "AdvancedDateRangePicker-module__inputError___A5hid", "timeInput": "AdvancedDateRangePicker-module__timeInput___Jalr9", "errorMessage": "AdvancedDateRangePicker-module__errorMessage___gx7ag", "body": "AdvancedDateRangePicker-module__body___f8XYj", "footer": "AdvancedDateRangePicker-module__footer___rsJ2w", "doneBtn": "AdvancedDateRangePicker-module__doneBtn___mt-Sv" };
20
+
21
+ // src/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.tsx
22
+ import { jsx, jsxs } from "react/jsx-runtime";
23
+ dayjs.extend(customParseFormat);
24
+ dayjs.extend(isSameOrBefore);
25
+ var DEFAULT_TIME = { hour: "12", minute: "00", period: "PM" };
26
+ function getPresets() {
27
+ const today = /* @__PURE__ */ new Date();
28
+ today.setHours(0, 0, 0, 0);
29
+ return [
30
+ {
31
+ label: "Custom",
32
+ key: "custom",
33
+ getRange: () => [null, null]
34
+ },
35
+ {
36
+ label: "Yesterday",
37
+ key: "yesterday",
38
+ getRange: () => {
39
+ const d = new Date(today);
40
+ d.setDate(d.getDate() - 1);
41
+ return [d, d];
42
+ }
43
+ },
44
+ {
45
+ label: "Previous week",
46
+ key: "previous-week",
47
+ getRange: () => {
48
+ const dayOfWeek = today.getDay();
49
+ const start = new Date(today);
50
+ start.setDate(today.getDate() - dayOfWeek - 6);
51
+ const end = new Date(today);
52
+ return [start, end];
53
+ }
54
+ },
55
+ {
56
+ label: "This month",
57
+ key: "this-month",
58
+ getRange: () => {
59
+ const start = new Date(today.getFullYear(), today.getMonth(), 1);
60
+ const end = new Date(today.getFullYear(), today.getMonth() + 1, 0);
61
+ return [start, end];
62
+ }
63
+ },
64
+ {
65
+ label: "Previous month",
66
+ key: "previous-month",
67
+ getRange: () => {
68
+ const start = new Date(today.getFullYear(), today.getMonth() - 1, 1);
69
+ const end = new Date(today.getFullYear(), today.getMonth(), 0);
70
+ return [start, end];
71
+ }
72
+ },
73
+ {
74
+ label: "Previous quarter",
75
+ key: "previous-quarter",
76
+ getRange: () => {
77
+ const month = today.getMonth();
78
+ const quarter = Math.floor(month / 3);
79
+ const startMonth = (quarter - 1) * 3;
80
+ const start = new Date(today.getFullYear(), startMonth, 1);
81
+ const end = new Date(today.getFullYear(), startMonth + 3, 0);
82
+ return [start, end];
83
+ }
84
+ }
85
+ ];
86
+ }
87
+ function applyDateMask(v, prev) {
88
+ if (v.length < prev.length) return v;
89
+ const digits = v.replace(/[^\d]/g, "").slice(0, 8);
90
+ if (digits.length >= 2) {
91
+ const d = Number(digits.slice(0, 2));
92
+ if (d < 1 || d > 31) return prev;
93
+ }
94
+ if (digits.length >= 4) {
95
+ const m = Number(digits.slice(2, 4));
96
+ if (m < 1 || m > 12) return prev;
97
+ }
98
+ let result = "";
99
+ if (digits.length > 0) result += digits.slice(0, 2);
100
+ if (digits.length >= 2) result += "-";
101
+ if (digits.length > 2) result += digits.slice(2, 4);
102
+ if (digits.length >= 4) result += "-";
103
+ if (digits.length > 4) result += digits.slice(4, 8);
104
+ return result.slice(0, 10);
105
+ }
106
+ function applyTimeMask(v, prev) {
107
+ if (v.length < prev.length) return v;
108
+ const digits = v.replace(/[^\d]/g, "").slice(0, 4);
109
+ if (digits.length >= 2) {
110
+ const h = Number(digits.slice(0, 2));
111
+ if (h < 1 || h > 12) return prev;
112
+ }
113
+ if (digits.length >= 4) {
114
+ const m = Number(digits.slice(2, 4));
115
+ if (m > 59) return prev;
116
+ }
117
+ let result = "";
118
+ if (digits.length > 0) result += digits.slice(0, 2);
119
+ if (digits.length >= 2) result += ":";
120
+ if (digits.length > 2) result += digits.slice(2, 4);
121
+ if (v.toUpperCase().includes("A")) result += " AM";
122
+ else if (v.toUpperCase().includes("P")) result += " PM";
123
+ else if (digits.length === 4) result += " ";
124
+ return result.slice(0, 8);
125
+ }
126
+ function formatForDisplay(date) {
127
+ if (!date) return "";
128
+ return dayjs(date).format("DD-MM-YYYY");
129
+ }
130
+ function validateDateString(raw) {
131
+ const regex = /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-\d{4}$/;
132
+ if (!regex.test(raw)) return false;
133
+ const [d, m, y] = raw.split("-").map(Number);
134
+ const date = new Date(y, m - 1, d);
135
+ return date.getFullYear() === y && date.getMonth() === m - 1 && date.getDate() === d;
136
+ }
137
+ function validateTimeString(raw) {
138
+ const regex = /^(0[1-9]|1[0-2]):(0[0-9]|[1-5][0-9])\s(AM|PM)$/i;
139
+ return regex.test(raw);
140
+ }
141
+ function parseDateInput(raw) {
142
+ if (!validateDateString(raw)) return null;
143
+ return dayjs(raw, "DD-MM-YYYY", true).toDate();
144
+ }
145
+ function parseTimeInput(raw) {
146
+ if (!validateTimeString(raw)) return null;
147
+ const match = raw.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);
148
+ if (!match) return null;
149
+ return {
150
+ hour: match[1].padStart(2, "0"),
151
+ minute: match[2].padStart(2, "0"),
152
+ period: match[3].toUpperCase()
153
+ };
154
+ }
155
+ function formatTime(t) {
156
+ return `${t.hour}:${t.minute} ${t.period}`;
157
+ }
158
+ var DateTimeInputGroup = memo(function DateTimeInputGroup2({
159
+ label,
160
+ dateValue,
161
+ timeValue,
162
+ dateError,
163
+ timeError,
164
+ onDateChange,
165
+ onTimeChange
166
+ }) {
167
+ const [isDateFocused, setIsDateFocused] = useState(false);
168
+ const [isTimeFocused, setIsTimeFocused] = useState(false);
169
+ const showDateError = dateError && !isDateFocused;
170
+ const showTimeError = timeError && !isTimeFocused;
171
+ return /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.headerGroup, children: [
172
+ /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.headerLabel, children: label }),
173
+ /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.dateTimeColumn, children: /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.dateTimeGroup, children: [
174
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inputWrapper, children: [
175
+ /* @__PURE__ */ jsx(
176
+ "input",
177
+ {
178
+ type: "text",
179
+ placeholder: "dd-mm-yyyy",
180
+ value: dateValue,
181
+ onFocus: () => setIsDateFocused(true),
182
+ onBlur: () => setIsDateFocused(false),
183
+ onChange: (e) => onDateChange(e.target.value),
184
+ className: clsx(AdvancedDateRangePicker_module_default.dateInput, { [AdvancedDateRangePicker_module_default.inputError]: showDateError })
185
+ }
186
+ ),
187
+ showDateError && /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.errorMessage, children: "Enter valid date" })
188
+ ] }),
189
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inputWrapper, children: [
190
+ /* @__PURE__ */ jsx(
191
+ "input",
192
+ {
193
+ type: "text",
194
+ placeholder: "12:00 PM",
195
+ value: timeValue,
196
+ onFocus: () => setIsTimeFocused(true),
197
+ onBlur: () => setIsTimeFocused(false),
198
+ onChange: (e) => onTimeChange(e.target.value),
199
+ className: clsx(AdvancedDateRangePicker_module_default.timeInput, { [AdvancedDateRangePicker_module_default.inputError]: showTimeError })
200
+ }
201
+ ),
202
+ showTimeError && /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.errorMessage, children: "Enter valid time" })
203
+ ] })
204
+ ] }) })
205
+ ] });
206
+ });
207
+ function AdvancedDateRangePicker({
208
+ value,
209
+ onChange,
210
+ confirmLabel = "Done",
211
+ className = "",
212
+ disabled = false,
213
+ disablePastDates = false,
214
+ minDate = null,
215
+ maxDate = null,
216
+ showSingleCalendar = false,
217
+ id = "adv-drp",
218
+ defaultTimezone = "UTC",
219
+ isTimezoneDisabled = false,
220
+ timezoneOptions = [],
221
+ defaultPreset = "custom"
222
+ }) {
223
+ var _a, _b, _c;
224
+ const PRESETS = useMemo(() => getPresets(), []);
225
+ const [startDate, setStartDate] = useState((_a = value == null ? void 0 : value.startDate) != null ? _a : null);
226
+ const [endDate, setEndDate] = useState((_b = value == null ? void 0 : value.endDate) != null ? _b : null);
227
+ const [timezone, setTimezone] = useState((_c = value == null ? void 0 : value.timezone) != null ? _c : defaultTimezone);
228
+ const [fromDateStr, setFromDateStr] = useState(formatForDisplay(startDate));
229
+ const [toDateStr, setToDateStr] = useState(formatForDisplay(endDate));
230
+ const [fromTimeStr, setFromTimeStr] = useState(
231
+ (value == null ? void 0 : value.startTime) ? formatTime(value.startTime) : "12:00 PM"
232
+ );
233
+ const [toTimeStr, setToTimeStr] = useState(
234
+ (value == null ? void 0 : value.endTime) ? formatTime(value.endTime) : "12:00 PM"
235
+ );
236
+ const [activePreset, setActivePreset] = useState(defaultPreset);
237
+ const isSingle = showSingleCalendar;
238
+ const fromDateError = useMemo(() => fromDateStr.length > 0 && (fromDateStr.length < 10 || !validateDateString(fromDateStr)), [fromDateStr]);
239
+ const toDateError = useMemo(() => toDateStr.length > 0 && (toDateStr.length < 10 || !validateDateString(toDateStr)), [toDateStr]);
240
+ const fromTimeError = useMemo(() => fromTimeStr.length > 0 && (fromTimeStr.length < 8 || !validateTimeString(fromTimeStr)), [fromTimeStr]);
241
+ const toTimeError = useMemo(() => toTimeStr.length > 0 && (toTimeStr.length < 8 || !validateTimeString(toTimeStr)), [toTimeStr]);
242
+ const isReady = useMemo(() => {
243
+ return startDate !== null && endDate !== null && validateDateString(fromDateStr) && validateDateString(toDateStr) && validateTimeString(fromTimeStr) && validateTimeString(toTimeStr) && dayjs(startDate).isSameOrBefore(dayjs(endDate), "day");
244
+ }, [startDate, endDate, fromDateStr, toDateStr, fromTimeStr, toTimeStr]);
245
+ useEffect(() => {
246
+ var _a2, _b2, _c2;
247
+ if (value) {
248
+ setStartDate((_a2 = value.startDate) != null ? _a2 : null);
249
+ setEndDate((_b2 = value.endDate) != null ? _b2 : null);
250
+ setTimezone((_c2 = value.timezone) != null ? _c2 : defaultTimezone);
251
+ if (value.startTime) setFromTimeStr(formatTime(value.startTime));
252
+ if (value.endTime) setToTimeStr(formatTime(value.endTime));
253
+ }
254
+ }, [value, defaultTimezone]);
255
+ useEffect(() => {
256
+ setFromDateStr(formatForDisplay(startDate));
257
+ }, [startDate]);
258
+ useEffect(() => {
259
+ setToDateStr(formatForDisplay(endDate));
260
+ }, [endDate]);
261
+ const rangeValue = useMemo(() => [
262
+ startDate ? startDate.toISOString() : "",
263
+ endDate ? endDate.toISOString() : ""
264
+ ], [startDate, endDate]);
265
+ const handleRangeChange = useCallback(
266
+ (range) => {
267
+ const [s, e] = range;
268
+ if (s) {
269
+ const sDateByDayjs = dayjs(s, "D MMM, YYYY").toDate();
270
+ setStartDate(sDateByDayjs);
271
+ } else {
272
+ setStartDate(null);
273
+ }
274
+ if (e) {
275
+ const eDateByDayjs = dayjs(e, "D MMM, YYYY").toDate();
276
+ setEndDate(eDateByDayjs);
277
+ } else {
278
+ setEndDate(null);
279
+ }
280
+ setActivePreset("custom");
281
+ },
282
+ []
283
+ );
284
+ const handlePreset = useCallback(
285
+ (preset) => {
286
+ const [s, e] = preset.getRange();
287
+ setStartDate(s);
288
+ setEndDate(e);
289
+ setActivePreset(preset.key);
290
+ },
291
+ []
292
+ );
293
+ const handleFromDateChange = useCallback((v) => {
294
+ const masked = applyDateMask(v, fromDateStr);
295
+ setFromDateStr(masked);
296
+ setActivePreset("custom");
297
+ if (masked.length === 10) {
298
+ const parsed = parseDateInput(masked);
299
+ if (parsed) {
300
+ setStartDate(parsed);
301
+ if (endDate && dayjs(parsed).isAfter(dayjs(endDate), "day")) {
302
+ setEndDate(null);
303
+ }
304
+ }
305
+ }
306
+ }, [fromDateStr, endDate]);
307
+ const handleToDateChange = useCallback((v) => {
308
+ const masked = applyDateMask(v, toDateStr);
309
+ setToDateStr(masked);
310
+ setActivePreset("custom");
311
+ if (masked.length === 10) {
312
+ const parsed = parseDateInput(masked);
313
+ if (parsed) {
314
+ setEndDate(parsed);
315
+ if (startDate && dayjs(parsed).isBefore(dayjs(startDate), "day")) {
316
+ setStartDate(null);
317
+ }
318
+ }
319
+ }
320
+ }, [toDateStr, startDate]);
321
+ const handleFromTimeChange = useCallback((v) => {
322
+ const masked = applyTimeMask(v, fromTimeStr);
323
+ setFromTimeStr(masked);
324
+ setActivePreset("custom");
325
+ }, [fromTimeStr]);
326
+ const handleToTimeChange = useCallback((v) => {
327
+ const masked = applyTimeMask(v, toTimeStr);
328
+ setToTimeStr(masked);
329
+ setActivePreset("custom");
330
+ }, [toTimeStr]);
331
+ const handleDone = useCallback(() => {
332
+ var _a2, _b2;
333
+ if (!isReady) return;
334
+ const fromTime = (_a2 = parseTimeInput(fromTimeStr)) != null ? _a2 : DEFAULT_TIME;
335
+ const toTime = (_b2 = parseTimeInput(toTimeStr)) != null ? _b2 : DEFAULT_TIME;
336
+ onChange == null ? void 0 : onChange({
337
+ startDate,
338
+ endDate,
339
+ startTime: fromTime,
340
+ endTime: toTime,
341
+ timezone
342
+ });
343
+ }, [isReady, onChange, startDate, endDate, fromTimeStr, toTimeStr, timezone]);
344
+ return /* @__PURE__ */ jsxs("div", { className: clsx(AdvancedDateRangePicker_module_default.root, className, { [AdvancedDateRangePicker_module_default.singleCalendar]: isSingle }), id, children: [
345
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inner, children: [
346
+ /* @__PURE__ */ jsx("aside", { className: AdvancedDateRangePicker_module_default.left, children: PRESETS.map((p) => /* @__PURE__ */ jsx(
347
+ "button",
348
+ {
349
+ type: "button",
350
+ onClick: () => handlePreset(p),
351
+ className: clsx(AdvancedDateRangePicker_module_default.sidebarItem, {
352
+ [AdvancedDateRangePicker_module_default.sidebarItemActive]: activePreset === p.key
353
+ }),
354
+ children: p.label
355
+ },
356
+ p.key
357
+ )) }),
358
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.main, children: [
359
+ /* @__PURE__ */ jsxs("header", { className: AdvancedDateRangePicker_module_default.header, children: [
360
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.timezoneWrapper, children: [
361
+ /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.headerLabel, children: "Timezone" }),
362
+ isTimezoneDisabled ? (
363
+ /* Disabled state: plain text badge instead of empty dropdown */
364
+ /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.timezoneDisabledBadge, children: timezone })
365
+ ) : /* @__PURE__ */ jsx(
366
+ Select_default,
367
+ {
368
+ value: timezone,
369
+ onChange: (val) => {
370
+ if (val) setTimezone(String(val));
371
+ },
372
+ options: timezoneOptions,
373
+ size: "small",
374
+ allowClear: false,
375
+ enableSearch: false,
376
+ wrapperClassName: AdvancedDateRangePicker_module_default.timezoneSelectContainer,
377
+ inputClassName: AdvancedDateRangePicker_module_default.timezoneSelectInput
378
+ }
379
+ )
380
+ ] }),
381
+ /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.dateTimeWrapper, children: [
382
+ /* @__PURE__ */ jsx(
383
+ DateTimeInputGroup,
384
+ {
385
+ label: "From",
386
+ dateValue: fromDateStr,
387
+ timeValue: fromTimeStr,
388
+ dateError: fromDateError,
389
+ timeError: fromTimeError,
390
+ onDateChange: handleFromDateChange,
391
+ onTimeChange: handleFromTimeChange
392
+ }
393
+ ),
394
+ /* @__PURE__ */ jsx(
395
+ DateTimeInputGroup,
396
+ {
397
+ label: "To",
398
+ dateValue: toDateStr,
399
+ timeValue: toTimeStr,
400
+ dateError: toDateError,
401
+ timeError: toTimeError,
402
+ onDateChange: handleToDateChange,
403
+ onTimeChange: handleToTimeChange
404
+ }
405
+ )
406
+ ] })
407
+ ] }),
408
+ /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.body, children: /* @__PURE__ */ jsx(
409
+ InternalCalendar_default,
410
+ {
411
+ id: `${id}-calendar`,
412
+ dateRange: rangeValue,
413
+ onChange: handleRangeChange,
414
+ disablePastDates,
415
+ minDate,
416
+ maxDate,
417
+ showSingleCalendar: isSingle
418
+ }
419
+ ) })
420
+ ] })
421
+ ] }),
422
+ /* @__PURE__ */ jsx("footer", { className: AdvancedDateRangePicker_module_default.footer, children: /* @__PURE__ */ jsx(
423
+ Button_default,
424
+ {
425
+ onClick: handleDone,
426
+ disabled: disabled || !isReady,
427
+ shape: "round",
428
+ children: confirmLabel
429
+ }
430
+ ) })
431
+ ] });
432
+ }
433
+ AdvancedDateRangePicker.displayName = "AdvancedDateRangePicker";
434
+ var AdvancedDateRangePicker_default = AdvancedDateRangePicker;
435
+
436
+ export {
437
+ AdvancedDateRangePicker,
438
+ AdvancedDateRangePicker_default
439
+ };
package/dist/index.d.mts CHANGED
@@ -11,7 +11,7 @@ export { A as AdvancedDateRangePicker, D as DateRangePickerProps, a as DateRange
11
11
  export { Select } from './atom/Select/Select.mjs';
12
12
  export { LoadingSpinner } from './atom/LoadingSpinner/LoadingSpinner.mjs';
13
13
  export { Slider } from './atom/Slider/Slider.mjs';
14
- export { L as LuminaColumnHeaderProps, a as LuminaColumnType, b as LuminaColumnsType, S as SortOrder, T as Table, c as TableProps } from './Table-BOq-_9Nr.mjs';
14
+ export { L as LuminaColumnHeaderProps, a as LuminaColumnType, b as LuminaColumnsType, S as SortOrder, T as Table, c as TableProps } from './Table-DSFYzrpU.mjs';
15
15
  export { UserProfile } from './molecules/UserProfile/UserProfile.mjs';
16
16
  export { TablePaginationConfig } from 'antd';
17
17
  import 'react';
package/dist/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export { A as AdvancedDateRangePicker, D as DateRangePickerProps, a as DateRange
11
11
  export { Select } from './atom/Select/Select.js';
12
12
  export { LoadingSpinner } from './atom/LoadingSpinner/LoadingSpinner.js';
13
13
  export { Slider } from './atom/Slider/Slider.js';
14
- export { L as LuminaColumnHeaderProps, a as LuminaColumnType, b as LuminaColumnsType, S as SortOrder, T as Table, c as TableProps } from './Table-BOq-_9Nr.js';
14
+ export { L as LuminaColumnHeaderProps, a as LuminaColumnType, b as LuminaColumnsType, S as SortOrder, T as Table, c as TableProps } from './Table-DSFYzrpU.js';
15
15
  export { UserProfile } from './molecules/UserProfile/UserProfile.js';
16
16
  export { TablePaginationConfig } from 'antd';
17
17
  import 'react';
package/dist/index.js CHANGED
@@ -1957,7 +1957,7 @@ var import_customParseFormat = __toESM(require("dayjs/plugin/customParseFormat.j
1957
1957
  var import_isSameOrBefore = __toESM(require("dayjs/plugin/isSameOrBefore.js"));
1958
1958
 
1959
1959
  // src/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.module.scss
1960
- var AdvancedDateRangePicker_module_default = { "root": "AdvancedDateRangePicker-module__root___udir8", "inner": "AdvancedDateRangePicker-module__inner___P4OHa", "left": "AdvancedDateRangePicker-module__left___T6E84", "sidebarItem": "AdvancedDateRangePicker-module__sidebarItem___-NXPm", "sidebarItemActive": "AdvancedDateRangePicker-module__sidebarItemActive___5GmBY", "main": "AdvancedDateRangePicker-module__main___G4MU9", "header": "AdvancedDateRangePicker-module__header___mxXEE", "timezoneWrapper": "AdvancedDateRangePicker-module__timezoneWrapper___886Qm", "dateTimeWrapper": "AdvancedDateRangePicker-module__dateTimeWrapper___unDQJ", "headerGroup": "AdvancedDateRangePicker-module__headerGroup___J7mJB", "headerLabel": "AdvancedDateRangePicker-module__headerLabel___Yvhkr", "headerSeparator": "AdvancedDateRangePicker-module__headerSeparator___Vwx6P", "timezoneSelect": "AdvancedDateRangePicker-module__timezoneSelect___f4oln", "timezoneSelectContainer": "AdvancedDateRangePicker-module__timezoneSelectContainer___8SMc4", "timezoneSelectInput": "AdvancedDateRangePicker-module__timezoneSelectInput___ol0-7", "timezoneDisabledBadge": "AdvancedDateRangePicker-module__timezoneDisabledBadge___VBxOd", "inputWrapper": "AdvancedDateRangePicker-module__inputWrapper___bFFNF", "dateTimeColumn": "AdvancedDateRangePicker-module__dateTimeColumn___tdDV3", "dateTimeGroup": "AdvancedDateRangePicker-module__dateTimeGroup___azF09", "dateInput": "AdvancedDateRangePicker-module__dateInput___0t9ww", "inputError": "AdvancedDateRangePicker-module__inputError___A5hid", "timeInput": "AdvancedDateRangePicker-module__timeInput___Jalr9", "errorMessage": "AdvancedDateRangePicker-module__errorMessage___gx7ag", "body": "AdvancedDateRangePicker-module__body___f8XYj", "footer": "AdvancedDateRangePicker-module__footer___rsJ2w", "doneBtn": "AdvancedDateRangePicker-module__doneBtn___mt-Sv" };
1960
+ var AdvancedDateRangePicker_module_default = { "root": "AdvancedDateRangePicker-module__root___udir8", "singleCalendar": "AdvancedDateRangePicker-module__singleCalendar___qy2-H", "inner": "AdvancedDateRangePicker-module__inner___P4OHa", "left": "AdvancedDateRangePicker-module__left___T6E84", "sidebarItem": "AdvancedDateRangePicker-module__sidebarItem___-NXPm", "sidebarItemActive": "AdvancedDateRangePicker-module__sidebarItemActive___5GmBY", "main": "AdvancedDateRangePicker-module__main___G4MU9", "header": "AdvancedDateRangePicker-module__header___mxXEE", "timezoneWrapper": "AdvancedDateRangePicker-module__timezoneWrapper___886Qm", "dateTimeWrapper": "AdvancedDateRangePicker-module__dateTimeWrapper___unDQJ", "headerGroup": "AdvancedDateRangePicker-module__headerGroup___J7mJB", "headerLabel": "AdvancedDateRangePicker-module__headerLabel___Yvhkr", "headerSeparator": "AdvancedDateRangePicker-module__headerSeparator___Vwx6P", "timezoneSelect": "AdvancedDateRangePicker-module__timezoneSelect___f4oln", "timezoneSelectContainer": "AdvancedDateRangePicker-module__timezoneSelectContainer___8SMc4", "timezoneSelectInput": "AdvancedDateRangePicker-module__timezoneSelectInput___ol0-7", "timezoneDisabledBadge": "AdvancedDateRangePicker-module__timezoneDisabledBadge___VBxOd", "inputWrapper": "AdvancedDateRangePicker-module__inputWrapper___bFFNF", "dateTimeColumn": "AdvancedDateRangePicker-module__dateTimeColumn___tdDV3", "dateTimeGroup": "AdvancedDateRangePicker-module__dateTimeGroup___azF09", "dateInput": "AdvancedDateRangePicker-module__dateInput___0t9ww", "inputError": "AdvancedDateRangePicker-module__inputError___A5hid", "timeInput": "AdvancedDateRangePicker-module__timeInput___Jalr9", "errorMessage": "AdvancedDateRangePicker-module__errorMessage___gx7ag", "body": "AdvancedDateRangePicker-module__body___f8XYj", "footer": "AdvancedDateRangePicker-module__footer___rsJ2w", "doneBtn": "AdvancedDateRangePicker-module__doneBtn___mt-Sv" };
1961
1961
 
1962
1962
  // src/atom/AdvancedDateRangePicker/InternalCalendar.tsx
1963
1963
  var import_react4 = require("react");
@@ -2008,7 +2008,7 @@ var InternalCalendar = ({
2008
2008
  const [isMobile, setIsMobile] = (0, import_react4.useState)(false);
2009
2009
  (0, import_react4.useEffect)(() => {
2010
2010
  const checkMobile = () => {
2011
- setIsMobile(window.innerWidth < 1024);
2011
+ setIsMobile(window.innerWidth <= 768);
2012
2012
  };
2013
2013
  checkMobile();
2014
2014
  window.addEventListener("resize", checkMobile);
@@ -2437,6 +2437,7 @@ function AdvancedDateRangePicker({
2437
2437
  (value == null ? void 0 : value.endTime) ? formatTime(value.endTime) : "12:00 PM"
2438
2438
  );
2439
2439
  const [activePreset, setActivePreset] = (0, import_react5.useState)(defaultPreset);
2440
+ const isSingle = showSingleCalendar;
2440
2441
  const fromDateError = (0, import_react5.useMemo)(() => fromDateStr.length > 0 && (fromDateStr.length < 10 || !validateDateString(fromDateStr)), [fromDateStr]);
2441
2442
  const toDateError = (0, import_react5.useMemo)(() => toDateStr.length > 0 && (toDateStr.length < 10 || !validateDateString(toDateStr)), [toDateStr]);
2442
2443
  const fromTimeError = (0, import_react5.useMemo)(() => fromTimeStr.length > 0 && (fromTimeStr.length < 8 || !validateTimeString(fromTimeStr)), [fromTimeStr]);
@@ -2543,7 +2544,7 @@ function AdvancedDateRangePicker({
2543
2544
  timezone
2544
2545
  });
2545
2546
  }, [isReady, onChange, startDate, endDate, fromTimeStr, toTimeStr, timezone]);
2546
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: (0, import_clsx10.default)(AdvancedDateRangePicker_module_default.root, className), id, children: [
2547
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: (0, import_clsx10.default)(AdvancedDateRangePicker_module_default.root, className, { [AdvancedDateRangePicker_module_default.singleCalendar]: isSingle }), id, children: [
2547
2548
  /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: AdvancedDateRangePicker_module_default.inner, children: [
2548
2549
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("aside", { className: AdvancedDateRangePicker_module_default.left, children: PRESETS.map((p) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2549
2550
  "button",
@@ -2616,7 +2617,7 @@ function AdvancedDateRangePicker({
2616
2617
  disablePastDates,
2617
2618
  minDate,
2618
2619
  maxDate,
2619
- showSingleCalendar
2620
+ showSingleCalendar: isSingle
2620
2621
  }
2621
2622
  ) })
2622
2623
  ] })
@@ -2709,7 +2710,7 @@ var import_antd10 = require("antd");
2709
2710
  var import_clsx12 = __toESM(require("clsx"));
2710
2711
 
2711
2712
  // src/atom/Table/Table.module.scss
2712
- var Table_module_default = { "tableWrapper": "Table-module__tableWrapper___3cqiD", "isAccordion": "Table-module__isAccordion___-uIs6", "isToolbar": "Table-module__isToolbar___LdS-m", "table": "Table-module__table___5d7g0", "firstRow": "Table-module__firstRow___Xq-Hi", "lastRow": "Table-module__lastRow___ahv4g", "showHoverEffect": "Table-module__showHoverEffect___IyKyO", "columnHeader": "Table-module__columnHeader___Unr6d", "columnHeaderLeft": "Table-module__columnHeaderLeft___mp7pK", "columnHeaderSortArea": "Table-module__columnHeaderSortArea___jrIYo", "columnHeaderLabel": "Table-module__columnHeaderLabel___A-mRu", "columnHeaderSortIcon": "Table-module__columnHeaderSortIcon___mWVZN", "columnHeaderSortIconActive": "Table-module__columnHeaderSortIconActive___wHAqC", "columnHeaderFilterWrapper": "Table-module__columnHeaderFilterWrapper___DnSve", "columnHeaderFilterBtn": "Table-module__columnHeaderFilterBtn___NR7DY", "columnHeaderFilterBtnActive": "Table-module__columnHeaderFilterBtnActive___JdO11", "columnHeaderFilterBadge": "Table-module__columnHeaderFilterBadge___-Q2T2", "columnHeaderFilterDropdown": "Table-module__columnHeaderFilterDropdown___M-fD4" };
2713
+ var Table_module_default = { "tableWrapper": "Table-module__tableWrapper___3cqiD", "isAccordion": "Table-module__isAccordion___-uIs6", "isToolbar": "Table-module__isToolbar___LdS-m", "hasCustomHeaderCell": "Table-module__hasCustomHeaderCell___AtCk8", "table": "Table-module__table___5d7g0", "hasCustomBodyCell": "Table-module__hasCustomBodyCell___sf8j8", "hasRowSpacing": "Table-module__hasRowSpacing___bGT0u", "firstRow": "Table-module__firstRow___Xq-Hi", "lastRow": "Table-module__lastRow___ahv4g", "showHoverEffect": "Table-module__showHoverEffect___IyKyO", "columnHeader": "Table-module__columnHeader___Unr6d", "columnHeaderLeft": "Table-module__columnHeaderLeft___mp7pK", "columnHeaderSortArea": "Table-module__columnHeaderSortArea___jrIYo", "columnHeaderLabel": "Table-module__columnHeaderLabel___A-mRu", "columnHeaderSortIcon": "Table-module__columnHeaderSortIcon___mWVZN", "columnHeaderSortIconActive": "Table-module__columnHeaderSortIconActive___wHAqC", "columnHeaderFilterWrapper": "Table-module__columnHeaderFilterWrapper___DnSve", "columnHeaderFilterBtn": "Table-module__columnHeaderFilterBtn___NR7DY", "columnHeaderFilterBtnActive": "Table-module__columnHeaderFilterBtnActive___JdO11", "columnHeaderFilterBadge": "Table-module__columnHeaderFilterBadge___-Q2T2", "columnHeaderFilterDropdown": "Table-module__columnHeaderFilterDropdown___M-fD4" };
2713
2714
 
2714
2715
  // src/atom/Table/Table.tsx
2715
2716
  var import_jsx_runtime19 = require("react/jsx-runtime");
@@ -2808,13 +2809,29 @@ function ColumnHeader({
2808
2809
  ] })
2809
2810
  ] });
2810
2811
  }
2811
- function processColumns(columns) {
2812
+ function processColumns(columns, headerCellClassName, bodyCellClassName) {
2812
2813
  if (!columns) return void 0;
2813
2814
  return columns.map((col) => {
2814
- const _a = col, { headerProps, title } = _a, rest = __objRest(_a, ["headerProps", "title"]);
2815
- if (!headerProps) return __spreadValues({ title }, rest);
2815
+ const _a = col, { headerProps, title, onHeaderCell, onCell } = _a, rest = __objRest(_a, ["headerProps", "title", "onHeaderCell", "onCell"]);
2816
+ const resolvedOnHeaderCell = (column) => {
2817
+ var _a2;
2818
+ const base = (_a2 = onHeaderCell == null ? void 0 : onHeaderCell(column)) != null ? _a2 : {};
2819
+ return __spreadProps(__spreadValues({}, base), {
2820
+ className: (0, import_clsx12.default)(base.className, headerCellClassName)
2821
+ });
2822
+ };
2823
+ const resolvedOnCell = (record, rowIndex) => {
2824
+ var _a2;
2825
+ const base = (_a2 = onCell == null ? void 0 : onCell(record, rowIndex)) != null ? _a2 : {};
2826
+ return __spreadProps(__spreadValues({}, base), {
2827
+ className: (0, import_clsx12.default)(base.className, bodyCellClassName)
2828
+ });
2829
+ };
2830
+ const processedTitle = headerProps ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ColumnHeader, __spreadValues({ label: title }, headerProps)) : title;
2816
2831
  return __spreadProps(__spreadValues({}, rest), {
2817
- title: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ColumnHeader, __spreadValues({ label: title }, headerProps))
2832
+ title: processedTitle,
2833
+ onHeaderCell: resolvedOnHeaderCell,
2834
+ onCell: resolvedOnCell
2818
2835
  });
2819
2836
  });
2820
2837
  }
@@ -2840,7 +2857,11 @@ function Table(props) {
2840
2857
  emptyState,
2841
2858
  hideHeader,
2842
2859
  loadingIndicator,
2843
- style
2860
+ style,
2861
+ headerCellClassName,
2862
+ bodyCellClassName,
2863
+ rowClassName,
2864
+ rowSpacing
2844
2865
  } = _a, rest = __objRest(_a, [
2845
2866
  "size",
2846
2867
  "variant",
@@ -2861,7 +2882,11 @@ function Table(props) {
2861
2882
  "emptyState",
2862
2883
  "hideHeader",
2863
2884
  "loadingIndicator",
2864
- "style"
2885
+ "style",
2886
+ "headerCellClassName",
2887
+ "bodyCellClassName",
2888
+ "rowClassName",
2889
+ "rowSpacing"
2865
2890
  ]);
2866
2891
  const isChildVariant = isAccordion || isToolbar;
2867
2892
  const resolvedPagination = buildPagination(pagination, {
@@ -2871,9 +2896,8 @@ function Table(props) {
2871
2896
  onChange: onPaginationChange
2872
2897
  });
2873
2898
  const processedColumns = React5.useMemo(
2874
- () => processColumns(columns),
2875
- // eslint-disable-next-line react-hooks/exhaustive-deps
2876
- [columns]
2899
+ () => processColumns(columns, headerCellClassName, bodyCellClassName),
2900
+ [columns, headerCellClassName, bodyCellClassName]
2877
2901
  );
2878
2902
  const resolvedOnRow = React5.useMemo(() => {
2879
2903
  const onChange = rowSelection == null ? void 0 : rowSelection.onChange;
@@ -2899,17 +2923,30 @@ function Table(props) {
2899
2923
  });
2900
2924
  };
2901
2925
  }, [variant, rowSelection, rowKey, onRow, dataSource]);
2926
+ const hasRowSpacing = rowSpacing !== void 0;
2927
+ const rowSpacingValue = typeof rowSpacing === "number" ? `${rowSpacing}px` : rowSpacing;
2928
+ const wrapperStyle = React5.useMemo(() => {
2929
+ if (!hasRowSpacing) return style;
2930
+ return __spreadProps(__spreadValues({}, style), {
2931
+ "--lumina-table-row-spacing": rowSpacingValue
2932
+ });
2933
+ }, [style, hasRowSpacing, rowSpacingValue]);
2902
2934
  return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2903
2935
  "div",
2904
2936
  {
2905
2937
  className: (0, import_clsx12.default)(
2906
2938
  Table_module_default.tableWrapper,
2907
2939
  Table_module_default.showHoverEffect,
2908
- { [Table_module_default.isAccordion]: isAccordion },
2909
- { [Table_module_default.isToolbar]: isToolbar },
2940
+ {
2941
+ [Table_module_default.isAccordion]: isAccordion,
2942
+ [Table_module_default.isToolbar]: isToolbar,
2943
+ [Table_module_default.hasCustomHeaderCell]: !!headerCellClassName,
2944
+ [Table_module_default.hasCustomBodyCell]: !!bodyCellClassName,
2945
+ [Table_module_default.hasRowSpacing]: hasRowSpacing
2946
+ },
2910
2947
  className
2911
2948
  ),
2912
- style,
2949
+ style: wrapperStyle,
2913
2950
  "data-testid": "lumina-table",
2914
2951
  children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2915
2952
  import_antd10.Table,
@@ -2928,12 +2965,15 @@ function Table(props) {
2928
2965
  }
2929
2966
  }, rest), {
2930
2967
  loading: loadingIndicator ? { spinning: !!loading && ((_b = dataSource == null ? void 0 : dataSource.length) != null ? _b : 0) > 0, indicator: loadingIndicator } : loading,
2931
- rowClassName: (_, index) => {
2968
+ rowClassName: (record, index) => {
2932
2969
  var _a2;
2933
- return (0, import_clsx12.default)({
2934
- [Table_module_default.firstRow]: index === 0,
2935
- [Table_module_default.lastRow]: index === ((_a2 = dataSource == null ? void 0 : dataSource.length) != null ? _a2 : 0) - 1
2936
- });
2970
+ return (0, import_clsx12.default)(
2971
+ {
2972
+ [Table_module_default.firstRow]: index === 0,
2973
+ [Table_module_default.lastRow]: index === ((_a2 = dataSource == null ? void 0 : dataSource.length) != null ? _a2 : 0) - 1
2974
+ },
2975
+ typeof rowClassName === "function" ? rowClassName(record, index) : rowClassName
2976
+ );
2937
2977
  }
2938
2978
  })
2939
2979
  )