schummar-table 0.40.6 → 0.42.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.
package/dist/index.d.cts CHANGED
@@ -18,11 +18,12 @@ type DatePickerQuickOption = 'today' | 'thisWeek' | 'thisMonth' | 'thisYear' | '
18
18
  label: ReactNode;
19
19
  value: Date | DateRange | (() => Date | DateRange);
20
20
  } | ((onChange: (value: Date | DateRange | null) => void) => ReactNode);
21
+ type DatePickerChangeSource = 'input' | 'calendarWeek' | 'calendar' | 'quickOption';
21
22
  type DatePickerProps = {
22
23
  /** Currently selected day or range of days. */
23
24
  value: Date | DateRange | null;
24
25
  /** Callback for when the day (range) changes. */
25
- onChange: (value: Date | DateRange | null) => void;
26
+ onChange: (value: Date | DateRange | null, source: DatePickerChangeSource) => void;
26
27
  /** Currently visible date. */
27
28
  dateInView?: Date;
28
29
  /** Callback for when the currently visible date changes. */
@@ -39,6 +40,7 @@ type DatePickerProps = {
39
40
  defaultDateInView?: Date;
40
41
  /** Show buttons to quickly select suggested dates or date ranges */
41
42
  quickOptions?: DatePickerQuickOption[];
43
+ noReset?: boolean;
42
44
  /** Minimum selectable date */
43
45
  /** Date ranges that are visually marked as blocked */
44
46
  blockedRanges?: DateRange[];
@@ -216,4 +218,4 @@ declare const termMatch: (text: string, query: string) => boolean;
216
218
  declare function configureTableTheme(tableTheme: PartialTableTheme): void;
217
219
  declare function mergeThemes<T>(...themes: PartialTableTheme<T>[]): PartialTableTheme<T>;
218
220
 
219
- export { AutoFocusTextField, ColumnContext, CommonFilterProps, DateFilter, DatePicker, type DatePickerProps, DatePickerProvider, type DatePickerQuickOption, type DateRange, FilterImplementation, Id, PartialTableTheme, RangeFilter, SelectFilter, Table, TableContext, TableProps, TableResetContext, TableSettingsContext, TableSettingsProvider, TextFilter, commonQuickOptions, configureTableTheme, dateClamp, dateIntersect, endOfDay, getCalendarWeek, helpers, lastDays, mergeThemes, startOfDay, termMatch, textMatch, thisMonth, thisWeek, thisYear, today, useColumnContext, useFilter, useTableContext, useTheme };
221
+ export { AutoFocusTextField, ColumnContext, CommonFilterProps, DateFilter, DatePicker, type DatePickerChangeSource, type DatePickerProps, DatePickerProvider, type DatePickerQuickOption, type DateRange, FilterImplementation, Id, PartialTableTheme, RangeFilter, SelectFilter, Table, TableContext, TableProps, TableResetContext, TableSettingsContext, TableSettingsProvider, TextFilter, commonQuickOptions, configureTableTheme, dateClamp, dateIntersect, endOfDay, getCalendarWeek, helpers, lastDays, mergeThemes, startOfDay, termMatch, textMatch, thisMonth, thisWeek, thisYear, today, useColumnContext, useFilter, useTableContext, useTheme };
package/dist/index.d.ts CHANGED
@@ -18,11 +18,12 @@ type DatePickerQuickOption = 'today' | 'thisWeek' | 'thisMonth' | 'thisYear' | '
18
18
  label: ReactNode;
19
19
  value: Date | DateRange | (() => Date | DateRange);
20
20
  } | ((onChange: (value: Date | DateRange | null) => void) => ReactNode);
21
+ type DatePickerChangeSource = 'input' | 'calendarWeek' | 'calendar' | 'quickOption';
21
22
  type DatePickerProps = {
22
23
  /** Currently selected day or range of days. */
23
24
  value: Date | DateRange | null;
24
25
  /** Callback for when the day (range) changes. */
25
- onChange: (value: Date | DateRange | null) => void;
26
+ onChange: (value: Date | DateRange | null, source: DatePickerChangeSource) => void;
26
27
  /** Currently visible date. */
27
28
  dateInView?: Date;
28
29
  /** Callback for when the currently visible date changes. */
@@ -39,6 +40,7 @@ type DatePickerProps = {
39
40
  defaultDateInView?: Date;
40
41
  /** Show buttons to quickly select suggested dates or date ranges */
41
42
  quickOptions?: DatePickerQuickOption[];
43
+ noReset?: boolean;
42
44
  /** Minimum selectable date */
43
45
  /** Date ranges that are visually marked as blocked */
44
46
  blockedRanges?: DateRange[];
@@ -216,4 +218,4 @@ declare const termMatch: (text: string, query: string) => boolean;
216
218
  declare function configureTableTheme(tableTheme: PartialTableTheme): void;
217
219
  declare function mergeThemes<T>(...themes: PartialTableTheme<T>[]): PartialTableTheme<T>;
218
220
 
219
- export { AutoFocusTextField, ColumnContext, CommonFilterProps, DateFilter, DatePicker, type DatePickerProps, DatePickerProvider, type DatePickerQuickOption, type DateRange, FilterImplementation, Id, PartialTableTheme, RangeFilter, SelectFilter, Table, TableContext, TableProps, TableResetContext, TableSettingsContext, TableSettingsProvider, TextFilter, commonQuickOptions, configureTableTheme, dateClamp, dateIntersect, endOfDay, getCalendarWeek, helpers, lastDays, mergeThemes, startOfDay, termMatch, textMatch, thisMonth, thisWeek, thisYear, today, useColumnContext, useFilter, useTableContext, useTheme };
221
+ export { AutoFocusTextField, ColumnContext, CommonFilterProps, DateFilter, DatePicker, type DatePickerChangeSource, type DatePickerProps, DatePickerProvider, type DatePickerQuickOption, type DateRange, FilterImplementation, Id, PartialTableTheme, RangeFilter, SelectFilter, Table, TableContext, TableProps, TableResetContext, TableSettingsContext, TableSettingsProvider, TextFilter, commonQuickOptions, configureTableTheme, dateClamp, dateIntersect, endOfDay, getCalendarWeek, helpers, lastDays, mergeThemes, startOfDay, termMatch, textMatch, thisMonth, thisWeek, thisYear, today, useColumnContext, useFilter, useTableContext, useTheme };
package/dist/index.js CHANGED
@@ -1290,12 +1290,13 @@ function DatePicker(props) {
1290
1290
  firstDayOfWeek = 1,
1291
1291
  defaultDateInView,
1292
1292
  quickOptions = ["today", "thisWeek"],
1293
+ noReset,
1293
1294
  minDate,
1294
1295
  maxDate,
1295
1296
  showCalendarWeek,
1296
1297
  blockedRanges = []
1297
1298
  } = defaults(props, context);
1298
- function onChange(value2) {
1299
+ function onChange(value2, source) {
1299
1300
  if (value2 instanceof Date) {
1300
1301
  value2 = dateClamp(value2, minDate, maxDate);
1301
1302
  } else if (value2) {
@@ -1304,7 +1305,7 @@ function DatePicker(props) {
1304
1305
  max: dateClamp(value2.max, minDate, maxDate)
1305
1306
  };
1306
1307
  }
1307
- props.onChange(value2);
1308
+ props.onChange(value2, source);
1308
1309
  }
1309
1310
  const Button2 = useTheme((t) => t.components.Button);
1310
1311
  const IconButton2 = useTheme((t) => t.components.IconButton);
@@ -1373,37 +1374,38 @@ function DatePicker(props) {
1373
1374
  }
1374
1375
  const min = dirty ? dirty.min : value instanceof Date ? value : value == null ? void 0 : value.min;
1375
1376
  const max = dirty ? dirty.max : value instanceof Date ? value : value == null ? void 0 : value.max;
1376
- const resolvedQuickOptions = [...quickOptions, { label: /* @__PURE__ */ jsx13(Text, { id: "reset" }), value: null }].map(
1377
- (option, index) => {
1378
- if (option instanceof Function) {
1379
- return option((value3) => {
1377
+ const resolvedQuickOptions = [
1378
+ ...quickOptions,
1379
+ ...noReset ? [] : [{ label: /* @__PURE__ */ jsx13(Text, { id: "reset" }), value: null }]
1380
+ ].map((option, index) => {
1381
+ if (option instanceof Function) {
1382
+ return option((value3) => {
1383
+ setDirty(void 0);
1384
+ onChange(value3, "quickOption");
1385
+ });
1386
+ }
1387
+ const { label, value: value2 } = typeof option === "string" ? commonQuickOptions[option] : option;
1388
+ return /* @__PURE__ */ jsx13(
1389
+ Button2,
1390
+ {
1391
+ variant: "text",
1392
+ type: "button",
1393
+ css: {
1394
+ color: "inherit"
1395
+ },
1396
+ onClick: () => {
1380
1397
  setDirty(void 0);
1381
- onChange(value3);
1382
- });
1383
- }
1384
- const { label, value: value2 } = typeof option === "string" ? commonQuickOptions[option] : option;
1385
- return /* @__PURE__ */ jsx13(
1386
- Button2,
1387
- {
1388
- variant: "text",
1389
- type: "button",
1390
- css: {
1391
- color: "inherit"
1392
- },
1393
- onClick: () => {
1394
- setDirty(void 0);
1395
- if (value2 instanceof Function) {
1396
- onChange(value2(props));
1397
- } else {
1398
- onChange(value2);
1399
- }
1400
- },
1401
- children: label
1398
+ if (value2 instanceof Function) {
1399
+ onChange(value2(props), "quickOption");
1400
+ } else {
1401
+ onChange(value2, "quickOption");
1402
+ }
1402
1403
  },
1403
- index
1404
- );
1405
- }
1406
- );
1404
+ children: label
1405
+ },
1406
+ index
1407
+ );
1408
+ });
1407
1409
  const { calendars, getBackProps, getForwardProps, getDateProps } = useDayzed({
1408
1410
  onDateSelected: () => void 0,
1409
1411
  firstDayOfWeek,
@@ -1430,9 +1432,9 @@ function DatePicker(props) {
1430
1432
  setDirty(void 0);
1431
1433
  }
1432
1434
  }, [rangeSelect]);
1433
- function set(min2, max2, edit) {
1435
+ function set(source, min2, max2, edit) {
1434
1436
  if (!rangeSelect) {
1435
- onChange(min2 != null ? min2 : null);
1437
+ onChange(min2 != null ? min2 : null, source);
1436
1438
  return;
1437
1439
  }
1438
1440
  if (min2 && max2 && min2 > max2) {
@@ -1446,7 +1448,7 @@ function DatePicker(props) {
1446
1448
  }
1447
1449
  if (!min2 === !max2) {
1448
1450
  setDirty(void 0);
1449
- onChange(min2 && max2 ? { min: min2, max: endOfDay(max2) } : null);
1451
+ onChange(min2 && max2 ? { min: min2, max: endOfDay(max2) } : null, source);
1450
1452
  } else {
1451
1453
  setDirty({ min: min2, max: max2 });
1452
1454
  }
@@ -1484,7 +1486,7 @@ function DatePicker(props) {
1484
1486
  DateInput,
1485
1487
  {
1486
1488
  value: min != null ? min : null,
1487
- onChange: (date) => set(date != null ? date : void 0, max, "min"),
1489
+ onChange: (date) => set("input", date != null ? date : void 0, max, "min"),
1488
1490
  locale
1489
1491
  }
1490
1492
  ),
@@ -1494,7 +1496,7 @@ function DatePicker(props) {
1494
1496
  DateInput,
1495
1497
  {
1496
1498
  value: max != null ? max : null,
1497
- onChange: (date) => set(min, date != null ? date : void 0, "max"),
1499
+ onChange: (date) => set("input", min, date != null ? date : void 0, "max"),
1498
1500
  locale
1499
1501
  }
1500
1502
  )
@@ -1579,7 +1581,7 @@ function DatePicker(props) {
1579
1581
  }
1580
1582
  const min2 = minDate && weekStart.date < minDate ? minDate : weekStart.date;
1581
1583
  const max2 = maxDate && weekEnd.date > maxDate ? maxDate : weekEnd.date;
1582
- set(min2, max2);
1584
+ set("calendarWeek", min2, max2);
1583
1585
  },
1584
1586
  onPointerOver: () => !weekDisabled && setHovered({ min: weekStart.date, max: weekEnd.date }),
1585
1587
  onPointerOut: () => !weekDisabled && setHovered(void 0),
@@ -1615,10 +1617,10 @@ function DatePicker(props) {
1615
1617
  }, getDateProps({ dateObj: dateObject })), {
1616
1618
  onClick: () => {
1617
1619
  if (dirty) {
1618
- if (min) set(min, date);
1619
- else set(date, max);
1620
+ if (min) set("calendar", min, date);
1621
+ else set("calendar", date, max);
1620
1622
  } else {
1621
- set(date);
1623
+ set("calendar", date);
1622
1624
  }
1623
1625
  },
1624
1626
  onPointerOver: () => setHovered({ min: date, max: date }),