@bizapps/ui 1.4.0 → 1.4.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/main.d.cts CHANGED
@@ -663,8 +663,12 @@ interface DatePickerSingleProps {
663
663
  placeholder?: string;
664
664
  disabled?: boolean;
665
665
  className?: string;
666
+ /** Earliest selectable date. Earlier days are disabled and unreachable. */
666
667
  fromDate?: Date;
668
+ /** Latest selectable date. Later days are disabled and unreachable. */
667
669
  toDate?: Date;
670
+ /** Months rendered side by side. Defaults to 1. */
671
+ numberOfMonths?: number;
668
672
  }
669
673
  interface DatePickerRangeProps {
670
674
  mode: 'range';
@@ -673,8 +677,12 @@ interface DatePickerRangeProps {
673
677
  placeholder?: string;
674
678
  disabled?: boolean;
675
679
  className?: string;
680
+ /** Earliest selectable date. Earlier days are disabled and unreachable. */
676
681
  fromDate?: Date;
682
+ /** Latest selectable date. Later days are disabled and unreachable. */
677
683
  toDate?: Date;
684
+ /** Months rendered side by side. Defaults to 1. */
685
+ numberOfMonths?: number;
678
686
  }
679
687
  interface DatePickerProps {
680
688
  mode?: 'single' | 'range';
@@ -683,10 +691,14 @@ interface DatePickerProps {
683
691
  placeholder?: string;
684
692
  disabled?: boolean;
685
693
  className?: string;
694
+ /** Earliest selectable date. Earlier days are disabled and unreachable. */
686
695
  fromDate?: Date;
696
+ /** Latest selectable date. Later days are disabled and unreachable. */
687
697
  toDate?: Date;
698
+ /** Months rendered side by side. Defaults to 1. */
699
+ numberOfMonths?: number;
688
700
  }
689
- declare function DatePicker({ mode, selected, onSelect, placeholder, disabled, className, fromDate, toDate, }: DatePickerProps): react.JSX.Element;
701
+ declare function DatePicker({ mode, selected, onSelect, placeholder, disabled, className, fromDate, toDate, numberOfMonths, }: DatePickerProps): react.JSX.Element;
690
702
 
691
703
  interface NavbarDropdownItem {
692
704
  href: string;
package/dist/main.d.ts CHANGED
@@ -663,8 +663,12 @@ interface DatePickerSingleProps {
663
663
  placeholder?: string;
664
664
  disabled?: boolean;
665
665
  className?: string;
666
+ /** Earliest selectable date. Earlier days are disabled and unreachable. */
666
667
  fromDate?: Date;
668
+ /** Latest selectable date. Later days are disabled and unreachable. */
667
669
  toDate?: Date;
670
+ /** Months rendered side by side. Defaults to 1. */
671
+ numberOfMonths?: number;
668
672
  }
669
673
  interface DatePickerRangeProps {
670
674
  mode: 'range';
@@ -673,8 +677,12 @@ interface DatePickerRangeProps {
673
677
  placeholder?: string;
674
678
  disabled?: boolean;
675
679
  className?: string;
680
+ /** Earliest selectable date. Earlier days are disabled and unreachable. */
676
681
  fromDate?: Date;
682
+ /** Latest selectable date. Later days are disabled and unreachable. */
677
683
  toDate?: Date;
684
+ /** Months rendered side by side. Defaults to 1. */
685
+ numberOfMonths?: number;
678
686
  }
679
687
  interface DatePickerProps {
680
688
  mode?: 'single' | 'range';
@@ -683,10 +691,14 @@ interface DatePickerProps {
683
691
  placeholder?: string;
684
692
  disabled?: boolean;
685
693
  className?: string;
694
+ /** Earliest selectable date. Earlier days are disabled and unreachable. */
686
695
  fromDate?: Date;
696
+ /** Latest selectable date. Later days are disabled and unreachable. */
687
697
  toDate?: Date;
698
+ /** Months rendered side by side. Defaults to 1. */
699
+ numberOfMonths?: number;
688
700
  }
689
- declare function DatePicker({ mode, selected, onSelect, placeholder, disabled, className, fromDate, toDate, }: DatePickerProps): react.JSX.Element;
701
+ declare function DatePicker({ mode, selected, onSelect, placeholder, disabled, className, fromDate, toDate, numberOfMonths, }: DatePickerProps): react.JSX.Element;
690
702
 
691
703
  interface NavbarDropdownItem {
692
704
  href: string;
package/dist/main.js CHANGED
@@ -4542,22 +4542,52 @@ function DatePicker({
4542
4542
  disabled = false,
4543
4543
  className,
4544
4544
  fromDate,
4545
- toDate
4545
+ toDate,
4546
+ numberOfMonths = 1
4546
4547
  }) {
4547
4548
  const [open, setOpen] = useState(false);
4549
+ const [awaitingRangeEnd, setAwaitingRangeEnd] = useState(false);
4548
4550
  const label = useMemo(() => {
4549
4551
  if (mode === "range") {
4550
4552
  const range = selected;
4551
- if (range?.from && range?.to)
4552
- return `${format(range.from, "MMM d, yyyy")} \u2013 ${format(range.to, "MMM d, yyyy")}`;
4553
- if (range?.from) return `${format(range.from, "MMM d, yyyy")} \u2013 \u2026`;
4554
- return placeholder;
4553
+ if (!range?.from) return placeholder;
4554
+ if (!range.to) return `${format(range.from, "MMM d, yyyy")} \u2013 \u2026`;
4555
+ return `${format(range.from, "MMM d, yyyy")} \u2013 ${format(range.to, "MMM d, yyyy")}`;
4555
4556
  }
4556
4557
  const date = selected;
4557
4558
  return date ? format(date, "MMM d, yyyy") : placeholder;
4558
4559
  }, [mode, selected, placeholder]);
4560
+ const handleOpenChange = (nextOpen) => {
4561
+ setOpen(nextOpen);
4562
+ if (!nextOpen) setAwaitingRangeEnd(false);
4563
+ };
4564
+ const handleRangeSelect = (range, triggerDate) => {
4565
+ const emit = onSelect;
4566
+ if (!awaitingRangeEnd) {
4567
+ setAwaitingRangeEnd(true);
4568
+ emit?.({ from: triggerDate, to: void 0 });
4569
+ return;
4570
+ }
4571
+ emit?.(range);
4572
+ if (!range?.from || !range.to) {
4573
+ setAwaitingRangeEnd(!!range?.from);
4574
+ return;
4575
+ }
4576
+ setAwaitingRangeEnd(false);
4577
+ setOpen(false);
4578
+ };
4579
+ const dateConstraints = useMemo(() => {
4580
+ const disabledMatchers = [];
4581
+ if (fromDate) disabledMatchers.push({ before: fromDate });
4582
+ if (toDate) disabledMatchers.push({ after: toDate });
4583
+ return {
4584
+ ...disabledMatchers.length > 0 && { disabled: disabledMatchers },
4585
+ ...fromDate && { startMonth: fromDate },
4586
+ ...toDate && { endMonth: toDate }
4587
+ };
4588
+ }, [fromDate, toDate]);
4559
4589
  const hasValue = mode === "range" ? !!selected?.from : !!selected;
4560
- return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
4590
+ return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: handleOpenChange, children: [
4561
4591
  /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
4562
4592
  Button,
4563
4593
  {
@@ -4581,14 +4611,10 @@ function DatePicker({
4581
4611
  ...{
4582
4612
  mode: "range",
4583
4613
  selected,
4584
- onSelect: (range) => {
4585
- onSelect?.(range);
4586
- if (range?.to) setOpen(false);
4587
- },
4588
- fromDate,
4589
- toDate,
4590
- numberOfMonths: 2,
4591
- initialFocus: true
4614
+ onSelect: handleRangeSelect,
4615
+ ...dateConstraints,
4616
+ numberOfMonths,
4617
+ autoFocus: true
4592
4618
  }
4593
4619
  }
4594
4620
  ) : /* @__PURE__ */ jsx(
@@ -4601,9 +4627,9 @@ function DatePicker({
4601
4627
  onSelect?.(date);
4602
4628
  setOpen(false);
4603
4629
  },
4604
- fromDate,
4605
- toDate,
4606
- initialFocus: true
4630
+ ...dateConstraints,
4631
+ numberOfMonths,
4632
+ autoFocus: true
4607
4633
  }
4608
4634
  }
4609
4635
  ) })