@moving-walls/design-system 1.0.24 → 2.0.1

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.js CHANGED
@@ -36496,8 +36496,9 @@ function DateRangePicker(_ref3) {
36496
36496
  var _ref3$clearable = _ref3.clearable,
36497
36497
  clearable = _ref3$clearable === void 0 ? true : _ref3$clearable,
36498
36498
  minDate = _ref3.minDate,
36499
- maxDate = _ref3.maxDate,
36500
- _ref3$numberOfMonths = _ref3.numberOfMonths,
36499
+ maxDate = _ref3.maxDate;
36500
+ _ref3.selectsRange;
36501
+ var _ref3$numberOfMonths = _ref3.numberOfMonths,
36501
36502
  numberOfMonths = _ref3$numberOfMonths === void 0 ? 1 : _ref3$numberOfMonths,
36502
36503
  className = _ref3.className,
36503
36504
  _ref3$format = _ref3.format,
@@ -36505,7 +36506,15 @@ function DateRangePicker(_ref3) {
36505
36506
  _ref3$presets = _ref3.presets,
36506
36507
  presets = _ref3$presets === void 0 ? defaultPresets$1 : _ref3$presets,
36507
36508
  _ref3$align = _ref3.align,
36508
- align = _ref3$align === void 0 ? 'left' : _ref3$align;
36509
+ align = _ref3$align === void 0 ? 'left' : _ref3$align,
36510
+ _ref3$enableApplyButt = _ref3.enableApplyButton,
36511
+ enableApplyButton = _ref3$enableApplyButt === void 0 ? false : _ref3$enableApplyButt,
36512
+ _ref3$applyButtonText = _ref3.applyButtonText,
36513
+ applyButtonText = _ref3$applyButtonText === void 0 ? 'Apply' : _ref3$applyButtonText,
36514
+ _ref3$enableCancelBut = _ref3.enableCancelButton,
36515
+ enableCancelButton = _ref3$enableCancelBut === void 0 ? true : _ref3$enableCancelBut,
36516
+ _ref3$cancelButtonTex = _ref3.cancelButtonText,
36517
+ cancelButtonText = _ref3$cancelButtonTex === void 0 ? 'Cancel' : _ref3$cancelButtonTex;
36509
36518
  var _useState = React.useState(false),
36510
36519
  _useState2 = _slicedToArray(_useState, 2),
36511
36520
  isOpen = _useState2[0],
@@ -36517,71 +36526,111 @@ function DateRangePicker(_ref3) {
36517
36526
  _useState4 = _slicedToArray(_useState3, 2),
36518
36527
  selectedRange = _useState4[0],
36519
36528
  setSelectedRange = _useState4[1];
36520
- var _useState5 = React.useState(new Date()),
36529
+ var _useState5 = React.useState(value || {
36530
+ from: null,
36531
+ to: null
36532
+ }),
36521
36533
  _useState6 = _slicedToArray(_useState5, 2),
36522
- currentMonth = _useState6[0],
36523
- setCurrentMonth = _useState6[1];
36524
- var _useState7 = React.useState(true),
36534
+ pendingRange = _useState6[0],
36535
+ setPendingRange = _useState6[1];
36536
+ var _useState7 = React.useState(new Date()),
36525
36537
  _useState8 = _slicedToArray(_useState7, 2),
36526
- selectingStart = _useState8[0],
36527
- setSelectingStart = _useState8[1];
36538
+ currentMonth = _useState8[0],
36539
+ setCurrentMonth = _useState8[1];
36540
+ var _useState9 = React.useState(true),
36541
+ _useState0 = _slicedToArray(_useState9, 2),
36542
+ selectingStart = _useState0[0],
36543
+ setSelectingStart = _useState0[1];
36528
36544
  var containerRef = React.useRef(null);
36529
36545
  React.useEffect(function () {
36530
36546
  if (value) {
36531
36547
  setSelectedRange(value);
36548
+ setPendingRange(value);
36532
36549
  }
36533
36550
  }, [value]);
36534
36551
  React.useEffect(function () {
36535
36552
  function handleClickOutside(event) {
36536
36553
  if (containerRef.current && !containerRef.current.contains(event.target)) {
36537
36554
  setIsOpen(false);
36555
+ // Reset pending to selected when closing without apply
36556
+ setPendingRange(selectedRange);
36538
36557
  }
36539
36558
  }
36540
36559
  document.addEventListener('mousedown', handleClickOutside);
36541
36560
  return function () {
36542
36561
  return document.removeEventListener('mousedown', handleClickOutside);
36543
36562
  };
36544
- }, []);
36563
+ }, [selectedRange]);
36545
36564
  var handleDateSelect = function handleDateSelect(date) {
36546
36565
  var newRange;
36547
- if (selectingStart || !selectedRange.from) {
36566
+ if (selectingStart || !pendingRange.from) {
36548
36567
  newRange = {
36549
36568
  from: date,
36550
36569
  to: null
36551
36570
  };
36552
36571
  setSelectingStart(false);
36553
36572
  } else {
36554
- if (date < selectedRange.from) {
36573
+ if (date < pendingRange.from) {
36555
36574
  newRange = {
36556
36575
  from: date,
36557
- to: selectedRange.from
36576
+ to: null
36558
36577
  };
36559
- } else {
36578
+ } else if (date > pendingRange.from) {
36560
36579
  newRange = {
36561
- from: selectedRange.from,
36580
+ from: pendingRange.from,
36562
36581
  to: date
36563
36582
  };
36583
+ setSelectingStart(true);
36584
+ } else {
36585
+ newRange = {
36586
+ from: date,
36587
+ to: null
36588
+ };
36564
36589
  }
36565
- setSelectingStart(true);
36566
36590
  }
36567
- setSelectedRange(newRange);
36568
- onChange === null || onChange === void 0 ? void 0 : onChange(newRange);
36569
- if (newRange.from && newRange.to) {
36591
+ // Update pending range, don't call onChange yet
36592
+ setPendingRange(newRange);
36593
+ // Without Apply button, fire onChange immediately when full range selected
36594
+ if (!enableApplyButton && newRange.from && newRange.to) {
36595
+ setSelectedRange(newRange);
36596
+ onChange === null || onChange === void 0 ? void 0 : onChange(newRange);
36570
36597
  setIsOpen(false);
36571
36598
  }
36572
36599
  };
36573
- var handlePresetSelect = function handlePresetSelect(preset) {
36574
- setSelectedRange(preset.range);
36575
- onChange === null || onChange === void 0 ? void 0 : onChange(preset.range);
36600
+ var handleApply = function handleApply() {
36601
+ // Apply pending range and call onChange
36602
+ setSelectedRange(pendingRange);
36603
+ onChange === null || onChange === void 0 ? void 0 : onChange(pendingRange);
36576
36604
  setIsOpen(false);
36577
36605
  };
36606
+ var handleCancel = function handleCancel() {
36607
+ // Cancel: restore original selection, don't call onChange
36608
+ setPendingRange(selectedRange);
36609
+ setIsOpen(false);
36610
+ };
36611
+ var handlePresetSelect = function handlePresetSelect(preset) {
36612
+ setPendingRange(preset.range);
36613
+ // Navigate calendar to show the start month of the preset range
36614
+ if (preset.range.from) {
36615
+ setCurrentMonth(new Date(preset.range.from.getFullYear(), preset.range.from.getMonth(), 1));
36616
+ }
36617
+ setSelectingStart(true);
36618
+ // If Apply button is enabled, keep calendar open so user can confirm
36619
+ if (!enableApplyButton) {
36620
+ setSelectedRange(preset.range);
36621
+ onChange === null || onChange === void 0 ? void 0 : onChange(preset.range);
36622
+ setIsOpen(false);
36623
+ }
36624
+ };
36578
36625
  var handleClear = function handleClear() {
36579
36626
  var clearedRange = {
36580
36627
  from: null,
36581
36628
  to: null
36582
36629
  };
36583
36630
  setSelectedRange(clearedRange);
36631
+ setPendingRange(clearedRange);
36584
36632
  onChange === null || onChange === void 0 ? void 0 : onChange(clearedRange);
36633
+ setIsOpen(false);
36585
36634
  };
36586
36635
  var formatDisplayValue = function formatDisplayValue() {
36587
36636
  if (!selectedRange.from && !selectedRange.to) return placeholder;
@@ -36597,19 +36646,31 @@ function DateRangePicker(_ref3) {
36597
36646
  return require$$1.jsxs("div", {
36598
36647
  ref: containerRef,
36599
36648
  className: cn$p('relative', className),
36600
- children: [require$$1.jsxs("button", {
36601
- type: "button",
36649
+ children: [require$$1.jsxs("div", {
36650
+ role: "button",
36651
+ tabIndex: disabled ? -1 : 0,
36602
36652
  onClick: function onClick() {
36603
- return !disabled && setIsOpen(!isOpen);
36653
+ if (!disabled) {
36654
+ if (!isOpen) setPendingRange(selectedRange);
36655
+ setIsOpen(!isOpen);
36656
+ setSelectingStart(true);
36657
+ }
36604
36658
  },
36605
- disabled: disabled,
36606
- className: cn$p('w-full flex items-center justify-between px-3 py-2 text-left', 'border border-mw-neutral-200 dark:border-mw-neutral-600 rounded-md', 'bg-white dark:bg-mw-neutral-800', 'text-mw-neutral-800 dark:text-white', 'hover:border-mw-neutral-300 dark:hover:border-mw-neutral-500', 'focus:outline-none focus:ring-2 focus:ring-mw-primary-500 focus:border-transparent', disabled && 'opacity-50 cursor-not-allowed', !selectedRange.from && !selectedRange.to && 'text-mw-neutral-500 dark:text-mw-neutral-400'),
36659
+ onKeyDown: function onKeyDown(e) {
36660
+ if (!disabled && (e.key === 'Enter' || e.key === ' ')) {
36661
+ if (!isOpen) setPendingRange(selectedRange);
36662
+ setIsOpen(!isOpen);
36663
+ setSelectingStart(true);
36664
+ }
36665
+ },
36666
+ className: cn$p('w-full flex items-center justify-between px-3 py-2 text-left cursor-pointer', 'border border-mw-neutral-200 dark:border-mw-neutral-600 rounded-md', 'bg-white dark:bg-mw-neutral-800', 'text-mw-neutral-800 dark:text-white', 'hover:border-mw-neutral-300 dark:hover:border-mw-neutral-500', 'focus:outline-none focus:ring-2 focus:ring-mw-primary-500 focus:border-transparent', disabled && 'opacity-50 cursor-not-allowed pointer-events-none', !selectedRange.from && !selectedRange.to && 'text-mw-neutral-500 dark:text-mw-neutral-400'),
36607
36667
  children: [require$$1.jsx("span", {
36608
36668
  className: "truncate",
36609
36669
  children: formatDisplayValue()
36610
36670
  }), require$$1.jsxs("div", {
36611
36671
  className: "flex items-center gap-1 ml-2",
36612
36672
  children: [clearable && (selectedRange.from || selectedRange.to) && require$$1.jsx("button", {
36673
+ type: "button",
36613
36674
  onClick: function onClick(e) {
36614
36675
  e.stopPropagation();
36615
36676
  handleClear();
@@ -36635,6 +36696,7 @@ function DateRangePicker(_ref3) {
36635
36696
  className: "space-y-0.5",
36636
36697
  children: presets.map(function (preset, index) {
36637
36698
  return require$$1.jsx("button", {
36699
+ type: "button",
36638
36700
  onClick: function onClick() {
36639
36701
  return handlePresetSelect(preset);
36640
36702
  },
@@ -36647,7 +36709,7 @@ function DateRangePicker(_ref3) {
36647
36709
  className: "flex",
36648
36710
  children: [require$$1.jsx(CalendarMonth, {
36649
36711
  currentMonth: currentMonth,
36650
- selectedRange: selectedRange,
36712
+ selectedRange: pendingRange,
36651
36713
  onDateSelect: handleDateSelect,
36652
36714
  onMonthChange: setCurrentMonth,
36653
36715
  minDate: minDate,
@@ -36655,7 +36717,7 @@ function DateRangePicker(_ref3) {
36655
36717
  selectingStart: selectingStart
36656
36718
  }), numberOfMonths === 2 && require$$1.jsx(CalendarMonth, {
36657
36719
  currentMonth: new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1),
36658
- selectedRange: selectedRange,
36720
+ selectedRange: pendingRange,
36659
36721
  onDateSelect: handleDateSelect,
36660
36722
  onMonthChange: function onMonthChange(month) {
36661
36723
  var prevMonth = new Date(month);
@@ -36674,19 +36736,17 @@ function DateRangePicker(_ref3) {
36674
36736
  children: selectingStart ? 'Select start date' : 'Select end date'
36675
36737
  }), require$$1.jsxs("div", {
36676
36738
  className: "flex gap-2 items-center",
36677
- children: [require$$1.jsx("button", {
36678
- onClick: function onClick() {
36679
- return setIsOpen(false);
36680
- },
36681
- className: "px-2.5 py-1 text-xs text-mw-neutral-600 dark:text-mw-neutral-400 hover:text-mw-neutral-900 dark:hover:text-white",
36682
- children: "Cancel"
36683
- }), require$$1.jsx("button", {
36684
- onClick: function onClick() {
36685
- return setIsOpen(false);
36686
- },
36687
- disabled: !selectedRange.from,
36688
- className: "px-3 py-1 text-xs bg-mw-primary-500 text-white rounded hover:bg-mw-primary-600 disabled:opacity-50 disabled:cursor-not-allowed",
36689
- children: "Apply"
36739
+ children: [enableCancelButton && require$$1.jsx("button", {
36740
+ type: "button",
36741
+ onClick: handleCancel,
36742
+ className: "px-3 py-1.5 text-xs text-mw-neutral-600 dark:text-mw-neutral-400 hover:text-mw-neutral-900 dark:hover:text-white border border-mw-neutral-200 dark:border-mw-neutral-600 rounded",
36743
+ children: cancelButtonText
36744
+ }), enableApplyButton && require$$1.jsx("button", {
36745
+ type: "button",
36746
+ onClick: handleApply,
36747
+ disabled: !pendingRange.from || !pendingRange.to,
36748
+ className: "px-3 py-1.5 text-xs bg-mw-primary-500 text-white rounded hover:bg-mw-primary-600 disabled:opacity-50 disabled:cursor-not-allowed",
36749
+ children: applyButtonText
36690
36750
  })]
36691
36751
  })]
36692
36752
  })]