dgz-ui-shared 1.2.46 → 1.2.47

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.
@@ -0,0 +1,178 @@
1
+ import { jsxs as c, jsx as e } from "react/jsx-runtime";
2
+ import { Button as w } from "dgz-ui/button";
3
+ import { DATE as A, Calendar as d } from "dgz-ui/calendar";
4
+ import { Input as M } from "dgz-ui/form";
5
+ import { Popover as P, PopoverTrigger as z, PopoverContent as E } from "dgz-ui/popover";
6
+ import { dayjs as l, cn as h } from "dgz-ui/utils";
7
+ import { XIcon as F, Calendar1 as I } from "lucide-react";
8
+ import { useState as T, useEffect as Z, useMemo as $ } from "react";
9
+ import { useTranslation as g } from "react-i18next";
10
+ const V = ({
11
+ className: x,
12
+ format: n = A,
13
+ selected: r,
14
+ timezone: p,
15
+ onRangeSelected: m = () => {
16
+ },
17
+ placeholder: N,
18
+ defaultPresets: D,
19
+ disabled: i,
20
+ error: C,
21
+ inputProps: k,
22
+ ...b
23
+ }) => {
24
+ const { t: a } = g(), [L, u] = T(!1), [o, f] = T();
25
+ Z(() => {
26
+ f(r);
27
+ }, [r]);
28
+ const j = $(() => {
29
+ const t = l().endOf("day");
30
+ return (D ?? [
31
+ {
32
+ from: t.startOf("week").toDate(),
33
+ to: t.endOf("week").toDate(),
34
+ label: a("This week")
35
+ },
36
+ {
37
+ from: t.startOf("month").toDate(),
38
+ to: t.endOf("month").toDate(),
39
+ label: a("This month")
40
+ },
41
+ {
42
+ from: t.startOf("year").toDate(),
43
+ to: t.endOf("year").toDate(),
44
+ label: a("This year")
45
+ },
46
+ {
47
+ from: t.subtract(7, "day").startOf("day").toDate(),
48
+ to: t.toDate(),
49
+ label: a("Last 7 days")
50
+ },
51
+ {
52
+ from: t.subtract(30, "day").startOf("day").toDate(),
53
+ to: t.toDate(),
54
+ label: a("Last 30 days")
55
+ },
56
+ {
57
+ from: t.subtract(3, "month").startOf("day").toDate(),
58
+ to: t.toDate(),
59
+ label: a("Last 3 months")
60
+ },
61
+ {
62
+ from: t.subtract(6, "month").startOf("day").toDate(),
63
+ to: t.toDate(),
64
+ label: a("Last 6 months")
65
+ },
66
+ {
67
+ from: t.subtract(12, "month").startOf("day").toDate(),
68
+ to: t.toDate(),
69
+ label: a("Last 12 months")
70
+ }
71
+ ]).map((s) => {
72
+ var v, O;
73
+ return {
74
+ ...s,
75
+ isActive: ((v = r == null ? void 0 : r.from) == null ? void 0 : v.getTime()) === s.from.getTime() && ((O = r == null ? void 0 : r.to) == null ? void 0 : O.getTime()) === s.to.getTime()
76
+ };
77
+ });
78
+ }, [a, r, D]), y = (t) => {
79
+ f(t), t != null && t.from && (t != null && t.to) && (m(t), u(!1));
80
+ };
81
+ return /* @__PURE__ */ c(P, { open: L, onOpenChange: u, children: [
82
+ /* @__PURE__ */ e(z, { asChild: !0, className: "m-0!", disabled: i, children: /* @__PURE__ */ c("div", { className: "relative", children: [
83
+ /* @__PURE__ */ e(
84
+ M,
85
+ {
86
+ variant: C ? "failure" : "default",
87
+ ...k,
88
+ readOnly: !0,
89
+ value: o != null && o.from ? o.to ? `${l(o.from).format(n)}-${l(o.to).format(n)}` : l(o.from).format(n) : "",
90
+ placeholder: N,
91
+ disabled: i,
92
+ className: h(x)
93
+ }
94
+ ),
95
+ o && /* @__PURE__ */ e(
96
+ F,
97
+ {
98
+ onClick: () => {
99
+ f(void 0), m == null || m(void 0);
100
+ },
101
+ className: h(
102
+ "text-secondary absolute top-3 right-8 size-4 cursor-pointer",
103
+ i && "pointer-events-none opacity-50"
104
+ )
105
+ }
106
+ ),
107
+ /* @__PURE__ */ e(
108
+ I,
109
+ {
110
+ className: h(
111
+ "text-secondary absolute top-2.5 right-2 size-5",
112
+ i && "pointer-events-none opacity-50"
113
+ )
114
+ }
115
+ )
116
+ ] }) }),
117
+ /* @__PURE__ */ c(E, { className: "flex w-auto p-0", align: "end", side: "bottom", children: [
118
+ /* @__PURE__ */ e(
119
+ "div",
120
+ {
121
+ className: "border-border-alpha-light flex flex-col space-y-1 border-e p-2",
122
+ children: j.map((t, s) => /* @__PURE__ */ e(
123
+ w,
124
+ {
125
+ size: "xs",
126
+ variant: t.isActive ? "default" : "ghost",
127
+ className: "justify-start",
128
+ onClick: () => y(t),
129
+ children: t.label
130
+ },
131
+ s
132
+ ))
133
+ }
134
+ ),
135
+ /* @__PURE__ */ e(
136
+ d,
137
+ {
138
+ ...b,
139
+ className: "border-border-alpha-light border-e",
140
+ mode: "single",
141
+ endMonth: o == null ? void 0 : o.to,
142
+ selected: o == null ? void 0 : o.from,
143
+ selectedToDate: o == null ? void 0 : o.to,
144
+ selectedFromDate: o == null ? void 0 : o.from,
145
+ timeZone: p,
146
+ disabled: o != null && o.to ? {
147
+ after: o.to
148
+ } : void 0,
149
+ onSelect: (t) => {
150
+ f({ ...o, from: t });
151
+ }
152
+ }
153
+ ),
154
+ /* @__PURE__ */ e(
155
+ d,
156
+ {
157
+ ...b,
158
+ mode: "single",
159
+ startMonth: o == null ? void 0 : o.from,
160
+ selected: o == null ? void 0 : o.to,
161
+ timeZone: p,
162
+ disabled: o != null && o.from ? {
163
+ before: o.from
164
+ } : void 0,
165
+ selectedToDate: o == null ? void 0 : o.to,
166
+ selectedFromDate: o == null ? void 0 : o.from,
167
+ onSelect: (t) => {
168
+ o && y({ ...o, to: t });
169
+ }
170
+ }
171
+ )
172
+ ] })
173
+ ] });
174
+ };
175
+ export {
176
+ V as D
177
+ };
178
+ //# sourceMappingURL=DateRangePicker-C2ZYbgXb.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateRangePicker-C2ZYbgXb.es.js","sources":["../../src/components/datepicker/DateRangePicker.tsx"],"sourcesContent":["import { Button } from 'dgz-ui/button';\nimport { Calendar, type CalendarProps, DATE } from 'dgz-ui/calendar';\nimport { Input, type InputProps } from 'dgz-ui/form';\nimport { Popover, PopoverContent, PopoverTrigger } from 'dgz-ui/popover';\nimport { cn, dayjs } from 'dgz-ui/utils';\nimport { Calendar1, XIcon } from 'lucide-react';\nimport { type ReactNode, useEffect, useMemo, useState } from 'react';\nimport { type DateRange } from 'react-day-picker';\nimport { useTranslation } from 'react-i18next';\n\n/**\n * Type definition for a date range preset configuration.\n */\nexport type PresetType = {\n from: Date;\n to: Date;\n /** Label for the preset (e.g., \"Last 7 days\"). */\n label: ReactNode;\n isActive?: boolean;\n};\n\n/**\n * Props for the DateRangePicker component.\n */\nexport type DateRangePickerProps = Omit<\n CalendarProps,\n 'mode' | 'disabled' | 'selected'\n> & {\n /** The date format string (e.g., 'YYYY-MM-DD'). */\n format?: string;\n /** Placeholder text when no date is selected. */\n placeholder?: string;\n /** The currently selected date range. */\n selected?: DateRange;\n /** Timezone for date calculations. */\n timezone?: string;\n /** Error message to display (modifies styling). */\n error?: string;\n /** Callback function when a date range is selected. */\n onRangeSelected?: (value?: DateRange) => void;\n inputProps?: InputProps;\n disabled?: boolean;\n defaultPresets?: PresetType[];\n};\n\n/**\n * DateRangePicker displays a two-month range picker with helpful presets.\n *\n * @param props.format - Display date format.\n * @param props.selected - Currently selected date range.\n * @param props.timezone - Time zone for date calculations.\n * @param props.onRangeSelected - Callback when a full range is selected.\n * @param props.placeholder - Placeholder when no date selected.\n * @param props.error - Optional error message that adjusts styling.\n * @param props.inputProps - Props passed to the underlying Input component.\n * @param props.disabled - Whether the date range picker is disabled.\n * @param props.defaultPresets - dafault presets list for the picker.\n * @returns A date range picker component.\n */\nexport const DateRangePicker = ({\n className,\n format = DATE,\n selected,\n timezone,\n onRangeSelected = () => {},\n placeholder,\n defaultPresets,\n disabled,\n error,\n inputProps,\n ...props\n}: DateRangePickerProps) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const [date, setDate] = useState<DateRange | undefined>();\n\n useEffect(() => {\n setDate(selected);\n }, [selected]);\n\n const presets: PresetType[] = useMemo(() => {\n const today = dayjs().endOf('day');\n return (\n defaultPresets ?? [\n {\n from: today.startOf('week').toDate(),\n to: today.endOf('week').toDate(),\n label: t('This week'),\n },\n {\n from: today.startOf('month').toDate(),\n to: today.endOf('month').toDate(),\n label: t('This month'),\n },\n {\n from: today.startOf('year').toDate(),\n to: today.endOf('year').toDate(),\n label: t('This year'),\n },\n {\n from: today.subtract(7, 'day').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 7 days'),\n },\n {\n from: today.subtract(30, 'day').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 30 days'),\n },\n {\n from: today.subtract(3, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 3 months'),\n },\n {\n from: today.subtract(6, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 6 months'),\n },\n {\n from: today.subtract(12, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 12 months'),\n },\n ]\n ).map((item) => ({\n ...item,\n isActive:\n selected?.from?.getTime() === item.from.getTime() &&\n selected?.to?.getTime() === item.to.getTime(),\n }));\n }, [t, selected, defaultPresets]);\n\n const handleRangeSelect = (range: DateRange) => {\n setDate(range);\n if (range?.from && range?.to) {\n onRangeSelected(range);\n setOpen(false);\n }\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild className={'m-0!'} disabled={disabled}>\n <div className={'relative'}>\n <Input\n variant={error ? 'failure' : 'default'}\n {...inputProps}\n readOnly\n value={\n date?.from\n ? date.to\n ? `${dayjs(date.from).format(format)}-${dayjs(date.to).format(format)}`\n : dayjs(date.from).format(format)\n : ''\n }\n placeholder={placeholder}\n disabled={disabled}\n className={cn(className)}\n />\n {date && (\n <XIcon\n onClick={() => {\n setDate(undefined);\n onRangeSelected?.(undefined);\n }}\n className={cn(\n 'text-secondary absolute top-3 right-8 size-4 cursor-pointer',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n )}\n <Calendar1\n className={cn(\n 'text-secondary absolute top-2.5 right-2 size-5',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n </div>\n </PopoverTrigger>\n <PopoverContent className=\"flex w-auto p-0\" align=\"end\" side={'bottom'}>\n <div\n className={\n 'border-border-alpha-light flex flex-col space-y-1 border-e p-2'\n }\n >\n {presets.map((preset, index) => (\n <Button\n size={'xs'}\n key={index}\n variant={preset.isActive ? 'default' : 'ghost'}\n className={'justify-start'}\n onClick={() => handleRangeSelect(preset)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n <Calendar\n {...props}\n className={'border-border-alpha-light border-e'}\n mode=\"single\"\n endMonth={date?.to}\n selected={date?.from}\n selectedToDate={date?.to}\n selectedFromDate={date?.from}\n timeZone={timezone}\n disabled={\n date?.to\n ? {\n after: date.to,\n }\n : undefined\n }\n onSelect={(from) => {\n setDate({ ...date, from: from as Date | undefined });\n }}\n />\n <Calendar\n {...props}\n mode=\"single\"\n startMonth={date?.from}\n selected={date?.to}\n timeZone={timezone}\n disabled={\n date?.from\n ? {\n before: date.from,\n }\n : undefined\n }\n selectedToDate={date?.to}\n selectedFromDate={date?.from}\n onSelect={(to) => {\n if (date) {\n handleRangeSelect({ ...date, to: to as Date | undefined });\n }\n }}\n />\n </PopoverContent>\n </Popover>\n );\n};\n"],"names":["DateRangePicker","className","format","DATE","selected","timezone","onRangeSelected","placeholder","defaultPresets","disabled","error","inputProps","props","t","useTranslation","open","setOpen","useState","date","setDate","useEffect","presets","useMemo","today","dayjs","item","_a","_b","handleRangeSelect","range","jsxs","Popover","jsx","PopoverTrigger","Input","cn","XIcon","Calendar1","PopoverContent","preset","index","Button","Calendar","from","to"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("react/jsx-runtime"),L=require("dgz-ui/button"),u=require("dgz-ui/calendar"),w=require("dgz-ui/form"),h=require("dgz-ui/popover"),a=require("dgz-ui/utils"),j=require("lucide-react"),c=require("react"),P=require("react-i18next"),A=({className:O,format:f=u.DATE,selected:s,timezone:y,onRangeSelected:i=()=>{},placeholder:T,defaultPresets:b,disabled:l,error:q,inputProps:N,...D})=>{const{t:r}=P.useTranslation(),[C,p]=c.useState(!1),[t,m]=c.useState();c.useEffect(()=>{m(s)},[s]);const k=c.useMemo(()=>{const o=a.dayjs().endOf("day");return(b??[{from:o.startOf("week").toDate(),to:o.endOf("week").toDate(),label:r("This week")},{from:o.startOf("month").toDate(),to:o.endOf("month").toDate(),label:r("This month")},{from:o.startOf("year").toDate(),to:o.endOf("year").toDate(),label:r("This year")},{from:o.subtract(7,"day").startOf("day").toDate(),to:o.toDate(),label:r("Last 7 days")},{from:o.subtract(30,"day").startOf("day").toDate(),to:o.toDate(),label:r("Last 30 days")},{from:o.subtract(3,"month").startOf("day").toDate(),to:o.toDate(),label:r("Last 3 months")},{from:o.subtract(6,"month").startOf("day").toDate(),to:o.toDate(),label:r("Last 6 months")},{from:o.subtract(12,"month").startOf("day").toDate(),to:o.toDate(),label:r("Last 12 months")}]).map(n=>{var x,v;return{...n,isActive:((x=s==null?void 0:s.from)==null?void 0:x.getTime())===n.from.getTime()&&((v=s==null?void 0:s.to)==null?void 0:v.getTime())===n.to.getTime()}})},[r,s,b]),d=o=>{m(o),o!=null&&o.from&&(o!=null&&o.to)&&(i(o),p(!1))};return e.jsxs(h.Popover,{open:C,onOpenChange:p,children:[e.jsx(h.PopoverTrigger,{asChild:!0,className:"m-0!",disabled:l,children:e.jsxs("div",{className:"relative",children:[e.jsx(w.Input,{variant:q?"failure":"default",...N,readOnly:!0,value:t!=null&&t.from?t.to?`${a.dayjs(t.from).format(f)}-${a.dayjs(t.to).format(f)}`:a.dayjs(t.from).format(f):"",placeholder:T,disabled:l,className:a.cn(O)}),t&&e.jsx(j.XIcon,{onClick:()=>{m(void 0),i==null||i(void 0)},className:a.cn("text-secondary absolute top-3 right-8 size-4 cursor-pointer",l&&"pointer-events-none opacity-50")}),e.jsx(j.Calendar1,{className:a.cn("text-secondary absolute top-2.5 right-2 size-5",l&&"pointer-events-none opacity-50")})]})}),e.jsxs(h.PopoverContent,{className:"flex w-auto p-0",align:"end",side:"bottom",children:[e.jsx("div",{className:"border-border-alpha-light flex flex-col space-y-1 border-e p-2",children:k.map((o,n)=>e.jsx(L.Button,{size:"xs",variant:o.isActive?"default":"ghost",className:"justify-start",onClick:()=>d(o),children:o.label},n))}),e.jsx(u.Calendar,{...D,className:"border-border-alpha-light border-e",mode:"single",endMonth:t==null?void 0:t.to,selected:t==null?void 0:t.from,selectedToDate:t==null?void 0:t.to,selectedFromDate:t==null?void 0:t.from,timeZone:y,disabled:t!=null&&t.to?{after:t.to}:void 0,onSelect:o=>{m({...t,from:o})}}),e.jsx(u.Calendar,{...D,mode:"single",startMonth:t==null?void 0:t.from,selected:t==null?void 0:t.to,timeZone:y,disabled:t!=null&&t.from?{before:t.from}:void 0,selectedToDate:t==null?void 0:t.to,selectedFromDate:t==null?void 0:t.from,onSelect:o=>{t&&d({...t,to:o})}})]})]})};exports.DateRangePicker=A;
2
+ //# sourceMappingURL=DateRangePicker-VYbOLs-w.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateRangePicker-VYbOLs-w.cjs.js","sources":["../../src/components/datepicker/DateRangePicker.tsx"],"sourcesContent":["import { Button } from 'dgz-ui/button';\nimport { Calendar, type CalendarProps, DATE } from 'dgz-ui/calendar';\nimport { Input, type InputProps } from 'dgz-ui/form';\nimport { Popover, PopoverContent, PopoverTrigger } from 'dgz-ui/popover';\nimport { cn, dayjs } from 'dgz-ui/utils';\nimport { Calendar1, XIcon } from 'lucide-react';\nimport { type ReactNode, useEffect, useMemo, useState } from 'react';\nimport { type DateRange } from 'react-day-picker';\nimport { useTranslation } from 'react-i18next';\n\n/**\n * Type definition for a date range preset configuration.\n */\nexport type PresetType = {\n from: Date;\n to: Date;\n /** Label for the preset (e.g., \"Last 7 days\"). */\n label: ReactNode;\n isActive?: boolean;\n};\n\n/**\n * Props for the DateRangePicker component.\n */\nexport type DateRangePickerProps = Omit<\n CalendarProps,\n 'mode' | 'disabled' | 'selected'\n> & {\n /** The date format string (e.g., 'YYYY-MM-DD'). */\n format?: string;\n /** Placeholder text when no date is selected. */\n placeholder?: string;\n /** The currently selected date range. */\n selected?: DateRange;\n /** Timezone for date calculations. */\n timezone?: string;\n /** Error message to display (modifies styling). */\n error?: string;\n /** Callback function when a date range is selected. */\n onRangeSelected?: (value?: DateRange) => void;\n inputProps?: InputProps;\n disabled?: boolean;\n defaultPresets?: PresetType[];\n};\n\n/**\n * DateRangePicker displays a two-month range picker with helpful presets.\n *\n * @param props.format - Display date format.\n * @param props.selected - Currently selected date range.\n * @param props.timezone - Time zone for date calculations.\n * @param props.onRangeSelected - Callback when a full range is selected.\n * @param props.placeholder - Placeholder when no date selected.\n * @param props.error - Optional error message that adjusts styling.\n * @param props.inputProps - Props passed to the underlying Input component.\n * @param props.disabled - Whether the date range picker is disabled.\n * @param props.defaultPresets - dafault presets list for the picker.\n * @returns A date range picker component.\n */\nexport const DateRangePicker = ({\n className,\n format = DATE,\n selected,\n timezone,\n onRangeSelected = () => {},\n placeholder,\n defaultPresets,\n disabled,\n error,\n inputProps,\n ...props\n}: DateRangePickerProps) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const [date, setDate] = useState<DateRange | undefined>();\n\n useEffect(() => {\n setDate(selected);\n }, [selected]);\n\n const presets: PresetType[] = useMemo(() => {\n const today = dayjs().endOf('day');\n return (\n defaultPresets ?? [\n {\n from: today.startOf('week').toDate(),\n to: today.endOf('week').toDate(),\n label: t('This week'),\n },\n {\n from: today.startOf('month').toDate(),\n to: today.endOf('month').toDate(),\n label: t('This month'),\n },\n {\n from: today.startOf('year').toDate(),\n to: today.endOf('year').toDate(),\n label: t('This year'),\n },\n {\n from: today.subtract(7, 'day').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 7 days'),\n },\n {\n from: today.subtract(30, 'day').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 30 days'),\n },\n {\n from: today.subtract(3, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 3 months'),\n },\n {\n from: today.subtract(6, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 6 months'),\n },\n {\n from: today.subtract(12, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 12 months'),\n },\n ]\n ).map((item) => ({\n ...item,\n isActive:\n selected?.from?.getTime() === item.from.getTime() &&\n selected?.to?.getTime() === item.to.getTime(),\n }));\n }, [t, selected, defaultPresets]);\n\n const handleRangeSelect = (range: DateRange) => {\n setDate(range);\n if (range?.from && range?.to) {\n onRangeSelected(range);\n setOpen(false);\n }\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild className={'m-0!'} disabled={disabled}>\n <div className={'relative'}>\n <Input\n variant={error ? 'failure' : 'default'}\n {...inputProps}\n readOnly\n value={\n date?.from\n ? date.to\n ? `${dayjs(date.from).format(format)}-${dayjs(date.to).format(format)}`\n : dayjs(date.from).format(format)\n : ''\n }\n placeholder={placeholder}\n disabled={disabled}\n className={cn(className)}\n />\n {date && (\n <XIcon\n onClick={() => {\n setDate(undefined);\n onRangeSelected?.(undefined);\n }}\n className={cn(\n 'text-secondary absolute top-3 right-8 size-4 cursor-pointer',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n )}\n <Calendar1\n className={cn(\n 'text-secondary absolute top-2.5 right-2 size-5',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n </div>\n </PopoverTrigger>\n <PopoverContent className=\"flex w-auto p-0\" align=\"end\" side={'bottom'}>\n <div\n className={\n 'border-border-alpha-light flex flex-col space-y-1 border-e p-2'\n }\n >\n {presets.map((preset, index) => (\n <Button\n size={'xs'}\n key={index}\n variant={preset.isActive ? 'default' : 'ghost'}\n className={'justify-start'}\n onClick={() => handleRangeSelect(preset)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n <Calendar\n {...props}\n className={'border-border-alpha-light border-e'}\n mode=\"single\"\n endMonth={date?.to}\n selected={date?.from}\n selectedToDate={date?.to}\n selectedFromDate={date?.from}\n timeZone={timezone}\n disabled={\n date?.to\n ? {\n after: date.to,\n }\n : undefined\n }\n onSelect={(from) => {\n setDate({ ...date, from: from as Date | undefined });\n }}\n />\n <Calendar\n {...props}\n mode=\"single\"\n startMonth={date?.from}\n selected={date?.to}\n timeZone={timezone}\n disabled={\n date?.from\n ? {\n before: date.from,\n }\n : undefined\n }\n selectedToDate={date?.to}\n selectedFromDate={date?.from}\n onSelect={(to) => {\n if (date) {\n handleRangeSelect({ ...date, to: to as Date | undefined });\n }\n }}\n />\n </PopoverContent>\n </Popover>\n );\n};\n"],"names":["DateRangePicker","className","format","DATE","selected","timezone","onRangeSelected","placeholder","defaultPresets","disabled","error","inputProps","props","t","useTranslation","open","setOpen","useState","date","setDate","useEffect","presets","useMemo","today","dayjs","item","_a","_b","handleRangeSelect","range","jsxs","Popover","jsx","PopoverTrigger","Input","cn","XIcon","Calendar1","PopoverContent","preset","index","Button","Calendar","from","to"],"mappings":"iQA2DaA,EAAkB,CAAC,CAC9B,UAAAC,EACA,OAAAC,EAASC,EAAAA,KACT,SAAAC,EACA,SAAAC,EACA,gBAAAC,EAAkB,IAAM,CAAC,EACzB,YAAAC,EACA,eAAAC,EACA,SAAAC,EACA,MAAAC,EACA,WAAAC,EACA,GAAGC,CACL,IAA4B,CAC1B,KAAM,CAAA,EAAEC,CAAA,EAAMC,iBAAA,EACR,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAAS,EAAK,EAChC,CAACC,EAAMC,CAAO,EAAIF,WAAA,EAExBG,EAAAA,UAAU,IAAM,CACdD,EAAQf,CAAQ,CAClB,EAAG,CAACA,CAAQ,CAAC,EAEb,MAAMiB,EAAwBC,EAAAA,QAAQ,IAAM,CAC1C,MAAMC,EAAQC,EAAAA,QAAQ,MAAM,KAAK,EACjC,OACEhB,GAAkB,CAChB,CACE,KAAMe,EAAM,QAAQ,MAAM,EAAE,OAAA,EAC5B,GAAIA,EAAM,MAAM,MAAM,EAAE,OAAA,EACxB,MAAOV,EAAE,WAAW,CAAA,EAEtB,CACE,KAAMU,EAAM,QAAQ,OAAO,EAAE,OAAA,EAC7B,GAAIA,EAAM,MAAM,OAAO,EAAE,OAAA,EACzB,MAAOV,EAAE,YAAY,CAAA,EAEvB,CACE,KAAMU,EAAM,QAAQ,MAAM,EAAE,OAAA,EAC5B,GAAIA,EAAM,MAAM,MAAM,EAAE,OAAA,EACxB,MAAOV,EAAE,WAAW,CAAA,EAEtB,CACE,KAAMU,EAAM,SAAS,EAAG,KAAK,EAAE,QAAQ,KAAK,EAAE,OAAA,EAC9C,GAAIA,EAAM,OAAA,EACV,MAAOV,EAAE,aAAa,CAAA,EAExB,CACE,KAAMU,EAAM,SAAS,GAAI,KAAK,EAAE,QAAQ,KAAK,EAAE,OAAA,EAC/C,GAAIA,EAAM,OAAA,EACV,MAAOV,EAAE,cAAc,CAAA,EAEzB,CACE,KAAMU,EAAM,SAAS,EAAG,OAAO,EAAE,QAAQ,KAAK,EAAE,OAAA,EAChD,GAAIA,EAAM,OAAA,EACV,MAAOV,EAAE,eAAe,CAAA,EAE1B,CACE,KAAMU,EAAM,SAAS,EAAG,OAAO,EAAE,QAAQ,KAAK,EAAE,OAAA,EAChD,GAAIA,EAAM,OAAA,EACV,MAAOV,EAAE,eAAe,CAAA,EAE1B,CACE,KAAMU,EAAM,SAAS,GAAI,OAAO,EAAE,QAAQ,KAAK,EAAE,OAAA,EACjD,GAAIA,EAAM,OAAA,EACV,MAAOV,EAAE,gBAAgB,CAAA,CAC3B,GAEF,IAAKY,GAAA,SAAU,OACf,GAAGA,EACH,WACEC,EAAAtB,GAAA,YAAAA,EAAU,OAAV,YAAAsB,EAAgB,aAAcD,EAAK,KAAK,QAAA,KACxCE,EAAAvB,GAAA,YAAAA,EAAU,KAAV,YAAAuB,EAAc,aAAcF,EAAK,GAAG,QAAA,CAAQ,EAC9C,CACJ,EAAG,CAACZ,EAAGT,EAAUI,CAAc,CAAC,EAE1BoB,EAAqBC,GAAqB,CAC9CV,EAAQU,CAAK,EACTA,GAAA,MAAAA,EAAO,OAAQA,GAAA,MAAAA,EAAO,MACxBvB,EAAgBuB,CAAK,EACrBb,EAAQ,EAAK,EAEjB,EAEA,OACEc,EAAAA,KAACC,EAAAA,QAAA,CAAQ,KAAAhB,EAAY,aAAcC,EACjC,SAAA,CAAAgB,EAAAA,IAACC,EAAAA,eAAA,CAAe,QAAO,GAAC,UAAW,OAAQ,SAAAxB,EACzC,SAAAqB,EAAAA,KAAC,MAAA,CAAI,UAAW,WACd,SAAA,CAAAE,EAAAA,IAACE,EAAAA,MAAA,CACC,QAASxB,EAAQ,UAAY,UAC5B,GAAGC,EACJ,SAAQ,GACR,MACEO,GAAA,MAAAA,EAAM,KACFA,EAAK,GACH,GAAGM,QAAMN,EAAK,IAAI,EAAE,OAAOhB,CAAM,CAAC,IAAIsB,QAAMN,EAAK,EAAE,EAAE,OAAOhB,CAAM,CAAC,GACnEsB,QAAMN,EAAK,IAAI,EAAE,OAAOhB,CAAM,EAChC,GAEN,YAAAK,EACA,SAAAE,EACA,UAAW0B,EAAAA,GAAGlC,CAAS,CAAA,CAAA,EAExBiB,GACCc,EAAAA,IAACI,EAAAA,MAAA,CACC,QAAS,IAAM,CACbjB,EAAQ,MAAS,EACjBb,GAAA,MAAAA,EAAkB,OACpB,EACA,UAAW6B,EAAAA,GACT,8DACA1B,GAAY,gCAAA,CACd,CAAA,EAGJuB,EAAAA,IAACK,EAAAA,UAAA,CACC,UAAWF,EAAAA,GACT,iDACA1B,GAAY,gCAAA,CACd,CAAA,CACF,CAAA,CACF,CAAA,CACF,SACC6B,EAAAA,eAAA,CAAe,UAAU,kBAAkB,MAAM,MAAM,KAAM,SAC5D,SAAA,CAAAN,EAAAA,IAAC,MAAA,CACC,UACE,iEAGD,SAAAX,EAAQ,IAAI,CAACkB,EAAQC,IACpBR,EAAAA,IAACS,EAAAA,OAAA,CACC,KAAM,KAEN,QAASF,EAAO,SAAW,UAAY,QACvC,UAAW,gBACX,QAAS,IAAMX,EAAkBW,CAAM,EAEtC,SAAAA,EAAO,KAAA,EALHC,CAAA,CAOR,CAAA,CAAA,EAEHR,EAAAA,IAACU,EAAAA,SAAA,CACE,GAAG9B,EACJ,UAAW,qCACX,KAAK,SACL,SAAUM,GAAA,YAAAA,EAAM,GAChB,SAAUA,GAAA,YAAAA,EAAM,KAChB,eAAgBA,GAAA,YAAAA,EAAM,GACtB,iBAAkBA,GAAA,YAAAA,EAAM,KACxB,SAAUb,EACV,SACEa,GAAA,MAAAA,EAAM,GACF,CACE,MAAOA,EAAK,EAAA,EAEd,OAEN,SAAWyB,GAAS,CAClBxB,EAAQ,CAAE,GAAGD,EAAM,KAAAyB,EAAgC,CACrD,CAAA,CAAA,EAEFX,EAAAA,IAACU,EAAAA,SAAA,CACE,GAAG9B,EACJ,KAAK,SACL,WAAYM,GAAA,YAAAA,EAAM,KAClB,SAAUA,GAAA,YAAAA,EAAM,GAChB,SAAUb,EACV,SACEa,GAAA,MAAAA,EAAM,KACF,CACE,OAAQA,EAAK,IAAA,EAEf,OAEN,eAAgBA,GAAA,YAAAA,EAAM,GACtB,iBAAkBA,GAAA,YAAAA,EAAM,KACxB,SAAW0B,GAAO,CACZ1B,GACFU,EAAkB,CAAE,GAAGV,EAAM,GAAA0B,EAA4B,CAE7D,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/DateRangePicker-CUv-qznZ.cjs.js");exports.DateRangePicker=e.DateRangePicker;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/DateRangePicker-VYbOLs-w.cjs.js");exports.DateRangePicker=e.DateRangePicker;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { D as r } from "../../chunks/DateRangePicker-DeoV3xqL.es.js";
1
+ import { D as r } from "../../chunks/DateRangePicker-C2ZYbgXb.es.js";
2
2
  export {
3
3
  r as DateRangePicker
4
4
  };
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("dgz-ui/form"),e=require("react/jsx-runtime"),b=require("react"),g=require("dgz-ui/calendar"),M=require("dgz-ui/popover"),x=require("dgz-ui/utils"),F=require("../../chunks/MyInput-mL2G5h2s.cjs.js"),S=require("lucide-react"),I=require("../../chunks/DateRangePicker-CUv-qznZ.cjs.js"),P=require("../../chunks/MySelect-CmLxmNJz.cjs.js"),T=({control:r,name:t,label:a,rules:o,...c})=>{const l=b.useId();return t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:o,render:({field:n})=>e.jsx(s.FormLabel,{className:"block",htmlFor:c.id||l,children:e.jsxs(s.FormItem,{className:"flex flex-row items-start gap-3",children:[e.jsx(s.FormControl,{children:e.jsx(s.Checkbox,{id:c.id||l,checked:n.value,onCheckedChange:n.onChange,...c})}),a&&e.jsx("div",{className:"mt-0.5",children:a})]})})})||null},f=({control:r,name:t,label:a,required:o,rules:c,format:l=g.DATE,floatingError:n,placeholder:i,disabled:m,register:j,className:u,showTime:N,inputProps:y,...v})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:c,render:({field:d,formState:h})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs(M.Popover,{children:[e.jsx(M.PopoverTrigger,{asChild:!0,children:e.jsxs("div",{className:"relative",children:[e.jsx(s.FormControl,{children:e.jsx(s.Input,{...y,variant:F.get(h.errors,`${t}.message`)?"failure":"default",disabled:m,...d,readOnly:!0,placeholder:i||"Pick a date",value:d.value?x.dayjs(d.value).format(l):void 0,className:x.cn("m-0 text-start",u)})}),e.jsx(S.Calendar1,{className:x.cn("text-secondary absolute top-2.5 right-2 size-5",m&&"pointer-events-none opacity-50")}),e.jsx(s.FormMessage,{className:x.cn(n&&"absolute -bottom-5")})]})}),!m&&e.jsxs(M.PopoverContent,{className:"w-auto p-0",align:"start",children:[e.jsx(g.Calendar,{...v,mode:"single",selected:d.value,onSelect:d.onChange}),N&&e.jsx("div",{className:"px-4 pb-3",children:e.jsx(g.TimePicker,{value:x.dayjs(d.value).format("HH:mm"),onChange:k=>{const[C,p]=k.split(":");d.onChange(x.dayjs(d.value).set("hour",Number(C)).set("minute",Number(p)).toDate())}})})]})]})]})})||null,q=({control:r,name:t,label:a,required:o,rules:c,placeholder:l,floatingError:n,...i})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:c,render:({field:m,formState:j})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs("div",{children:[e.jsx(s.FormControl,{children:e.jsx(I.DateRangePicker,{...i,error:`${F.get(j.errors,t,"")}`,selected:m.value,onRangeSelected:m.onChange,placeholder:l})}),e.jsx(s.FormMessage,{className:x.cn(n&&"absolute -bottom-5")})]})]})})||null,L=({control:r,name:t,label:a,rules:o,required:c,floatingError:l,...n})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:o,render:({field:i})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",c&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs("div",{children:[e.jsx(s.FormControl,{children:e.jsx(s.HtmlEditor,{...i,...n})}),e.jsx(s.FormMessage,{className:x.cn(l&&"absolute -bottom-5")})]})]})})||null,R=({control:r,name:t,label:a,rules:o,required:c,floatingError:l,...n})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:o,render:({field:i,formState:m})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",c&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs("div",{children:[e.jsx(s.FormControl,{children:e.jsx(s.MaskInput,{thousandsSeparator:" ",lazy:!1,placeholderChar:"_",unmask:!0,...i,...n,variant:F.get(m.errors,`${t}.message`)?"failure":"default",onAccept:j=>i.onChange(j)})}),e.jsx(s.FormMessage,{className:x.cn(l&&"absolute -bottom-5")})]})]})})||null,w=({control:r,name:t,label:a,rules:o,value:c,...l})=>{const n=b.useId();return t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:o,render:({field:i})=>e.jsx(s.FormLabel,{className:"block",htmlFor:l.id||n,children:e.jsxs(s.FormItem,{className:"flex flex-row items-start gap-3",children:[e.jsx(s.FormControl,{children:e.jsx(s.RadioGroupItem,{id:l.id||n,value:c,checked:i.value===c,onClick:()=>{i.value!==c&&i.onChange(c)},...l})}),a&&e.jsx("div",{className:"mt-0.5",children:a})]})})})||null},D=({control:r,name:t,label:a,required:o,className:c,rules:l,options:n=[],placeholder:i="Select an option",disabled:m,onChange:j})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:l,render:({field:u,formState:N})=>{const y=!!F.get(N.errors,`${t}`),v=d=>{const h=Number(d)?Number(d):d;h&&u.value!==h&&(u.onChange(h),j==null||j(h))};return e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{children:[a," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs("div",{children:[e.jsx(s.FormControl,{children:e.jsxs(s.Select,{value:`${u.value||""}`,onValueChange:v,disabled:m,children:[e.jsx(s.SelectTrigger,{ref:u.ref,variant:y?"failure":"default",className:x.cn(c),children:e.jsx(s.SelectValue,{placeholder:i})}),e.jsx(s.SelectContent,{children:n.map(d=>e.jsx(s.SelectItem,{value:String(d.value),children:d.label},String(d.value)))})]})}),e.jsx(s.FormMessage,{})]})]})}}),E=({control:r,name:t,label:a,rules:o,...c})=>{const l=b.useId();return t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:o,render:({field:n})=>e.jsx(s.FormLabel,{className:"block",htmlFor:c.id||l,children:e.jsxs(s.FormItem,{className:"flex flex-row items-start gap-3",children:[e.jsx(s.FormControl,{children:e.jsx(s.Switch,{id:c.id||l,className:"m-0",checked:n.value,onCheckedChange:n.onChange,...c})}),a&&e.jsx("div",{className:"mt-0.5",children:a})]})})})||null},O=({control:r,name:t,label:a,required:o,rules:c,className:l,floatingError:n,...i})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:c,render:({field:m,formState:j})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs("div",{children:[e.jsx(s.FormControl,{children:e.jsx(s.Textarea,{variant:F.get(j.errors,`${t}.message`)?"failure":"default",...i,...m,className:x.cn(l)})}),e.jsx(s.FormMessage,{className:x.cn(n&&"absolute -bottom-5")})]})]})})||null,$=({control:r,name:t,label:a,required:o,className:c,rules:l,floatingError:n,...i})=>t&&r?e.jsx(s.FormField,{control:r,name:t,rules:l,render:({field:m})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]})," ",e.jsxs("div",{children:[e.jsx(s.FormControl,{children:e.jsx(g.TimePicker,{...m,...i})}),e.jsx(s.FormMessage,{className:x.cn(n&&"absolute -bottom-5")})]})]})}):e.jsx(g.TimePicker,{className:"mt-2",...i});exports.MyInput=F.MyInput;exports.MySelect=P.MySelect;exports.MyCheckbox=T;exports.MyDatePicker=f;exports.MyDateRangePicker=q;exports.MyHtmlEditor=L;exports.MyMaskInput=R;exports.MyRadio=w;exports.MyShadcnSelect=D;exports.MySwitch=E;exports.MyTextarea=O;exports.MyTimePicker=$;Object.keys(s).forEach(r=>{r!=="default"&&!Object.prototype.hasOwnProperty.call(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:()=>s[r]})});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("dgz-ui/form"),e=require("react/jsx-runtime"),b=require("react"),g=require("dgz-ui/calendar"),M=require("dgz-ui/popover"),x=require("dgz-ui/utils"),F=require("../../chunks/MyInput-mL2G5h2s.cjs.js"),S=require("lucide-react"),I=require("../../chunks/DateRangePicker-VYbOLs-w.cjs.js"),P=require("../../chunks/MySelect-CmLxmNJz.cjs.js"),T=({control:r,name:t,label:a,rules:o,...c})=>{const l=b.useId();return t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:o,render:({field:n})=>e.jsx(s.FormLabel,{className:"block",htmlFor:c.id||l,children:e.jsxs(s.FormItem,{className:"flex flex-row items-start gap-3",children:[e.jsx(s.FormControl,{children:e.jsx(s.Checkbox,{id:c.id||l,checked:n.value,onCheckedChange:n.onChange,...c})}),a&&e.jsx("div",{className:"mt-0.5",children:a})]})})})||null},f=({control:r,name:t,label:a,required:o,rules:c,format:l=g.DATE,floatingError:n,placeholder:i,disabled:m,register:j,className:u,showTime:N,inputProps:y,...v})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:c,render:({field:d,formState:h})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs(M.Popover,{children:[e.jsx(M.PopoverTrigger,{asChild:!0,children:e.jsxs("div",{className:"relative",children:[e.jsx(s.FormControl,{children:e.jsx(s.Input,{...y,variant:F.get(h.errors,`${t}.message`)?"failure":"default",disabled:m,...d,readOnly:!0,placeholder:i||"Pick a date",value:d.value?x.dayjs(d.value).format(l):void 0,className:x.cn("m-0 text-start",u)})}),e.jsx(S.Calendar1,{className:x.cn("text-secondary absolute top-2.5 right-2 size-5",m&&"pointer-events-none opacity-50")}),e.jsx(s.FormMessage,{className:x.cn(n&&"absolute -bottom-5")})]})}),!m&&e.jsxs(M.PopoverContent,{className:"w-auto p-0",align:"start",children:[e.jsx(g.Calendar,{...v,mode:"single",selected:d.value,onSelect:d.onChange}),N&&e.jsx("div",{className:"px-4 pb-3",children:e.jsx(g.TimePicker,{value:x.dayjs(d.value).format("HH:mm"),onChange:k=>{const[C,p]=k.split(":");d.onChange(x.dayjs(d.value).set("hour",Number(C)).set("minute",Number(p)).toDate())}})})]})]})]})})||null,q=({control:r,name:t,label:a,required:o,rules:c,placeholder:l,floatingError:n,...i})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:c,render:({field:m,formState:j})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs("div",{children:[e.jsx(s.FormControl,{children:e.jsx(I.DateRangePicker,{...i,error:`${F.get(j.errors,t,"")}`,selected:m.value,onRangeSelected:m.onChange,placeholder:l})}),e.jsx(s.FormMessage,{className:x.cn(n&&"absolute -bottom-5")})]})]})})||null,L=({control:r,name:t,label:a,rules:o,required:c,floatingError:l,...n})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:o,render:({field:i})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",c&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs("div",{children:[e.jsx(s.FormControl,{children:e.jsx(s.HtmlEditor,{...i,...n})}),e.jsx(s.FormMessage,{className:x.cn(l&&"absolute -bottom-5")})]})]})})||null,R=({control:r,name:t,label:a,rules:o,required:c,floatingError:l,...n})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:o,render:({field:i,formState:m})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",c&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs("div",{children:[e.jsx(s.FormControl,{children:e.jsx(s.MaskInput,{thousandsSeparator:" ",lazy:!1,placeholderChar:"_",unmask:!0,...i,...n,variant:F.get(m.errors,`${t}.message`)?"failure":"default",onAccept:j=>i.onChange(j)})}),e.jsx(s.FormMessage,{className:x.cn(l&&"absolute -bottom-5")})]})]})})||null,w=({control:r,name:t,label:a,rules:o,value:c,...l})=>{const n=b.useId();return t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:o,render:({field:i})=>e.jsx(s.FormLabel,{className:"block",htmlFor:l.id||n,children:e.jsxs(s.FormItem,{className:"flex flex-row items-start gap-3",children:[e.jsx(s.FormControl,{children:e.jsx(s.RadioGroupItem,{id:l.id||n,value:c,checked:i.value===c,onClick:()=>{i.value!==c&&i.onChange(c)},...l})}),a&&e.jsx("div",{className:"mt-0.5",children:a})]})})})||null},D=({control:r,name:t,label:a,required:o,className:c,rules:l,options:n=[],placeholder:i="Select an option",disabled:m,onChange:j})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:l,render:({field:u,formState:N})=>{const y=!!F.get(N.errors,`${t}`),v=d=>{const h=Number(d)?Number(d):d;h&&u.value!==h&&(u.onChange(h),j==null||j(h))};return e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{children:[a," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs("div",{children:[e.jsx(s.FormControl,{children:e.jsxs(s.Select,{value:`${u.value||""}`,onValueChange:v,disabled:m,children:[e.jsx(s.SelectTrigger,{ref:u.ref,variant:y?"failure":"default",className:x.cn(c),children:e.jsx(s.SelectValue,{placeholder:i})}),e.jsx(s.SelectContent,{children:n.map(d=>e.jsx(s.SelectItem,{value:String(d.value),children:d.label},String(d.value)))})]})}),e.jsx(s.FormMessage,{})]})]})}}),E=({control:r,name:t,label:a,rules:o,...c})=>{const l=b.useId();return t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:o,render:({field:n})=>e.jsx(s.FormLabel,{className:"block",htmlFor:c.id||l,children:e.jsxs(s.FormItem,{className:"flex flex-row items-start gap-3",children:[e.jsx(s.FormControl,{children:e.jsx(s.Switch,{id:c.id||l,className:"m-0",checked:n.value,onCheckedChange:n.onChange,...c})}),a&&e.jsx("div",{className:"mt-0.5",children:a})]})})})||null},O=({control:r,name:t,label:a,required:o,rules:c,className:l,floatingError:n,...i})=>t&&r&&e.jsx(s.FormField,{control:r,name:t,rules:c,render:({field:m,formState:j})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]}),e.jsxs("div",{children:[e.jsx(s.FormControl,{children:e.jsx(s.Textarea,{variant:F.get(j.errors,`${t}.message`)?"failure":"default",...i,...m,className:x.cn(l)})}),e.jsx(s.FormMessage,{className:x.cn(n&&"absolute -bottom-5")})]})]})})||null,$=({control:r,name:t,label:a,required:o,className:c,rules:l,floatingError:n,...i})=>t&&r?e.jsx(s.FormField,{control:r,name:t,rules:l,render:({field:m})=>e.jsxs(s.FormItem,{children:[a&&e.jsxs(s.FormLabel,{className:"block",children:[a," ",o&&e.jsx("span",{className:"text-red-600",children:"*"})]})," ",e.jsxs("div",{children:[e.jsx(s.FormControl,{children:e.jsx(g.TimePicker,{...m,...i})}),e.jsx(s.FormMessage,{className:x.cn(n&&"absolute -bottom-5")})]})]})}):e.jsx(g.TimePicker,{className:"mt-2",...i});exports.MyInput=F.MyInput;exports.MySelect=P.MySelect;exports.MyCheckbox=T;exports.MyDatePicker=f;exports.MyDateRangePicker=q;exports.MyHtmlEditor=L;exports.MyMaskInput=R;exports.MyRadio=w;exports.MyShadcnSelect=D;exports.MySwitch=E;exports.MyTextarea=O;exports.MyTimePicker=$;Object.keys(s).forEach(r=>{r!=="default"&&!Object.prototype.hasOwnProperty.call(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:()=>s[r]})});
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -8,7 +8,7 @@ import { cn as u, dayjs as S } from "dgz-ui/utils";
8
8
  import { g as b } from "../../chunks/MyInput-ByJ5vTAN.es.js";
9
9
  import { M as ke } from "../../chunks/MyInput-ByJ5vTAN.es.js";
10
10
  import { Calendar1 as Q } from "lucide-react";
11
- import { D as U } from "../../chunks/DateRangePicker-DeoV3xqL.es.js";
11
+ import { D as U } from "../../chunks/DateRangePicker-C2ZYbgXb.es.js";
12
12
  import { M as Ce } from "../../chunks/MySelect-CRXtMlbf.es.js";
13
13
  const se = ({
14
14
  control: a,
@@ -1,6 +1,17 @@
1
1
  import { CalendarProps } from 'dgz-ui/calendar';
2
2
  import { InputProps } from 'dgz-ui/form';
3
+ import { ReactNode } from 'react';
3
4
  import { DateRange } from 'react-day-picker';
5
+ /**
6
+ * Type definition for a date range preset configuration.
7
+ */
8
+ export type PresetType = {
9
+ from: Date;
10
+ to: Date;
11
+ /** Label for the preset (e.g., "Last 7 days"). */
12
+ label: ReactNode;
13
+ isActive?: boolean;
14
+ };
4
15
  /**
5
16
  * Props for the DateRangePicker component.
6
17
  */
@@ -19,6 +30,7 @@ export type DateRangePickerProps = Omit<CalendarProps, 'mode' | 'disabled' | 'se
19
30
  onRangeSelected?: (value?: DateRange) => void;
20
31
  inputProps?: InputProps;
21
32
  disabled?: boolean;
33
+ defaultPresets?: PresetType[];
22
34
  };
23
35
  /**
24
36
  * DateRangePicker displays a two-month range picker with helpful presets.
@@ -31,7 +43,8 @@ export type DateRangePickerProps = Omit<CalendarProps, 'mode' | 'disabled' | 'se
31
43
  * @param props.error - Optional error message that adjusts styling.
32
44
  * @param props.inputProps - Props passed to the underlying Input component.
33
45
  * @param props.disabled - Whether the date range picker is disabled.
46
+ * @param props.defaultPresets - dafault presets list for the picker.
34
47
  * @returns A date range picker component.
35
48
  */
36
- export declare const DateRangePicker: ({ className, format, selected, timezone, onRangeSelected, placeholder, disabled, error, inputProps, ...props }: DateRangePickerProps) => import("react/jsx-runtime").JSX.Element;
49
+ export declare const DateRangePicker: ({ className, format, selected, timezone, onRangeSelected, placeholder, defaultPresets, disabled, error, inputProps, ...props }: DateRangePickerProps) => import("react/jsx-runtime").JSX.Element;
37
50
  //# sourceMappingURL=DateRangePicker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.d.ts","sourceRoot":"","sources":["../../../../src/components/datepicker/DateRangePicker.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,aAAa,EAAQ,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAKrD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,aAAa,EACb,MAAM,GAAG,UAAU,GAAG,UAAU,CACjC,GAAG;IACF,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAC9C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAWF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,GAAI,gHAW7B,oBAAoB,4CAyKtB,CAAC"}
1
+ {"version":3,"file":"DateRangePicker.d.ts","sourceRoot":"","sources":["../../../../src/components/datepicker/DateRangePicker.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,aAAa,EAAQ,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAIrD,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,OAAO,CAAC;AACrE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,EAAE,EAAE,IAAI,CAAC;IACT,kDAAkD;IAClD,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,aAAa,EACb,MAAM,GAAG,UAAU,GAAG,UAAU,CACjC,GAAG;IACF,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAC9C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,eAAe,GAAI,gIAY7B,oBAAoB,4CA2KtB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dgz-ui-shared",
3
- "version": "1.2.46",
3
+ "version": "1.2.47",
4
4
  "description": "Custom ui library using React.js, Shadcn/ui, TailwindCSS, Typescript, dgz-ui library",
5
5
  "keywords": [
6
6
  "dgz-ui",
@@ -1,2 +0,0 @@
1
- "use strict";const e=require("react/jsx-runtime"),k=require("dgz-ui/button"),u=require("dgz-ui/calendar"),L=require("dgz-ui/form"),h=require("dgz-ui/popover"),a=require("dgz-ui/utils"),v=require("lucide-react"),c=require("react"),P=require("react-i18next"),w=({className:j,format:f=u.DATE,selected:s,timezone:y,onRangeSelected:i=()=>{},placeholder:O,disabled:l,error:T,inputProps:q,...b})=>{const{t:r}=P.useTranslation(),[N,D]=c.useState(!1),[t,m]=c.useState();c.useEffect(()=>{m(s)},[s]);const C=c.useMemo(()=>{const o=a.dayjs().endOf("day");return[{from:o.startOf("week").toDate(),to:o.endOf("week").toDate(),label:r("This week")},{from:o.startOf("month").toDate(),to:o.endOf("month").toDate(),label:r("This month")},{from:o.startOf("year").toDate(),to:o.endOf("year").toDate(),label:r("This year")},{from:o.subtract(7,"day").startOf("day").toDate(),to:o.toDate(),label:r("Last 7 days")},{from:o.subtract(30,"day").startOf("day").toDate(),to:o.toDate(),label:r("Last 30 days")},{from:o.subtract(3,"month").startOf("day").toDate(),to:o.toDate(),label:r("Last 3 months")},{from:o.subtract(6,"month").startOf("day").toDate(),to:o.toDate(),label:r("Last 6 months")},{from:o.subtract(12,"month").startOf("day").toDate(),to:o.toDate(),label:r("Last 12 months")}].map(n=>{var p,x;return{...n,isActive:((p=s==null?void 0:s.from)==null?void 0:p.getTime())===n.from.getTime()&&((x=s==null?void 0:s.to)==null?void 0:x.getTime())===n.to.getTime()}})},[r,s]),d=o=>{m(o),o!=null&&o.from&&(o!=null&&o.to)&&(i(o),D(!1))};return e.jsxs(h.Popover,{open:N,onOpenChange:D,children:[e.jsx(h.PopoverTrigger,{asChild:!0,className:"m-0!",disabled:l,children:e.jsxs("div",{className:"relative",children:[e.jsx(L.Input,{variant:T?"failure":"default",...q,readOnly:!0,value:t!=null&&t.from?t.to?`${a.dayjs(t.from).format(f)}-${a.dayjs(t.to).format(f)}`:a.dayjs(t.from).format(f):"",placeholder:O,disabled:l,className:a.cn(j)}),t&&e.jsx(v.XIcon,{onClick:()=>{m(void 0),i==null||i(void 0)},className:a.cn("text-secondary absolute top-3 right-8 size-4 cursor-pointer",l&&"pointer-events-none opacity-50")}),e.jsx(v.Calendar1,{className:a.cn("text-secondary absolute top-2.5 right-2 size-5",l&&"pointer-events-none opacity-50")})]})}),e.jsxs(h.PopoverContent,{className:"flex w-auto p-0",align:"end",side:"bottom",children:[e.jsx("div",{className:"border-border-alpha-light flex flex-col space-y-1 border-e p-2",children:C.map((o,n)=>e.jsx(k.Button,{size:"xs",variant:o.isActive?"default":"ghost",className:"justify-start",onClick:()=>d(o),children:o.label},n))}),e.jsx(u.Calendar,{...b,className:"border-border-alpha-light border-e",mode:"single",endMonth:t==null?void 0:t.to,selected:t==null?void 0:t.from,selectedToDate:t==null?void 0:t.to,selectedFromDate:t==null?void 0:t.from,timeZone:y,disabled:t!=null&&t.to?{after:t.to}:void 0,onSelect:o=>{m({...t,from:o})}}),e.jsx(u.Calendar,{...b,mode:"single",startMonth:t==null?void 0:t.from,selected:t==null?void 0:t.to,timeZone:y,disabled:t!=null&&t.from?{before:t.from}:void 0,selectedToDate:t==null?void 0:t.to,selectedFromDate:t==null?void 0:t.from,onSelect:o=>{t&&d({...t,to:o})}})]})]})};exports.DateRangePicker=w;
2
- //# sourceMappingURL=DateRangePicker-CUv-qznZ.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DateRangePicker-CUv-qznZ.cjs.js","sources":["../../src/components/datepicker/DateRangePicker.tsx"],"sourcesContent":["import { Button } from 'dgz-ui/button';\nimport { Calendar, type CalendarProps, DATE } from 'dgz-ui/calendar';\nimport { Input, type InputProps } from 'dgz-ui/form';\nimport { Popover, PopoverContent, PopoverTrigger } from 'dgz-ui/popover';\nimport { cn, dayjs } from 'dgz-ui/utils';\nimport { Calendar1, XIcon } from 'lucide-react';\nimport { type ReactNode, useEffect, useMemo, useState } from 'react';\nimport { type DateRange } from 'react-day-picker';\nimport { useTranslation } from 'react-i18next';\n\n/**\n * Props for the DateRangePicker component.\n */\nexport type DateRangePickerProps = Omit<\n CalendarProps,\n 'mode' | 'disabled' | 'selected'\n> & {\n /** The date format string (e.g., 'YYYY-MM-DD'). */\n format?: string;\n /** Placeholder text when no date is selected. */\n placeholder?: string;\n /** The currently selected date range. */\n selected?: DateRange;\n /** Timezone for date calculations. */\n timezone?: string;\n /** Error message to display (modifies styling). */\n error?: string;\n /** Callback function when a date range is selected. */\n onRangeSelected?: (value?: DateRange) => void;\n inputProps?: InputProps;\n disabled?: boolean;\n};\n\n/**\n * Type definition for a date range preset configuration.\n */\ntype PresetType = DateRange & {\n /** Label for the preset (e.g., \"Last 7 days\"). */\n label: ReactNode;\n isActive?: boolean;\n};\n\n/**\n * DateRangePicker displays a two-month range picker with helpful presets.\n *\n * @param props.format - Display date format.\n * @param props.selected - Currently selected date range.\n * @param props.timezone - Time zone for date calculations.\n * @param props.onRangeSelected - Callback when a full range is selected.\n * @param props.placeholder - Placeholder when no date selected.\n * @param props.error - Optional error message that adjusts styling.\n * @param props.inputProps - Props passed to the underlying Input component.\n * @param props.disabled - Whether the date range picker is disabled.\n * @returns A date range picker component.\n */\nexport const DateRangePicker = ({\n className,\n format = DATE,\n selected,\n timezone,\n onRangeSelected = () => {},\n placeholder,\n disabled,\n error,\n inputProps,\n ...props\n}: DateRangePickerProps) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const [date, setDate] = useState<DateRange | undefined>();\n\n useEffect(() => {\n setDate(selected);\n }, [selected]);\n\n const presets: PresetType[] = useMemo(() => {\n const today = dayjs().endOf('day');\n return [\n {\n from: today.startOf('week').toDate(),\n to: today.endOf('week').toDate(),\n label: t('This week'),\n },\n {\n from: today.startOf('month').toDate(),\n to: today.endOf('month').toDate(),\n label: t('This month'),\n },\n {\n from: today.startOf('year').toDate(),\n to: today.endOf('year').toDate(),\n label: t('This year'),\n },\n {\n from: today.subtract(7, 'day').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 7 days'),\n },\n {\n from: today.subtract(30, 'day').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 30 days'),\n },\n {\n from: today.subtract(3, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 3 months'),\n },\n {\n from: today.subtract(6, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 6 months'),\n },\n {\n from: today.subtract(12, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 12 months'),\n },\n ].map((item) => ({\n ...item,\n isActive:\n selected?.from?.getTime() === item.from.getTime() &&\n selected?.to?.getTime() === item.to.getTime(),\n }));\n }, [t, selected]);\n\n const handleRangeSelect = (range: DateRange) => {\n setDate(range);\n if (range?.from && range?.to) {\n onRangeSelected(range);\n setOpen(false);\n }\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild className={'m-0!'} disabled={disabled}>\n <div className={'relative'}>\n <Input\n variant={error ? 'failure' : 'default'}\n {...inputProps}\n readOnly\n value={\n date?.from\n ? date.to\n ? `${dayjs(date.from).format(format)}-${dayjs(date.to).format(format)}`\n : dayjs(date.from).format(format)\n : ''\n }\n placeholder={placeholder}\n disabled={disabled}\n className={cn(className)}\n />\n {date && (\n <XIcon\n onClick={() => {\n setDate(undefined);\n onRangeSelected?.(undefined);\n }}\n className={cn(\n 'text-secondary absolute top-3 right-8 size-4 cursor-pointer',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n )}\n <Calendar1\n className={cn(\n 'text-secondary absolute top-2.5 right-2 size-5',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n </div>\n </PopoverTrigger>\n <PopoverContent className=\"flex w-auto p-0\" align=\"end\" side={'bottom'}>\n <div\n className={\n 'border-border-alpha-light flex flex-col space-y-1 border-e p-2'\n }\n >\n {presets.map((preset, index) => (\n <Button\n size={'xs'}\n key={index}\n variant={preset.isActive ? 'default' : 'ghost'}\n className={'justify-start'}\n onClick={() => handleRangeSelect(preset)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n <Calendar\n {...props}\n className={'border-border-alpha-light border-e'}\n mode=\"single\"\n endMonth={date?.to}\n selected={date?.from}\n selectedToDate={date?.to}\n selectedFromDate={date?.from}\n timeZone={timezone}\n disabled={\n date?.to\n ? {\n after: date.to,\n }\n : undefined\n }\n onSelect={(from) => {\n setDate({ ...date, from: from as Date | undefined });\n }}\n />\n <Calendar\n {...props}\n mode=\"single\"\n startMonth={date?.from}\n selected={date?.to}\n timeZone={timezone}\n disabled={\n date?.from\n ? {\n before: date.from,\n }\n : undefined\n }\n selectedToDate={date?.to}\n selectedFromDate={date?.from}\n onSelect={(to) => {\n if (date) {\n handleRangeSelect({ ...date, to: to as Date | undefined });\n }\n }}\n />\n </PopoverContent>\n </Popover>\n );\n};\n"],"names":["DateRangePicker","className","format","DATE","selected","timezone","onRangeSelected","placeholder","disabled","error","inputProps","props","t","useTranslation","open","setOpen","useState","date","setDate","useEffect","presets","useMemo","today","dayjs","item","_a","_b","handleRangeSelect","range","jsxs","Popover","jsx","PopoverTrigger","Input","cn","XIcon","Calendar1","PopoverContent","preset","index","Button","Calendar","from","to"],"mappings":"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"}
@@ -1,177 +0,0 @@
1
- import { jsxs as c, jsx as e } from "react/jsx-runtime";
2
- import { Button as j } from "dgz-ui/button";
3
- import { DATE as w, Calendar as O } from "dgz-ui/calendar";
4
- import { Input as P } from "dgz-ui/form";
5
- import { Popover as A, PopoverTrigger as M, PopoverContent as z } from "dgz-ui/popover";
6
- import { dayjs as l, cn as h } from "dgz-ui/utils";
7
- import { XIcon as E, Calendar1 as F } from "lucide-react";
8
- import { useState as d, useEffect as I, useMemo as Z } from "react";
9
- import { useTranslation as $ } from "react-i18next";
10
- const U = ({
11
- className: T,
12
- format: n = w,
13
- selected: r,
14
- timezone: p,
15
- onRangeSelected: m = () => {
16
- },
17
- placeholder: x,
18
- disabled: i,
19
- error: N,
20
- inputProps: C,
21
- ...u
22
- }) => {
23
- const { t: a } = $(), [k, D] = d(!1), [t, f] = d();
24
- I(() => {
25
- f(r);
26
- }, [r]);
27
- const L = Z(() => {
28
- const o = l().endOf("day");
29
- return [
30
- {
31
- from: o.startOf("week").toDate(),
32
- to: o.endOf("week").toDate(),
33
- label: a("This week")
34
- },
35
- {
36
- from: o.startOf("month").toDate(),
37
- to: o.endOf("month").toDate(),
38
- label: a("This month")
39
- },
40
- {
41
- from: o.startOf("year").toDate(),
42
- to: o.endOf("year").toDate(),
43
- label: a("This year")
44
- },
45
- {
46
- from: o.subtract(7, "day").startOf("day").toDate(),
47
- to: o.toDate(),
48
- label: a("Last 7 days")
49
- },
50
- {
51
- from: o.subtract(30, "day").startOf("day").toDate(),
52
- to: o.toDate(),
53
- label: a("Last 30 days")
54
- },
55
- {
56
- from: o.subtract(3, "month").startOf("day").toDate(),
57
- to: o.toDate(),
58
- label: a("Last 3 months")
59
- },
60
- {
61
- from: o.subtract(6, "month").startOf("day").toDate(),
62
- to: o.toDate(),
63
- label: a("Last 6 months")
64
- },
65
- {
66
- from: o.subtract(12, "month").startOf("day").toDate(),
67
- to: o.toDate(),
68
- label: a("Last 12 months")
69
- }
70
- ].map((s) => {
71
- var y, v;
72
- return {
73
- ...s,
74
- isActive: ((y = r == null ? void 0 : r.from) == null ? void 0 : y.getTime()) === s.from.getTime() && ((v = r == null ? void 0 : r.to) == null ? void 0 : v.getTime()) === s.to.getTime()
75
- };
76
- });
77
- }, [a, r]), b = (o) => {
78
- f(o), o != null && o.from && (o != null && o.to) && (m(o), D(!1));
79
- };
80
- return /* @__PURE__ */ c(A, { open: k, onOpenChange: D, children: [
81
- /* @__PURE__ */ e(M, { asChild: !0, className: "m-0!", disabled: i, children: /* @__PURE__ */ c("div", { className: "relative", children: [
82
- /* @__PURE__ */ e(
83
- P,
84
- {
85
- variant: N ? "failure" : "default",
86
- ...C,
87
- readOnly: !0,
88
- value: t != null && t.from ? t.to ? `${l(t.from).format(n)}-${l(t.to).format(n)}` : l(t.from).format(n) : "",
89
- placeholder: x,
90
- disabled: i,
91
- className: h(T)
92
- }
93
- ),
94
- t && /* @__PURE__ */ e(
95
- E,
96
- {
97
- onClick: () => {
98
- f(void 0), m == null || m(void 0);
99
- },
100
- className: h(
101
- "text-secondary absolute top-3 right-8 size-4 cursor-pointer",
102
- i && "pointer-events-none opacity-50"
103
- )
104
- }
105
- ),
106
- /* @__PURE__ */ e(
107
- F,
108
- {
109
- className: h(
110
- "text-secondary absolute top-2.5 right-2 size-5",
111
- i && "pointer-events-none opacity-50"
112
- )
113
- }
114
- )
115
- ] }) }),
116
- /* @__PURE__ */ c(z, { className: "flex w-auto p-0", align: "end", side: "bottom", children: [
117
- /* @__PURE__ */ e(
118
- "div",
119
- {
120
- className: "border-border-alpha-light flex flex-col space-y-1 border-e p-2",
121
- children: L.map((o, s) => /* @__PURE__ */ e(
122
- j,
123
- {
124
- size: "xs",
125
- variant: o.isActive ? "default" : "ghost",
126
- className: "justify-start",
127
- onClick: () => b(o),
128
- children: o.label
129
- },
130
- s
131
- ))
132
- }
133
- ),
134
- /* @__PURE__ */ e(
135
- O,
136
- {
137
- ...u,
138
- className: "border-border-alpha-light border-e",
139
- mode: "single",
140
- endMonth: t == null ? void 0 : t.to,
141
- selected: t == null ? void 0 : t.from,
142
- selectedToDate: t == null ? void 0 : t.to,
143
- selectedFromDate: t == null ? void 0 : t.from,
144
- timeZone: p,
145
- disabled: t != null && t.to ? {
146
- after: t.to
147
- } : void 0,
148
- onSelect: (o) => {
149
- f({ ...t, from: o });
150
- }
151
- }
152
- ),
153
- /* @__PURE__ */ e(
154
- O,
155
- {
156
- ...u,
157
- mode: "single",
158
- startMonth: t == null ? void 0 : t.from,
159
- selected: t == null ? void 0 : t.to,
160
- timeZone: p,
161
- disabled: t != null && t.from ? {
162
- before: t.from
163
- } : void 0,
164
- selectedToDate: t == null ? void 0 : t.to,
165
- selectedFromDate: t == null ? void 0 : t.from,
166
- onSelect: (o) => {
167
- t && b({ ...t, to: o });
168
- }
169
- }
170
- )
171
- ] })
172
- ] });
173
- };
174
- export {
175
- U as D
176
- };
177
- //# sourceMappingURL=DateRangePicker-DeoV3xqL.es.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DateRangePicker-DeoV3xqL.es.js","sources":["../../src/components/datepicker/DateRangePicker.tsx"],"sourcesContent":["import { Button } from 'dgz-ui/button';\nimport { Calendar, type CalendarProps, DATE } from 'dgz-ui/calendar';\nimport { Input, type InputProps } from 'dgz-ui/form';\nimport { Popover, PopoverContent, PopoverTrigger } from 'dgz-ui/popover';\nimport { cn, dayjs } from 'dgz-ui/utils';\nimport { Calendar1, XIcon } from 'lucide-react';\nimport { type ReactNode, useEffect, useMemo, useState } from 'react';\nimport { type DateRange } from 'react-day-picker';\nimport { useTranslation } from 'react-i18next';\n\n/**\n * Props for the DateRangePicker component.\n */\nexport type DateRangePickerProps = Omit<\n CalendarProps,\n 'mode' | 'disabled' | 'selected'\n> & {\n /** The date format string (e.g., 'YYYY-MM-DD'). */\n format?: string;\n /** Placeholder text when no date is selected. */\n placeholder?: string;\n /** The currently selected date range. */\n selected?: DateRange;\n /** Timezone for date calculations. */\n timezone?: string;\n /** Error message to display (modifies styling). */\n error?: string;\n /** Callback function when a date range is selected. */\n onRangeSelected?: (value?: DateRange) => void;\n inputProps?: InputProps;\n disabled?: boolean;\n};\n\n/**\n * Type definition for a date range preset configuration.\n */\ntype PresetType = DateRange & {\n /** Label for the preset (e.g., \"Last 7 days\"). */\n label: ReactNode;\n isActive?: boolean;\n};\n\n/**\n * DateRangePicker displays a two-month range picker with helpful presets.\n *\n * @param props.format - Display date format.\n * @param props.selected - Currently selected date range.\n * @param props.timezone - Time zone for date calculations.\n * @param props.onRangeSelected - Callback when a full range is selected.\n * @param props.placeholder - Placeholder when no date selected.\n * @param props.error - Optional error message that adjusts styling.\n * @param props.inputProps - Props passed to the underlying Input component.\n * @param props.disabled - Whether the date range picker is disabled.\n * @returns A date range picker component.\n */\nexport const DateRangePicker = ({\n className,\n format = DATE,\n selected,\n timezone,\n onRangeSelected = () => {},\n placeholder,\n disabled,\n error,\n inputProps,\n ...props\n}: DateRangePickerProps) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const [date, setDate] = useState<DateRange | undefined>();\n\n useEffect(() => {\n setDate(selected);\n }, [selected]);\n\n const presets: PresetType[] = useMemo(() => {\n const today = dayjs().endOf('day');\n return [\n {\n from: today.startOf('week').toDate(),\n to: today.endOf('week').toDate(),\n label: t('This week'),\n },\n {\n from: today.startOf('month').toDate(),\n to: today.endOf('month').toDate(),\n label: t('This month'),\n },\n {\n from: today.startOf('year').toDate(),\n to: today.endOf('year').toDate(),\n label: t('This year'),\n },\n {\n from: today.subtract(7, 'day').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 7 days'),\n },\n {\n from: today.subtract(30, 'day').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 30 days'),\n },\n {\n from: today.subtract(3, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 3 months'),\n },\n {\n from: today.subtract(6, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 6 months'),\n },\n {\n from: today.subtract(12, 'month').startOf('day').toDate(),\n to: today.toDate(),\n label: t('Last 12 months'),\n },\n ].map((item) => ({\n ...item,\n isActive:\n selected?.from?.getTime() === item.from.getTime() &&\n selected?.to?.getTime() === item.to.getTime(),\n }));\n }, [t, selected]);\n\n const handleRangeSelect = (range: DateRange) => {\n setDate(range);\n if (range?.from && range?.to) {\n onRangeSelected(range);\n setOpen(false);\n }\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild className={'m-0!'} disabled={disabled}>\n <div className={'relative'}>\n <Input\n variant={error ? 'failure' : 'default'}\n {...inputProps}\n readOnly\n value={\n date?.from\n ? date.to\n ? `${dayjs(date.from).format(format)}-${dayjs(date.to).format(format)}`\n : dayjs(date.from).format(format)\n : ''\n }\n placeholder={placeholder}\n disabled={disabled}\n className={cn(className)}\n />\n {date && (\n <XIcon\n onClick={() => {\n setDate(undefined);\n onRangeSelected?.(undefined);\n }}\n className={cn(\n 'text-secondary absolute top-3 right-8 size-4 cursor-pointer',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n )}\n <Calendar1\n className={cn(\n 'text-secondary absolute top-2.5 right-2 size-5',\n disabled && 'pointer-events-none opacity-50'\n )}\n />\n </div>\n </PopoverTrigger>\n <PopoverContent className=\"flex w-auto p-0\" align=\"end\" side={'bottom'}>\n <div\n className={\n 'border-border-alpha-light flex flex-col space-y-1 border-e p-2'\n }\n >\n {presets.map((preset, index) => (\n <Button\n size={'xs'}\n key={index}\n variant={preset.isActive ? 'default' : 'ghost'}\n className={'justify-start'}\n onClick={() => handleRangeSelect(preset)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n <Calendar\n {...props}\n className={'border-border-alpha-light border-e'}\n mode=\"single\"\n endMonth={date?.to}\n selected={date?.from}\n selectedToDate={date?.to}\n selectedFromDate={date?.from}\n timeZone={timezone}\n disabled={\n date?.to\n ? {\n after: date.to,\n }\n : undefined\n }\n onSelect={(from) => {\n setDate({ ...date, from: from as Date | undefined });\n }}\n />\n <Calendar\n {...props}\n mode=\"single\"\n startMonth={date?.from}\n selected={date?.to}\n timeZone={timezone}\n disabled={\n date?.from\n ? {\n before: date.from,\n }\n : undefined\n }\n selectedToDate={date?.to}\n selectedFromDate={date?.from}\n onSelect={(to) => {\n if (date) {\n handleRangeSelect({ ...date, to: to as Date | undefined });\n }\n }}\n />\n </PopoverContent>\n </Popover>\n );\n};\n"],"names":["DateRangePicker","className","format","DATE","selected","timezone","onRangeSelected","placeholder","disabled","error","inputProps","props","t","useTranslation","open","setOpen","useState","date","setDate","useEffect","presets","useMemo","today","dayjs","item","_a","_b","handleRangeSelect","range","jsxs","Popover","jsx","PopoverTrigger","Input","cn","XIcon","Calendar1","PopoverContent","preset","index","Button","Calendar","from","to"],"mappings":"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"}