@duskmoon-dev/components 0.3.0 → 0.3.3

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 (62) hide show
  1. package/README.md +33 -5
  2. package/dist/{chunk-r9wkv7xd.js → chunk-fwjzvsrx.js} +3 -3
  3. package/dist/classes/chat.d.ts +35 -0
  4. package/dist/classes/index.d.ts +2 -0
  5. package/dist/classes/index.js +1282 -1177
  6. package/dist/classes/markdown.d.ts +9 -0
  7. package/dist/components/anchor/index.js +2 -2
  8. package/dist/components/app/index.js +85 -85
  9. package/dist/components/cascader/index.js +2 -2
  10. package/dist/components/chat/Chat.d.ts +14 -0
  11. package/dist/components/chat/Chat.types.d.ts +47 -0
  12. package/dist/components/chat/index.d.ts +2 -0
  13. package/dist/components/chat/index.js +220 -0
  14. package/dist/components/color-picker/index.js +4 -4
  15. package/dist/components/config-provider/index.js +2 -2
  16. package/dist/components/dm-breadcrumb/index.js +18 -18
  17. package/dist/components/dm-date-picker/index.js +94 -94
  18. package/dist/components/dm-drawer/index.js +16 -16
  19. package/dist/components/dm-layout/index.js +189 -189
  20. package/dist/components/dm-menu/index.js +24 -24
  21. package/dist/components/dm-message/index.js +18 -18
  22. package/dist/components/dm-page-header/index.js +158 -158
  23. package/dist/components/dm-pagination/index.js +39 -39
  24. package/dist/components/dm-pro-table/index.js +1558 -1558
  25. package/dist/components/dm-provider/index.js +94 -94
  26. package/dist/components/dm-query/index.js +33 -31
  27. package/dist/components/dm-search/index.js +25 -25
  28. package/dist/components/dm-splitter/index.js +32 -32
  29. package/dist/components/dm-status/index.js +25 -25
  30. package/dist/components/dm-table/index.js +595 -595
  31. package/dist/components/dm-tabs/index.js +34 -34
  32. package/dist/components/dm-toolbar/index.js +23 -23
  33. package/dist/components/dm-tree/index.js +92 -92
  34. package/dist/components/dm-truncate/index.js +33 -33
  35. package/dist/components/dropdown/index.js +83 -83
  36. package/dist/components/form/index.js +2 -2
  37. package/dist/components/grid/index.js +2 -2
  38. package/dist/components/input/index.js +4 -4
  39. package/dist/components/markdown/Markdown.d.ts +3 -0
  40. package/dist/components/markdown/Markdown.types.d.ts +14 -0
  41. package/dist/components/markdown/index.d.ts +2 -0
  42. package/dist/components/markdown/index.js +171 -0
  43. package/dist/components/message/index.js +5 -5
  44. package/dist/components/notification/index.js +2 -2
  45. package/dist/components/popconfirm/index.js +42 -42
  46. package/dist/components/skeleton/index.js +5 -5
  47. package/dist/components/spin/index.js +2 -2
  48. package/dist/components/steps/index.js +2 -2
  49. package/dist/components/table/index.js +2 -2
  50. package/dist/components/tabs/index.js +2 -2
  51. package/dist/components/tag/index.js +2 -2
  52. package/dist/components/tour/index.js +62 -62
  53. package/dist/components/typography/index.js +4 -4
  54. package/dist/components/upload/index.js +5 -5
  55. package/dist/generated/version.d.ts +1 -1
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.js +1845 -1512
  58. package/dist/infrastructure.js +11 -11
  59. package/dist/styles.css +13457 -9832
  60. package/dist/theme/index.js +3 -3
  61. package/dist/utils/index.js +5 -5
  62. package/package.json +18 -7
@@ -1,5 +1,8 @@
1
1
  "use client";
2
2
 
3
+ // src/components/dm-table/DmTable.tsx
4
+ import { useMemo as useMemo7, useState as useState8 } from "react";
5
+
3
6
  // ../../node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
4
7
  function r(e) {
5
8
  var t, f, n = "";
@@ -25,6 +28,21 @@ function clsx() {
25
28
  function cn(...inputs) {
26
29
  return clsx(inputs);
27
30
  }
31
+ // src/classes/dm-table.ts
32
+ var dmTableBaseClass = "dm-table";
33
+ var dmTableSearchClass = "dm-table-search";
34
+ var dmTableCardClass = "dm-table-card";
35
+ var dmTableHeaderClass = "dm-table-header";
36
+ var dmTableTitleClass = "dm-table-title";
37
+ var dmTableExtraClass = "dm-table-extra";
38
+ var dmTableIndicatorsClass = "dm-table-indicators";
39
+ var dmTableTableExtraClass = "dm-table-table-extra";
40
+ var dmTableColumnSettingClass = "dm-table-column-setting";
41
+ var dmTablePaginationClass = "dm-table-pagination";
42
+ function getDmTableClasses({ className }) {
43
+ return cn(dmTableBaseClass, className);
44
+ }
45
+
28
46
  // src/classes/button.ts
29
47
  var buttonBaseClass = "btn";
30
48
  var buttonColorClasses = {
@@ -166,419 +184,166 @@ function Card({
166
184
  children
167
185
  });
168
186
  }
169
- // src/components/date-picker/DatePicker.tsx
170
- import { forwardRef, useMemo, useState } from "react";
187
+ // src/components/dm-pagination/DmPagination.tsx
188
+ import {
189
+ forwardRef as forwardRef2,
190
+ useEffect,
191
+ useMemo as useMemo2,
192
+ useRef,
193
+ useState as useState2
194
+ } from "react";
171
195
 
172
- // src/classes/date-picker.ts
173
- var datePickerBaseClass = "datepicker";
174
- var datePickerInputClass = "datepicker-input";
175
- var datePickerIconClass = "datepicker-icon";
176
- var datePickerDropdownClass = "datepicker-dropdown";
177
- var datePickerDropdownOpenClass = "datepicker-dropdown-open";
178
- var datePickerFooterClass = "datepicker-footer";
179
- var datePickerPresetClass = "datepicker-preset";
180
- var datePickerRangeClass = "datepicker-range";
181
- var datePickerSeparatorClass = "datepicker-range-separator";
182
- var datePickerClearClass = "datepicker-clear";
183
- var datePickerSizeClasses = {
184
- sm: "datepicker-sm",
185
- md: "",
186
- lg: "datepicker-lg"
187
- };
188
- var datePickerStatusClasses = {
189
- error: "datepicker-error",
190
- success: "datepicker-success"
196
+ // src/classes/dm-pagination.ts
197
+ var dmPaginationBaseClass = "dm-pagination";
198
+ var dmPaginationHiddenClass = "dm-pagination-hidden";
199
+ var dmPaginationPagerClass = "dm-pagination-pager";
200
+ var dmPaginationRefreshClass = "dm-pagination-refresh";
201
+ var dmPaginationRefreshLoadingClass = "dm-pagination-refresh-loading";
202
+ var dmPaginationSelectedClass = "dm-pagination-selected";
203
+ var dmPaginationAlignClasses = {
204
+ left: "dm-pagination-left",
205
+ center: "dm-pagination-center",
206
+ right: "dm-pagination-right"
191
207
  };
192
- var datePickerPickerClasses = {
193
- date: "",
194
- week: "datepicker-week",
195
- month: "datepicker-month-picker",
196
- quarter: "datepicker-quarter-picker",
197
- year: "datepicker-year-picker",
198
- time: "datepicker-time-picker"
208
+ function getDmPaginationClasses({
209
+ align = "right",
210
+ hidden,
211
+ className
212
+ }) {
213
+ return cn(dmPaginationBaseClass, dmPaginationAlignClasses[align], hidden && dmPaginationHiddenClass, className);
214
+ }
215
+ function getDmPaginationRefreshClasses({
216
+ loading,
217
+ className
218
+ }) {
219
+ return cn(dmPaginationRefreshClass, loading && dmPaginationRefreshLoadingClass, className);
220
+ }
221
+
222
+ // src/components/pagination/Pagination.tsx
223
+ import {
224
+ forwardRef,
225
+ useMemo,
226
+ useState
227
+ } from "react";
228
+
229
+ // src/classes/pagination.ts
230
+ var paginationBaseClass = "pagination";
231
+ var paginationItemClass = "pagination-item";
232
+ var paginationItemActiveClass = "pagination-item-active";
233
+ var paginationItemDisabledClass = "pagination-item-disabled";
234
+ var paginationPrevClass = "pagination-prev";
235
+ var paginationNextClass = "pagination-next";
236
+ var paginationEllipsisClass = "pagination-ellipsis";
237
+ var paginationCompactClass = "pagination-compact";
238
+ var paginationInfoClass = "pagination-info";
239
+ var paginationInfoTextClass = "pagination-info-text";
240
+ var paginationInputClass = "pagination-input";
241
+ var paginationResponsiveClass = "pagination-responsive";
242
+ var paginationSizeClasses = {
243
+ sm: "pagination-sm",
244
+ md: "",
245
+ lg: "pagination-lg"
199
246
  };
200
- function getDatePickerClasses({
247
+ function getPaginationClasses({
201
248
  size = "md",
202
- status,
203
- picker = "date",
204
- open,
205
- disabled,
206
- range,
249
+ compact,
207
250
  className
208
251
  }) {
209
- return cn(datePickerBaseClass, datePickerSizeClasses[size], status && datePickerStatusClasses[status], datePickerPickerClasses[picker], open && "datepicker-open", disabled && "datepicker-disabled", range && datePickerRangeClass, className);
252
+ return cn(paginationBaseClass, paginationResponsiveClass, paginationSizeClasses[size], compact && paginationCompactClass, className);
210
253
  }
211
- function getDatePickerDropdownClasses({
212
- open,
213
- className
254
+ function getPaginationItemClasses({
255
+ active,
256
+ disabled
214
257
  }) {
215
- return cn(datePickerDropdownClass, open && datePickerDropdownOpenClass, className);
258
+ return cn(paginationItemClass, active && paginationItemActiveClass, disabled && paginationItemDisabledClass);
216
259
  }
217
260
 
218
- // src/components/date-picker/DatePicker.tsx
261
+ // src/components/pagination/Pagination.tsx
219
262
  import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
220
- function todayValue(picker) {
221
- const today = new Date;
222
- const year = today.getFullYear();
223
- const month = String(today.getMonth() + 1).padStart(2, "0");
224
- const day = String(today.getDate()).padStart(2, "0");
225
- if (picker === "month")
226
- return `${year}-${month}`;
227
- if (picker === "year")
228
- return String(year);
229
- if (picker === "time")
230
- return "00:00";
231
- return `${year}-${month}-${day}`;
263
+ var defaultPageSizeOptions = [10, 20, 50, 100];
264
+ function toPositiveInteger(value, fallback) {
265
+ if (!Number.isFinite(value) || value === undefined) {
266
+ return fallback;
267
+ }
268
+ return Math.max(1, Math.floor(value));
232
269
  }
233
- function inputTypeForPicker(picker) {
234
- if (picker === "month")
235
- return "month";
236
- if (picker === "week")
237
- return "week";
238
- if (picker === "time")
239
- return "time";
240
- return picker === "year" || picker === "quarter" ? "text" : "date";
270
+ function clampPage(page, pageCount) {
271
+ return Math.min(pageCount, Math.max(1, Math.floor(page)));
241
272
  }
242
- function placeholderForPicker(picker) {
243
- if (picker === "month")
244
- return "Select month";
245
- if (picker === "week")
246
- return "Select week";
247
- if (picker === "quarter")
248
- return "Select quarter";
249
- if (picker === "year")
250
- return "Select year";
251
- if (picker === "time")
252
- return "Select time";
253
- return "Select date";
273
+ function getPageCount(total, pageSize) {
274
+ return Math.max(1, Math.ceil(Math.max(0, total) / pageSize));
254
275
  }
255
- function normalizeDateValue(value) {
256
- return typeof value === "string" && value.length > 0 ? value : undefined;
276
+ function getRange(current, pageSize, total) {
277
+ if (total <= 0) {
278
+ return [0, 0];
279
+ }
280
+ const start = (current - 1) * pageSize + 1;
281
+ const end = Math.min(total, current * pageSize);
282
+ return [start, end];
257
283
  }
258
- var DatePickerRoot = forwardRef(({
259
- allowClear,
260
- className,
261
- defaultOpen,
262
- defaultValue,
263
- disabled,
264
- disabledDate,
265
- onBlur,
284
+ function getPageTokens(current, pageCount) {
285
+ if (pageCount <= 7) {
286
+ return Array.from({ length: pageCount }, (_, index) => index + 1);
287
+ }
288
+ const pages = new Set([1, pageCount, current - 1, current, current + 1]);
289
+ if (current <= 4) {
290
+ [2, 3, 4, 5].forEach((page) => pages.add(page));
291
+ }
292
+ if (current >= pageCount - 3) {
293
+ [pageCount - 4, pageCount - 3, pageCount - 2, pageCount - 1].forEach((page) => pages.add(page));
294
+ }
295
+ const sortedPages = Array.from(pages).filter((page) => page >= 1 && page <= pageCount).sort((first, second) => first - second);
296
+ return sortedPages.reduce((tokens, page) => {
297
+ const previous = tokens[tokens.length - 1];
298
+ if (typeof previous === "number") {
299
+ const gap = page - previous;
300
+ if (gap === 2) {
301
+ tokens.push(previous + 1);
302
+ } else if (gap > 2) {
303
+ tokens.push("ellipsis");
304
+ }
305
+ }
306
+ tokens.push(page);
307
+ return tokens;
308
+ }, []);
309
+ }
310
+ function getSizeOptions(pageSize) {
311
+ return Array.from(new Set([...defaultPageSizeOptions, pageSize])).sort((first, second) => first - second);
312
+ }
313
+ var Pagination = forwardRef(({
314
+ current,
315
+ defaultCurrent = 1,
316
+ pageSize,
317
+ defaultPageSize = 10,
318
+ total = 0,
266
319
  onChange,
267
- onFocus,
268
- onOpenChange,
269
- open,
270
- picker = "date",
271
- placeholder,
272
- presets,
273
- showNow,
320
+ disabled,
321
+ simple,
322
+ showSizeChanger,
323
+ showQuickJumper,
324
+ showTotal,
274
325
  size = "md",
275
- status,
276
- value,
326
+ className,
277
327
  ...props
278
328
  }, ref) => {
279
- const isValueControlled = value !== undefined;
280
- const isOpenControlled = open !== undefined;
281
- const [innerValue, setInnerValue] = useState(() => normalizeDateValue(defaultValue));
282
- const [innerOpen, setInnerOpen] = useState(Boolean(defaultOpen));
283
- const currentValue = isValueControlled ? normalizeDateValue(value) : innerValue;
284
- const visible = isOpenControlled ? Boolean(open) : innerOpen;
285
- const inputType = inputTypeForPicker(picker);
286
- function setVisible(nextOpen) {
287
- if (!isOpenControlled) {
288
- setInnerOpen(nextOpen);
289
- }
290
- onOpenChange?.(nextOpen);
291
- }
292
- function emitChange(nextValue) {
293
- if (nextValue && disabledDate?.(nextValue)) {
294
- return;
329
+ const isCurrentControlled = current !== undefined;
330
+ const isPageSizeControlled = pageSize !== undefined;
331
+ const [internalCurrent, setInternalCurrent] = useState(defaultCurrent);
332
+ const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);
333
+ const [quickJumpValue, setQuickJumpValue] = useState("");
334
+ const mergedPageSize = toPositiveInteger(pageSize ?? internalPageSize, defaultPageSize);
335
+ const pageCount = getPageCount(total, mergedPageSize);
336
+ const mergedCurrent = clampPage(toPositiveInteger(current ?? internalCurrent, defaultCurrent), pageCount);
337
+ const pageTokens = useMemo(() => getPageTokens(mergedCurrent, pageCount), [mergedCurrent, pageCount]);
338
+ const range = getRange(mergedCurrent, mergedPageSize, total);
339
+ function changePage(nextPage, nextPageSize = mergedPageSize) {
340
+ const nextPageCount = getPageCount(total, nextPageSize);
341
+ const normalizedPage = clampPage(nextPage, nextPageCount);
342
+ if (!isCurrentControlled) {
343
+ setInternalCurrent(normalizedPage);
295
344
  }
296
- if (!isValueControlled) {
297
- setInnerValue(nextValue);
298
- }
299
- onChange?.(nextValue, nextValue ?? "");
300
- }
301
- const presetItems = useMemo(() => presets ?? [], [presets]);
302
- return /* @__PURE__ */ jsxs2("div", {
303
- ...props,
304
- ref,
305
- className: getDatePickerClasses({
306
- size,
307
- status,
308
- picker,
309
- open: visible,
310
- disabled,
311
- className
312
- }),
313
- children: [
314
- /* @__PURE__ */ jsx3("input", {
315
- className: datePickerInputClass,
316
- disabled,
317
- type: inputType,
318
- value: currentValue ?? "",
319
- placeholder: placeholder ?? placeholderForPicker(picker),
320
- onFocus: (event) => {
321
- onFocus?.(event);
322
- setVisible(true);
323
- },
324
- onBlur: (event) => {
325
- onBlur?.(event);
326
- setVisible(false);
327
- },
328
- onChange: (event) => emitChange(event.currentTarget.value || undefined)
329
- }),
330
- allowClear && currentValue && !disabled ? /* @__PURE__ */ jsx3("button", {
331
- type: "button",
332
- className: datePickerClearClass,
333
- "aria-label": "Clear date",
334
- onMouseDown: (event) => event.preventDefault(),
335
- onClick: () => emitChange(undefined),
336
- children: "x"
337
- }) : null,
338
- /* @__PURE__ */ jsx3("span", {
339
- className: datePickerIconClass,
340
- "aria-hidden": "true"
341
- }),
342
- (presetItems.length > 0 || showNow) && visible ? /* @__PURE__ */ jsxs2("div", {
343
- className: getDatePickerDropdownClasses({ open: visible }),
344
- children: [
345
- presetItems.map((preset, index) => /* @__PURE__ */ jsx3("button", {
346
- type: "button",
347
- className: datePickerPresetClass,
348
- onMouseDown: (event) => event.preventDefault(),
349
- onClick: () => emitChange(preset.value),
350
- children: preset.label
351
- }, index)),
352
- showNow ? /* @__PURE__ */ jsx3("div", {
353
- className: datePickerFooterClass,
354
- children: /* @__PURE__ */ jsx3("button", {
355
- type: "button",
356
- onMouseDown: (event) => event.preventDefault(),
357
- onClick: () => emitChange(todayValue(picker)),
358
- children: "Now"
359
- })
360
- }) : null
361
- ]
362
- }) : null
363
- ]
364
- });
365
- });
366
- DatePickerRoot.displayName = "DatePicker";
367
- var RangePicker = forwardRef(({
368
- allowClear,
369
- className,
370
- defaultValue,
371
- disabled,
372
- disabledDate,
373
- onChange,
374
- picker = "date",
375
- placeholder,
376
- separator = "-",
377
- size = "md",
378
- status,
379
- value,
380
- ...props
381
- }, ref) => {
382
- const isControlled = value !== undefined;
383
- const [innerValue, setInnerValue] = useState(defaultValue ?? [undefined, undefined]);
384
- const currentValue = isControlled ? value : innerValue;
385
- const inputType = inputTypeForPicker(picker);
386
- function emitChange(nextValue) {
387
- if (nextValue.some((item) => item !== undefined && Boolean(disabledDate?.(item)))) {
388
- return;
389
- }
390
- if (!isControlled) {
391
- setInnerValue(nextValue);
392
- }
393
- onChange?.(nextValue, [nextValue[0] ?? "", nextValue[1] ?? ""]);
394
- }
395
- function updateIndex(index, nextItem) {
396
- emitChange(index === 0 ? [nextItem, currentValue?.[1]] : [currentValue?.[0], nextItem]);
397
- }
398
- return /* @__PURE__ */ jsxs2("div", {
399
- ...props,
400
- ref,
401
- className: getDatePickerClasses({
402
- size,
403
- status,
404
- picker,
405
- disabled,
406
- range: true,
407
- className
408
- }),
409
- children: [
410
- /* @__PURE__ */ jsx3("input", {
411
- className: datePickerInputClass,
412
- disabled,
413
- type: inputType,
414
- value: currentValue?.[0] ?? "",
415
- placeholder: Array.isArray(placeholder) ? placeholder[0] : "Start date",
416
- onChange: (event) => updateIndex(0, event.currentTarget.value || undefined)
417
- }),
418
- /* @__PURE__ */ jsx3("span", {
419
- className: datePickerSeparatorClass,
420
- children: separator
421
- }),
422
- /* @__PURE__ */ jsx3("input", {
423
- className: datePickerInputClass,
424
- disabled,
425
- type: inputType,
426
- value: currentValue?.[1] ?? "",
427
- placeholder: Array.isArray(placeholder) ? placeholder[1] : "End date",
428
- onChange: (event) => updateIndex(1, event.currentTarget.value || undefined)
429
- }),
430
- allowClear && (currentValue?.[0] || currentValue?.[1]) && !disabled ? /* @__PURE__ */ jsx3("button", {
431
- type: "button",
432
- className: datePickerClearClass,
433
- "aria-label": "Clear date range",
434
- onClick: () => emitChange([undefined, undefined]),
435
- children: "x"
436
- }) : null
437
- ]
438
- });
439
- });
440
- RangePicker.displayName = "DatePicker.RangePicker";
441
- function withPicker(picker, displayName) {
442
- const Picker = forwardRef((props, ref) => /* @__PURE__ */ jsx3(DatePickerRoot, {
443
- ...props,
444
- ref,
445
- picker
446
- }));
447
- Picker.displayName = displayName;
448
- return Picker;
449
- }
450
- var DatePicker = Object.assign(DatePickerRoot, {
451
- RangePicker,
452
- WeekPicker: withPicker("week", "DatePicker.WeekPicker"),
453
- MonthPicker: withPicker("month", "DatePicker.MonthPicker"),
454
- QuarterPicker: withPicker("quarter", "DatePicker.QuarterPicker"),
455
- YearPicker: withPicker("year", "DatePicker.YearPicker")
456
- });
457
- // src/components/pagination/Pagination.tsx
458
- import {
459
- forwardRef as forwardRef2,
460
- useMemo as useMemo2,
461
- useState as useState2
462
- } from "react";
463
-
464
- // src/classes/pagination.ts
465
- var paginationBaseClass = "pagination";
466
- var paginationItemClass = "pagination-item";
467
- var paginationItemActiveClass = "pagination-item-active";
468
- var paginationItemDisabledClass = "pagination-item-disabled";
469
- var paginationPrevClass = "pagination-prev";
470
- var paginationNextClass = "pagination-next";
471
- var paginationEllipsisClass = "pagination-ellipsis";
472
- var paginationCompactClass = "pagination-compact";
473
- var paginationInfoClass = "pagination-info";
474
- var paginationInfoTextClass = "pagination-info-text";
475
- var paginationInputClass = "pagination-input";
476
- var paginationResponsiveClass = "pagination-responsive";
477
- var paginationSizeClasses = {
478
- sm: "pagination-sm",
479
- md: "",
480
- lg: "pagination-lg"
481
- };
482
- function getPaginationClasses({
483
- size = "md",
484
- compact,
485
- className
486
- }) {
487
- return cn(paginationBaseClass, paginationResponsiveClass, paginationSizeClasses[size], compact && paginationCompactClass, className);
488
- }
489
- function getPaginationItemClasses({
490
- active,
491
- disabled
492
- }) {
493
- return cn(paginationItemClass, active && paginationItemActiveClass, disabled && paginationItemDisabledClass);
494
- }
495
-
496
- // src/components/pagination/Pagination.tsx
497
- import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
498
- var defaultPageSizeOptions = [10, 20, 50, 100];
499
- function toPositiveInteger(value, fallback) {
500
- if (!Number.isFinite(value) || value === undefined) {
501
- return fallback;
502
- }
503
- return Math.max(1, Math.floor(value));
504
- }
505
- function clampPage(page, pageCount) {
506
- return Math.min(pageCount, Math.max(1, Math.floor(page)));
507
- }
508
- function getPageCount(total, pageSize) {
509
- return Math.max(1, Math.ceil(Math.max(0, total) / pageSize));
510
- }
511
- function getRange(current, pageSize, total) {
512
- if (total <= 0) {
513
- return [0, 0];
514
- }
515
- const start = (current - 1) * pageSize + 1;
516
- const end = Math.min(total, current * pageSize);
517
- return [start, end];
518
- }
519
- function getPageTokens(current, pageCount) {
520
- if (pageCount <= 7) {
521
- return Array.from({ length: pageCount }, (_, index) => index + 1);
522
- }
523
- const pages = new Set([1, pageCount, current - 1, current, current + 1]);
524
- if (current <= 4) {
525
- [2, 3, 4, 5].forEach((page) => pages.add(page));
526
- }
527
- if (current >= pageCount - 3) {
528
- [pageCount - 4, pageCount - 3, pageCount - 2, pageCount - 1].forEach((page) => pages.add(page));
529
- }
530
- const sortedPages = Array.from(pages).filter((page) => page >= 1 && page <= pageCount).sort((first, second) => first - second);
531
- return sortedPages.reduce((tokens, page) => {
532
- const previous = tokens[tokens.length - 1];
533
- if (typeof previous === "number") {
534
- const gap = page - previous;
535
- if (gap === 2) {
536
- tokens.push(previous + 1);
537
- } else if (gap > 2) {
538
- tokens.push("ellipsis");
539
- }
540
- }
541
- tokens.push(page);
542
- return tokens;
543
- }, []);
544
- }
545
- function getSizeOptions(pageSize) {
546
- return Array.from(new Set([...defaultPageSizeOptions, pageSize])).sort((first, second) => first - second);
547
- }
548
- var Pagination = forwardRef2(({
549
- current,
550
- defaultCurrent = 1,
551
- pageSize,
552
- defaultPageSize = 10,
553
- total = 0,
554
- onChange,
555
- disabled,
556
- simple,
557
- showSizeChanger,
558
- showQuickJumper,
559
- showTotal,
560
- size = "md",
561
- className,
562
- ...props
563
- }, ref) => {
564
- const isCurrentControlled = current !== undefined;
565
- const isPageSizeControlled = pageSize !== undefined;
566
- const [internalCurrent, setInternalCurrent] = useState2(defaultCurrent);
567
- const [internalPageSize, setInternalPageSize] = useState2(defaultPageSize);
568
- const [quickJumpValue, setQuickJumpValue] = useState2("");
569
- const mergedPageSize = toPositiveInteger(pageSize ?? internalPageSize, defaultPageSize);
570
- const pageCount = getPageCount(total, mergedPageSize);
571
- const mergedCurrent = clampPage(toPositiveInteger(current ?? internalCurrent, defaultCurrent), pageCount);
572
- const pageTokens = useMemo2(() => getPageTokens(mergedCurrent, pageCount), [mergedCurrent, pageCount]);
573
- const range = getRange(mergedCurrent, mergedPageSize, total);
574
- function changePage(nextPage, nextPageSize = mergedPageSize) {
575
- const nextPageCount = getPageCount(total, nextPageSize);
576
- const normalizedPage = clampPage(nextPage, nextPageCount);
577
- if (!isCurrentControlled) {
578
- setInternalCurrent(normalizedPage);
579
- }
580
- if (!isPageSizeControlled) {
581
- setInternalPageSize(nextPageSize);
345
+ if (!isPageSizeControlled) {
346
+ setInternalPageSize(nextPageSize);
582
347
  }
583
348
  onChange?.(normalizedPage, nextPageSize);
584
349
  }
@@ -603,19 +368,19 @@ var Pagination = forwardRef2(({
603
368
  }
604
369
  const previousDisabled = disabled || mergedCurrent <= 1;
605
370
  const nextDisabled = disabled || mergedCurrent >= pageCount;
606
- return /* @__PURE__ */ jsxs3("nav", {
371
+ return /* @__PURE__ */ jsxs2("nav", {
607
372
  ...props,
608
373
  ref,
609
374
  className: getPaginationClasses({ size, compact: simple, className }),
610
375
  children: [
611
- showTotal ? /* @__PURE__ */ jsx4("div", {
376
+ showTotal ? /* @__PURE__ */ jsx3("div", {
612
377
  className: paginationInfoClass,
613
- children: /* @__PURE__ */ jsx4("span", {
378
+ children: /* @__PURE__ */ jsx3("span", {
614
379
  className: paginationInfoTextClass,
615
380
  children: showTotal(total, range)
616
381
  })
617
382
  }) : null,
618
- /* @__PURE__ */ jsx4("button", {
383
+ /* @__PURE__ */ jsx3("button", {
619
384
  type: "button",
620
385
  className: paginationPrevClass,
621
386
  disabled: previousDisabled,
@@ -623,10 +388,10 @@ var Pagination = forwardRef2(({
623
388
  onClick: () => changePage(mergedCurrent - 1),
624
389
  children: "Prev"
625
390
  }),
626
- simple ? /* @__PURE__ */ jsxs3("div", {
391
+ simple ? /* @__PURE__ */ jsxs2("div", {
627
392
  className: paginationInputClass,
628
393
  children: [
629
- /* @__PURE__ */ jsx4("input", {
394
+ /* @__PURE__ */ jsx3("input", {
630
395
  "aria-label": "Current page",
631
396
  type: "number",
632
397
  min: 1,
@@ -641,7 +406,7 @@ var Pagination = forwardRef2(({
641
406
  }
642
407
  }
643
408
  }),
644
- /* @__PURE__ */ jsxs3("span", {
409
+ /* @__PURE__ */ jsxs2("span", {
645
410
  className: paginationInfoTextClass,
646
411
  children: [
647
412
  "/ ",
@@ -649,10 +414,10 @@ var Pagination = forwardRef2(({
649
414
  ]
650
415
  })
651
416
  ]
652
- }) : pageTokens.map((pageToken, index) => pageToken === "ellipsis" ? /* @__PURE__ */ jsx4("span", {
417
+ }) : pageTokens.map((pageToken, index) => pageToken === "ellipsis" ? /* @__PURE__ */ jsx3("span", {
653
418
  "aria-hidden": "true",
654
419
  className: paginationEllipsisClass
655
- }, `ellipsis-${index}`) : /* @__PURE__ */ jsx4("button", {
420
+ }, `ellipsis-${index}`) : /* @__PURE__ */ jsx3("button", {
656
421
  type: "button",
657
422
  className: getPaginationItemClasses({
658
423
  active: pageToken === mergedCurrent,
@@ -664,7 +429,7 @@ var Pagination = forwardRef2(({
664
429
  onClick: () => changePage(pageToken),
665
430
  children: pageToken
666
431
  }, pageToken)),
667
- /* @__PURE__ */ jsx4("button", {
432
+ /* @__PURE__ */ jsx3("button", {
668
433
  type: "button",
669
434
  className: paginationNextClass,
670
435
  disabled: nextDisabled,
@@ -672,14 +437,14 @@ var Pagination = forwardRef2(({
672
437
  onClick: () => changePage(mergedCurrent + 1),
673
438
  children: "Next"
674
439
  }),
675
- showSizeChanger ? /* @__PURE__ */ jsx4("div", {
440
+ showSizeChanger ? /* @__PURE__ */ jsx3("div", {
676
441
  className: paginationInputClass,
677
- children: /* @__PURE__ */ jsx4("select", {
442
+ children: /* @__PURE__ */ jsx3("select", {
678
443
  "aria-label": "Page size",
679
444
  value: mergedPageSize,
680
445
  disabled,
681
446
  onChange: handlePageSizeChange,
682
- children: getSizeOptions(mergedPageSize).map((option) => /* @__PURE__ */ jsxs3("option", {
447
+ children: getSizeOptions(mergedPageSize).map((option) => /* @__PURE__ */ jsxs2("option", {
683
448
  value: option,
684
449
  children: [
685
450
  option,
@@ -688,60 +453,25 @@ var Pagination = forwardRef2(({
688
453
  }, option))
689
454
  })
690
455
  }) : null,
691
- showQuickJumper && !simple ? /* @__PURE__ */ jsx4("div", {
456
+ showQuickJumper && !simple ? /* @__PURE__ */ jsx3("div", {
692
457
  className: paginationInputClass,
693
- children: /* @__PURE__ */ jsx4("input", {
458
+ children: /* @__PURE__ */ jsx3("input", {
694
459
  "aria-label": "Jump to page",
695
460
  type: "number",
696
- min: 1,
697
- max: pageCount,
698
- value: quickJumpValue,
699
- disabled,
700
- onChange: (event) => setQuickJumpValue(event.currentTarget.value),
701
- onKeyDown: handleQuickJumpKeyDown
702
- })
703
- }) : null
704
- ]
705
- });
706
- });
707
- Pagination.displayName = "Pagination";
708
- // src/components/dm-pagination/DmPagination.tsx
709
- import {
710
- forwardRef as forwardRef3,
711
- useEffect,
712
- useMemo as useMemo3,
713
- useRef,
714
- useState as useState3
715
- } from "react";
716
-
717
- // src/classes/dm-pagination.ts
718
- var dmPaginationBaseClass = "dm-pagination";
719
- var dmPaginationHiddenClass = "dm-pagination-hidden";
720
- var dmPaginationPagerClass = "dm-pagination-pager";
721
- var dmPaginationRefreshClass = "dm-pagination-refresh";
722
- var dmPaginationRefreshLoadingClass = "dm-pagination-refresh-loading";
723
- var dmPaginationSelectedClass = "dm-pagination-selected";
724
- var dmPaginationAlignClasses = {
725
- left: "dm-pagination-left",
726
- center: "dm-pagination-center",
727
- right: "dm-pagination-right"
728
- };
729
- function getDmPaginationClasses({
730
- align = "right",
731
- hidden,
732
- className
733
- }) {
734
- return cn(dmPaginationBaseClass, dmPaginationAlignClasses[align], hidden && dmPaginationHiddenClass, className);
735
- }
736
- function getDmPaginationRefreshClasses({
737
- loading,
738
- className
739
- }) {
740
- return cn(dmPaginationRefreshClass, loading && dmPaginationRefreshLoadingClass, className);
741
- }
742
-
461
+ min: 1,
462
+ max: pageCount,
463
+ value: quickJumpValue,
464
+ disabled,
465
+ onChange: (event) => setQuickJumpValue(event.currentTarget.value),
466
+ onKeyDown: handleQuickJumpKeyDown
467
+ })
468
+ }) : null
469
+ ]
470
+ });
471
+ });
472
+ Pagination.displayName = "Pagination";
743
473
  // src/components/dm-pagination/DmPagination.tsx
744
- import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
474
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
745
475
  var defaultLocale = {
746
476
  refresh: "Refresh",
747
477
  showTotal: (total, range) => `${range[0]}-${range[1]} of ${total}`,
@@ -773,7 +503,7 @@ function getResponsiveSimple({
773
503
  }
774
504
  function useElementWidth() {
775
505
  const ref = useRef(null);
776
- const [width, setWidth] = useState3(1000);
506
+ const [width, setWidth] = useState2(1000);
777
507
  useEffect(() => {
778
508
  const element = ref.current;
779
509
  if (!element || typeof ResizeObserver === "undefined")
@@ -789,110 +519,423 @@ function useElementWidth() {
789
519
  function renderSelected(selectedTotal, locale) {
790
520
  if (!selectedTotal)
791
521
  return null;
792
- return /* @__PURE__ */ jsx5("span", {
522
+ return /* @__PURE__ */ jsx4("span", {
793
523
  className: dmPaginationSelectedClass,
794
524
  children: locale.selected(selectedTotal)
795
525
  });
796
- }
797
- var DmPagination = forwardRef3(({
798
- selectedTotal = 0,
799
- loading = false,
800
- total = 0,
801
- showRefresh = true,
802
- showPagination = true,
803
- wrapperStyle,
526
+ }
527
+ var DmPagination = forwardRef2(({
528
+ selectedTotal = 0,
529
+ loading = false,
530
+ total = 0,
531
+ showRefresh = true,
532
+ showPagination = true,
533
+ wrapperStyle,
534
+ className,
535
+ align = "right",
536
+ showTotalFullMessage = false,
537
+ showSizeChanger = true,
538
+ responsiveSimple = true,
539
+ refresh,
540
+ simple,
541
+ showQuickJumper,
542
+ showTotal,
543
+ locale,
544
+ ...props
545
+ }, ref) => {
546
+ const [measureRef, width] = useElementWidth();
547
+ const mergedLocale = useMemo2(() => ({ ...defaultLocale, ...locale }), [locale]);
548
+ const isRefreshVisible = showRefresh && Boolean(refresh);
549
+ const shouldRender = showPagination || isRefreshVisible;
550
+ const responsiveSimpleMode = responsiveSimple ? getResponsiveSimple({
551
+ width,
552
+ total,
553
+ showRefresh,
554
+ showSizeChanger
555
+ }) : false;
556
+ const mergedSimple = simple ?? responsiveSimpleMode;
557
+ const mergedShowQuickJumper = showQuickJumper ?? !mergedSimple;
558
+ const totalRenderer = useMemo2(() => {
559
+ if (showTotal)
560
+ return showTotal;
561
+ return (nextTotal, range) => {
562
+ if (Number(nextTotal) === 0)
563
+ return "";
564
+ const selected = renderSelected(selectedTotal, mergedLocale);
565
+ const message = mergedSimple && !showTotalFullMessage ? mergedLocale.showTotalSimple(nextTotal, range, selectedTotal) : mergedLocale.showTotal(nextTotal, range, selectedTotal);
566
+ return /* @__PURE__ */ jsxs3("span", {
567
+ title: `${mergedLocale.showTotal(nextTotal, range, selectedTotal)}${selectedTotal ? mergedLocale.selected(selectedTotal) : ""}`,
568
+ children: [
569
+ message,
570
+ selected
571
+ ]
572
+ });
573
+ };
574
+ }, [
575
+ mergedLocale,
576
+ mergedSimple,
577
+ selectedTotal,
578
+ showTotal,
579
+ showTotalFullMessage
580
+ ]);
581
+ if (!shouldRender)
582
+ return null;
583
+ return /* @__PURE__ */ jsxs3("div", {
584
+ ref: (element) => {
585
+ measureRef.current = element;
586
+ if (typeof ref === "function") {
587
+ ref(element);
588
+ } else if (ref) {
589
+ ref.current = element;
590
+ }
591
+ },
592
+ className: getDmPaginationClasses({ align, className }),
593
+ style: wrapperStyle,
594
+ children: [
595
+ showPagination ? /* @__PURE__ */ jsx4("div", {
596
+ className: dmPaginationPagerClass,
597
+ children: /* @__PURE__ */ jsx4(Pagination, {
598
+ ...props,
599
+ total,
600
+ simple: mergedSimple,
601
+ showQuickJumper: mergedShowQuickJumper,
602
+ showSizeChanger,
603
+ showTotal: totalRenderer
604
+ })
605
+ }) : null,
606
+ isRefreshVisible ? /* @__PURE__ */ jsxs3("button", {
607
+ type: "button",
608
+ className: getDmPaginationRefreshClasses({ loading }),
609
+ disabled: loading || props.disabled,
610
+ "aria-busy": loading || undefined,
611
+ onClick: refresh,
612
+ children: [
613
+ /* @__PURE__ */ jsx4("span", {
614
+ "aria-hidden": "true",
615
+ children: "Reload"
616
+ }),
617
+ /* @__PURE__ */ jsx4("span", {
618
+ children: mergedLocale.refresh
619
+ })
620
+ ]
621
+ }) : null
622
+ ]
623
+ });
624
+ });
625
+ DmPagination.displayName = "DmPagination";
626
+ // src/components/dm-search/DmSearch.tsx
627
+ import {
628
+ forwardRef as forwardRef6,
629
+ useEffect as useEffect2,
630
+ useImperativeHandle as useImperativeHandle2,
631
+ useMemo as useMemo5,
632
+ useState as useState6
633
+ } from "react";
634
+
635
+ // src/classes/dm-search.ts
636
+ var dmSearchBaseClass = "dm-search";
637
+ var dmSearchCompactClass = "dm-search-compact";
638
+ var dmSearchCollapsedClass = "dm-search-collapsed";
639
+ var dmSearchFieldsClass = "dm-search-fields";
640
+ var dmSearchFieldClass = "dm-search-field";
641
+ var dmSearchActionsClass = "dm-search-actions";
642
+ var dmSearchFastFilterClass = "dm-search-fast-filter";
643
+ function getDmSearchClasses({
644
+ compact,
645
+ collapsed,
646
+ className
647
+ }) {
648
+ return cn(dmSearchBaseClass, compact && dmSearchCompactClass, collapsed && dmSearchCollapsedClass, className);
649
+ }
650
+
651
+ // src/components/date-picker/DatePicker.tsx
652
+ import { forwardRef as forwardRef3, useMemo as useMemo3, useState as useState3 } from "react";
653
+
654
+ // src/classes/date-picker.ts
655
+ var datePickerBaseClass = "datepicker";
656
+ var datePickerInputClass = "datepicker-input";
657
+ var datePickerIconClass = "datepicker-icon";
658
+ var datePickerDropdownClass = "datepicker-dropdown";
659
+ var datePickerDropdownOpenClass = "datepicker-dropdown-open";
660
+ var datePickerFooterClass = "datepicker-footer";
661
+ var datePickerPresetClass = "datepicker-preset";
662
+ var datePickerRangeClass = "datepicker-range";
663
+ var datePickerSeparatorClass = "datepicker-range-separator";
664
+ var datePickerClearClass = "datepicker-clear";
665
+ var datePickerSizeClasses = {
666
+ sm: "datepicker-sm",
667
+ md: "",
668
+ lg: "datepicker-lg"
669
+ };
670
+ var datePickerStatusClasses = {
671
+ error: "datepicker-error",
672
+ success: "datepicker-success"
673
+ };
674
+ var datePickerPickerClasses = {
675
+ date: "",
676
+ week: "datepicker-week",
677
+ month: "datepicker-month-picker",
678
+ quarter: "datepicker-quarter-picker",
679
+ year: "datepicker-year-picker",
680
+ time: "datepicker-time-picker"
681
+ };
682
+ function getDatePickerClasses({
683
+ size = "md",
684
+ status,
685
+ picker = "date",
686
+ open,
687
+ disabled,
688
+ range,
689
+ className
690
+ }) {
691
+ return cn(datePickerBaseClass, datePickerSizeClasses[size], status && datePickerStatusClasses[status], datePickerPickerClasses[picker], open && "datepicker-open", disabled && "datepicker-disabled", range && datePickerRangeClass, className);
692
+ }
693
+ function getDatePickerDropdownClasses({
694
+ open,
695
+ className
696
+ }) {
697
+ return cn(datePickerDropdownClass, open && datePickerDropdownOpenClass, className);
698
+ }
699
+
700
+ // src/components/date-picker/DatePicker.tsx
701
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
702
+ function todayValue(picker) {
703
+ const today = new Date;
704
+ const year = today.getFullYear();
705
+ const month = String(today.getMonth() + 1).padStart(2, "0");
706
+ const day = String(today.getDate()).padStart(2, "0");
707
+ if (picker === "month")
708
+ return `${year}-${month}`;
709
+ if (picker === "year")
710
+ return String(year);
711
+ if (picker === "time")
712
+ return "00:00";
713
+ return `${year}-${month}-${day}`;
714
+ }
715
+ function inputTypeForPicker(picker) {
716
+ if (picker === "month")
717
+ return "month";
718
+ if (picker === "week")
719
+ return "week";
720
+ if (picker === "time")
721
+ return "time";
722
+ return picker === "year" || picker === "quarter" ? "text" : "date";
723
+ }
724
+ function placeholderForPicker(picker) {
725
+ if (picker === "month")
726
+ return "Select month";
727
+ if (picker === "week")
728
+ return "Select week";
729
+ if (picker === "quarter")
730
+ return "Select quarter";
731
+ if (picker === "year")
732
+ return "Select year";
733
+ if (picker === "time")
734
+ return "Select time";
735
+ return "Select date";
736
+ }
737
+ function normalizeDateValue(value) {
738
+ return typeof value === "string" && value.length > 0 ? value : undefined;
739
+ }
740
+ var DatePickerRoot = forwardRef3(({
741
+ allowClear,
742
+ className,
743
+ defaultOpen,
744
+ defaultValue,
745
+ disabled,
746
+ disabledDate,
747
+ onBlur,
748
+ onChange,
749
+ onFocus,
750
+ onOpenChange,
751
+ open,
752
+ picker = "date",
753
+ placeholder,
754
+ presets,
755
+ showNow,
756
+ size = "md",
757
+ status,
758
+ value,
759
+ ...props
760
+ }, ref) => {
761
+ const isValueControlled = value !== undefined;
762
+ const isOpenControlled = open !== undefined;
763
+ const [innerValue, setInnerValue] = useState3(() => normalizeDateValue(defaultValue));
764
+ const [innerOpen, setInnerOpen] = useState3(Boolean(defaultOpen));
765
+ const currentValue = isValueControlled ? normalizeDateValue(value) : innerValue;
766
+ const visible = isOpenControlled ? Boolean(open) : innerOpen;
767
+ const inputType = inputTypeForPicker(picker);
768
+ function setVisible(nextOpen) {
769
+ if (!isOpenControlled) {
770
+ setInnerOpen(nextOpen);
771
+ }
772
+ onOpenChange?.(nextOpen);
773
+ }
774
+ function emitChange(nextValue) {
775
+ if (nextValue && disabledDate?.(nextValue)) {
776
+ return;
777
+ }
778
+ if (!isValueControlled) {
779
+ setInnerValue(nextValue);
780
+ }
781
+ onChange?.(nextValue, nextValue ?? "");
782
+ }
783
+ const presetItems = useMemo3(() => presets ?? [], [presets]);
784
+ return /* @__PURE__ */ jsxs4("div", {
785
+ ...props,
786
+ ref,
787
+ className: getDatePickerClasses({
788
+ size,
789
+ status,
790
+ picker,
791
+ open: visible,
792
+ disabled,
793
+ className
794
+ }),
795
+ children: [
796
+ /* @__PURE__ */ jsx5("input", {
797
+ className: datePickerInputClass,
798
+ disabled,
799
+ type: inputType,
800
+ value: currentValue ?? "",
801
+ placeholder: placeholder ?? placeholderForPicker(picker),
802
+ onFocus: (event) => {
803
+ onFocus?.(event);
804
+ setVisible(true);
805
+ },
806
+ onBlur: (event) => {
807
+ onBlur?.(event);
808
+ setVisible(false);
809
+ },
810
+ onChange: (event) => emitChange(event.currentTarget.value || undefined)
811
+ }),
812
+ allowClear && currentValue && !disabled ? /* @__PURE__ */ jsx5("button", {
813
+ type: "button",
814
+ className: datePickerClearClass,
815
+ "aria-label": "Clear date",
816
+ onMouseDown: (event) => event.preventDefault(),
817
+ onClick: () => emitChange(undefined),
818
+ children: "x"
819
+ }) : null,
820
+ /* @__PURE__ */ jsx5("span", {
821
+ className: datePickerIconClass,
822
+ "aria-hidden": "true"
823
+ }),
824
+ (presetItems.length > 0 || showNow) && visible ? /* @__PURE__ */ jsxs4("div", {
825
+ className: getDatePickerDropdownClasses({ open: visible }),
826
+ children: [
827
+ presetItems.map((preset, index) => /* @__PURE__ */ jsx5("button", {
828
+ type: "button",
829
+ className: datePickerPresetClass,
830
+ onMouseDown: (event) => event.preventDefault(),
831
+ onClick: () => emitChange(preset.value),
832
+ children: preset.label
833
+ }, index)),
834
+ showNow ? /* @__PURE__ */ jsx5("div", {
835
+ className: datePickerFooterClass,
836
+ children: /* @__PURE__ */ jsx5("button", {
837
+ type: "button",
838
+ onMouseDown: (event) => event.preventDefault(),
839
+ onClick: () => emitChange(todayValue(picker)),
840
+ children: "Now"
841
+ })
842
+ }) : null
843
+ ]
844
+ }) : null
845
+ ]
846
+ });
847
+ });
848
+ DatePickerRoot.displayName = "DatePicker";
849
+ var RangePicker = forwardRef3(({
850
+ allowClear,
804
851
  className,
805
- align = "right",
806
- showTotalFullMessage = false,
807
- showSizeChanger = true,
808
- responsiveSimple = true,
809
- refresh,
810
- simple,
811
- showQuickJumper,
812
- showTotal,
813
- locale,
852
+ defaultValue,
853
+ disabled,
854
+ disabledDate,
855
+ onChange,
856
+ picker = "date",
857
+ placeholder,
858
+ separator = "-",
859
+ size = "md",
860
+ status,
861
+ value,
814
862
  ...props
815
863
  }, ref) => {
816
- const [measureRef, width] = useElementWidth();
817
- const mergedLocale = useMemo3(() => ({ ...defaultLocale, ...locale }), [locale]);
818
- const isRefreshVisible = showRefresh && Boolean(refresh);
819
- const shouldRender = showPagination || isRefreshVisible;
820
- const responsiveSimpleMode = responsiveSimple ? getResponsiveSimple({
821
- width,
822
- total,
823
- showRefresh,
824
- showSizeChanger
825
- }) : false;
826
- const mergedSimple = simple ?? responsiveSimpleMode;
827
- const mergedShowQuickJumper = showQuickJumper ?? !mergedSimple;
828
- const totalRenderer = useMemo3(() => {
829
- if (showTotal)
830
- return showTotal;
831
- return (nextTotal, range) => {
832
- if (Number(nextTotal) === 0)
833
- return "";
834
- const selected = renderSelected(selectedTotal, mergedLocale);
835
- const message = mergedSimple && !showTotalFullMessage ? mergedLocale.showTotalSimple(nextTotal, range, selectedTotal) : mergedLocale.showTotal(nextTotal, range, selectedTotal);
836
- return /* @__PURE__ */ jsxs4("span", {
837
- title: `${mergedLocale.showTotal(nextTotal, range, selectedTotal)}${selectedTotal ? mergedLocale.selected(selectedTotal) : ""}`,
838
- children: [
839
- message,
840
- selected
841
- ]
842
- });
843
- };
844
- }, [
845
- mergedLocale,
846
- mergedSimple,
847
- selectedTotal,
848
- showTotal,
849
- showTotalFullMessage
850
- ]);
851
- if (!shouldRender)
852
- return null;
864
+ const isControlled = value !== undefined;
865
+ const [innerValue, setInnerValue] = useState3(defaultValue ?? [undefined, undefined]);
866
+ const currentValue = isControlled ? value : innerValue;
867
+ const inputType = inputTypeForPicker(picker);
868
+ function emitChange(nextValue) {
869
+ if (nextValue.some((item) => item !== undefined && Boolean(disabledDate?.(item)))) {
870
+ return;
871
+ }
872
+ if (!isControlled) {
873
+ setInnerValue(nextValue);
874
+ }
875
+ onChange?.(nextValue, [nextValue[0] ?? "", nextValue[1] ?? ""]);
876
+ }
877
+ function updateIndex(index, nextItem) {
878
+ emitChange(index === 0 ? [nextItem, currentValue?.[1]] : [currentValue?.[0], nextItem]);
879
+ }
853
880
  return /* @__PURE__ */ jsxs4("div", {
854
- ref: (element) => {
855
- measureRef.current = element;
856
- if (typeof ref === "function") {
857
- ref(element);
858
- } else if (ref) {
859
- ref.current = element;
860
- }
861
- },
862
- className: getDmPaginationClasses({ align, className }),
863
- style: wrapperStyle,
881
+ ...props,
882
+ ref,
883
+ className: getDatePickerClasses({
884
+ size,
885
+ status,
886
+ picker,
887
+ disabled,
888
+ range: true,
889
+ className
890
+ }),
864
891
  children: [
865
- showPagination ? /* @__PURE__ */ jsx5("div", {
866
- className: dmPaginationPagerClass,
867
- children: /* @__PURE__ */ jsx5(Pagination, {
868
- ...props,
869
- total,
870
- simple: mergedSimple,
871
- showQuickJumper: mergedShowQuickJumper,
872
- showSizeChanger,
873
- showTotal: totalRenderer
874
- })
875
- }) : null,
876
- isRefreshVisible ? /* @__PURE__ */ jsxs4("button", {
892
+ /* @__PURE__ */ jsx5("input", {
893
+ className: datePickerInputClass,
894
+ disabled,
895
+ type: inputType,
896
+ value: currentValue?.[0] ?? "",
897
+ placeholder: Array.isArray(placeholder) ? placeholder[0] : "Start date",
898
+ onChange: (event) => updateIndex(0, event.currentTarget.value || undefined)
899
+ }),
900
+ /* @__PURE__ */ jsx5("span", {
901
+ className: datePickerSeparatorClass,
902
+ children: separator
903
+ }),
904
+ /* @__PURE__ */ jsx5("input", {
905
+ className: datePickerInputClass,
906
+ disabled,
907
+ type: inputType,
908
+ value: currentValue?.[1] ?? "",
909
+ placeholder: Array.isArray(placeholder) ? placeholder[1] : "End date",
910
+ onChange: (event) => updateIndex(1, event.currentTarget.value || undefined)
911
+ }),
912
+ allowClear && (currentValue?.[0] || currentValue?.[1]) && !disabled ? /* @__PURE__ */ jsx5("button", {
877
913
  type: "button",
878
- className: getDmPaginationRefreshClasses({ loading }),
879
- disabled: loading || props.disabled,
880
- "aria-busy": loading || undefined,
881
- onClick: refresh,
882
- children: [
883
- /* @__PURE__ */ jsx5("span", {
884
- "aria-hidden": "true",
885
- children: "Reload"
886
- }),
887
- /* @__PURE__ */ jsx5("span", {
888
- children: mergedLocale.refresh
889
- })
890
- ]
914
+ className: datePickerClearClass,
915
+ "aria-label": "Clear date range",
916
+ onClick: () => emitChange([undefined, undefined]),
917
+ children: "x"
891
918
  }) : null
892
919
  ]
893
920
  });
894
921
  });
895
- DmPagination.displayName = "DmPagination";
922
+ RangePicker.displayName = "DatePicker.RangePicker";
923
+ function withPicker(picker, displayName) {
924
+ const Picker = forwardRef3((props, ref) => /* @__PURE__ */ jsx5(DatePickerRoot, {
925
+ ...props,
926
+ ref,
927
+ picker
928
+ }));
929
+ Picker.displayName = displayName;
930
+ return Picker;
931
+ }
932
+ var DatePicker = Object.assign(DatePickerRoot, {
933
+ RangePicker,
934
+ WeekPicker: withPicker("week", "DatePicker.WeekPicker"),
935
+ MonthPicker: withPicker("month", "DatePicker.MonthPicker"),
936
+ QuarterPicker: withPicker("quarter", "DatePicker.QuarterPicker"),
937
+ YearPicker: withPicker("year", "DatePicker.YearPicker")
938
+ });
896
939
  // src/components/input/Input.tsx
897
940
  import {
898
941
  forwardRef as forwardRef4,
@@ -1542,31 +1585,6 @@ SelectRoot.displayName = "Select";
1542
1585
  var Select = SelectRoot;
1543
1586
  Select.Option = Option;
1544
1587
  Select.OptGroup = OptGroup;
1545
- // src/components/dm-search/DmSearch.tsx
1546
- import {
1547
- forwardRef as forwardRef6,
1548
- useEffect as useEffect2,
1549
- useImperativeHandle as useImperativeHandle2,
1550
- useMemo as useMemo5,
1551
- useState as useState6
1552
- } from "react";
1553
-
1554
- // src/classes/dm-search.ts
1555
- var dmSearchBaseClass = "dm-search";
1556
- var dmSearchCompactClass = "dm-search-compact";
1557
- var dmSearchCollapsedClass = "dm-search-collapsed";
1558
- var dmSearchFieldsClass = "dm-search-fields";
1559
- var dmSearchFieldClass = "dm-search-field";
1560
- var dmSearchActionsClass = "dm-search-actions";
1561
- var dmSearchFastFilterClass = "dm-search-fast-filter";
1562
- function getDmSearchClasses({
1563
- compact,
1564
- collapsed,
1565
- className
1566
- }) {
1567
- return cn(dmSearchBaseClass, compact && dmSearchCompactClass, collapsed && dmSearchCollapsedClass, className);
1568
- }
1569
-
1570
1588
  // src/components/dm-search/DmSearch.tsx
1571
1589
  import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
1572
1590
  function initialValues(items, searchParams, useSearchParams = true) {
@@ -1833,8 +1851,8 @@ function getRecordKey(record, index, rowKey) {
1833
1851
  return rowKey(record, index);
1834
1852
  }
1835
1853
  if (rowKey) {
1836
- const key2 = record[rowKey];
1837
- return typeof key2 === "string" || typeof key2 === "number" ? key2 : index;
1854
+ const key = record[rowKey];
1855
+ return typeof key === "string" || typeof key === "number" ? key : index;
1838
1856
  }
1839
1857
  const key = record.key;
1840
1858
  return typeof key === "string" || typeof key === "number" ? key : index;
@@ -2437,24 +2455,6 @@ var Table = Object.assign(TableWithRef, {
2437
2455
  EXPAND_COLUMN: "EXPAND_COLUMN"
2438
2456
  });
2439
2457
  Table.displayName = "Table";
2440
- // src/components/dm-table/DmTable.tsx
2441
- import { useMemo as useMemo7, useState as useState8 } from "react";
2442
-
2443
- // src/classes/dm-table.ts
2444
- var dmTableBaseClass = "dm-table";
2445
- var dmTableSearchClass = "dm-table-search";
2446
- var dmTableCardClass = "dm-table-card";
2447
- var dmTableHeaderClass = "dm-table-header";
2448
- var dmTableTitleClass = "dm-table-title";
2449
- var dmTableExtraClass = "dm-table-extra";
2450
- var dmTableIndicatorsClass = "dm-table-indicators";
2451
- var dmTableTableExtraClass = "dm-table-table-extra";
2452
- var dmTableColumnSettingClass = "dm-table-column-setting";
2453
- var dmTablePaginationClass = "dm-table-pagination";
2454
- function getDmTableClasses({ className }) {
2455
- return cn(dmTableBaseClass, className);
2456
- }
2457
-
2458
2458
  // src/components/dm-table/DmTable.tsx
2459
2459
  import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
2460
2460
  function mapAndFilter(list, mapper) {
@@ -2607,6 +2607,6 @@ function DmTable({
2607
2607
  }
2608
2608
  DmTable.displayName = "DmTable";
2609
2609
  export {
2610
- filterDmTableColumn,
2611
- DmTable
2610
+ DmTable,
2611
+ filterDmTableColumn
2612
2612
  };