@itilite/lumina-ui 1.1.14 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/AdvancedDateRangePicker-D7xn4So6.d.mts +59 -0
  2. package/dist/AdvancedDateRangePicker-D7xn4So6.d.ts +59 -0
  3. package/dist/AdvancedDateRangePicker-D9Sdk4rK.d.mts +64 -0
  4. package/dist/AdvancedDateRangePicker-D9Sdk4rK.d.ts +64 -0
  5. package/dist/AdvancedDateRangePicker-DGg-rucL.d.mts +62 -0
  6. package/dist/AdvancedDateRangePicker-DGg-rucL.d.ts +62 -0
  7. package/dist/AdvancedDateRangePicker-DOSprRQR.d.mts +52 -0
  8. package/dist/AdvancedDateRangePicker-DOSprRQR.d.ts +52 -0
  9. package/dist/AdvancedDateRangePicker-Di3rHxqf.d.mts +64 -0
  10. package/dist/AdvancedDateRangePicker-Di3rHxqf.d.ts +64 -0
  11. package/dist/AdvancedDateRangePicker-Dxug2Mcf.d.mts +60 -0
  12. package/dist/AdvancedDateRangePicker-Dxug2Mcf.d.ts +60 -0
  13. package/dist/AdvancedDateRangePicker-ozItnkhp.d.mts +57 -0
  14. package/dist/AdvancedDateRangePicker-ozItnkhp.d.ts +57 -0
  15. package/dist/Table-BOq-_9Nr.d.mts +121 -0
  16. package/dist/Table-BOq-_9Nr.d.ts +121 -0
  17. package/dist/Table-BxaCiQmh.d.mts +82 -0
  18. package/dist/Table-BxaCiQmh.d.ts +82 -0
  19. package/dist/Table-DNvoh2P8.d.mts +127 -0
  20. package/dist/Table-DNvoh2P8.d.ts +127 -0
  21. package/dist/Table-DSFYzrpU.d.mts +129 -0
  22. package/dist/Table-DSFYzrpU.d.ts +129 -0
  23. package/dist/Table-DoCPt3ri.d.mts +129 -0
  24. package/dist/Table-DoCPt3ri.d.ts +129 -0
  25. package/dist/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.d.mts +2 -0
  26. package/dist/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.d.ts +2 -0
  27. package/dist/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.js +1648 -0
  28. package/dist/atom/AdvancedDateRangePicker/AdvancedDateRangePicker.mjs +15 -0
  29. package/dist/atom/AdvancedDateRangePicker/InternalCalendar.d.mts +17 -0
  30. package/dist/atom/AdvancedDateRangePicker/InternalCalendar.d.ts +17 -0
  31. package/dist/atom/AdvancedDateRangePicker/InternalCalendar.js +370 -0
  32. package/dist/atom/AdvancedDateRangePicker/InternalCalendar.mjs +8 -0
  33. package/dist/atom/Button/Button.js +1 -1
  34. package/dist/atom/Button/Button.mjs +1 -1
  35. package/dist/atom/LoadingSpinner/LoadingSpinner.d.mts +2 -2
  36. package/dist/atom/LoadingSpinner/LoadingSpinner.d.ts +2 -2
  37. package/dist/atom/Modal/Modal.js +1 -1
  38. package/dist/atom/Modal/Modal.mjs +2 -2
  39. package/dist/atom/RangePicker/RangePicker.mjs +1 -1
  40. package/dist/atom/Table/Table.d.mts +3 -0
  41. package/dist/atom/Table/Table.d.ts +3 -0
  42. package/dist/atom/Table/Table.js +340 -0
  43. package/dist/atom/Table/Table.mjs +9 -0
  44. package/dist/chunk-27LRL4RO.mjs +428 -0
  45. package/dist/chunk-2IT3XM7C.mjs +473 -0
  46. package/dist/chunk-3HXZIFV6.mjs +438 -0
  47. package/dist/{chunk-35KDS27M.mjs → chunk-4JX54OKI.mjs} +27 -18
  48. package/dist/chunk-53O7JM5I.mjs +424 -0
  49. package/dist/chunk-5JXIJTAS.mjs +448 -0
  50. package/dist/chunk-5PQ43JFX.mjs +440 -0
  51. package/dist/chunk-62VAYFZA.mjs +437 -0
  52. package/dist/chunk-6ON32H2N.mjs +431 -0
  53. package/dist/chunk-6RIZXTFP.mjs +290 -0
  54. package/dist/chunk-6XIT27XY.mjs +269 -0
  55. package/dist/chunk-772C454L.mjs +438 -0
  56. package/dist/chunk-7L267Y4P.mjs +429 -0
  57. package/dist/chunk-7WSVCE2C.mjs +269 -0
  58. package/dist/chunk-ANJI6SPV.mjs +283 -0
  59. package/dist/chunk-BFFLWW7N.mjs +250 -0
  60. package/dist/chunk-C5VYFNVC.mjs +441 -0
  61. package/dist/chunk-DL7BZMGE.mjs +295 -0
  62. package/dist/chunk-DXPVJNGY.mjs +284 -0
  63. package/dist/chunk-FPH63V2R.mjs +269 -0
  64. package/dist/chunk-FTL3PFC2.mjs +438 -0
  65. package/dist/chunk-G4P6XGQX.mjs +278 -0
  66. package/dist/chunk-GGWY2SYX.mjs +452 -0
  67. package/dist/chunk-GZ4P7OL3.mjs +429 -0
  68. package/dist/chunk-I6GLPWHS.mjs +278 -0
  69. package/dist/chunk-IPVJEGDI.mjs +476 -0
  70. package/dist/chunk-J4YYP4IZ.mjs +0 -0
  71. package/dist/chunk-J5JDQ4R6.mjs +278 -0
  72. package/dist/chunk-K2A4TWA3.mjs +430 -0
  73. package/dist/chunk-L3L42SIL.mjs +429 -0
  74. package/dist/chunk-LRNKIRH3.mjs +289 -0
  75. package/dist/chunk-MA23J4WQ.mjs +430 -0
  76. package/dist/chunk-N4DPPZVJ.mjs +269 -0
  77. package/dist/chunk-PQ3B2FEB.mjs +249 -0
  78. package/dist/chunk-QRGHJP7U.mjs +437 -0
  79. package/dist/chunk-QU73KNTT.mjs +452 -0
  80. package/dist/chunk-RC6IGURJ.mjs +428 -0
  81. package/dist/chunk-SKPCOHON.mjs +473 -0
  82. package/dist/chunk-SRKN7WS7.mjs +448 -0
  83. package/dist/chunk-TQDZWJZP.mjs +269 -0
  84. package/dist/chunk-UAGSPM3T.mjs +288 -0
  85. package/dist/chunk-UC4NTBDH.mjs +439 -0
  86. package/dist/chunk-UPSQTJJ4.mjs +294 -0
  87. package/dist/chunk-V3CHJHUX.mjs +424 -0
  88. package/dist/chunk-X3NDICAU.mjs +284 -0
  89. package/dist/chunk-XECXKSTC.mjs +453 -0
  90. package/dist/chunk-XIVTXS3Y.mjs +439 -0
  91. package/dist/chunk-ZGV6QMVM.mjs +437 -0
  92. package/dist/index.d.mts +16 -14
  93. package/dist/index.d.ts +16 -14
  94. package/dist/index.js +1017 -16
  95. package/dist/index.mjs +23 -14
  96. package/dist/styles.css +1277 -178
  97. package/package.json +1 -1
  98. package/dist/Avatar-DX2JwvAs.d.mts +0 -17
  99. package/dist/Avatar-DX2JwvAs.d.ts +0 -17
  100. package/dist/Tag-l7I5oeyk.d.mts +0 -13
  101. package/dist/Tag-l7I5oeyk.d.ts +0 -13
  102. package/dist/chunk-3S4X3YO2.mjs +0 -64
  103. package/dist/chunk-3XUHGVYA.mjs +0 -77
  104. package/dist/chunk-DLLT6V65.mjs +0 -141
  105. package/dist/chunk-E4FCLHYA.mjs +0 -678
  106. package/dist/chunk-HISCHZ5H.mjs +0 -77
  107. package/dist/chunk-I5VHKSQR.mjs +0 -64
  108. package/dist/chunk-N355RJGH.mjs +0 -141
  109. package/dist/chunk-N3YFQDW7.mjs +0 -77
  110. package/dist/chunk-QWK3MYDM.mjs +0 -64
  111. package/dist/chunk-SWRFCTJW.mjs +0 -77
  112. package/dist/chunk-UTMZY37A.mjs +0 -141
  113. package/dist/chunk-UUEPD2FH.mjs +0 -141
  114. package/dist/chunk-X76GNSBB.mjs +0 -87
  115. package/dist/chunk-Y3BIY4DW.mjs +0 -618
  116. package/dist/chunk-ZGFE3OPJ.mjs +0 -678
@@ -0,0 +1,250 @@
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
+ };
@@ -0,0 +1,441 @@
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
+ };