@shefing/quickfilter 1.0.18 → 1.0.22
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/components/date-filter.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAa,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAW3E,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,QAAQ,EACR,MAAyC,EACzC,SAAS,EACT,KAAK,GACN,EAAE,eAAe,+
|
|
1
|
+
{"version":3,"file":"date-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/components/date-filter.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAa,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAW3E,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,QAAQ,EACR,MAAyC,EACzC,SAAS,EACT,KAAK,GACN,EAAE,eAAe,+BAmVjB"}
|
|
@@ -105,9 +105,9 @@ export function DateFilter({ label, value, onChange, locale = {
|
|
|
105
105
|
if (from && to) {
|
|
106
106
|
return `${formatDate(from, 'dd/MM/yyyy')}-${formatDate(to, 'dd/MM/yyyy')}`;
|
|
107
107
|
} else if (from) {
|
|
108
|
-
return `${labels.from}
|
|
108
|
+
return `${labels.from}:${formatDate(from, 'dd/MM/yyyy')}`;
|
|
109
109
|
} else if (to) {
|
|
110
|
-
return `${labels.to}
|
|
110
|
+
return `${labels.to}:${formatDate(to, 'dd/MM/yyyy')}`;
|
|
111
111
|
}
|
|
112
112
|
return labels.custom;
|
|
113
113
|
}
|
|
@@ -118,7 +118,7 @@ export function DateFilter({ label, value, onChange, locale = {
|
|
|
118
118
|
];
|
|
119
119
|
const option = allOptions.find((opt)=>opt.value === internalValue.predefinedValue);
|
|
120
120
|
const dateRange = getDateRangeForOption(internalValue.predefinedValue, locale.code);
|
|
121
|
-
return `${option?.label || internalValue.predefinedValue}
|
|
121
|
+
return `${option?.label || internalValue.predefinedValue}${dateRange.description}`;
|
|
122
122
|
}
|
|
123
123
|
return labels.selectOption;
|
|
124
124
|
};
|
|
@@ -179,7 +179,7 @@ export function DateFilter({ label, value, onChange, locale = {
|
|
|
179
179
|
variant: "outline",
|
|
180
180
|
role: "combobox",
|
|
181
181
|
"aria-expanded": isOpen,
|
|
182
|
-
className: "useTw w-full justify-between bg-background relative min-w-70",
|
|
182
|
+
className: "useTw w-full justify-between bg-background relative min-w-70 px-2",
|
|
183
183
|
children: [
|
|
184
184
|
/*#__PURE__*/ _jsx("span", {
|
|
185
185
|
className: `useTw truncate ${isRTL && 'text-right'}`,
|
|
@@ -204,11 +204,11 @@ export function DateFilter({ label, value, onChange, locale = {
|
|
|
204
204
|
children: [
|
|
205
205
|
/*#__PURE__*/ _jsx("div", {
|
|
206
206
|
className: cn('text-sm font-semibold text-muted-foreground mb-2', isRTL && 'text-right'),
|
|
207
|
-
children: labels.
|
|
207
|
+
children: labels.past
|
|
208
208
|
}),
|
|
209
209
|
/*#__PURE__*/ _jsx("div", {
|
|
210
210
|
className: "space-y-0.5",
|
|
211
|
-
children:
|
|
211
|
+
children: pastOptions.map((option)=>/*#__PURE__*/ _jsx("div", {
|
|
212
212
|
children: renderOptionWithDate(option)
|
|
213
213
|
}, option.value))
|
|
214
214
|
})
|
|
@@ -219,11 +219,11 @@ export function DateFilter({ label, value, onChange, locale = {
|
|
|
219
219
|
children: [
|
|
220
220
|
/*#__PURE__*/ _jsx("div", {
|
|
221
221
|
className: cn('text-sm font-semibold text-muted-foreground mb-2', isRTL && 'text-right'),
|
|
222
|
-
children: labels.
|
|
222
|
+
children: labels.presentFuture
|
|
223
223
|
}),
|
|
224
224
|
/*#__PURE__*/ _jsx("div", {
|
|
225
225
|
className: "space-y-0.5",
|
|
226
|
-
children:
|
|
226
|
+
children: futureOptions.map((option)=>/*#__PURE__*/ _jsx("div", {
|
|
227
227
|
children: renderOptionWithDate(option)
|
|
228
228
|
}, option.value))
|
|
229
229
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/filters/components/date-filter.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\nimport { CalendarIcon, ChevronDown, X } from 'lucide-react';\n\nimport { formatDate, getDateRangeForOption } from '../utils/date-helpers';\nimport { DateFilterValue, DateRange, Locale } from '../types/filters-type';\nimport { Button } from '../../ui/button';\nimport { cn } from '../../lib/utils';\nimport { Label } from '../../ui/label';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover';\nimport { Separator } from '../../ui/separator';\nimport { Calendar } from '../../ui/calendar';\nimport { getDateFilterOptions } from '../constants/date-filter-options';\nimport { SupportedLocale, getLabel } from '../../labels';\n\n\ninterface DateFilterProps {\n label?: string;\n value?: DateFilterValue;\n onChange: (value: DateFilterValue) => void;\n locale?: Locale;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function DateFilter({\n label,\n value,\n onChange,\n locale = { code: 'he', direction: 'rtl' },\n className,\n style,\n}: DateFilterProps) {\n const [internalValue, setInternalValue] = useState<DateFilterValue | undefined>(value);\n const [customRange, setCustomRange] = useState<DateRange>({ from: undefined, to: undefined });\n const [showCustom, setShowCustom] = useState(false);\n const [isOpen, setIsOpen] = useState(false);\n const [openFromCalendar, setOpenFromCalendar] = useState(false);\n const [openToCalendar, setOpenToCalendar] = useState(false);\n\n const isRTL = locale.direction === 'rtl';\n const localeCode = locale.code as SupportedLocale;\n const { pastOptions, futureOptions } = getDateFilterOptions(localeCode);\n\n // Sync internal state with external value prop\n useEffect(() => {\n setInternalValue(value);\n if (value?.type === 'custom' && value.customRange) {\n setCustomRange(value.customRange);\n }\n }, [value]);\n\n const labels = {\n selectOption: getLabel('selectOption', localeCode),\n from: getLabel('from', localeCode),\n to: getLabel('to', localeCode),\n selectDate: getLabel('selectDate', localeCode),\n past: getLabel('past', localeCode),\n future: getLabel('future', localeCode),\n presentFuture: getLabel('presentFuture', localeCode),\n custom: getLabel('customRange', localeCode),\n apply: getLabel('apply', localeCode),\n cancel: getLabel('cancel', localeCode),\n };\n\n const handlePredefinedSelect = (optionValue: string) => {\n setShowCustom(false);\n setIsOpen(false);\n\n const dateRange = getDateRangeForOption(optionValue, locale.code);\n const newValue: DateFilterValue = {\n type: 'predefined',\n predefinedValue: optionValue,\n customRange: { from: dateRange.from, to: dateRange.to },\n };\n\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const handleCustomSelect = () => {\n setShowCustom(true);\n };\n\n const handleCustomRangeChange = (newRange: DateRange) => {\n setCustomRange(newRange);\n };\n\n const handleApplyCustomRange = () => {\n const newValue: DateFilterValue = {\n type: 'custom',\n customRange,\n };\n\n setInternalValue(newValue);\n onChange(newValue);\n setIsOpen(false);\n setShowCustom(false);\n };\n\n const handleCancelCustomRange = () => {\n setIsOpen(false);\n setShowCustom(false);\n setCustomRange({ from: undefined, to: undefined });\n };\n\n const handleClearAll = () => {\n setInternalValue(undefined);\n setCustomRange({ from: undefined, to: undefined });\n setShowCustom(false);\n onChange({} as DateFilterValue);\n };\n\n const hasValue = () => {\n return (\n internalValue && (internalValue.type === 'predefined' || internalValue.type === 'custom')\n );\n };\n\n const getDisplayValue = () => {\n if (internalValue?.type === 'custom' && internalValue.customRange) {\n const { from, to } = internalValue.customRange;\n if (from && to) {\n return `${formatDate(from, 'dd/MM/yyyy')}-${formatDate(to, 'dd/MM/yyyy')}`;\n } else if (from) {\n return `${labels.from}: ${formatDate(from, 'dd/MM/yyyy')}`;\n } else if (to) {\n return `${labels.to}: ${formatDate(to, 'dd/MM/yyyy')}`;\n }\n return labels.custom;\n }\n\n if (internalValue?.type === 'predefined' && internalValue.predefinedValue) {\n const allOptions = [...pastOptions, ...futureOptions];\n const option = allOptions.find((opt) => opt.value === internalValue.predefinedValue);\n const dateRange = getDateRangeForOption(internalValue.predefinedValue, locale.code);\n return `${option?.label || internalValue.predefinedValue} ${dateRange.description}`;\n }\n\n return labels.selectOption;\n };\n\n const formatDateRange = (description: string) => {\n // Check if description contains a date range (has \" - \" in it)\n if (description.includes(' - ') && isRTL) {\n // Split by \" - \" and reverse the order for RTL\n const parts = description.replace(/[()]/g, '').split(' - ');\n if (parts.length === 2) {\n return `(${parts[1]}-${parts[0]})`;\n }\n }\n return description;\n };\n\n const renderOptionWithDate = (option: { value: string; label: string }) => {\n const dateRange = getDateRangeForOption(option.value, locale.code);\n const formattedDescription = formatDateRange(dateRange.description);\n\n return (\n <Button\n key={option.value}\n variant='ghost'\n className={cn(\n ' w-full h-auto py-1 px-2 text-xs leading-tight justify-start',\n isRTL ? ' text-right' : ' text-left',\n internalValue?.predefinedValue === option.value && 'bg-accent',\n )}\n onClick={() => handlePredefinedSelect(option.value)}\n >\n <div className={cn('flex flex-col')}>\n <span className='font-medium'>{option.label}</span>\n <span className='text-[10px] text-muted-foreground' dir={locale.direction}>\n {formattedDescription}\n </span>\n </div>\n </Button>\n );\n };\n\n return (\n <div className={cn('useTw space-y-1', className)} dir={locale.direction} style={style}>\n {label && (\n <Label className={cn('useTw text-sm font-medium', isRTL && 'text-right block')}>\n {label}\n </Label>\n )}\n\n <div className='relative useTw'>\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger asChild className='useTw'>\n <Button\n variant='outline'\n role='combobox'\n aria-expanded={isOpen}\n className='useTw w-full justify-between bg-background relative min-w-70'\n >\n <span className={`useTw truncate ${isRTL && 'text-right'}`}>{getDisplayValue()}</span>\n <ChevronDown className='useTw h-4 w-4 shrink-0 opacity-50' />\n </Button>\n </PopoverTrigger>\n <PopoverContent className='useTw w-80 p-0'>\n <div className='p-4'>\n <div className='grid grid-cols-2 gap-4'>\n {/* Future Options - Left column */}\n <div className='space-y-1'>\n <div\n className={cn(\n 'text-sm font-semibold text-muted-foreground mb-2',\n isRTL && 'text-right',\n )}\n >\n {labels.presentFuture}\n </div>\n <div className='space-y-0.5'>\n {futureOptions.map((option) => (\n <div key={option.value}>{renderOptionWithDate(option)}</div>\n ))}\n </div>\n </div>\n\n {/* Past Options - Right column */}\n <div className='space-y-1'>\n <div\n className={cn(\n 'text-sm font-semibold text-muted-foreground mb-2',\n isRTL && 'text-right',\n )}\n >\n {labels.past}\n </div>\n <div className='space-y-0.5'>\n {pastOptions.map((option) => (\n <div key={option.value}>{renderOptionWithDate(option)}</div>\n ))}\n </div>\n </div>\n </div>\n\n <Separator className='my-4' />\n\n {/* Custom Option */}\n <div className='space-y-3'>\n <Button\n variant='ghost'\n className={cn(\n 'useTw w-full justify-start h-auto py-2 px-2',\n (showCustom || internalValue?.type === 'custom') && 'bg-accent',\n isRTL && 'justify-start text-right',\n )}\n onClick={handleCustomSelect}\n >\n {labels.custom}\n </Button>\n\n {/* Custom Date Range - appears next to custom label */}\n {showCustom && (\n <div className='space-y-3 pl-2'>\n <div className='grid grid-cols-1 gap-3'>\n {/* From Date */}\n <div className={cn('flex items-center gap-2')}>\n <Label className={cn('useTw text-xs w-[20%]', isRTL && 'text-right')}>\n {labels.from}\n </Label>\n <Popover open={openFromCalendar} onOpenChange={setOpenFromCalendar}>\n <PopoverTrigger asChild className='useTw'>\n <Button\n variant='outline'\n className={cn(\n 'useTw w-[60%] justify-start text-left font-normal text-xs h-8 bg-background',\n !customRange.from && 'text-muted-foreground',\n )}\n >\n <CalendarIcon className='useTw mr-1 h-3 w-3' />\n <span dir={locale.direction}>\n {customRange.from\n ? formatDate(customRange.from, 'dd/MM/yyyy')\n : labels.selectDate}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className='useTw w-auto p-0' align='start'>\n <Calendar\n mode='single'\n selected={customRange.from}\n onSelect={(date) => {\n handleCustomRangeChange({ ...customRange, from: date });\n setOpenFromCalendar(false);\n }}\n initialFocus\n className='useTw'\n />\n </PopoverContent>\n </Popover>\n </div>\n\n {/* To Date */}\n <div className={cn('flex items-center gap-2')}>\n <Label className={cn('useTw text-xs w-[20%]', isRTL && 'text-right')}>\n {labels.to}\n </Label>\n <Popover open={openToCalendar} onOpenChange={setOpenToCalendar}>\n <PopoverTrigger asChild className='useTw'>\n <Button\n variant='outline'\n className={cn(\n 'useTw w-[60%] justify-start text-left font-normal text-xs h-8 bg-background',\n !customRange.to && 'text-muted-foreground',\n )}\n >\n <CalendarIcon className='useTw mr-1 h-3 w-3' />\n <span dir={locale.direction}>\n {customRange.to\n ? formatDate(customRange.to, 'dd/MM/yyyy')\n : labels.selectDate}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className='useTw w-auto p-0' align='start'>\n <Calendar\n mode='single'\n selected={customRange.to}\n onSelect={(date) => {\n handleCustomRangeChange({ ...customRange, to: date });\n setOpenToCalendar(false);\n }}\n initialFocus\n className='useTw'\n />\n </PopoverContent>\n </Popover>\n </div>\n </div>\n\n {/* Action Buttons */}\n <div className='flex gap-2'>\n <Button\n onClick={handleApplyCustomRange}\n className='useTw flex-1 text-xs h-8'\n disabled={!customRange.from && !customRange.to}\n >\n {labels.apply}\n </Button>\n <Button\n onClick={handleCancelCustomRange}\n variant='outline'\n className='useTw flex-1 text-xs h-8 bg-transparent'\n >\n {labels.cancel}\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n {hasValue() && (\n <button\n className={`useTw absolute ${isRTL ? 'left-8' : 'right-8'} top-1/2 -translate-y-1/2 h-4 w-4 p-0 hover:bg-muted rounded-sm flex items-center justify-center z-10 `}\n onClick={(e) => {\n e.stopPropagation();\n handleClearAll();\n }}\n >\n <X className='useTw h-3 w-3' />\n </button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["useEffect","useState","CalendarIcon","ChevronDown","X","formatDate","getDateRangeForOption","Button","cn","Label","Popover","PopoverContent","PopoverTrigger","Separator","Calendar","getDateFilterOptions","getLabel","DateFilter","label","value","onChange","locale","code","direction","className","style","internalValue","setInternalValue","customRange","setCustomRange","from","undefined","to","showCustom","setShowCustom","isOpen","setIsOpen","openFromCalendar","setOpenFromCalendar","openToCalendar","setOpenToCalendar","isRTL","localeCode","pastOptions","futureOptions","type","labels","selectOption","selectDate","past","future","presentFuture","custom","apply","cancel","handlePredefinedSelect","optionValue","dateRange","newValue","predefinedValue","handleCustomSelect","handleCustomRangeChange","newRange","handleApplyCustomRange","handleCancelCustomRange","handleClearAll","hasValue","getDisplayValue","allOptions","option","find","opt","description","formatDateRange","includes","parts","replace","split","length","renderOptionWithDate","formattedDescription","variant","onClick","div","span","dir","open","onOpenChange","asChild","role","aria-expanded","map","align","mode","selected","onSelect","date","initialFocus","disabled","button","e","stopPropagation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/filters/components/date-filter.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\nimport { CalendarIcon, ChevronDown, X } from 'lucide-react';\n\nimport { formatDate, getDateRangeForOption } from '../utils/date-helpers';\nimport { DateFilterValue, DateRange, Locale } from '../types/filters-type';\nimport { Button } from '../../ui/button';\nimport { cn } from '../../lib/utils';\nimport { Label } from '../../ui/label';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover';\nimport { Separator } from '../../ui/separator';\nimport { Calendar } from '../../ui/calendar';\nimport { getDateFilterOptions } from '../constants/date-filter-options';\nimport { SupportedLocale, getLabel } from '../../labels';\n\n\ninterface DateFilterProps {\n label?: string;\n value?: DateFilterValue;\n onChange: (value: DateFilterValue) => void;\n locale?: Locale;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function DateFilter({\n label,\n value,\n onChange,\n locale = { code: 'he', direction: 'rtl' },\n className,\n style,\n}: DateFilterProps) {\n const [internalValue, setInternalValue] = useState<DateFilterValue | undefined>(value);\n const [customRange, setCustomRange] = useState<DateRange>({ from: undefined, to: undefined });\n const [showCustom, setShowCustom] = useState(false);\n const [isOpen, setIsOpen] = useState(false);\n const [openFromCalendar, setOpenFromCalendar] = useState(false);\n const [openToCalendar, setOpenToCalendar] = useState(false);\n\n const isRTL = locale.direction === 'rtl';\n const localeCode = locale.code as SupportedLocale;\n const { pastOptions, futureOptions } = getDateFilterOptions(localeCode);\n\n // Sync internal state with external value prop\n useEffect(() => {\n setInternalValue(value);\n if (value?.type === 'custom' && value.customRange) {\n setCustomRange(value.customRange);\n }\n }, [value]);\n\n const labels = {\n selectOption: getLabel('selectOption', localeCode),\n from: getLabel('from', localeCode),\n to: getLabel('to', localeCode),\n selectDate: getLabel('selectDate', localeCode),\n past: getLabel('past', localeCode),\n future: getLabel('future', localeCode),\n presentFuture: getLabel('presentFuture', localeCode),\n custom: getLabel('customRange', localeCode),\n apply: getLabel('apply', localeCode),\n cancel: getLabel('cancel', localeCode),\n };\n\n const handlePredefinedSelect = (optionValue: string) => {\n setShowCustom(false);\n setIsOpen(false);\n\n const dateRange = getDateRangeForOption(optionValue, locale.code);\n const newValue: DateFilterValue = {\n type: 'predefined',\n predefinedValue: optionValue,\n customRange: { from: dateRange.from, to: dateRange.to },\n };\n\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const handleCustomSelect = () => {\n setShowCustom(true);\n };\n\n const handleCustomRangeChange = (newRange: DateRange) => {\n setCustomRange(newRange);\n };\n\n const handleApplyCustomRange = () => {\n const newValue: DateFilterValue = {\n type: 'custom',\n customRange,\n };\n\n setInternalValue(newValue);\n onChange(newValue);\n setIsOpen(false);\n setShowCustom(false);\n };\n\n const handleCancelCustomRange = () => {\n setIsOpen(false);\n setShowCustom(false);\n setCustomRange({ from: undefined, to: undefined });\n };\n\n const handleClearAll = () => {\n setInternalValue(undefined);\n setCustomRange({ from: undefined, to: undefined });\n setShowCustom(false);\n onChange({} as DateFilterValue);\n };\n\n const hasValue = () => {\n return (\n internalValue && (internalValue.type === 'predefined' || internalValue.type === 'custom')\n );\n };\n\n const getDisplayValue = () => {\n if (internalValue?.type === 'custom' && internalValue.customRange) {\n const { from, to } = internalValue.customRange;\n if (from && to) {\n return `${formatDate(from, 'dd/MM/yyyy')}-${formatDate(to, 'dd/MM/yyyy')}`;\n } else if (from) {\n return `${labels.from}:${formatDate(from, 'dd/MM/yyyy')}`;\n } else if (to) {\n return `${labels.to}:${formatDate(to, 'dd/MM/yyyy')}`;\n }\n return labels.custom;\n }\n\n if (internalValue?.type === 'predefined' && internalValue.predefinedValue) {\n const allOptions = [...pastOptions, ...futureOptions];\n const option = allOptions.find((opt) => opt.value === internalValue.predefinedValue);\n const dateRange = getDateRangeForOption(internalValue.predefinedValue, locale.code);\n return `${option?.label || internalValue.predefinedValue}${dateRange.description}`;\n }\n\n return labels.selectOption;\n };\n\n const formatDateRange = (description: string) => {\n // Check if description contains a date range (has \" - \" in it)\n if (description.includes(' - ') && isRTL) {\n // Split by \" - \" and reverse the order for RTL\n const parts = description.replace(/[()]/g, '').split(' - ');\n if (parts.length === 2) {\n return `(${parts[1]}-${parts[0]})`;\n }\n }\n return description;\n };\n\n const renderOptionWithDate = (option: { value: string; label: string }) => {\n const dateRange = getDateRangeForOption(option.value, locale.code);\n const formattedDescription = formatDateRange(dateRange.description);\n\n return (\n <Button\n key={option.value}\n variant='ghost'\n className={cn(\n ' w-full h-auto py-1 px-2 text-xs leading-tight justify-start',\n isRTL ? ' text-right' : ' text-left',\n internalValue?.predefinedValue === option.value && 'bg-accent',\n )}\n onClick={() => handlePredefinedSelect(option.value)}\n >\n <div className={cn('flex flex-col')}>\n <span className='font-medium'>{option.label}</span>\n <span className='text-[10px] text-muted-foreground' dir={locale.direction}>\n {formattedDescription}\n </span>\n </div>\n </Button>\n );\n };\n\n return (\n <div className={cn('useTw space-y-1', className)} dir={locale.direction} style={style}>\n {label && (\n <Label className={cn('useTw text-sm font-medium', isRTL && 'text-right block')}>\n {label}\n </Label>\n )}\n\n <div className='relative useTw'>\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger asChild className='useTw'>\n <Button\n variant='outline'\n role='combobox'\n aria-expanded={isOpen}\n className='useTw w-full justify-between bg-background relative min-w-70 px-2'\n >\n <span className={`useTw truncate ${isRTL && 'text-right'}`}>{getDisplayValue()}</span>\n <ChevronDown className='useTw h-4 w-4 shrink-0 opacity-50' />\n </Button>\n </PopoverTrigger>\n <PopoverContent className='useTw w-80 p-0'>\n <div className='p-4'>\n <div className='grid grid-cols-2 gap-4'>\n\n {/* Past Options - Right column */}\n <div className='space-y-1'>\n <div\n className={cn(\n 'text-sm font-semibold text-muted-foreground mb-2',\n isRTL && 'text-right',\n )}\n >\n {labels.past}\n </div>\n <div className='space-y-0.5'>\n {pastOptions.map((option) => (\n <div key={option.value}>{renderOptionWithDate(option)}</div>\n ))}\n </div>\n </div>\n {/* Future Options - Left column */}\n <div className='space-y-1'>\n <div\n className={cn(\n 'text-sm font-semibold text-muted-foreground mb-2',\n isRTL && 'text-right',\n )}\n >\n {labels.presentFuture}\n </div>\n <div className='space-y-0.5'>\n {futureOptions.map((option) => (\n <div key={option.value}>{renderOptionWithDate(option)}</div>\n ))}\n </div>\n </div>\n\n </div>\n\n <Separator className='my-4' />\n\n {/* Custom Option */}\n <div className='space-y-3'>\n <Button\n variant='ghost'\n className={cn(\n 'useTw w-full justify-start h-auto py-2 px-2',\n (showCustom || internalValue?.type === 'custom') && 'bg-accent',\n isRTL && 'justify-start text-right',\n )}\n onClick={handleCustomSelect}\n >\n {labels.custom}\n </Button>\n\n {/* Custom Date Range - appears next to custom label */}\n {showCustom && (\n <div className='space-y-3 pl-2'>\n <div className='grid grid-cols-1 gap-3'>\n {/* From Date */}\n <div className={cn('flex items-center gap-2')}>\n <Label className={cn('useTw text-xs w-[20%]', isRTL && 'text-right')}>\n {labels.from}\n </Label>\n <Popover open={openFromCalendar} onOpenChange={setOpenFromCalendar}>\n <PopoverTrigger asChild className='useTw'>\n <Button\n variant='outline'\n className={cn(\n 'useTw w-[60%] justify-start text-left font-normal text-xs h-8 bg-background',\n !customRange.from && 'text-muted-foreground',\n )}\n >\n <CalendarIcon className='useTw mr-1 h-3 w-3' />\n <span dir={locale.direction}>\n {customRange.from\n ? formatDate(customRange.from, 'dd/MM/yyyy')\n : labels.selectDate}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className='useTw w-auto p-0' align='start'>\n <Calendar\n mode='single'\n selected={customRange.from}\n onSelect={(date) => {\n handleCustomRangeChange({ ...customRange, from: date });\n setOpenFromCalendar(false);\n }}\n initialFocus\n className='useTw'\n />\n </PopoverContent>\n </Popover>\n </div>\n\n {/* To Date */}\n <div className={cn('flex items-center gap-2')}>\n <Label className={cn('useTw text-xs w-[20%]', isRTL && 'text-right')}>\n {labels.to}\n </Label>\n <Popover open={openToCalendar} onOpenChange={setOpenToCalendar}>\n <PopoverTrigger asChild className='useTw'>\n <Button\n variant='outline'\n className={cn(\n 'useTw w-[60%] justify-start text-left font-normal text-xs h-8 bg-background',\n !customRange.to && 'text-muted-foreground',\n )}\n >\n <CalendarIcon className='useTw mr-1 h-3 w-3' />\n <span dir={locale.direction}>\n {customRange.to\n ? formatDate(customRange.to, 'dd/MM/yyyy')\n : labels.selectDate}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className='useTw w-auto p-0' align='start'>\n <Calendar\n mode='single'\n selected={customRange.to}\n onSelect={(date) => {\n handleCustomRangeChange({ ...customRange, to: date });\n setOpenToCalendar(false);\n }}\n initialFocus\n className='useTw'\n />\n </PopoverContent>\n </Popover>\n </div>\n </div>\n\n {/* Action Buttons */}\n <div className='flex gap-2'>\n <Button\n onClick={handleApplyCustomRange}\n className='useTw flex-1 text-xs h-8'\n disabled={!customRange.from && !customRange.to}\n >\n {labels.apply}\n </Button>\n <Button\n onClick={handleCancelCustomRange}\n variant='outline'\n className='useTw flex-1 text-xs h-8 bg-transparent'\n >\n {labels.cancel}\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n {hasValue() && (\n <button\n className={`useTw absolute ${isRTL ? 'left-8' : 'right-8'} top-1/2 -translate-y-1/2 h-4 w-4 p-0 hover:bg-muted rounded-sm flex items-center justify-center z-10 `}\n onClick={(e) => {\n e.stopPropagation();\n handleClearAll();\n }}\n >\n <X className='useTw h-3 w-3' />\n </button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["useEffect","useState","CalendarIcon","ChevronDown","X","formatDate","getDateRangeForOption","Button","cn","Label","Popover","PopoverContent","PopoverTrigger","Separator","Calendar","getDateFilterOptions","getLabel","DateFilter","label","value","onChange","locale","code","direction","className","style","internalValue","setInternalValue","customRange","setCustomRange","from","undefined","to","showCustom","setShowCustom","isOpen","setIsOpen","openFromCalendar","setOpenFromCalendar","openToCalendar","setOpenToCalendar","isRTL","localeCode","pastOptions","futureOptions","type","labels","selectOption","selectDate","past","future","presentFuture","custom","apply","cancel","handlePredefinedSelect","optionValue","dateRange","newValue","predefinedValue","handleCustomSelect","handleCustomRangeChange","newRange","handleApplyCustomRange","handleCancelCustomRange","handleClearAll","hasValue","getDisplayValue","allOptions","option","find","opt","description","formatDateRange","includes","parts","replace","split","length","renderOptionWithDate","formattedDescription","variant","onClick","div","span","dir","open","onOpenChange","asChild","role","aria-expanded","map","align","mode","selected","onSelect","date","initialFocus","disabled","button","e","stopPropagation"],"mappings":"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"}
|
|
@@ -99,7 +99,7 @@ export function getDateRangeForOption(option, locale = 'he') {
|
|
|
99
99
|
return {
|
|
100
100
|
from: lastWeekStart,
|
|
101
101
|
to: lastWeekEnd,
|
|
102
|
-
description: `(${formatDate(lastWeekStart, 'dd/MM')}
|
|
102
|
+
description: `(${formatDate(lastWeekStart, 'dd/MM')}-${formatDate(lastWeekEnd, 'dd/MM/yyyy')})`
|
|
103
103
|
};
|
|
104
104
|
case 'lastMonth':
|
|
105
105
|
const lastMonthStart = startOfMonth(subMonths(now, 1));
|
|
@@ -114,14 +114,14 @@ export function getDateRangeForOption(option, locale = 'he') {
|
|
|
114
114
|
return {
|
|
115
115
|
from: last7DaysStart,
|
|
116
116
|
to: endOfDay(now),
|
|
117
|
-
description: `(${formatDate(last7DaysStart, 'dd/MM')}
|
|
117
|
+
description: `(${formatDate(last7DaysStart, 'dd/MM')}-${formatDate(now, 'dd/MM/yyyy')})`
|
|
118
118
|
};
|
|
119
119
|
case 'last30Days':
|
|
120
120
|
const last30DaysStart = startOfDay(subDays(now, 29));
|
|
121
121
|
return {
|
|
122
122
|
from: last30DaysStart,
|
|
123
123
|
to: endOfDay(now),
|
|
124
|
-
description: `(${formatDate(last30DaysStart, 'dd/MM')}
|
|
124
|
+
description: `(${formatDate(last30DaysStart, 'dd/MM')}-${formatDate(now, 'dd/MM/yyyy')})`
|
|
125
125
|
};
|
|
126
126
|
case 'allPast':
|
|
127
127
|
{
|
|
@@ -148,7 +148,7 @@ export function getDateRangeForOption(option, locale = 'he') {
|
|
|
148
148
|
return {
|
|
149
149
|
from: thisWeekStart,
|
|
150
150
|
to: thisWeekEnd,
|
|
151
|
-
description: `(${formatDate(thisWeekStart, 'dd/MM')}
|
|
151
|
+
description: `(${formatDate(thisWeekStart, 'dd/MM')}-${formatDate(thisWeekEnd, 'dd/MM/yyyy')})`
|
|
152
152
|
};
|
|
153
153
|
case 'thisMonth':
|
|
154
154
|
const thisMonthStart = startOfMonth(now);
|
|
@@ -163,14 +163,14 @@ export function getDateRangeForOption(option, locale = 'he') {
|
|
|
163
163
|
return {
|
|
164
164
|
from: startOfDay(now),
|
|
165
165
|
to: next7DaysEnd,
|
|
166
|
-
description: `(${formatDate(now, 'dd/MM')}
|
|
166
|
+
description: `(${formatDate(now, 'dd/MM')}-${formatDate(next7DaysEnd, 'dd/MM/yyyy')})`
|
|
167
167
|
};
|
|
168
168
|
case 'next30Days':
|
|
169
169
|
const next30DaysEnd = endOfDay(addDays(now, 29));
|
|
170
170
|
return {
|
|
171
171
|
from: startOfDay(now),
|
|
172
172
|
to: next30DaysEnd,
|
|
173
|
-
description: `(${formatDate(now, 'dd/MM')}
|
|
173
|
+
description: `(${formatDate(now, 'dd/MM')}-${formatDate(next30DaysEnd, 'dd/MM/yyyy')})`
|
|
174
174
|
};
|
|
175
175
|
case 'allFuture':
|
|
176
176
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/filters/utils/date-helpers.ts"],"sourcesContent":["// Custom date utilities to replace date-fns\n\nimport { SupportedLocale, getLabel } from '../../labels';\n\nexport function addDays(date: Date, days: number): Date {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n}\n\nexport function subDays(date: Date, days: number): Date {\n return addDays(date, -days);\n}\n\nexport function addWeeks(date: Date, weeks: number): Date {\n return addDays(date, weeks * 7);\n}\n\nexport function subWeeks(date: Date, weeks: number): Date {\n return addWeeks(date, -weeks);\n}\n\nexport function addMonths(date: Date, months: number): Date {\n const result = new Date(date);\n result.setMonth(result.getMonth() + months);\n return result;\n}\n\nexport function subMonths(date: Date, months: number): Date {\n return addMonths(date, -months);\n}\n\nexport function startOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\nexport function endOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\nexport function startOfWeek(date: Date, options: { weekStartsOn?: number } = {}): Date {\n const { weekStartsOn = 0 } = options;\n const result = new Date(date);\n const day = result.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n result.setDate(result.getDate() - diff);\n return startOfDay(result);\n}\n\nexport function endOfWeek(date: Date, options: { weekStartsOn?: number } = {}): Date {\n const { weekStartsOn = 0 } = options;\n const result = startOfWeek(date, { weekStartsOn });\n result.setDate(result.getDate() + 6);\n return endOfDay(result);\n}\n\nexport function startOfMonth(date: Date): Date {\n const result = new Date(date);\n result.setDate(1);\n return startOfDay(result);\n}\n\nexport function endOfMonth(date: Date): Date {\n const result = new Date(date);\n result.setMonth(result.getMonth() + 1, 0);\n return endOfDay(result);\n}\n\nexport function formatDate(date: Date, formatStr: string): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear().toString();\n\n switch (formatStr) {\n case 'dd/MM/yyyy':\n return `${day}/${month}/${year}`;\n case 'dd/MM':\n return `${day}/${month}`;\n case 'MM/yyyy':\n return `${month}/${year}`;\n case 'PPP':\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n default:\n return date.toLocaleDateString();\n }\n}\n\nexport function getDateRangeForOption(\n option: string,\n locale: SupportedLocale = 'he',\n): { from: Date | undefined; to: Date | undefined; description: string } {\n const now = new Date();\n\n switch (option) {\n case 'yesterday':\n const yesterday = subDays(now, 1);\n return {\n from: startOfDay(yesterday),\n to: endOfDay(yesterday),\n description: `(${formatDate(yesterday, 'dd/MM/yyyy')})`,\n };\n\n case 'lastWeek':\n const lastWeekStart = startOfWeek(subWeeks(now, 1), { weekStartsOn: 0 });\n const lastWeekEnd = endOfWeek(subWeeks(now, 1), { weekStartsOn: 0 });\n return {\n from: lastWeekStart,\n to: lastWeekEnd,\n description: `(${formatDate(lastWeekStart, 'dd/MM')} - ${formatDate(lastWeekEnd, 'dd/MM/yyyy')})`,\n };\n\n case 'lastMonth':\n const lastMonthStart = startOfMonth(subMonths(now, 1));\n const lastMonthEnd = endOfMonth(subMonths(now, 1));\n return {\n from: lastMonthStart,\n to: lastMonthEnd,\n description: `(${formatDate(lastMonthStart, 'MM/yyyy')})`,\n };\n\n case 'last7Days':\n const last7DaysStart = startOfDay(subDays(now, 6));\n return {\n from: last7DaysStart,\n to: endOfDay(now),\n description: `(${formatDate(last7DaysStart, 'dd/MM')} - ${formatDate(now, 'dd/MM/yyyy')})`,\n };\n\n case 'last30Days':\n const last30DaysStart = startOfDay(subDays(now, 29));\n return {\n from: last30DaysStart,\n to: endOfDay(now),\n description: `(${formatDate(last30DaysStart, 'dd/MM')} - ${formatDate(now, 'dd/MM/yyyy')})`,\n };\n\n case 'allPast': {\n const yesterday = subDays(now, 1);\n return {\n from: undefined,\n to: endOfDay(yesterday),\n description: `(${getLabel('allPast', locale)})`,\n };\n }\n\n case 'today':\n return {\n from: startOfDay(now),\n to: endOfDay(now),\n description: `(${formatDate(now, 'dd/MM/yyyy')})`,\n };\n\n case 'thisWeek':\n const thisWeekStart = startOfWeek(now, { weekStartsOn: 0 });\n const thisWeekEnd = endOfWeek(now, { weekStartsOn: 0 });\n return {\n from: thisWeekStart,\n to: thisWeekEnd,\n description: `(${formatDate(thisWeekStart, 'dd/MM')} - ${formatDate(thisWeekEnd, 'dd/MM/yyyy')})`,\n };\n\n case 'thisMonth':\n const thisMonthStart = startOfMonth(now);\n const thisMonthEnd = endOfMonth(now);\n return {\n from: thisMonthStart,\n to: thisMonthEnd,\n description: `(${formatDate(thisMonthStart, 'MM/yyyy')})`,\n };\n\n case 'next7Days':\n const next7DaysEnd = endOfDay(addDays(now, 6));\n return {\n from: startOfDay(now),\n to: next7DaysEnd,\n description: `(${formatDate(now, 'dd/MM')} - ${formatDate(next7DaysEnd, 'dd/MM/yyyy')})`,\n };\n\n case 'next30Days':\n const next30DaysEnd = endOfDay(addDays(now, 29));\n return {\n from: startOfDay(now),\n to: next30DaysEnd,\n description: `(${formatDate(now, 'dd/MM')} - ${formatDate(next30DaysEnd, 'dd/MM/yyyy')})`,\n };\n\n case 'allFuture':\n return {\n from: startOfDay(now),\n to: undefined,\n description: `(${getLabel('allFuture', locale)})`,\n };\n\n default:\n return {\n from: startOfDay(now),\n to: endOfDay(now),\n description: '',\n };\n }\n}\n"],"names":["getLabel","addDays","date","days","result","Date","setDate","getDate","subDays","addWeeks","weeks","subWeeks","addMonths","months","setMonth","getMonth","subMonths","startOfDay","setHours","endOfDay","startOfWeek","options","weekStartsOn","day","getDay","diff","endOfWeek","startOfMonth","endOfMonth","formatDate","formatStr","toString","padStart","month","year","getFullYear","toLocaleDateString","getDateRangeForOption","option","locale","now","yesterday","from","to","description","lastWeekStart","lastWeekEnd","lastMonthStart","lastMonthEnd","last7DaysStart","last30DaysStart","undefined","thisWeekStart","thisWeekEnd","thisMonthStart","thisMonthEnd","next7DaysEnd","next30DaysEnd"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/filters/utils/date-helpers.ts"],"sourcesContent":["// Custom date utilities to replace date-fns\n\nimport { SupportedLocale, getLabel } from '../../labels';\n\nexport function addDays(date: Date, days: number): Date {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n}\n\nexport function subDays(date: Date, days: number): Date {\n return addDays(date, -days);\n}\n\nexport function addWeeks(date: Date, weeks: number): Date {\n return addDays(date, weeks * 7);\n}\n\nexport function subWeeks(date: Date, weeks: number): Date {\n return addWeeks(date, -weeks);\n}\n\nexport function addMonths(date: Date, months: number): Date {\n const result = new Date(date);\n result.setMonth(result.getMonth() + months);\n return result;\n}\n\nexport function subMonths(date: Date, months: number): Date {\n return addMonths(date, -months);\n}\n\nexport function startOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\nexport function endOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\nexport function startOfWeek(date: Date, options: { weekStartsOn?: number } = {}): Date {\n const { weekStartsOn = 0 } = options;\n const result = new Date(date);\n const day = result.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n result.setDate(result.getDate() - diff);\n return startOfDay(result);\n}\n\nexport function endOfWeek(date: Date, options: { weekStartsOn?: number } = {}): Date {\n const { weekStartsOn = 0 } = options;\n const result = startOfWeek(date, { weekStartsOn });\n result.setDate(result.getDate() + 6);\n return endOfDay(result);\n}\n\nexport function startOfMonth(date: Date): Date {\n const result = new Date(date);\n result.setDate(1);\n return startOfDay(result);\n}\n\nexport function endOfMonth(date: Date): Date {\n const result = new Date(date);\n result.setMonth(result.getMonth() + 1, 0);\n return endOfDay(result);\n}\n\nexport function formatDate(date: Date, formatStr: string): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear().toString();\n\n switch (formatStr) {\n case 'dd/MM/yyyy':\n return `${day}/${month}/${year}`;\n case 'dd/MM':\n return `${day}/${month}`;\n case 'MM/yyyy':\n return `${month}/${year}`;\n case 'PPP':\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n default:\n return date.toLocaleDateString();\n }\n}\n\nexport function getDateRangeForOption(\n option: string,\n locale: SupportedLocale = 'he',\n): { from: Date | undefined; to: Date | undefined; description: string } {\n const now = new Date();\n\n switch (option) {\n case 'yesterday':\n const yesterday = subDays(now, 1);\n return {\n from: startOfDay(yesterday),\n to: endOfDay(yesterday),\n description: `(${formatDate(yesterday, 'dd/MM/yyyy')})`,\n };\n\n case 'lastWeek':\n const lastWeekStart = startOfWeek(subWeeks(now, 1), { weekStartsOn: 0 });\n const lastWeekEnd = endOfWeek(subWeeks(now, 1), { weekStartsOn: 0 });\n return {\n from: lastWeekStart,\n to: lastWeekEnd,\n description: `(${formatDate(lastWeekStart, 'dd/MM')}-${formatDate(lastWeekEnd, 'dd/MM/yyyy')})`,\n };\n\n case 'lastMonth':\n const lastMonthStart = startOfMonth(subMonths(now, 1));\n const lastMonthEnd = endOfMonth(subMonths(now, 1));\n return {\n from: lastMonthStart,\n to: lastMonthEnd,\n description: `(${formatDate(lastMonthStart, 'MM/yyyy')})`,\n };\n\n case 'last7Days':\n const last7DaysStart = startOfDay(subDays(now, 6));\n return {\n from: last7DaysStart,\n to: endOfDay(now),\n description: `(${formatDate(last7DaysStart, 'dd/MM')}-${formatDate(now, 'dd/MM/yyyy')})`,\n };\n\n case 'last30Days':\n const last30DaysStart = startOfDay(subDays(now, 29));\n return {\n from: last30DaysStart,\n to: endOfDay(now),\n description: `(${formatDate(last30DaysStart, 'dd/MM')}-${formatDate(now, 'dd/MM/yyyy')})`,\n };\n\n case 'allPast': {\n const yesterday = subDays(now, 1);\n return {\n from: undefined,\n to: endOfDay(yesterday),\n description: `(${getLabel('allPast', locale)})`,\n };\n }\n\n case 'today':\n return {\n from: startOfDay(now),\n to: endOfDay(now),\n description: `(${formatDate(now, 'dd/MM/yyyy')})`,\n };\n\n case 'thisWeek':\n const thisWeekStart = startOfWeek(now, { weekStartsOn: 0 });\n const thisWeekEnd = endOfWeek(now, { weekStartsOn: 0 });\n return {\n from: thisWeekStart,\n to: thisWeekEnd,\n description: `(${formatDate(thisWeekStart, 'dd/MM')}-${formatDate(thisWeekEnd, 'dd/MM/yyyy')})`,\n };\n\n case 'thisMonth':\n const thisMonthStart = startOfMonth(now);\n const thisMonthEnd = endOfMonth(now);\n return {\n from: thisMonthStart,\n to: thisMonthEnd,\n description: `(${formatDate(thisMonthStart, 'MM/yyyy')})`,\n };\n\n case 'next7Days':\n const next7DaysEnd = endOfDay(addDays(now, 6));\n return {\n from: startOfDay(now),\n to: next7DaysEnd,\n description: `(${formatDate(now, 'dd/MM')}-${formatDate(next7DaysEnd, 'dd/MM/yyyy')})`,\n };\n\n case 'next30Days':\n const next30DaysEnd = endOfDay(addDays(now, 29));\n return {\n from: startOfDay(now),\n to: next30DaysEnd,\n description: `(${formatDate(now, 'dd/MM')}-${formatDate(next30DaysEnd, 'dd/MM/yyyy')})`,\n };\n\n case 'allFuture':\n return {\n from: startOfDay(now),\n to: undefined,\n description: `(${getLabel('allFuture', locale)})`,\n };\n\n default:\n return {\n from: startOfDay(now),\n to: endOfDay(now),\n description: '',\n };\n }\n}\n"],"names":["getLabel","addDays","date","days","result","Date","setDate","getDate","subDays","addWeeks","weeks","subWeeks","addMonths","months","setMonth","getMonth","subMonths","startOfDay","setHours","endOfDay","startOfWeek","options","weekStartsOn","day","getDay","diff","endOfWeek","startOfMonth","endOfMonth","formatDate","formatStr","toString","padStart","month","year","getFullYear","toLocaleDateString","getDateRangeForOption","option","locale","now","yesterday","from","to","description","lastWeekStart","lastWeekEnd","lastMonthStart","lastMonthEnd","last7DaysStart","last30DaysStart","undefined","thisWeekStart","thisWeekEnd","thisMonthStart","thisMonthEnd","next7DaysEnd","next30DaysEnd"],"mappings":"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"}
|