@itilite/lumina-ui 1.2.1 → 1.2.21

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 (88) hide show
  1. package/dist/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.mjs +1 -1
  2. package/dist/atom/Switch/Switch.d.mts +1 -1
  3. package/dist/atom/Switch/Switch.d.ts +1 -1
  4. package/dist/atom/Switch/Switch.js +2 -2
  5. package/dist/atom/Switch/Switch.mjs +1 -1
  6. package/dist/{chunk-4JX54OKI.mjs → chunk-IIJUGDEJ.mjs} +20 -29
  7. package/dist/{chunk-QQA7KWAJ.mjs → chunk-LTP5I3GX.mjs} +4 -4
  8. package/dist/chunk-O6PQFAXN.mjs +47 -0
  9. package/dist/index.js +2 -2
  10. package/dist/index.mjs +10 -10
  11. package/dist/styles.css +826 -806
  12. package/package.json +28 -27
  13. package/dist/AdvancedDateRangePicker-D7xn4So6.d.mts +0 -59
  14. package/dist/AdvancedDateRangePicker-D7xn4So6.d.ts +0 -59
  15. package/dist/AdvancedDateRangePicker-D9Sdk4rK.d.mts +0 -64
  16. package/dist/AdvancedDateRangePicker-D9Sdk4rK.d.ts +0 -64
  17. package/dist/AdvancedDateRangePicker-DGg-rucL.d.mts +0 -62
  18. package/dist/AdvancedDateRangePicker-DGg-rucL.d.ts +0 -62
  19. package/dist/AdvancedDateRangePicker-Di3rHxqf.d.mts +0 -64
  20. package/dist/AdvancedDateRangePicker-Di3rHxqf.d.ts +0 -64
  21. package/dist/AdvancedDateRangePicker-Dxug2Mcf.d.mts +0 -60
  22. package/dist/AdvancedDateRangePicker-Dxug2Mcf.d.ts +0 -60
  23. package/dist/AdvancedDateRangePicker-ozItnkhp.d.mts +0 -57
  24. package/dist/AdvancedDateRangePicker-ozItnkhp.d.ts +0 -57
  25. package/dist/Table-BOq-_9Nr.d.mts +0 -121
  26. package/dist/Table-BOq-_9Nr.d.ts +0 -121
  27. package/dist/Table-BxaCiQmh.d.mts +0 -82
  28. package/dist/Table-BxaCiQmh.d.ts +0 -82
  29. package/dist/Table-CnzP9dkc.d.mts +0 -82
  30. package/dist/Table-CnzP9dkc.d.ts +0 -82
  31. package/dist/Table-DNvoh2P8.d.mts +0 -127
  32. package/dist/Table-DNvoh2P8.d.ts +0 -127
  33. package/dist/Table-DSFYzrpU.d.mts +0 -129
  34. package/dist/Table-DSFYzrpU.d.ts +0 -129
  35. package/dist/Table-DmfNNnuD.d.mts +0 -86
  36. package/dist/Table-DmfNNnuD.d.ts +0 -86
  37. package/dist/Table-DoCPt3ri.d.mts +0 -129
  38. package/dist/Table-DoCPt3ri.d.ts +0 -129
  39. package/dist/chunk-27LRL4RO.mjs +0 -428
  40. package/dist/chunk-2IT3XM7C.mjs +0 -473
  41. package/dist/chunk-3HXZIFV6.mjs +0 -438
  42. package/dist/chunk-53O7JM5I.mjs +0 -424
  43. package/dist/chunk-5JXIJTAS.mjs +0 -448
  44. package/dist/chunk-5OUMKJWI.mjs +0 -301
  45. package/dist/chunk-5PMUTA6S.mjs +0 -303
  46. package/dist/chunk-5PQ43JFX.mjs +0 -440
  47. package/dist/chunk-62VAYFZA.mjs +0 -437
  48. package/dist/chunk-6ON32H2N.mjs +0 -431
  49. package/dist/chunk-6RIZXTFP.mjs +0 -290
  50. package/dist/chunk-6XIT27XY.mjs +0 -269
  51. package/dist/chunk-772C454L.mjs +0 -438
  52. package/dist/chunk-7L267Y4P.mjs +0 -429
  53. package/dist/chunk-7WSVCE2C.mjs +0 -269
  54. package/dist/chunk-ANJI6SPV.mjs +0 -283
  55. package/dist/chunk-BFFLWW7N.mjs +0 -250
  56. package/dist/chunk-C5VYFNVC.mjs +0 -441
  57. package/dist/chunk-DL7BZMGE.mjs +0 -295
  58. package/dist/chunk-DXPVJNGY.mjs +0 -284
  59. package/dist/chunk-FTL3PFC2.mjs +0 -438
  60. package/dist/chunk-G4P6XGQX.mjs +0 -278
  61. package/dist/chunk-GGWY2SYX.mjs +0 -452
  62. package/dist/chunk-GZ4P7OL3.mjs +0 -429
  63. package/dist/chunk-I6GLPWHS.mjs +0 -278
  64. package/dist/chunk-IPVJEGDI.mjs +0 -476
  65. package/dist/chunk-J4YYP4IZ.mjs +0 -0
  66. package/dist/chunk-J5JDQ4R6.mjs +0 -278
  67. package/dist/chunk-K2A4TWA3.mjs +0 -430
  68. package/dist/chunk-L3L42SIL.mjs +0 -429
  69. package/dist/chunk-LRNKIRH3.mjs +0 -289
  70. package/dist/chunk-MA23J4WQ.mjs +0 -430
  71. package/dist/chunk-N4DPPZVJ.mjs +0 -269
  72. package/dist/chunk-PQ3B2FEB.mjs +0 -249
  73. package/dist/chunk-QRGHJP7U.mjs +0 -437
  74. package/dist/chunk-QU73KNTT.mjs +0 -452
  75. package/dist/chunk-RC6IGURJ.mjs +0 -428
  76. package/dist/chunk-SKPCOHON.mjs +0 -473
  77. package/dist/chunk-SRKN7WS7.mjs +0 -448
  78. package/dist/chunk-T43CWNOG.mjs +0 -283
  79. package/dist/chunk-TE5EOIIW.mjs +0 -301
  80. package/dist/chunk-TQDZWJZP.mjs +0 -269
  81. package/dist/chunk-UAGSPM3T.mjs +0 -288
  82. package/dist/chunk-UC4NTBDH.mjs +0 -439
  83. package/dist/chunk-UPSQTJJ4.mjs +0 -294
  84. package/dist/chunk-V3CHJHUX.mjs +0 -424
  85. package/dist/chunk-X3NDICAU.mjs +0 -284
  86. package/dist/chunk-XECXKSTC.mjs +0 -453
  87. package/dist/chunk-XIVTXS3Y.mjs +0 -439
  88. package/dist/chunk-ZGV6QMVM.mjs +0 -437
@@ -1,250 +0,0 @@
1
- import {
2
- __objRest,
3
- __spreadProps,
4
- __spreadValues
5
- } from "./chunk-FWCSY2DS.mjs";
6
-
7
- // src/atom/Table/Table.tsx
8
- import * as React from "react";
9
- import { Table as AntTable } from "antd";
10
- import clsx from "clsx";
11
-
12
- // src/atom/Table/Table.module.scss
13
- 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" };
14
-
15
- // src/atom/Table/Table.tsx
16
- import { jsx, jsxs } from "react/jsx-runtime";
17
- function buildPagination(pagination, overrides = {}) {
18
- var _a, _b, _c, _d;
19
- if (pagination === false) {
20
- return false;
21
- }
22
- const defaults = {
23
- showSizeChanger: true,
24
- pageSizeOptions: ["10", "25", "50"],
25
- locale: { items_per_page: "" },
26
- // Removes "/ page" text
27
- showTotal: (total, range) => `${range[0]}\u2013${range[1]} of ${total} items`
28
- };
29
- const baseConfig = pagination === true || pagination === void 0 ? defaults : __spreadValues(__spreadValues({}, defaults), pagination);
30
- return __spreadProps(__spreadValues({}, baseConfig), {
31
- total: (_a = overrides.total) != null ? _a : baseConfig.total,
32
- current: (_b = overrides.current) != null ? _b : baseConfig.current,
33
- pageSize: (_c = overrides.pageSize) != null ? _c : baseConfig.pageSize,
34
- onChange: (_d = overrides.onChange) != null ? _d : baseConfig.onChange
35
- });
36
- }
37
- function nextSortOrder(current) {
38
- if (current === void 0) return "ascend";
39
- if (current === "ascend") return "descend";
40
- return void 0;
41
- }
42
- function ColumnHeader({
43
- label,
44
- sortable = false,
45
- sortOrder,
46
- onSortChange,
47
- sortIcon,
48
- filterCount = 0,
49
- filterIcon,
50
- filterContent,
51
- className = ""
52
- }) {
53
- const [filterOpen, setFilterOpen] = React.useState(false);
54
- const wrapperRef = React.useRef(null);
55
- const filterActive = filterCount > 0;
56
- const hasFilter = filterContent !== void 0 && filterIcon !== void 0;
57
- const hasSort = sortable && sortIcon !== void 0;
58
- React.useEffect(() => {
59
- if (!filterOpen) return;
60
- const onOutside = (e) => {
61
- if (wrapperRef.current && !wrapperRef.current.contains(e.target)) {
62
- setFilterOpen(false);
63
- }
64
- };
65
- document.addEventListener("mousedown", onOutside);
66
- return () => document.removeEventListener("mousedown", onOutside);
67
- }, [filterOpen]);
68
- return /* @__PURE__ */ jsxs("div", { className: Table_module_default.columnHeader, ref: wrapperRef, children: [
69
- /* @__PURE__ */ jsx("div", { className: Table_module_default.columnHeaderLeft, children: hasSort ? /* @__PURE__ */ jsxs(
70
- "button",
71
- {
72
- type: "button",
73
- className: Table_module_default.columnHeaderSortArea,
74
- onClick: () => onSortChange == null ? void 0 : onSortChange(nextSortOrder(sortOrder)),
75
- "aria-label": typeof label === "string" ? `Sort by ${label}` : "Sort",
76
- children: [
77
- /* @__PURE__ */ jsx("span", { className: clsx(Table_module_default.columnHeaderLabel, "tw-typography-caption2Bold tw-text-color-text-weak", className), children: label }),
78
- /* @__PURE__ */ jsx(
79
- "span",
80
- {
81
- className: clsx(Table_module_default.columnHeaderSortIcon, {
82
- [Table_module_default.columnHeaderSortIconActive]: sortOrder !== void 0
83
- }),
84
- children: sortIcon
85
- }
86
- )
87
- ]
88
- }
89
- ) : /* @__PURE__ */ jsx("span", { className: clsx(Table_module_default.columnHeaderLabel, "tw-typography-caption2Bold tw-text-color-text-weak", className), children: label }) }),
90
- hasFilter && /* @__PURE__ */ jsxs("div", { className: Table_module_default.columnHeaderFilterWrapper, children: [
91
- /* @__PURE__ */ jsxs(
92
- "button",
93
- {
94
- type: "button",
95
- className: clsx(Table_module_default.columnHeaderFilterBtn, {
96
- [Table_module_default.columnHeaderFilterBtnActive]: filterActive
97
- }),
98
- onClick: () => setFilterOpen((v) => !v),
99
- "aria-label": typeof label === "string" ? `Filter ${label}` : "Filter",
100
- "aria-expanded": filterOpen,
101
- "aria-haspopup": "dialog",
102
- children: [
103
- filterIcon,
104
- filterActive && /* @__PURE__ */ jsx("span", { className: Table_module_default.columnHeaderFilterBadge, children: filterCount })
105
- ]
106
- }
107
- ),
108
- filterOpen && /* @__PURE__ */ jsx("div", { className: Table_module_default.columnHeaderFilterDropdown, role: "dialog", children: filterContent })
109
- ] })
110
- ] });
111
- }
112
- function processColumns(columns) {
113
- if (!columns) return void 0;
114
- return columns.map((col) => {
115
- const _a = col, { headerProps, title } = _a, rest = __objRest(_a, ["headerProps", "title"]);
116
- if (!headerProps) return __spreadValues({ title }, rest);
117
- return __spreadProps(__spreadValues({}, rest), {
118
- title: /* @__PURE__ */ jsx(ColumnHeader, __spreadValues({ label: title }, headerProps))
119
- });
120
- });
121
- }
122
- function Table(props) {
123
- var _b;
124
- const _a = props, {
125
- size = "middle",
126
- variant = "default",
127
- isAccordion = false,
128
- isToolbar = false,
129
- className = "",
130
- pagination,
131
- loading,
132
- total,
133
- current,
134
- pageSize,
135
- onPaginationChange,
136
- columns,
137
- rowSelection,
138
- rowKey = "key",
139
- onRow,
140
- dataSource,
141
- emptyState,
142
- hideHeader,
143
- loadingIndicator,
144
- style
145
- } = _a, rest = __objRest(_a, [
146
- "size",
147
- "variant",
148
- "isAccordion",
149
- "isToolbar",
150
- "className",
151
- "pagination",
152
- "loading",
153
- "total",
154
- "current",
155
- "pageSize",
156
- "onPaginationChange",
157
- "columns",
158
- "rowSelection",
159
- "rowKey",
160
- "onRow",
161
- "dataSource",
162
- "emptyState",
163
- "hideHeader",
164
- "loadingIndicator",
165
- "style"
166
- ]);
167
- const isChildVariant = isAccordion || isToolbar;
168
- const resolvedPagination = buildPagination(pagination, {
169
- total,
170
- current,
171
- pageSize,
172
- onChange: onPaginationChange
173
- });
174
- const processedColumns = React.useMemo(
175
- () => processColumns(columns),
176
- // eslint-disable-next-line react-hooks/exhaustive-deps
177
- [columns]
178
- );
179
- const resolvedOnRow = React.useMemo(() => {
180
- const onChange = rowSelection == null ? void 0 : rowSelection.onChange;
181
- if (variant !== "selectable" || !onChange) return onRow;
182
- return (record, index) => {
183
- var _a2;
184
- const base = (_a2 = onRow == null ? void 0 : onRow(record, index)) != null ? _a2 : {};
185
- const getKey = (r, i) => typeof rowKey === "function" ? rowKey(r, i) : r[rowKey];
186
- return __spreadProps(__spreadValues({}, base), {
187
- style: __spreadValues({ cursor: "pointer" }, base.style),
188
- onClick: (e) => {
189
- var _a3, _b2;
190
- (_a3 = base.onClick) == null ? void 0 : _a3.call(base, e);
191
- const key = getKey(record, index);
192
- const current2 = (_b2 = rowSelection.selectedRowKeys) != null ? _b2 : [];
193
- const isSelected = current2.some((k) => k === key);
194
- const newKeys = isSelected ? current2.filter((k) => k !== key) : [...current2, key];
195
- const newRows = (dataSource != null ? dataSource : []).filter(
196
- (r) => newKeys.some((k) => k === getKey(r))
197
- );
198
- onChange(newKeys, newRows, { type: "single" });
199
- }
200
- });
201
- };
202
- }, [variant, rowSelection, rowKey, onRow, dataSource]);
203
- return /* @__PURE__ */ jsx(
204
- "div",
205
- {
206
- className: clsx(
207
- Table_module_default.tableWrapper,
208
- Table_module_default.showHoverEffect,
209
- { [Table_module_default.isAccordion]: isAccordion },
210
- { [Table_module_default.isToolbar]: isToolbar },
211
- className
212
- ),
213
- style,
214
- "data-testid": "lumina-table",
215
- children: /* @__PURE__ */ jsx(
216
- AntTable,
217
- __spreadProps(__spreadValues({
218
- className: Table_module_default.table,
219
- size,
220
- pagination: resolvedPagination,
221
- columns: processedColumns,
222
- rowSelection,
223
- rowKey,
224
- onRow: resolvedOnRow,
225
- dataSource,
226
- showHeader: !hideHeader,
227
- locale: {
228
- emptyText: loading && loadingIndicator ? loadingIndicator : loading ? " " : emptyState
229
- }
230
- }, rest), {
231
- loading: loadingIndicator ? { spinning: !!loading && ((_b = dataSource == null ? void 0 : dataSource.length) != null ? _b : 0) > 0, indicator: loadingIndicator } : loading,
232
- rowClassName: (_, index) => {
233
- var _a2;
234
- return clsx({
235
- [Table_module_default.firstRow]: index === 0,
236
- [Table_module_default.lastRow]: index === ((_a2 = dataSource == null ? void 0 : dataSource.length) != null ? _a2 : 0) - 1
237
- });
238
- }
239
- })
240
- )
241
- }
242
- );
243
- }
244
- Table.displayName = "Table";
245
- var Table_default = Table;
246
-
247
- export {
248
- Table,
249
- Table_default
250
- };
@@ -1,441 +0,0 @@
1
- import {
2
- Select_default
3
- } from "./chunk-GU5F7Z7I.mjs";
4
- import {
5
- InternalCalendar_default
6
- } from "./chunk-FPH63V2R.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
- presets
223
- }) {
224
- var _a, _b, _c;
225
- const PRESETS = useMemo(() => presets || getPresets(), [presets]);
226
- const [startDate, setStartDate] = useState((_a = value == null ? void 0 : value.startDate) != null ? _a : null);
227
- const [endDate, setEndDate] = useState((_b = value == null ? void 0 : value.endDate) != null ? _b : null);
228
- const [timezone, setTimezone] = useState((_c = value == null ? void 0 : value.timezone) != null ? _c : defaultTimezone);
229
- const [fromDateStr, setFromDateStr] = useState(formatForDisplay(startDate));
230
- const [toDateStr, setToDateStr] = useState(formatForDisplay(endDate));
231
- const [fromTimeStr, setFromTimeStr] = useState(
232
- (value == null ? void 0 : value.startTime) ? formatTime(value.startTime) : "12:00 PM"
233
- );
234
- const [toTimeStr, setToTimeStr] = useState(
235
- (value == null ? void 0 : value.endTime) ? formatTime(value.endTime) : "12:00 PM"
236
- );
237
- const [activePreset, setActivePreset] = useState(defaultPreset);
238
- const isSingle = showSingleCalendar;
239
- const fromDateError = useMemo(() => fromDateStr.length > 0 && (fromDateStr.length < 10 || !validateDateString(fromDateStr)), [fromDateStr]);
240
- const toDateError = useMemo(() => toDateStr.length > 0 && (toDateStr.length < 10 || !validateDateString(toDateStr)), [toDateStr]);
241
- const fromTimeError = useMemo(() => fromTimeStr.length > 0 && (fromTimeStr.length < 8 || !validateTimeString(fromTimeStr)), [fromTimeStr]);
242
- const toTimeError = useMemo(() => toTimeStr.length > 0 && (toTimeStr.length < 8 || !validateTimeString(toTimeStr)), [toTimeStr]);
243
- const isReady = useMemo(() => {
244
- return startDate !== null && endDate !== null && validateDateString(fromDateStr) && validateDateString(toDateStr) && validateTimeString(fromTimeStr) && validateTimeString(toTimeStr) && dayjs(startDate).isSameOrBefore(dayjs(endDate), "day");
245
- }, [startDate, endDate, fromDateStr, toDateStr, fromTimeStr, toTimeStr]);
246
- useEffect(() => {
247
- var _a2, _b2, _c2;
248
- if (value) {
249
- setStartDate((_a2 = value.startDate) != null ? _a2 : null);
250
- setEndDate((_b2 = value.endDate) != null ? _b2 : null);
251
- setTimezone((_c2 = value.timezone) != null ? _c2 : defaultTimezone);
252
- if (value.startTime) setFromTimeStr(formatTime(value.startTime));
253
- if (value.endTime) setToTimeStr(formatTime(value.endTime));
254
- }
255
- }, [value, defaultTimezone]);
256
- useEffect(() => {
257
- setFromDateStr(formatForDisplay(startDate));
258
- }, [startDate]);
259
- useEffect(() => {
260
- setToDateStr(formatForDisplay(endDate));
261
- }, [endDate]);
262
- const rangeValue = useMemo(() => [
263
- startDate ? startDate.toISOString() : "",
264
- endDate ? endDate.toISOString() : ""
265
- ], [startDate, endDate]);
266
- const handleRangeChange = useCallback(
267
- (range) => {
268
- const [s, e] = range;
269
- if (s) {
270
- const sDateByDayjs = dayjs(s, "D MMM, YYYY").toDate();
271
- setStartDate(sDateByDayjs);
272
- } else {
273
- setStartDate(null);
274
- }
275
- if (e) {
276
- const eDateByDayjs = dayjs(e, "D MMM, YYYY").toDate();
277
- setEndDate(eDateByDayjs);
278
- } else {
279
- setEndDate(null);
280
- }
281
- setActivePreset("custom");
282
- },
283
- []
284
- );
285
- const handlePreset = useCallback(
286
- (preset) => {
287
- const [s, e] = preset.getRange();
288
- setStartDate(s);
289
- setEndDate(e);
290
- setActivePreset(preset.key);
291
- },
292
- []
293
- );
294
- const handleFromDateChange = useCallback((v) => {
295
- const masked = applyDateMask(v, fromDateStr);
296
- setFromDateStr(masked);
297
- setActivePreset("custom");
298
- if (masked.length === 10) {
299
- const parsed = parseDateInput(masked);
300
- if (parsed) {
301
- setStartDate(parsed);
302
- if (endDate && dayjs(parsed).isAfter(dayjs(endDate), "day")) {
303
- setEndDate(null);
304
- }
305
- }
306
- }
307
- }, [fromDateStr, endDate]);
308
- const handleToDateChange = useCallback((v) => {
309
- const masked = applyDateMask(v, toDateStr);
310
- setToDateStr(masked);
311
- setActivePreset("custom");
312
- if (masked.length === 10) {
313
- const parsed = parseDateInput(masked);
314
- if (parsed) {
315
- setEndDate(parsed);
316
- if (startDate && dayjs(parsed).isBefore(dayjs(startDate), "day")) {
317
- setStartDate(null);
318
- }
319
- }
320
- }
321
- }, [toDateStr, startDate]);
322
- const handleFromTimeChange = useCallback((v) => {
323
- const masked = applyTimeMask(v, fromTimeStr);
324
- setFromTimeStr(masked);
325
- setActivePreset("custom");
326
- }, [fromTimeStr]);
327
- const handleToTimeChange = useCallback((v) => {
328
- const masked = applyTimeMask(v, toTimeStr);
329
- setToTimeStr(masked);
330
- setActivePreset("custom");
331
- }, [toTimeStr]);
332
- const handleDone = useCallback(() => {
333
- var _a2, _b2;
334
- if (!isReady) return;
335
- const fromTime = (_a2 = parseTimeInput(fromTimeStr)) != null ? _a2 : DEFAULT_TIME;
336
- const toTime = (_b2 = parseTimeInput(toTimeStr)) != null ? _b2 : DEFAULT_TIME;
337
- onChange == null ? void 0 : onChange({
338
- startDate,
339
- endDate,
340
- startTime: fromTime,
341
- endTime: toTime,
342
- timezone,
343
- activePreset
344
- });
345
- }, [isReady, onChange, startDate, endDate, fromTimeStr, toTimeStr, timezone, activePreset]);
346
- return /* @__PURE__ */ jsxs("div", { className: clsx(AdvancedDateRangePicker_module_default.root, className, { [AdvancedDateRangePicker_module_default.singleCalendar]: isSingle }), id, children: [
347
- /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.inner, children: [
348
- /* @__PURE__ */ jsx("aside", { className: AdvancedDateRangePicker_module_default.left, children: PRESETS.map((p) => /* @__PURE__ */ jsx(
349
- "button",
350
- {
351
- type: "button",
352
- onClick: () => handlePreset(p),
353
- className: clsx(AdvancedDateRangePicker_module_default.sidebarItem, {
354
- [AdvancedDateRangePicker_module_default.sidebarItemActive]: activePreset === p.key
355
- }),
356
- children: p.label
357
- },
358
- p.key
359
- )) }),
360
- /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.main, children: [
361
- /* @__PURE__ */ jsxs("header", { className: AdvancedDateRangePicker_module_default.header, children: [
362
- /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.timezoneWrapper, children: [
363
- /* @__PURE__ */ jsx("span", { className: AdvancedDateRangePicker_module_default.headerLabel, children: "Timezone" }),
364
- isTimezoneDisabled ? (
365
- /* Disabled state: plain text badge instead of empty dropdown */
366
- /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.timezoneDisabledBadge, children: timezone })
367
- ) : /* @__PURE__ */ jsx(
368
- Select_default,
369
- {
370
- value: timezone,
371
- onChange: (val) => {
372
- if (val) setTimezone(String(val));
373
- },
374
- options: timezoneOptions,
375
- size: "small",
376
- allowClear: false,
377
- enableSearch: false,
378
- wrapperClassName: AdvancedDateRangePicker_module_default.timezoneSelectContainer,
379
- inputClassName: AdvancedDateRangePicker_module_default.timezoneSelectInput
380
- }
381
- )
382
- ] }),
383
- /* @__PURE__ */ jsxs("div", { className: AdvancedDateRangePicker_module_default.dateTimeWrapper, children: [
384
- /* @__PURE__ */ jsx(
385
- DateTimeInputGroup,
386
- {
387
- label: "From",
388
- dateValue: fromDateStr,
389
- timeValue: fromTimeStr,
390
- dateError: fromDateError,
391
- timeError: fromTimeError,
392
- onDateChange: handleFromDateChange,
393
- onTimeChange: handleFromTimeChange
394
- }
395
- ),
396
- /* @__PURE__ */ jsx(
397
- DateTimeInputGroup,
398
- {
399
- label: "To",
400
- dateValue: toDateStr,
401
- timeValue: toTimeStr,
402
- dateError: toDateError,
403
- timeError: toTimeError,
404
- onDateChange: handleToDateChange,
405
- onTimeChange: handleToTimeChange
406
- }
407
- )
408
- ] })
409
- ] }),
410
- /* @__PURE__ */ jsx("div", { className: AdvancedDateRangePicker_module_default.body, children: /* @__PURE__ */ jsx(
411
- InternalCalendar_default,
412
- {
413
- id: `${id}-calendar`,
414
- dateRange: rangeValue,
415
- onChange: handleRangeChange,
416
- disablePastDates,
417
- minDate,
418
- maxDate,
419
- showSingleCalendar: isSingle
420
- }
421
- ) })
422
- ] })
423
- ] }),
424
- /* @__PURE__ */ jsx("footer", { className: AdvancedDateRangePicker_module_default.footer, children: /* @__PURE__ */ jsx(
425
- Button_default,
426
- {
427
- onClick: handleDone,
428
- disabled: disabled || !isReady,
429
- shape: "round",
430
- children: confirmLabel
431
- }
432
- ) })
433
- ] });
434
- }
435
- AdvancedDateRangePicker.displayName = "AdvancedDateRangePicker";
436
- var AdvancedDateRangePicker_default = AdvancedDateRangePicker;
437
-
438
- export {
439
- AdvancedDateRangePicker,
440
- AdvancedDateRangePicker_default
441
- };