ml-uikit 1.1.6 → 1.1.7
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/components/ui/date-range-picker.d.ts +3 -0
- package/dist/components/ui/date-range-picker.d.ts.map +1 -1
- package/dist/index.cjs29.js +1 -1
- package/dist/index.cjs29.js.map +1 -1
- package/dist/index.es29.js +190 -186
- package/dist/index.es29.js.map +1 -1
- package/dist/style.css +143 -52
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
+
import { PopoverContent } from '../../components/ui/popover';
|
|
2
3
|
export type DateRangePickerValue = {
|
|
3
4
|
from?: Date;
|
|
4
5
|
to?: Date;
|
|
@@ -9,6 +10,8 @@ export interface DateRangePickerProps extends Omit<React.ButtonHTMLAttributes<HT
|
|
|
9
10
|
onValueChange?: (value: DateRangePickerValue | undefined) => void;
|
|
10
11
|
wrapperClassName?: string;
|
|
11
12
|
popoverClassName?: string;
|
|
13
|
+
popoverSide?: React.ComponentPropsWithoutRef<typeof PopoverContent>["side"];
|
|
14
|
+
popoverAvoidCollisions?: boolean;
|
|
12
15
|
placeholder?: string;
|
|
13
16
|
dateFormat?: string;
|
|
14
17
|
minYear?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-picker.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/date-range-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"date-range-picker.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/date-range-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAe9B,OAAO,EAEL,cAAc,EAEf,MAAM,yBAAyB,CAAA;AAEhC,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,EAAE,CAAC,EAAE,IAAI,CAAA;CACV,CAAA;AAED,MAAM,WAAW,oBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC;IAClG,KAAK,CAAC,EAAE,oBAAoB,CAAA;IAC5B,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,KAAK,IAAI,CAAA;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;IAC3E,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AA6OD,QAAA,MAAM,eAAe,gGAyRpB,CAAA;AAID,OAAO,EAAE,eAAe,EAAE,CAAA"}
|
package/dist/index.cjs29.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ie=require("react"),r=require("date-fns"),w=require("lucide-react"),ce=require("react-day-picker"),b=require("./index.cjs60.js"),U=require("./index.cjs10.js"),z=require("./index.cjs41.js");function de(t){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const c=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(n,s,c.get?c:{enumerable:!0,get:()=>t[s]})}}return n.default=t,Object.freeze(n)}const e=de(ie),fe="dd/MM/yyyy",me="DD/MM/YYYY - DD/MM/YYYY",ue=Array.from({length:12},(t,n)=>new Date(2020,n,1).toLocaleString("default",{month:"long"})),E=(t,n,s)=>r.isBefore(t,n)?n:r.isAfter(t,s)?s:t,N=t=>{if(!(!t?.from&&!t?.to))return t.from&&t.to&&r.isAfter(t.from,t.to)?{from:t.to,to:t.from}:{from:t.from,to:t.to}},C=(t,n)=>{if(t)return r.format(t,n)},be=(t,n)=>{const s=C(t?.from,n),c=C(t?.to,n);return!s||!c?"":`${s} - ${c}`},pe=(t,n)=>{const s=C(t?.from,n)??"DD/MM/YYYY",c=C(t?.to,n)??"DD/MM/YYYY";return`${s} - ${c}`};function I({label:t,month:n,minMonth:s,maxMonth:c,minDate:S,maxDate:k,selectedDate:O,disabledMatcher:v,disabled:h,years:M,onMonthChange:u,onSelectDate:y}){const x=()=>{u(r.addMonths(n,-1))},Y=()=>{u(r.addMonths(n,1))},P=h||!r.isAfter(n,s),m=h||!r.isBefore(n,c);return e.createElement("div",{className:"w-full min-w-0"},e.createElement("div",{className:"flex flex-wrap items-center gap-2 sm:flex-nowrap"},e.createElement("button",{type:"button",onClick:x,disabled:P,className:b.cn("inline-flex h-8 w-8 items-center justify-center rounded-md text-[#6e6d71] transition-colors lg:h-9 lg:w-9","hover:bg-[#f5f5f5] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d1c20]/20","disabled:cursor-not-allowed disabled:opacity-40"),"aria-label":`Previous month for ${t.toLowerCase()}`},e.createElement(w.ChevronLeft,{className:"h-4 w-4 lg:h-5 lg:w-5"})),e.createElement("div",{className:"relative min-w-0 flex-1"},e.createElement("select",{value:n.getMonth(),onChange:a=>{const i=Number(a.target.value);u(r.setMonth(n,i))},disabled:h,className:b.cn("h-9 w-full appearance-none rounded-md border border-[#b7b7b9] bg-white px-3 pr-8 text-left text-sm font-medium leading-5 text-[#111111] lg:h-10 lg:px-4 lg:pr-10","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d1c20]/20","disabled:cursor-not-allowed disabled:bg-[#f2f2f2] disabled:text-[#b3b3b3]"),"aria-label":`Month for ${t.toLowerCase()}`},ue.map((a,i)=>e.createElement("option",{key:a,value:i},a))),e.createElement(w.ChevronDown,{className:"pointer-events-none absolute right-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-[#7f7d83] lg:right-3"})),e.createElement("div",{className:"relative w-[104px] shrink-0 sm:w-[120px]"},e.createElement("select",{value:n.getFullYear(),onChange:a=>{const i=Number(a.target.value);u(r.setYear(n,i))},disabled:h,className:b.cn("h-9 w-full appearance-none rounded-md border border-[#b7b7b9] bg-white px-3 pr-8 text-left text-sm font-medium leading-5 text-[#111111] lg:h-10 lg:px-4 lg:pr-9","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d1c20]/20","disabled:cursor-not-allowed disabled:bg-[#f2f2f2] disabled:text-[#b3b3b3]"),"aria-label":`Year for ${t.toLowerCase()}`},M.map(a=>e.createElement("option",{key:a,value:a},a))),e.createElement(w.ChevronDown,{className:"pointer-events-none absolute right-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-[#7f7d83] lg:right-3"})),e.createElement("button",{type:"button",onClick:Y,disabled:m,className:b.cn("inline-flex h-8 w-8 items-center justify-center rounded-md text-[#6e6d71] transition-colors lg:h-9 lg:w-9","hover:bg-[#f5f5f5] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d1c20]/20","disabled:cursor-not-allowed disabled:opacity-40"),"aria-label":`Next month for ${t.toLowerCase()}`},e.createElement(w.ChevronRight,{className:"h-4 w-4 lg:h-5 lg:w-5"}))),e.createElement("p",{className:"mt-1.5 text-center text-sm font-medium leading-5 text-[#666666] lg:mt-2"},t),e.createElement(ce.DayPicker,{mode:"single",month:n,onMonthChange:u,selected:O,onSelect:y,showOutsideDays:!0,fixedWeeks:!0,hideNavigation:!0,disabled:[{before:S},{after:k},...v?[v]:[]],className:"mt-1 p-0 [--drp-cell-size:1.625rem] md:[--drp-cell-size:1.875rem] xl:[--drp-cell-size:2.125rem]",classNames:{root:"w-full",months:"w-full",month:"w-full",month_caption:"hidden",month_grid:"w-full border-collapse",weekdays:"grid grid-cols-7",weekday:"h-[calc(var(--drp-cell-size)-0.25rem)] text-center text-[11px] font-medium leading-4 text-[#666666] lg:text-xs",weeks:"grid gap-0",week:"grid grid-cols-7",day:"flex h-[var(--drp-cell-size)] w-full items-center justify-center p-0",day_button:"h-[--drp-cell-size] w-[--drp-cell-size] rounded-md border border-transparent bg-transparent p-0 text-[13px] font-normal leading-none text-[#444444] transition-colors hover:border-[#cccccc] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#2bbd8f]/25 lg:text-sm",selected:"[&>button]:border-[#2bbd8f] [&>button]:bg-[#2bbd8f] [&>button]:text-[#111111]",today:"font-medium",outside:"text-[#a4a4a8]",disabled:"pointer-events-none text-[#d3d3d6]",hidden:"invisible"}}))}const W=e.forwardRef(({value:t,defaultValue:n,onValueChange:s,wrapperClassName:c,popoverClassName:S,popoverSide:k="bottom",popoverAvoidCollisions:O=!0,className:v,placeholder:h=me,dateFormat:M=fe,minYear:u=2e3,maxYear:y=2100,disabled:x,...Y},P)=>{const m=Math.min(u,y),a=Math.max(u,y),i=e.useMemo(()=>r.startOfMonth(new Date(m,0,1)),[m]),p=e.useMemo(()=>r.startOfMonth(new Date(a,11,1)),[a]),L=e.useMemo(()=>new Date(m,0,1),[m]),V=e.useMemo(()=>new Date(a,11,31),[a]),j=e.useMemo(()=>Array.from({length:a-m+1},(o,f)=>m+f),[m,a]),$=t!==void 0,[G,J]=e.useState(N(n)),g=N($?t:G),A=e.useCallback(o=>{const f=r.startOfMonth(new Date),l=E(r.startOfMonth(o?.from??f),i,p),se=o?.to?r.startOfMonth(o.to):r.addMonths(l,1),le=E(se,i,p);return{start:l,end:le}},[i,p]),[_,T]=e.useState(!1),[d,R]=e.useState(g),q=A(g),[K,B]=e.useState(q.start),[Q,F]=e.useState(q.end),D=e.useCallback(o=>{const f=N(o);R(f);const l=A(f);B(l.start),F(l.end)},[A]);e.useEffect(()=>{_||D(g)},[g,_,D]);const X=o=>{B(E(r.startOfMonth(o),i,p))},Z=o=>{F(E(r.startOfMonth(o),i,p))},ee=o=>{o&&R(f=>{const l={from:o,to:f?.to};return l.to&&r.isAfter(o,l.to)&&(l.to=o),l})},te=o=>{o&&R(f=>{const l={from:f?.from,to:o};return l.from&&r.isAfter(l.from,o)&&(l.from=o),l})},ne=()=>{D(g),T(!1)},oe=()=>{const o=N(d);$||J(o),s?.(o),T(!1)},re=!!(d?.from&&d?.to),H=be(g,M),ae=pe(d,M);return e.createElement("div",{className:b.cn("w-full",c)},e.createElement(z.Popover,{open:_,onOpenChange:o=>{x||(o&&D(g),T(o))}},e.createElement(z.PopoverTrigger,{asChild:!0},e.createElement("button",{ref:P,type:"button",disabled:x,className:b.cn("flex h-10 w-full items-center justify-between rounded-[8px] border border-[#e6e6e6] bg-white px-3 py-2 text-left text-[14px] leading-[20px] transition-colors","focus-visible:outline-none focus-visible:border-[#1D1C20] focus-visible:ring-0","disabled:cursor-not-allowed disabled:bg-[#f2f2f2] disabled:text-[#9ca3af] disabled:opacity-100",v),...Y},e.createElement("span",{className:b.cn("truncate text-[14px] font-normal leading-[20px]",H?"text-[#111111]":"text-[#b3b3b3]")},H||h),e.createElement(w.CalendarDays,{className:"ml-3 h-4 w-4 shrink-0 text-[#111111]"}))),e.createElement(z.PopoverContent,{side:k,avoidCollisions:O,align:"start",sideOffset:10,className:b.cn("w-[min(95vw,760px)] max-h-[var(--radix-popover-content-available-height)] overflow-y-auto overscroll-contain rounded-xl border border-[#d8d8da] bg-[#f7f7f8] p-3 shadow-[0px_12px_24px_rgba(0,0,0,0.08)] sm:p-4",S)},e.createElement("div",{className:"grid gap-3 md:grid-cols-2 md:gap-4"},e.createElement(I,{label:"Start date",month:K,minMonth:i,maxMonth:p,minDate:L,maxDate:V,selectedDate:d?.from,disabledMatcher:d?.to?{after:d.to}:void 0,disabled:x,years:j,onMonthChange:X,onSelectDate:ee}),e.createElement(I,{label:"End date",month:Q,minMonth:i,maxMonth:p,minDate:L,maxDate:V,selectedDate:d?.to,disabledMatcher:d?.from?{before:d.from}:void 0,disabled:x,years:j,onMonthChange:Z,onSelectDate:te})),e.createElement("div",{className:"mt-2.5 border-t border-[#d8d8da] pt-2.5"},e.createElement("input",{readOnly:!0,value:ae,className:"h-9 w-full rounded-md border border-[#e6e6e6] bg-white px-3 py-2 text-sm leading-5 text-[#111111] outline-none transition-colors placeholder:text-[#b3b3b3] focus-visible:border-[#1D1C20]","aria-label":"Selected date range"}),e.createElement("div",{className:"mt-2.5 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end"},e.createElement(U.Button,{type:"button",variant:"outline",className:"h-9 rounded-md px-4 text-sm",onClick:ne},"Cancel"),e.createElement(U.Button,{type:"button",className:"h-9 rounded-md px-4 text-sm",disabled:!re,onClick:oe},"Apply"))))))});W.displayName="DateRangePicker";exports.DateRangePicker=W;
|
|
2
2
|
//# sourceMappingURL=index.cjs29.js.map
|
package/dist/index.cjs29.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs29.js","sources":["../src/components/ui/date-range-picker.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport {\n addMonths,\n format,\n isAfter,\n isBefore,\n setMonth,\n setYear,\n startOfMonth,\n} from \"date-fns\"\nimport { CalendarDays, ChevronDown, ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { DayPicker, type Matcher } from \"react-day-picker\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\"\n\nexport type DateRangePickerValue = {\n from?: Date\n to?: Date\n}\n\nexport interface DateRangePickerProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"value\" | \"defaultValue\" | \"onChange\"> {\n value?: DateRangePickerValue\n defaultValue?: DateRangePickerValue\n onValueChange?: (value: DateRangePickerValue | undefined) => void\n wrapperClassName?: string\n popoverClassName?: string\n placeholder?: string\n dateFormat?: string\n minYear?: number\n maxYear?: number\n}\n\nconst DEFAULT_FORMAT = \"dd/MM/yyyy\"\nconst DEFAULT_PLACEHOLDER = \"DD/MM/YYYY - DD/MM/YYYY\"\nconst MONTH_LABELS = Array.from({ length: 12 }, (_, monthIndex) =>\n new Date(2020, monthIndex, 1).toLocaleString(\"default\", { month: \"long\" })\n)\n\nconst clampMonth = (month: Date, minMonth: Date, maxMonth: Date) => {\n if (isBefore(month, minMonth)) {\n return minMonth\n }\n\n if (isAfter(month, maxMonth)) {\n return maxMonth\n }\n\n return month\n}\n\nconst normalizeRange = (\n value?: DateRangePickerValue\n): DateRangePickerValue | undefined => {\n if (!value?.from && !value?.to) {\n return undefined\n }\n\n if (value.from && value.to && isAfter(value.from, value.to)) {\n return {\n from: value.to,\n to: value.from,\n }\n }\n\n return {\n from: value.from,\n to: value.to,\n }\n}\n\nconst formatDate = (date: Date | undefined, dateFormat: string) => {\n if (!date) {\n return undefined\n }\n\n return format(date, dateFormat)\n}\n\nconst formatCommittedValue = (\n value: DateRangePickerValue | undefined,\n dateFormat: string\n) => {\n const fromText = formatDate(value?.from, dateFormat)\n const toText = formatDate(value?.to, dateFormat)\n\n if (!fromText || !toText) {\n return \"\"\n }\n\n return `${fromText} - ${toText}`\n}\n\nconst formatDraftValue = (\n value: DateRangePickerValue | undefined,\n dateFormat: string\n) => {\n const fromText = formatDate(value?.from, dateFormat) ?? \"DD/MM/YYYY\"\n const toText = formatDate(value?.to, dateFormat) ?? \"DD/MM/YYYY\"\n\n return `${fromText} - ${toText}`\n}\n\ntype CalendarPanelProps = {\n label: string\n month: Date\n minMonth: Date\n maxMonth: Date\n minDate: Date\n maxDate: Date\n selectedDate?: Date\n disabledMatcher?: Matcher\n disabled?: boolean\n years: number[]\n onMonthChange: (month: Date) => void\n onSelectDate: (date: Date | undefined) => void\n}\n\nfunction CalendarPanel({\n label,\n month,\n minMonth,\n maxMonth,\n minDate,\n maxDate,\n selectedDate,\n disabledMatcher,\n disabled,\n years,\n onMonthChange,\n onSelectDate,\n}: CalendarPanelProps) {\n const handlePrevMonth = () => {\n onMonthChange(addMonths(month, -1))\n }\n\n const handleNextMonth = () => {\n onMonthChange(addMonths(month, 1))\n }\n\n const isPrevDisabled = disabled || !isAfter(month, minMonth)\n const isNextDisabled = disabled || !isBefore(month, maxMonth)\n\n return (\n <div className=\"w-full min-w-0\">\n <div className=\"flex items-center gap-2 md:gap-3\">\n <button\n type=\"button\"\n onClick={handlePrevMonth}\n disabled={isPrevDisabled}\n className={cn(\n \"inline-flex h-10 w-10 items-center justify-center rounded-[8px] text-[#6e6d71] transition-colors\",\n \"hover:bg-[#f5f5f5] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d1c20]/20\",\n \"disabled:cursor-not-allowed disabled:opacity-40\"\n )}\n aria-label={`Previous month for ${label.toLowerCase()}`}\n >\n <ChevronLeft className=\"h-6 w-6\" />\n </button>\n\n <div className=\"relative min-w-0 flex-1\">\n <select\n value={month.getMonth()}\n onChange={(event) => {\n const monthValue = Number(event.target.value)\n onMonthChange(setMonth(month, monthValue))\n }}\n disabled={disabled}\n className={cn(\n \"h-14 w-full appearance-none rounded-[14px] border border-[#b7b7b9] bg-white px-5 pr-11 text-left text-[16px] font-medium leading-[22px] text-[#111111]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d1c20]/20\",\n \"disabled:cursor-not-allowed disabled:bg-[#f2f2f2] disabled:text-[#b3b3b3]\"\n )}\n aria-label={`Month for ${label.toLowerCase()}`}\n >\n {MONTH_LABELS.map((monthLabel, monthIndex) => (\n <option key={monthLabel} value={monthIndex}>\n {monthLabel}\n </option>\n ))}\n </select>\n <ChevronDown className=\"pointer-events-none absolute right-4 top-1/2 h-5 w-5 -translate-y-1/2 text-[#7f7d83]\" />\n </div>\n\n <div className=\"relative w-[132px] shrink-0\">\n <select\n value={month.getFullYear()}\n onChange={(event) => {\n const yearValue = Number(event.target.value)\n onMonthChange(setYear(month, yearValue))\n }}\n disabled={disabled}\n className={cn(\n \"h-14 w-full appearance-none rounded-[14px] border border-[#b7b7b9] bg-white px-5 pr-10 text-left text-[16px] font-medium leading-[22px] text-[#111111]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d1c20]/20\",\n \"disabled:cursor-not-allowed disabled:bg-[#f2f2f2] disabled:text-[#b3b3b3]\"\n )}\n aria-label={`Year for ${label.toLowerCase()}`}\n >\n {years.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n <ChevronDown className=\"pointer-events-none absolute right-4 top-1/2 h-5 w-5 -translate-y-1/2 text-[#7f7d83]\" />\n </div>\n\n <button\n type=\"button\"\n onClick={handleNextMonth}\n disabled={isNextDisabled}\n className={cn(\n \"inline-flex h-10 w-10 items-center justify-center rounded-[8px] text-[#6e6d71] transition-colors\",\n \"hover:bg-[#f5f5f5] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d1c20]/20\",\n \"disabled:cursor-not-allowed disabled:opacity-40\"\n )}\n aria-label={`Next month for ${label.toLowerCase()}`}\n >\n <ChevronRight className=\"h-6 w-6\" />\n </button>\n </div>\n\n <p className=\"mt-4 text-center text-[16px] font-medium leading-[22px] text-[#666666]\">\n {label}\n </p>\n\n <DayPicker\n mode=\"single\"\n month={month}\n onMonthChange={onMonthChange}\n selected={selectedDate}\n onSelect={onSelectDate}\n showOutsideDays\n fixedWeeks\n hideNavigation\n disabled={[\n { before: minDate },\n { after: maxDate },\n ...(disabledMatcher ? [disabledMatcher] : []),\n ]}\n className=\"mt-2 p-0\"\n classNames={{\n root: \"w-full\",\n months: \"w-full\",\n month: \"w-full\",\n month_caption: \"hidden\",\n month_grid: \"w-full border-collapse\",\n weekdays: \"grid grid-cols-7\",\n weekday:\n \"h-10 text-center text-[16px] font-medium leading-[22px] text-[#666666]\",\n weeks: \"grid gap-1\",\n week: \"grid grid-cols-7\",\n day: \"flex h-12 w-full items-center justify-center p-0\",\n day_button:\n \"h-10 w-10 rounded-[12px] border border-transparent bg-transparent p-0 text-[18px] font-normal leading-none text-[#444444] transition-colors hover:border-[#cccccc] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#2bbd8f]/25 aria-selected:border-[#2bbd8f] aria-selected:text-[#111111]\",\n selected: \"\",\n today: \"font-medium\",\n outside: \"text-[#a4a4a8]\",\n disabled: \"pointer-events-none text-[#d3d3d6]\",\n hidden: \"invisible\",\n }}\n />\n </div>\n )\n}\n\nconst DateRangePicker = React.forwardRef<HTMLButtonElement, DateRangePickerProps>(\n (\n {\n value,\n defaultValue,\n onValueChange,\n wrapperClassName,\n popoverClassName,\n className,\n placeholder = DEFAULT_PLACEHOLDER,\n dateFormat = DEFAULT_FORMAT,\n minYear = 2000,\n maxYear = 2100,\n disabled,\n ...triggerProps\n },\n ref\n ) => {\n const safeMinYear = Math.min(minYear, maxYear)\n const safeMaxYear = Math.max(minYear, maxYear)\n\n const minMonth = React.useMemo(\n () => startOfMonth(new Date(safeMinYear, 0, 1)),\n [safeMinYear]\n )\n const maxMonth = React.useMemo(\n () => startOfMonth(new Date(safeMaxYear, 11, 1)),\n [safeMaxYear]\n )\n const minDate = React.useMemo(() => new Date(safeMinYear, 0, 1), [safeMinYear])\n const maxDate = React.useMemo(\n () => new Date(safeMaxYear, 11, 31),\n [safeMaxYear]\n )\n\n const years = React.useMemo(\n () =>\n Array.from(\n { length: safeMaxYear - safeMinYear + 1 },\n (_, yearIndex) => safeMinYear + yearIndex\n ),\n [safeMinYear, safeMaxYear]\n )\n\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = React.useState<DateRangePickerValue | undefined>(\n normalizeRange(defaultValue)\n )\n\n const committedValue = normalizeRange(isControlled ? value : internalValue)\n\n const buildPanelMonths = React.useCallback(\n (range: DateRangePickerValue | undefined) => {\n const now = startOfMonth(new Date())\n const initialStart = clampMonth(\n startOfMonth(range?.from ?? now),\n minMonth,\n maxMonth\n )\n\n const initialEndRaw = range?.to\n ? startOfMonth(range.to)\n : addMonths(initialStart, 1)\n const initialEnd = clampMonth(initialEndRaw, minMonth, maxMonth)\n\n return {\n start: initialStart,\n end: initialEnd,\n }\n },\n [minMonth, maxMonth]\n )\n\n const [open, setOpen] = React.useState(false)\n const [draftValue, setDraftValue] = React.useState<DateRangePickerValue | undefined>(\n committedValue\n )\n const initialMonths = buildPanelMonths(committedValue)\n const [startMonth, setStartMonth] = React.useState<Date>(initialMonths.start)\n const [endMonth, setEndMonth] = React.useState<Date>(initialMonths.end)\n\n const syncDraftState = React.useCallback(\n (nextValue: DateRangePickerValue | undefined) => {\n const normalized = normalizeRange(nextValue)\n setDraftValue(normalized)\n const nextMonths = buildPanelMonths(normalized)\n setStartMonth(nextMonths.start)\n setEndMonth(nextMonths.end)\n },\n [buildPanelMonths]\n )\n\n React.useEffect(() => {\n if (!open) {\n syncDraftState(committedValue)\n }\n }, [committedValue, open, syncDraftState])\n\n const handleStartMonthChange = (nextMonth: Date) => {\n setStartMonth(clampMonth(startOfMonth(nextMonth), minMonth, maxMonth))\n }\n\n const handleEndMonthChange = (nextMonth: Date) => {\n setEndMonth(clampMonth(startOfMonth(nextMonth), minMonth, maxMonth))\n }\n\n const handleStartDateSelect = (date: Date | undefined) => {\n if (!date) {\n return\n }\n\n setDraftValue((previousValue) => {\n const nextValue: DateRangePickerValue = {\n from: date,\n to: previousValue?.to,\n }\n\n if (nextValue.to && isAfter(date, nextValue.to)) {\n nextValue.to = date\n }\n\n return nextValue\n })\n }\n\n const handleEndDateSelect = (date: Date | undefined) => {\n if (!date) {\n return\n }\n\n setDraftValue((previousValue) => {\n const nextValue: DateRangePickerValue = {\n from: previousValue?.from,\n to: date,\n }\n\n if (nextValue.from && isAfter(nextValue.from, date)) {\n nextValue.from = date\n }\n\n return nextValue\n })\n }\n\n const handleCancel = () => {\n syncDraftState(committedValue)\n setOpen(false)\n }\n\n const handleApply = () => {\n const normalized = normalizeRange(draftValue)\n\n if (!isControlled) {\n setInternalValue(normalized)\n }\n\n onValueChange?.(normalized)\n setOpen(false)\n }\n\n const canApply = Boolean(draftValue?.from && draftValue?.to)\n const committedText = formatCommittedValue(committedValue, dateFormat)\n const draftText = formatDraftValue(draftValue, dateFormat)\n\n return (\n <div className={cn(\"w-full\", wrapperClassName)}>\n <Popover\n open={open}\n onOpenChange={(nextOpen) => {\n if (disabled) {\n return\n }\n\n if (nextOpen) {\n syncDraftState(committedValue)\n }\n\n setOpen(nextOpen)\n }}\n >\n <PopoverTrigger asChild>\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-[8px] border border-[#e6e6e6] bg-white px-3 py-2 text-left text-[14px] leading-[20px] transition-colors\",\n \"focus-visible:outline-none focus-visible:border-[#1D1C20] focus-visible:ring-0\",\n \"disabled:cursor-not-allowed disabled:bg-[#f2f2f2] disabled:text-[#9ca3af] disabled:opacity-100\",\n className\n )}\n {...triggerProps}\n >\n <span\n className={cn(\n \"truncate text-[14px] font-normal leading-[20px]\",\n committedText ? \"text-[#111111]\" : \"text-[#b3b3b3]\"\n )}\n >\n {committedText || placeholder}\n </span>\n <CalendarDays className=\"ml-3 h-4 w-4 shrink-0 text-[#111111]\" />\n </button>\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n sideOffset={10}\n className={cn(\n \"w-[min(96vw,980px)] rounded-[16px] border border-[#d8d8da] bg-[#f7f7f8] p-4 shadow-[0px_12px_24px_rgba(0,0,0,0.08)] md:p-6\",\n popoverClassName\n )}\n >\n <div className=\"grid gap-8 md:grid-cols-2 md:gap-10\">\n <CalendarPanel\n label=\"Start date\"\n month={startMonth}\n minMonth={minMonth}\n maxMonth={maxMonth}\n minDate={minDate}\n maxDate={maxDate}\n selectedDate={draftValue?.from}\n disabledMatcher={draftValue?.to ? { after: draftValue.to } : undefined}\n disabled={disabled}\n years={years}\n onMonthChange={handleStartMonthChange}\n onSelectDate={handleStartDateSelect}\n />\n\n <CalendarPanel\n label=\"End date\"\n month={endMonth}\n minMonth={minMonth}\n maxMonth={maxMonth}\n minDate={minDate}\n maxDate={maxDate}\n selectedDate={draftValue?.to}\n disabledMatcher={draftValue?.from ? { before: draftValue.from } : undefined}\n disabled={disabled}\n years={years}\n onMonthChange={handleEndMonthChange}\n onSelectDate={handleEndDateSelect}\n />\n </div>\n\n <div className=\"mt-5 border-t border-[#d8d8da] pt-4\">\n <input\n readOnly\n value={draftText}\n className=\"h-10 w-full rounded-[8px] border border-[#e6e6e6] bg-white px-3 py-2 text-[14px] leading-[20px] text-[#111111] outline-none transition-colors placeholder:text-[#b3b3b3] focus-visible:border-[#1D1C20]\"\n aria-label=\"Selected date range\"\n />\n\n <div className=\"mt-4 flex justify-end gap-3\">\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"h-12 rounded-[14px] px-7 text-[14px]\"\n onClick={handleCancel}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n className=\"h-12 rounded-[14px] px-7 text-[14px]\"\n disabled={!canApply}\n onClick={handleApply}\n >\n Apply\n </Button>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n )\n }\n)\n\nDateRangePicker.displayName = \"DateRangePicker\"\n\nexport { DateRangePicker }\n"],"names":["DEFAULT_FORMAT","DEFAULT_PLACEHOLDER","MONTH_LABELS","_","monthIndex","clampMonth","month","minMonth","maxMonth","isBefore","isAfter","normalizeRange","value","formatDate","date","dateFormat","format","formatCommittedValue","fromText","toText","formatDraftValue","CalendarPanel","label","minDate","maxDate","selectedDate","disabledMatcher","disabled","years","onMonthChange","onSelectDate","handlePrevMonth","addMonths","handleNextMonth","isPrevDisabled","isNextDisabled","React","cn","ChevronLeft","event","monthValue","setMonth","monthLabel","ChevronDown","yearValue","setYear","year","ChevronRight","DayPicker","DateRangePicker","defaultValue","onValueChange","wrapperClassName","popoverClassName","className","placeholder","minYear","maxYear","triggerProps","ref","safeMinYear","safeMaxYear","startOfMonth","yearIndex","isControlled","internalValue","setInternalValue","committedValue","buildPanelMonths","range","now","initialStart","initialEndRaw","initialEnd","open","setOpen","draftValue","setDraftValue","initialMonths","startMonth","setStartMonth","endMonth","setEndMonth","syncDraftState","nextValue","normalized","nextMonths","handleStartMonthChange","nextMonth","handleEndMonthChange","handleStartDateSelect","previousValue","handleEndDateSelect","handleCancel","handleApply","canApply","committedText","draftText","Popover","nextOpen","PopoverTrigger","CalendarDays","PopoverContent","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs29.js","sources":["../src/components/ui/date-range-picker.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport {\n addMonths,\n format,\n isAfter,\n isBefore,\n setMonth,\n setYear,\n startOfMonth,\n} from \"date-fns\"\nimport { CalendarDays, ChevronDown, ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { DayPicker, type Matcher } from \"react-day-picker\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\"\n\nexport type DateRangePickerValue = {\n from?: Date\n to?: Date\n}\n\nexport interface DateRangePickerProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"value\" | \"defaultValue\" | \"onChange\"> {\n value?: DateRangePickerValue\n defaultValue?: DateRangePickerValue\n onValueChange?: (value: DateRangePickerValue | undefined) => void\n wrapperClassName?: string\n popoverClassName?: string\n popoverSide?: React.ComponentPropsWithoutRef<typeof PopoverContent>[\"side\"]\n popoverAvoidCollisions?: boolean\n placeholder?: string\n dateFormat?: string\n minYear?: number\n maxYear?: number\n}\n\nconst DEFAULT_FORMAT = \"dd/MM/yyyy\"\nconst DEFAULT_PLACEHOLDER = \"DD/MM/YYYY - DD/MM/YYYY\"\nconst MONTH_LABELS = Array.from({ length: 12 }, (_, monthIndex) =>\n new Date(2020, monthIndex, 1).toLocaleString(\"default\", { month: \"long\" })\n)\n\nconst clampMonth = (month: Date, minMonth: Date, maxMonth: Date) => {\n if (isBefore(month, minMonth)) {\n return minMonth\n }\n\n if (isAfter(month, maxMonth)) {\n return maxMonth\n }\n\n return month\n}\n\nconst normalizeRange = (\n value?: DateRangePickerValue\n): DateRangePickerValue | undefined => {\n if (!value?.from && !value?.to) {\n return undefined\n }\n\n if (value.from && value.to && isAfter(value.from, value.to)) {\n return {\n from: value.to,\n to: value.from,\n }\n }\n\n return {\n from: value.from,\n to: value.to,\n }\n}\n\nconst formatDate = (date: Date | undefined, dateFormat: string) => {\n if (!date) {\n return undefined\n }\n\n return format(date, dateFormat)\n}\n\nconst formatCommittedValue = (\n value: DateRangePickerValue | undefined,\n dateFormat: string\n) => {\n const fromText = formatDate(value?.from, dateFormat)\n const toText = formatDate(value?.to, dateFormat)\n\n if (!fromText || !toText) {\n return \"\"\n }\n\n return `${fromText} - ${toText}`\n}\n\nconst formatDraftValue = (\n value: DateRangePickerValue | undefined,\n dateFormat: string\n) => {\n const fromText = formatDate(value?.from, dateFormat) ?? \"DD/MM/YYYY\"\n const toText = formatDate(value?.to, dateFormat) ?? \"DD/MM/YYYY\"\n\n return `${fromText} - ${toText}`\n}\n\ntype CalendarPanelProps = {\n label: string\n month: Date\n minMonth: Date\n maxMonth: Date\n minDate: Date\n maxDate: Date\n selectedDate?: Date\n disabledMatcher?: Matcher\n disabled?: boolean\n years: number[]\n onMonthChange: (month: Date) => void\n onSelectDate: (date: Date | undefined) => void\n}\n\nfunction CalendarPanel({\n label,\n month,\n minMonth,\n maxMonth,\n minDate,\n maxDate,\n selectedDate,\n disabledMatcher,\n disabled,\n years,\n onMonthChange,\n onSelectDate,\n}: CalendarPanelProps) {\n const handlePrevMonth = () => {\n onMonthChange(addMonths(month, -1))\n }\n\n const handleNextMonth = () => {\n onMonthChange(addMonths(month, 1))\n }\n\n const isPrevDisabled = disabled || !isAfter(month, minMonth)\n const isNextDisabled = disabled || !isBefore(month, maxMonth)\n\n return (\n <div className=\"w-full min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2 sm:flex-nowrap\">\n <button\n type=\"button\"\n onClick={handlePrevMonth}\n disabled={isPrevDisabled}\n className={cn(\n \"inline-flex h-8 w-8 items-center justify-center rounded-md text-[#6e6d71] transition-colors lg:h-9 lg:w-9\",\n \"hover:bg-[#f5f5f5] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d1c20]/20\",\n \"disabled:cursor-not-allowed disabled:opacity-40\"\n )}\n aria-label={`Previous month for ${label.toLowerCase()}`}\n >\n <ChevronLeft className=\"h-4 w-4 lg:h-5 lg:w-5\" />\n </button>\n\n <div className=\"relative min-w-0 flex-1\">\n <select\n value={month.getMonth()}\n onChange={(event) => {\n const monthValue = Number(event.target.value)\n onMonthChange(setMonth(month, monthValue))\n }}\n disabled={disabled}\n className={cn(\n \"h-9 w-full appearance-none rounded-md border border-[#b7b7b9] bg-white px-3 pr-8 text-left text-sm font-medium leading-5 text-[#111111] lg:h-10 lg:px-4 lg:pr-10\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d1c20]/20\",\n \"disabled:cursor-not-allowed disabled:bg-[#f2f2f2] disabled:text-[#b3b3b3]\"\n )}\n aria-label={`Month for ${label.toLowerCase()}`}\n >\n {MONTH_LABELS.map((monthLabel, monthIndex) => (\n <option key={monthLabel} value={monthIndex}>\n {monthLabel}\n </option>\n ))}\n </select>\n <ChevronDown className=\"pointer-events-none absolute right-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-[#7f7d83] lg:right-3\" />\n </div>\n\n <div className=\"relative w-[104px] shrink-0 sm:w-[120px]\">\n <select\n value={month.getFullYear()}\n onChange={(event) => {\n const yearValue = Number(event.target.value)\n onMonthChange(setYear(month, yearValue))\n }}\n disabled={disabled}\n className={cn(\n \"h-9 w-full appearance-none rounded-md border border-[#b7b7b9] bg-white px-3 pr-8 text-left text-sm font-medium leading-5 text-[#111111] lg:h-10 lg:px-4 lg:pr-9\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d1c20]/20\",\n \"disabled:cursor-not-allowed disabled:bg-[#f2f2f2] disabled:text-[#b3b3b3]\"\n )}\n aria-label={`Year for ${label.toLowerCase()}`}\n >\n {years.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n <ChevronDown className=\"pointer-events-none absolute right-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-[#7f7d83] lg:right-3\" />\n </div>\n\n <button\n type=\"button\"\n onClick={handleNextMonth}\n disabled={isNextDisabled}\n className={cn(\n \"inline-flex h-8 w-8 items-center justify-center rounded-md text-[#6e6d71] transition-colors lg:h-9 lg:w-9\",\n \"hover:bg-[#f5f5f5] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d1c20]/20\",\n \"disabled:cursor-not-allowed disabled:opacity-40\"\n )}\n aria-label={`Next month for ${label.toLowerCase()}`}\n >\n <ChevronRight className=\"h-4 w-4 lg:h-5 lg:w-5\" />\n </button>\n </div>\n\n <p className=\"mt-1.5 text-center text-sm font-medium leading-5 text-[#666666] lg:mt-2\">\n {label}\n </p>\n\n <DayPicker\n mode=\"single\"\n month={month}\n onMonthChange={onMonthChange}\n selected={selectedDate}\n onSelect={onSelectDate}\n showOutsideDays\n fixedWeeks\n hideNavigation\n disabled={[\n { before: minDate },\n { after: maxDate },\n ...(disabledMatcher ? [disabledMatcher] : []),\n ]}\n className=\"mt-1 p-0 [--drp-cell-size:1.625rem] md:[--drp-cell-size:1.875rem] xl:[--drp-cell-size:2.125rem]\"\n classNames={{\n root: \"w-full\",\n months: \"w-full\",\n month: \"w-full\",\n month_caption: \"hidden\",\n month_grid: \"w-full border-collapse\",\n weekdays: \"grid grid-cols-7\",\n weekday:\n \"h-[calc(var(--drp-cell-size)-0.25rem)] text-center text-[11px] font-medium leading-4 text-[#666666] lg:text-xs\",\n weeks: \"grid gap-0\",\n week: \"grid grid-cols-7\",\n day: \"flex h-[var(--drp-cell-size)] w-full items-center justify-center p-0\",\n day_button:\n \"h-[--drp-cell-size] w-[--drp-cell-size] rounded-md border border-transparent bg-transparent p-0 text-[13px] font-normal leading-none text-[#444444] transition-colors hover:border-[#cccccc] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#2bbd8f]/25 lg:text-sm\",\n selected:\n \"[&>button]:border-[#2bbd8f] [&>button]:bg-[#2bbd8f] [&>button]:text-[#111111]\",\n today: \"font-medium\",\n outside: \"text-[#a4a4a8]\",\n disabled: \"pointer-events-none text-[#d3d3d6]\",\n hidden: \"invisible\",\n }}\n />\n </div>\n )\n}\n\nconst DateRangePicker = React.forwardRef<HTMLButtonElement, DateRangePickerProps>(\n (\n {\n value,\n defaultValue,\n onValueChange,\n wrapperClassName,\n popoverClassName,\n popoverSide = \"bottom\",\n popoverAvoidCollisions = true,\n className,\n placeholder = DEFAULT_PLACEHOLDER,\n dateFormat = DEFAULT_FORMAT,\n minYear = 2000,\n maxYear = 2100,\n disabled,\n ...triggerProps\n },\n ref\n ) => {\n const safeMinYear = Math.min(minYear, maxYear)\n const safeMaxYear = Math.max(minYear, maxYear)\n\n const minMonth = React.useMemo(\n () => startOfMonth(new Date(safeMinYear, 0, 1)),\n [safeMinYear]\n )\n const maxMonth = React.useMemo(\n () => startOfMonth(new Date(safeMaxYear, 11, 1)),\n [safeMaxYear]\n )\n const minDate = React.useMemo(() => new Date(safeMinYear, 0, 1), [safeMinYear])\n const maxDate = React.useMemo(\n () => new Date(safeMaxYear, 11, 31),\n [safeMaxYear]\n )\n\n const years = React.useMemo(\n () =>\n Array.from(\n { length: safeMaxYear - safeMinYear + 1 },\n (_, yearIndex) => safeMinYear + yearIndex\n ),\n [safeMinYear, safeMaxYear]\n )\n\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = React.useState<DateRangePickerValue | undefined>(\n normalizeRange(defaultValue)\n )\n\n const committedValue = normalizeRange(isControlled ? value : internalValue)\n\n const buildPanelMonths = React.useCallback(\n (range: DateRangePickerValue | undefined) => {\n const now = startOfMonth(new Date())\n const initialStart = clampMonth(\n startOfMonth(range?.from ?? now),\n minMonth,\n maxMonth\n )\n\n const initialEndRaw = range?.to\n ? startOfMonth(range.to)\n : addMonths(initialStart, 1)\n const initialEnd = clampMonth(initialEndRaw, minMonth, maxMonth)\n\n return {\n start: initialStart,\n end: initialEnd,\n }\n },\n [minMonth, maxMonth]\n )\n\n const [open, setOpen] = React.useState(false)\n const [draftValue, setDraftValue] = React.useState<DateRangePickerValue | undefined>(\n committedValue\n )\n const initialMonths = buildPanelMonths(committedValue)\n const [startMonth, setStartMonth] = React.useState<Date>(initialMonths.start)\n const [endMonth, setEndMonth] = React.useState<Date>(initialMonths.end)\n\n const syncDraftState = React.useCallback(\n (nextValue: DateRangePickerValue | undefined) => {\n const normalized = normalizeRange(nextValue)\n setDraftValue(normalized)\n const nextMonths = buildPanelMonths(normalized)\n setStartMonth(nextMonths.start)\n setEndMonth(nextMonths.end)\n },\n [buildPanelMonths]\n )\n\n React.useEffect(() => {\n if (!open) {\n syncDraftState(committedValue)\n }\n }, [committedValue, open, syncDraftState])\n\n const handleStartMonthChange = (nextMonth: Date) => {\n setStartMonth(clampMonth(startOfMonth(nextMonth), minMonth, maxMonth))\n }\n\n const handleEndMonthChange = (nextMonth: Date) => {\n setEndMonth(clampMonth(startOfMonth(nextMonth), minMonth, maxMonth))\n }\n\n const handleStartDateSelect = (date: Date | undefined) => {\n if (!date) {\n return\n }\n\n setDraftValue((previousValue) => {\n const nextValue: DateRangePickerValue = {\n from: date,\n to: previousValue?.to,\n }\n\n if (nextValue.to && isAfter(date, nextValue.to)) {\n nextValue.to = date\n }\n\n return nextValue\n })\n }\n\n const handleEndDateSelect = (date: Date | undefined) => {\n if (!date) {\n return\n }\n\n setDraftValue((previousValue) => {\n const nextValue: DateRangePickerValue = {\n from: previousValue?.from,\n to: date,\n }\n\n if (nextValue.from && isAfter(nextValue.from, date)) {\n nextValue.from = date\n }\n\n return nextValue\n })\n }\n\n const handleCancel = () => {\n syncDraftState(committedValue)\n setOpen(false)\n }\n\n const handleApply = () => {\n const normalized = normalizeRange(draftValue)\n\n if (!isControlled) {\n setInternalValue(normalized)\n }\n\n onValueChange?.(normalized)\n setOpen(false)\n }\n\n const canApply = Boolean(draftValue?.from && draftValue?.to)\n const committedText = formatCommittedValue(committedValue, dateFormat)\n const draftText = formatDraftValue(draftValue, dateFormat)\n\n return (\n <div className={cn(\"w-full\", wrapperClassName)}>\n <Popover\n open={open}\n onOpenChange={(nextOpen) => {\n if (disabled) {\n return\n }\n\n if (nextOpen) {\n syncDraftState(committedValue)\n }\n\n setOpen(nextOpen)\n }}\n >\n <PopoverTrigger asChild>\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-[8px] border border-[#e6e6e6] bg-white px-3 py-2 text-left text-[14px] leading-[20px] transition-colors\",\n \"focus-visible:outline-none focus-visible:border-[#1D1C20] focus-visible:ring-0\",\n \"disabled:cursor-not-allowed disabled:bg-[#f2f2f2] disabled:text-[#9ca3af] disabled:opacity-100\",\n className\n )}\n {...triggerProps}\n >\n <span\n className={cn(\n \"truncate text-[14px] font-normal leading-[20px]\",\n committedText ? \"text-[#111111]\" : \"text-[#b3b3b3]\"\n )}\n >\n {committedText || placeholder}\n </span>\n <CalendarDays className=\"ml-3 h-4 w-4 shrink-0 text-[#111111]\" />\n </button>\n </PopoverTrigger>\n\n <PopoverContent\n side={popoverSide}\n avoidCollisions={popoverAvoidCollisions}\n align=\"start\"\n sideOffset={10}\n className={cn(\n \"w-[min(95vw,760px)] max-h-[var(--radix-popover-content-available-height)] overflow-y-auto overscroll-contain rounded-xl border border-[#d8d8da] bg-[#f7f7f8] p-3 shadow-[0px_12px_24px_rgba(0,0,0,0.08)] sm:p-4\",\n popoverClassName\n )}\n >\n <div className=\"grid gap-3 md:grid-cols-2 md:gap-4\">\n <CalendarPanel\n label=\"Start date\"\n month={startMonth}\n minMonth={minMonth}\n maxMonth={maxMonth}\n minDate={minDate}\n maxDate={maxDate}\n selectedDate={draftValue?.from}\n disabledMatcher={draftValue?.to ? { after: draftValue.to } : undefined}\n disabled={disabled}\n years={years}\n onMonthChange={handleStartMonthChange}\n onSelectDate={handleStartDateSelect}\n />\n\n <CalendarPanel\n label=\"End date\"\n month={endMonth}\n minMonth={minMonth}\n maxMonth={maxMonth}\n minDate={minDate}\n maxDate={maxDate}\n selectedDate={draftValue?.to}\n disabledMatcher={draftValue?.from ? { before: draftValue.from } : undefined}\n disabled={disabled}\n years={years}\n onMonthChange={handleEndMonthChange}\n onSelectDate={handleEndDateSelect}\n />\n </div>\n\n <div className=\"mt-2.5 border-t border-[#d8d8da] pt-2.5\">\n <input\n readOnly\n value={draftText}\n className=\"h-9 w-full rounded-md border border-[#e6e6e6] bg-white px-3 py-2 text-sm leading-5 text-[#111111] outline-none transition-colors placeholder:text-[#b3b3b3] focus-visible:border-[#1D1C20]\"\n aria-label=\"Selected date range\"\n />\n\n <div className=\"mt-2.5 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"h-9 rounded-md px-4 text-sm\"\n onClick={handleCancel}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n className=\"h-9 rounded-md px-4 text-sm\"\n disabled={!canApply}\n onClick={handleApply}\n >\n Apply\n </Button>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n )\n }\n)\n\nDateRangePicker.displayName = \"DateRangePicker\"\n\nexport { DateRangePicker }\n"],"names":["DEFAULT_FORMAT","DEFAULT_PLACEHOLDER","MONTH_LABELS","_","monthIndex","clampMonth","month","minMonth","maxMonth","isBefore","isAfter","normalizeRange","value","formatDate","date","dateFormat","format","formatCommittedValue","fromText","toText","formatDraftValue","CalendarPanel","label","minDate","maxDate","selectedDate","disabledMatcher","disabled","years","onMonthChange","onSelectDate","handlePrevMonth","addMonths","handleNextMonth","isPrevDisabled","isNextDisabled","React","cn","ChevronLeft","event","monthValue","setMonth","monthLabel","ChevronDown","yearValue","setYear","year","ChevronRight","DayPicker","DateRangePicker","defaultValue","onValueChange","wrapperClassName","popoverClassName","popoverSide","popoverAvoidCollisions","className","placeholder","minYear","maxYear","triggerProps","ref","safeMinYear","safeMaxYear","startOfMonth","yearIndex","isControlled","internalValue","setInternalValue","committedValue","buildPanelMonths","range","now","initialStart","initialEndRaw","initialEnd","open","setOpen","draftValue","setDraftValue","initialMonths","startMonth","setStartMonth","endMonth","setEndMonth","syncDraftState","nextValue","normalized","nextMonths","handleStartMonthChange","nextMonth","handleEndMonthChange","handleStartDateSelect","previousValue","handleEndDateSelect","handleCancel","handleApply","canApply","committedText","draftText","Popover","nextOpen","PopoverTrigger","CalendarDays","PopoverContent","Button"],"mappings":"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"}
|