@shefing/quickfilter 1.0.10 → 1.0.12

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.
Files changed (44) hide show
  1. package/README.md +873 -0
  2. package/dist/FilterField.d.ts.map +1 -1
  3. package/dist/FilterField.js +18 -9
  4. package/dist/FilterField.js.map +1 -1
  5. package/dist/QuickFilter.d.ts.map +1 -1
  6. package/dist/QuickFilter.js +227 -55
  7. package/dist/QuickFilter.js.map +1 -1
  8. package/dist/filters/components/checkbox-filter.d.ts +2 -1
  9. package/dist/filters/components/checkbox-filter.d.ts.map +1 -1
  10. package/dist/filters/components/checkbox-filter.js +11 -29
  11. package/dist/filters/components/checkbox-filter.js.map +1 -1
  12. package/dist/filters/components/date-filter.d.ts +2 -1
  13. package/dist/filters/components/date-filter.d.ts.map +1 -1
  14. package/dist/filters/components/date-filter.js +26 -24
  15. package/dist/filters/components/date-filter.js.map +1 -1
  16. package/dist/filters/components/select-filter.d.ts +2 -1
  17. package/dist/filters/components/select-filter.d.ts.map +1 -1
  18. package/dist/filters/components/select-filter.js +20 -18
  19. package/dist/filters/components/select-filter.js.map +1 -1
  20. package/dist/filters/components/small-select-filter.d.ts +2 -1
  21. package/dist/filters/components/small-select-filter.d.ts.map +1 -1
  22. package/dist/filters/components/small-select-filter.js +4 -3
  23. package/dist/filters/components/small-select-filter.js.map +1 -1
  24. package/dist/filters/constants/date-filter-options.d.ts +7 -4
  25. package/dist/filters/constants/date-filter-options.d.ts.map +1 -1
  26. package/dist/filters/constants/date-filter-options.js +25 -70
  27. package/dist/filters/constants/date-filter-options.js.map +1 -1
  28. package/dist/filters/types/filters-type.d.ts.map +1 -1
  29. package/dist/filters/types/filters-type.js.map +1 -1
  30. package/dist/filters/utils/date-helpers.d.ts +4 -3
  31. package/dist/filters/utils/date-helpers.d.ts.map +1 -1
  32. package/dist/filters/utils/date-helpers.js +14 -11
  33. package/dist/filters/utils/date-helpers.js.map +1 -1
  34. package/dist/filters/utils/layout-helpers.d.ts.map +1 -1
  35. package/dist/filters/utils/layout-helpers.js.map +1 -1
  36. package/dist/index.d.ts +6 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +1 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/labels.d.ts +326 -0
  41. package/dist/labels.d.ts.map +1 -0
  42. package/dist/labels.js +192 -0
  43. package/dist/labels.js.map +1 -0
  44. package/package.json +1 -1
@@ -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 {\n futureDateFilterOptions,\n futureDateFilterOptionsEn,\n pastDateFilterOptions,\n pastDateFilterOptionsEn,\n} from '../constants/date-filter-options';\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';\n\ninterface DateFilterProps {\n label?: string;\n value?: DateFilterValue;\n onChange: (value: DateFilterValue) => void;\n locale?: Locale;\n className?: string;\n}\n\nexport function DateFilter({\n label,\n value,\n onChange,\n locale = { code: 'he', direction: 'rtl' },\n className,\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 isHebrew = locale.code === 'he';\n const pastOptions = isHebrew ? pastDateFilterOptions : pastDateFilterOptionsEn;\n const futureOptions = isHebrew ? futureDateFilterOptions : futureDateFilterOptionsEn;\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: isHebrew ? 'בחר אפשרות' : 'Select Option',\n from: isHebrew ? 'מתאריך' : 'From',\n to: isHebrew ? 'עד תאריך' : 'To',\n selectDate: isHebrew ? 'בחר תאריך' : 'Select Date',\n past: isHebrew ? 'עבר' : 'Past',\n future: isHebrew ? 'עתיד' : 'Future',\n custom: isHebrew ? 'טווח מותאם אישית' : 'Custom Range',\n apply: isHebrew ? 'החל' : 'Apply',\n cancel: isHebrew ? 'ביטול' : 'Cancel',\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(' - ') && isHebrew) {\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 isHebrew ? ' 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}>\n {label && (\n <Label className={cn('useTw text-sm font-medium', isHebrew && '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 ${isHebrew && 'text-right'}`}>\n {getDisplayValue()}\n </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 isHebrew && 'text-right',\n )}\n >\n {labels.future}\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 isHebrew && '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 isHebrew && '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\n className={cn(\n 'useTw text-xs w-[20%]',\n isHebrew && 'text-right text-start',\n )}\n >\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\n className={cn(\n 'useTw useTw text-xs w-[20%]',\n isHebrew && 'text-right text-strat',\n )}\n >\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 ${isHebrew ? '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","futureDateFilterOptions","futureDateFilterOptionsEn","pastDateFilterOptions","pastDateFilterOptionsEn","formatDate","getDateRangeForOption","Button","cn","Label","Popover","PopoverContent","PopoverTrigger","Separator","Calendar","DateFilter","label","value","onChange","locale","code","direction","className","internalValue","setInternalValue","customRange","setCustomRange","from","undefined","to","showCustom","setShowCustom","isOpen","setIsOpen","openFromCalendar","setOpenFromCalendar","openToCalendar","setOpenToCalendar","isHebrew","pastOptions","futureOptions","type","labels","selectOption","selectDate","past","future","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 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.future}\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","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":"AAAA;;AAEA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAC5C,SAASC,YAAY,EAAEC,WAAW,EAAEC,CAAC,QAAQ,eAAe;AAE5D,SAASC,UAAU,EAAEC,qBAAqB,QAAQ,wBAAwB;AAE1E,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,EAAE,QAAQ,kBAAkB;AACrC,SAASC,KAAK,QAAQ,iBAAiB;AACvC,SAASC,OAAO,EAAEC,cAAc,EAAEC,cAAc,QAAQ,mBAAmB;AAC3E,SAASC,SAAS,QAAQ,qBAAqB;AAC/C,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,oBAAoB,QAAQ,mCAAmC;AACxE,SAA0BC,QAAQ,QAAQ,eAAe;AAYzD,OAAO,SAASC,WAAW,EACzBC,KAAK,EACLC,KAAK,EACLC,QAAQ,EACRC,SAAS;IAAEC,MAAM;IAAMC,WAAW;AAAM,CAAC,EACzCC,SAAS,EACTC,KAAK,EACW;IAChB,MAAM,CAACC,eAAeC,iBAAiB,GAAG1B,SAAsCkB;IAChF,MAAM,CAACS,aAAaC,eAAe,GAAG5B,SAAoB;QAAE6B,MAAMC;QAAWC,IAAID;IAAU;IAC3F,MAAM,CAACE,YAAYC,cAAc,GAAGjC,SAAS;IAC7C,MAAM,CAACkC,QAAQC,UAAU,GAAGnC,SAAS;IACrC,MAAM,CAACoC,kBAAkBC,oBAAoB,GAAGrC,SAAS;IACzD,MAAM,CAACsC,gBAAgBC,kBAAkB,GAAGvC,SAAS;IAErD,MAAMwC,QAAQpB,OAAOE,SAAS,KAAK;IACnC,MAAMmB,aAAarB,OAAOC,IAAI;IAC9B,MAAM,EAAEqB,WAAW,EAAEC,aAAa,EAAE,GAAG7B,qBAAqB2B;IAE5D,+CAA+C;IAC/C1C,UAAU;QACR2B,iBAAiBR;QACjB,IAAIA,OAAO0B,SAAS,YAAY1B,MAAMS,WAAW,EAAE;YACjDC,eAAeV,MAAMS,WAAW;QAClC;IACF,GAAG;QAACT;KAAM;IAEV,MAAM2B,SAAS;QACbC,cAAc/B,SAAS,gBAAgB0B;QACvCZ,MAAMd,SAAS,QAAQ0B;QACvBV,IAAIhB,SAAS,MAAM0B;QACnBM,YAAYhC,SAAS,cAAc0B;QACnCO,MAAMjC,SAAS,QAAQ0B;QACvBQ,QAAQlC,SAAS,UAAU0B;QAC3BS,QAAQnC,SAAS,eAAe0B;QAChCU,OAAOpC,SAAS,SAAS0B;QACzBW,QAAQrC,SAAS,UAAU0B;IAC7B;IAEA,MAAMY,yBAAyB,CAACC;QAC9BrB,cAAc;QACdE,UAAU;QAEV,MAAMoB,YAAYlD,sBAAsBiD,aAAalC,OAAOC,IAAI;QAChE,MAAMmC,WAA4B;YAChCZ,MAAM;YACNa,iBAAiBH;YACjB3B,aAAa;gBAAEE,MAAM0B,UAAU1B,IAAI;gBAAEE,IAAIwB,UAAUxB,EAAE;YAAC;QACxD;QAEAL,iBAAiB8B;QACjBrC,SAASqC;IACX;IAEA,MAAME,qBAAqB;QACzBzB,cAAc;IAChB;IAEA,MAAM0B,0BAA0B,CAACC;QAC/BhC,eAAegC;IACjB;IAEA,MAAMC,yBAAyB;QAC7B,MAAML,WAA4B;YAChCZ,MAAM;YACNjB;QACF;QAEAD,iBAAiB8B;QACjBrC,SAASqC;QACTrB,UAAU;QACVF,cAAc;IAChB;IAEA,MAAM6B,0BAA0B;QAC9B3B,UAAU;QACVF,cAAc;QACdL,eAAe;YAAEC,MAAMC;YAAWC,IAAID;QAAU;IAClD;IAEA,MAAMiC,iBAAiB;QACrBrC,iBAAiBI;QACjBF,eAAe;YAAEC,MAAMC;YAAWC,IAAID;QAAU;QAChDG,cAAc;QACdd,SAAS,CAAC;IACZ;IAEA,MAAM6C,WAAW;QACf,OACEvC,iBAAkBA,CAAAA,cAAcmB,IAAI,KAAK,gBAAgBnB,cAAcmB,IAAI,KAAK,QAAO;IAE3F;IAEA,MAAMqB,kBAAkB;QACtB,IAAIxC,eAAemB,SAAS,YAAYnB,cAAcE,WAAW,EAAE;YACjE,MAAM,EAAEE,IAAI,EAAEE,EAAE,EAAE,GAAGN,cAAcE,WAAW;YAC9C,IAAIE,QAAQE,IAAI;gBACd,OAAO,GAAG3B,WAAWyB,MAAM,cAAc,CAAC,EAAEzB,WAAW2B,IAAI,eAAe;YAC5E,OAAO,IAAIF,MAAM;gBACf,OAAO,GAAGgB,OAAOhB,IAAI,CAAC,EAAE,EAAEzB,WAAWyB,MAAM,eAAe;YAC5D,OAAO,IAAIE,IAAI;gBACb,OAAO,GAAGc,OAAOd,EAAE,CAAC,EAAE,EAAE3B,WAAW2B,IAAI,eAAe;YACxD;YACA,OAAOc,OAAOK,MAAM;QACtB;QAEA,IAAIzB,eAAemB,SAAS,gBAAgBnB,cAAcgC,eAAe,EAAE;YACzE,MAAMS,aAAa;mBAAIxB;mBAAgBC;aAAc;YACrD,MAAMwB,SAASD,WAAWE,IAAI,CAAC,CAACC,MAAQA,IAAInD,KAAK,KAAKO,cAAcgC,eAAe;YACnF,MAAMF,YAAYlD,sBAAsBoB,cAAcgC,eAAe,EAAErC,OAAOC,IAAI;YAClF,OAAO,GAAG8C,QAAQlD,SAASQ,cAAcgC,eAAe,CAAC,CAAC,EAAEF,UAAUe,WAAW,EAAE;QACrF;QAEA,OAAOzB,OAAOC,YAAY;IAC5B;IAEA,MAAMyB,kBAAkB,CAACD;QACvB,+DAA+D;QAC/D,IAAIA,YAAYE,QAAQ,CAAC,UAAUhC,OAAO;YACxC,+CAA+C;YAC/C,MAAMiC,QAAQH,YAAYI,OAAO,CAAC,SAAS,IAAIC,KAAK,CAAC;YACrD,IAAIF,MAAMG,MAAM,KAAK,GAAG;gBACtB,OAAO,CAAC,CAAC,EAAEH,KAAK,CAAC,EAAE,CAAC,CAAC,EAAEA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC;QACF;QACA,OAAOH;IACT;IAEA,MAAMO,uBAAuB,CAACV;QAC5B,MAAMZ,YAAYlD,sBAAsB8D,OAAOjD,KAAK,EAAEE,OAAOC,IAAI;QACjE,MAAMyD,uBAAuBP,gBAAgBhB,UAAUe,WAAW;QAElE,qBACE,KAAChE;YAECyE,SAAQ;YACRxD,WAAWhB,GACT,gEACAiC,QAAQ,gBAAgB,cACxBf,eAAegC,oBAAoBU,OAAOjD,KAAK,IAAI;YAErD8D,SAAS,IAAM3B,uBAAuBc,OAAOjD,KAAK;sBAElD,cAAA,MAAC+D;gBAAI1D,WAAWhB,GAAG;;kCACjB,KAAC2E;wBAAK3D,WAAU;kCAAe4C,OAAOlD,KAAK;;kCAC3C,KAACiE;wBAAK3D,WAAU;wBAAoC4D,KAAK/D,OAAOE,SAAS;kCACtEwD;;;;WAZAX,OAAOjD,KAAK;IAiBvB;IAEA,qBACE,MAAC+D;QAAI1D,WAAWhB,GAAG,mBAAmBgB;QAAY4D,KAAK/D,OAAOE,SAAS;QAAEE,OAAOA;;YAC7EP,uBACC,KAACT;gBAAMe,WAAWhB,GAAG,6BAA6BiC,SAAS;0BACxDvB;;0BAIL,MAACgE;gBAAI1D,WAAU;;kCACb,MAACd;wBAAQ2E,MAAMlD;wBAAQmD,cAAclD;;0CACnC,KAACxB;gCAAe2E,OAAO;gCAAC/D,WAAU;0CAChC,cAAA,MAACjB;oCACCyE,SAAQ;oCACRQ,MAAK;oCACLC,iBAAetD;oCACfX,WAAU;;sDAEV,KAAC2D;4CAAK3D,WAAW,CAAC,eAAe,EAAEiB,SAAS,cAAc;sDAAGyB;;sDAC7D,KAAC/D;4CAAYqB,WAAU;;;;;0CAG3B,KAACb;gCAAea,WAAU;0CACxB,cAAA,MAAC0D;oCAAI1D,WAAU;;sDACb,MAAC0D;4CAAI1D,WAAU;;8DAEb,MAAC0D;oDAAI1D,WAAU;;sEACb,KAAC0D;4DACC1D,WAAWhB,GACT,oDACAiC,SAAS;sEAGVK,OAAOI,MAAM;;sEAEhB,KAACgC;4DAAI1D,WAAU;sEACZoB,cAAc8C,GAAG,CAAC,CAACtB,uBAClB,KAACc;8EAAwBJ,qBAAqBV;mEAApCA,OAAOjD,KAAK;;;;8DAM5B,MAAC+D;oDAAI1D,WAAU;;sEACb,KAAC0D;4DACC1D,WAAWhB,GACT,oDACAiC,SAAS;sEAGVK,OAAOG,IAAI;;sEAEd,KAACiC;4DAAI1D,WAAU;sEACZmB,YAAY+C,GAAG,CAAC,CAACtB,uBAChB,KAACc;8EAAwBJ,qBAAqBV;mEAApCA,OAAOjD,KAAK;;;;;;sDAM9B,KAACN;4CAAUW,WAAU;;sDAGrB,MAAC0D;4CAAI1D,WAAU;;8DACb,KAACjB;oDACCyE,SAAQ;oDACRxD,WAAWhB,GACT,+CACA,AAACyB,CAAAA,cAAcP,eAAemB,SAAS,QAAO,KAAM,aACpDJ,SAAS;oDAEXwC,SAAStB;8DAERb,OAAOK,MAAM;;gDAIflB,4BACC,MAACiD;oDAAI1D,WAAU;;sEACb,MAAC0D;4DAAI1D,WAAU;;8EAEb,MAAC0D;oEAAI1D,WAAWhB,GAAG;;sFACjB,KAACC;4EAAMe,WAAWhB,GAAG,yBAAyBiC,SAAS;sFACpDK,OAAOhB,IAAI;;sFAEd,MAACpB;4EAAQ2E,MAAMhD;4EAAkBiD,cAAchD;;8FAC7C,KAAC1B;oFAAe2E,OAAO;oFAAC/D,WAAU;8FAChC,cAAA,MAACjB;wFACCyE,SAAQ;wFACRxD,WAAWhB,GACT,+EACA,CAACoB,YAAYE,IAAI,IAAI;;0GAGvB,KAAC5B;gGAAasB,WAAU;;0GACxB,KAAC2D;gGAAKC,KAAK/D,OAAOE,SAAS;0GACxBK,YAAYE,IAAI,GACbzB,WAAWuB,YAAYE,IAAI,EAAE,gBAC7BgB,OAAOE,UAAU;;;;;8FAI3B,KAACrC;oFAAea,WAAU;oFAAmBmE,OAAM;8FACjD,cAAA,KAAC7E;wFACC8E,MAAK;wFACLC,UAAUjE,YAAYE,IAAI;wFAC1BgE,UAAU,CAACC;4FACTnC,wBAAwB;gGAAE,GAAGhC,WAAW;gGAAEE,MAAMiE;4FAAK;4FACrDzD,oBAAoB;wFACtB;wFACA0D,YAAY;wFACZxE,WAAU;;;;;;;8EAOlB,MAAC0D;oEAAI1D,WAAWhB,GAAG;;sFACjB,KAACC;4EAAMe,WAAWhB,GAAG,yBAAyBiC,SAAS;sFACpDK,OAAOd,EAAE;;sFAEZ,MAACtB;4EAAQ2E,MAAM9C;4EAAgB+C,cAAc9C;;8FAC3C,KAAC5B;oFAAe2E,OAAO;oFAAC/D,WAAU;8FAChC,cAAA,MAACjB;wFACCyE,SAAQ;wFACRxD,WAAWhB,GACT,+EACA,CAACoB,YAAYI,EAAE,IAAI;;0GAGrB,KAAC9B;gGAAasB,WAAU;;0GACxB,KAAC2D;gGAAKC,KAAK/D,OAAOE,SAAS;0GACxBK,YAAYI,EAAE,GACX3B,WAAWuB,YAAYI,EAAE,EAAE,gBAC3Bc,OAAOE,UAAU;;;;;8FAI3B,KAACrC;oFAAea,WAAU;oFAAmBmE,OAAM;8FACjD,cAAA,KAAC7E;wFACC8E,MAAK;wFACLC,UAAUjE,YAAYI,EAAE;wFACxB8D,UAAU,CAACC;4FACTnC,wBAAwB;gGAAE,GAAGhC,WAAW;gGAAEI,IAAI+D;4FAAK;4FACnDvD,kBAAkB;wFACpB;wFACAwD,YAAY;wFACZxE,WAAU;;;;;;;;;sEAQpB,MAAC0D;4DAAI1D,WAAU;;8EACb,KAACjB;oEACC0E,SAASnB;oEACTtC,WAAU;oEACVyE,UAAU,CAACrE,YAAYE,IAAI,IAAI,CAACF,YAAYI,EAAE;8EAE7Cc,OAAOM,KAAK;;8EAEf,KAAC7C;oEACC0E,SAASlB;oEACTiB,SAAQ;oEACRxD,WAAU;8EAETsB,OAAOO,MAAM;;;;;;;;;;;;;oBAS7BY,4BACC,KAACiC;wBACC1E,WAAW,CAAC,eAAe,EAAEiB,QAAQ,WAAW,UAAU,sGAAsG,CAAC;wBACjKwC,SAAS,CAACkB;4BACRA,EAAEC,eAAe;4BACjBpC;wBACF;kCAEA,cAAA,KAAC5D;4BAAEoB,WAAU;;;;;;;AAMzB"}
@@ -8,7 +8,8 @@ interface SelectFilterProps {
8
8
  locale?: Locale;
9
9
  className?: string;
10
10
  multiSelect?: boolean;
11
+ style?: React.CSSProperties;
11
12
  }
12
- export declare function SelectFilter({ label, options, value, onChange, placeholder, locale, className, multiSelect, }: SelectFilterProps): import("react").JSX.Element;
13
+ export declare function SelectFilter({ label, options, value, onChange, placeholder, locale, className, multiSelect, style, }: SelectFilterProps): import("react").JSX.Element;
13
14
  export {};
14
15
  //# sourceMappingURL=select-filter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"select-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/components/select-filter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAgBtF,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAAW,EACX,MAAyC,EACzC,SAAS,EACT,WAAkB,GACnB,EAAE,iBAAiB,+BAmMnB"}
1
+ {"version":3,"file":"select-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/components/select-filter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAiBtF,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAAW,EACX,MAAyC,EACzC,SAAS,EACT,WAAkB,EAClB,KAAK,GACN,EAAE,iBAAiB,+BAmMnB"}
@@ -9,13 +9,14 @@ import { Button } from '../../ui/button';
9
9
  import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '../../ui/command';
10
10
  import { Checkbox } from '../../ui/checkbox';
11
11
  import { Badge } from '../../ui/badge';
12
+ import { getLabel } from '../../labels';
12
13
  export function SelectFilter({ label, options, value, onChange, placeholder, locale = {
13
14
  code: 'he',
14
15
  direction: 'rtl'
15
- }, className, multiSelect = true }) {
16
+ }, className, multiSelect = true, style }) {
16
17
  const [open, setOpen] = useState(false);
17
18
  const [internalValue, setInternalValue] = useState(value);
18
- const isHebrew = locale.code === 'he';
19
+ const isRtl = locale?.direction === 'rtl';
19
20
  const showSearch = options.length > 10;
20
21
  const showSelectAll = multiSelect && options.length > 3;
21
22
  // Sync internal state with external value prop
@@ -27,12 +28,12 @@ export function SelectFilter({ label, options, value, onChange, placeholder, loc
27
28
  const selectedValues = internalValue?.selectedValues || [];
28
29
  const allSelected = selectedValues.length === options.length;
29
30
  const labels = {
30
- selectAll: isHebrew ? 'בחר הכל' : 'Select All',
31
- deselectAll: isHebrew ? 'בטל בחירת הכל' : 'Deselect All',
32
- search: isHebrew ? 'חפש...' : 'Search...',
33
- noResults: isHebrew ? 'לא נמצאו תוצאות' : 'No results found',
34
- selected: isHebrew ? 'נבחרו' : 'selected',
35
- selectedOne: isHebrew ? 'נבחר' : 'selected'
31
+ selectAll: getLabel('all', locale.code),
32
+ deselectAll: getLabel('all', locale.code),
33
+ search: getLabel('selectOption', locale.code),
34
+ noResults: getLabel('custom', locale.code),
35
+ selected: getLabel('selectOption', locale.code),
36
+ selectedOne: getLabel('selectOption', locale.code)
36
37
  };
37
38
  const getFilterValue = (values)=>{
38
39
  if (values.length === 0) {
@@ -89,7 +90,7 @@ export function SelectFilter({ label, options, value, onChange, placeholder, loc
89
90
  };
90
91
  const getDisplayText = ()=>{
91
92
  if (selectedValues.length === 0) {
92
- return placeholder || (isHebrew ? 'בחר אפשרויות' : 'Select options');
93
+ return placeholder || getLabel('selectOption', locale.code);
93
94
  } else if (selectedValues.length === options.length) {
94
95
  return labels.selectAll;
95
96
  } else {
@@ -99,9 +100,10 @@ export function SelectFilter({ label, options, value, onChange, placeholder, loc
99
100
  return /*#__PURE__*/ _jsxs("div", {
100
101
  className: cn('space-y-1', className),
101
102
  dir: locale.direction,
103
+ style: style,
102
104
  children: [
103
105
  label && /*#__PURE__*/ _jsx(Label, {
104
- className: cn('useTw text-sm font-medium', isHebrew && 'text-right block'),
106
+ className: cn('useTw text-sm font-medium', isRtl && 'text-right block'),
105
107
  children: label
106
108
  }),
107
109
  /*#__PURE__*/ _jsxs("div", {
@@ -147,14 +149,14 @@ export function SelectFilter({ label, options, value, onChange, placeholder, loc
147
149
  showSelectAll && /*#__PURE__*/ _jsx(CommandItem, {
148
150
  onSelect: handleToggleSelectAll,
149
151
  children: /*#__PURE__*/ _jsxs("div", {
150
- className: cn('useTw flex items-center w-full justify-between', isHebrew && 'flex-row-reverse'),
152
+ className: cn('useTw flex items-center w-full justify-between', isRtl && 'flex-row-reverse'),
151
153
  children: [
152
154
  /*#__PURE__*/ _jsx(Checkbox, {
153
155
  checked: allSelected,
154
- className: cn(isHebrew ? 'useTw ml-2' : 'useTw mr-2')
156
+ className: cn(isRtl ? 'useTw ml-2' : 'useTw mr-2')
155
157
  }),
156
158
  /*#__PURE__*/ _jsx("span", {
157
- className: cn(isHebrew && 'useTw text-right flex-1 mr-2'),
159
+ className: cn(isRtl && 'useTw text-right flex-1 mr-2'),
158
160
  children: allSelected ? labels.deselectAll : labels.selectAll
159
161
  })
160
162
  ]
@@ -163,16 +165,16 @@ export function SelectFilter({ label, options, value, onChange, placeholder, loc
163
165
  options.map((option)=>/*#__PURE__*/ _jsx(CommandItem, {
164
166
  onSelect: ()=>handleToggleOption(option.value),
165
167
  children: /*#__PURE__*/ _jsxs("div", {
166
- className: cn('flex items-center w-full justify-between', isHebrew && 'flex-row-reverse'),
168
+ className: cn('flex items-center w-full justify-between', isRtl && 'flex-row-reverse'),
167
169
  children: [
168
170
  multiSelect ? /*#__PURE__*/ _jsx(Checkbox, {
169
171
  checked: selectedValues.includes(option.value),
170
- className: cn(isHebrew ? 'useTw ml-2' : 'useTw mx-2')
172
+ className: cn(isRtl ? 'useTw ml-2' : 'useTw mx-2')
171
173
  }) : /*#__PURE__*/ _jsx(Check, {
172
- className: cn('useTw h-4 w-4', isHebrew ? 'ml-2' : 'mr-2', selectedValues.includes(option.value) ? 'opacity-100' : 'opacity-0')
174
+ className: cn('useTw h-4 w-4', isRtl ? 'ml-2' : 'mr-2', selectedValues.includes(option.value) ? 'opacity-100' : 'opacity-0')
173
175
  }),
174
176
  /*#__PURE__*/ _jsx("span", {
175
- className: cn(isHebrew && 'text-right flex-1'),
177
+ className: cn(isRtl && 'text-right flex-1'),
176
178
  children: option.label
177
179
  })
178
180
  ]
@@ -188,7 +190,7 @@ export function SelectFilter({ label, options, value, onChange, placeholder, loc
188
190
  ]
189
191
  }),
190
192
  selectedValues.length > 0 && /*#__PURE__*/ _jsx("button", {
191
- className: `useTw absolute ${isHebrew ? '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 `,
193
+ 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 `,
192
194
  onClick: (e)=>{
193
195
  e.stopPropagation();
194
196
  handleClearAll();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/filters/components/select-filter.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\nimport { Check, ChevronsUpDown, X } from 'lucide-react';\nimport { Locale, SelectFilterOption, SelectFilterValue } from '../types/filters-type';\nimport { Label } from '../../ui/label';\nimport { cn } from '../../lib/utils';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover';\nimport { Button } from '../../ui/button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '../../ui/command';\nimport { Checkbox } from '../../ui/checkbox';\nimport { Badge } from '../../ui/badge';\n\ninterface SelectFilterProps {\n label?: string;\n options: SelectFilterOption[];\n value?: SelectFilterValue;\n onChange: (value: SelectFilterValue) => void;\n placeholder?: string;\n locale?: Locale;\n className?: string;\n multiSelect?: boolean;\n}\n\nexport function SelectFilter({\n label,\n options,\n value,\n onChange,\n placeholder,\n locale = { code: 'he', direction: 'rtl' },\n className,\n multiSelect = true,\n}: SelectFilterProps) {\n const [open, setOpen] = useState(false);\n const [internalValue, setInternalValue] = useState<SelectFilterValue | undefined>(value);\n\n const isHebrew = locale.code === 'he';\n const showSearch = options.length > 10;\n const showSelectAll = multiSelect && options.length > 3;\n\n // Sync internal state with external value prop\n useEffect(() => {\n setInternalValue(value);\n }, [value]);\n\n const selectedValues = internalValue?.selectedValues || [];\n const allSelected = selectedValues.length === options.length;\n\n const labels = {\n selectAll: isHebrew ? 'בחר הכל' : 'Select All',\n deselectAll: isHebrew ? 'בטל בחירת הכל' : 'Deselect All',\n search: isHebrew ? 'חפש...' : 'Search...',\n noResults: isHebrew ? 'לא נמצאו תוצאות' : 'No results found',\n selected: isHebrew ? 'נבחרו' : 'selected',\n selectedOne: isHebrew ? 'נבחר' : 'selected',\n };\n\n const getFilterValue = (values: string[]): SelectFilterValue => {\n if (values.length === 0) {\n return { type: 'none', selectedValues: [] };\n } else if (values.length === options.length) {\n return { type: 'all', selectedValues: values };\n } else {\n return { type: 'some', selectedValues: values };\n }\n };\n\n const handleSelectAll = () => {\n const allValues = options.map((option) => option.value);\n const newValue = getFilterValue(allValues);\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const handleClearAll = () => {\n const newValue = getFilterValue([]);\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const handleToggleSelectAll = () => {\n if (allSelected) {\n handleClearAll();\n } else {\n handleSelectAll();\n }\n };\n\n const handleToggleOption = (optionValue: string) => {\n let newValues: string[];\n\n if (multiSelect) {\n newValues = selectedValues.includes(optionValue)\n ? selectedValues.filter((val) => val !== optionValue)\n : [...selectedValues, optionValue];\n } else {\n newValues = [optionValue];\n setOpen(false);\n }\n\n const newValue = getFilterValue(newValues);\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const getDisplayText = () => {\n if (selectedValues.length === 0) {\n return placeholder || (isHebrew ? 'בחר אפשרויות' : 'Select options');\n } else if (selectedValues.length === options.length) {\n return labels.selectAll;\n } else {\n return `${selectedValues.length} ${selectedValues.length > 1 ? labels.selected : labels.selectedOne} `;\n }\n };\n\n return (\n <div className={cn('space-y-1', className)} dir={locale.direction}>\n {label && (\n <Label className={cn('useTw text-sm font-medium', isHebrew && 'text-right block')}>\n {label}\n </Label>\n )}\n\n <div className='relative'>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant='outline'\n role='combobox'\n aria-expanded={open}\n className='w-full justify-between bg-background relative'\n >\n <span className='truncate'>{getDisplayText()}</span>\n <ChevronsUpDown className='h-4 w-4 shrink-0 opacity-50' />\n </Button>\n </PopoverTrigger>\n <PopoverContent className='useTw w-80 p-0' align='start'>\n <Command>\n {showSearch && <CommandInput placeholder={labels.search} />}\n <CommandList>\n <CommandEmpty>{labels.noResults}</CommandEmpty>\n <CommandGroup>\n {showSelectAll && (\n <CommandItem onSelect={handleToggleSelectAll}>\n <div\n className={cn(\n 'useTw flex items-center w-full justify-between',\n isHebrew && 'flex-row-reverse',\n )}\n >\n <Checkbox\n checked={allSelected}\n className={cn(isHebrew ? 'useTw ml-2' : 'useTw mr-2')}\n />\n <span className={cn(isHebrew && 'useTw text-right flex-1 mr-2')}>\n {allSelected ? labels.deselectAll : labels.selectAll}\n </span>\n </div>\n </CommandItem>\n )}\n {options.map((option) => (\n <CommandItem\n key={option.value}\n onSelect={() => handleToggleOption(option.value)}\n >\n <div\n className={cn(\n 'flex items-center w-full justify-between',\n isHebrew && 'flex-row-reverse',\n )}\n >\n {multiSelect ? (\n <Checkbox\n checked={selectedValues.includes(option.value)}\n className={cn(isHebrew ? 'useTw ml-2' : 'useTw mx-2')}\n />\n ) : (\n <Check\n className={cn(\n 'useTw h-4 w-4',\n isHebrew ? 'ml-2' : 'mr-2',\n selectedValues.includes(option.value) ? 'opacity-100' : 'opacity-0',\n )}\n />\n )}\n <span className={cn(isHebrew && 'text-right flex-1')}>{option.label}</span>\n </div>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n {selectedValues.length > 0 && (\n <button\n className={`useTw absolute ${isHebrew ? '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='h-3 w-3' />\n </button>\n )}\n </div>\n\n {multiSelect && selectedValues.length > 0 && selectedValues.length < options.length && (\n <div className='flex flex-wrap gap-1 mt-2'>\n {selectedValues.map((value) => {\n const option = options.find((opt) => opt.value === value);\n return (\n <Badge key={value} variant='secondary' className='text-xs bg-background border'>\n {option?.label || value}\n <button\n className='ml-1 hover:bg-muted rounded-full'\n onClick={() => handleToggleOption(value)}\n >\n ×\n </button>\n </Badge>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"names":["useEffect","useState","Check","ChevronsUpDown","X","Label","cn","Popover","PopoverContent","PopoverTrigger","Button","Command","CommandEmpty","CommandGroup","CommandInput","CommandItem","CommandList","Checkbox","Badge","SelectFilter","label","options","value","onChange","placeholder","locale","code","direction","className","multiSelect","open","setOpen","internalValue","setInternalValue","isHebrew","showSearch","length","showSelectAll","selectedValues","allSelected","labels","selectAll","deselectAll","search","noResults","selected","selectedOne","getFilterValue","values","type","handleSelectAll","allValues","map","option","newValue","handleClearAll","handleToggleSelectAll","handleToggleOption","optionValue","newValues","includes","filter","val","getDisplayText","div","dir","onOpenChange","asChild","variant","role","aria-expanded","span","align","onSelect","checked","button","onClick","e","stopPropagation","find","opt"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/filters/components/select-filter.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\nimport { Check, ChevronsUpDown, X } from 'lucide-react';\nimport { Locale, SelectFilterOption, SelectFilterValue } from '../types/filters-type';\nimport { Label } from '../../ui/label';\nimport { cn } from '../../lib/utils';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover';\nimport { Button } from '../../ui/button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '../../ui/command';\nimport { Checkbox } from '../../ui/checkbox';\nimport { Badge } from '../../ui/badge';\nimport { SupportedLocale, getLabel } from '../../labels';\n\ninterface SelectFilterProps {\n label?: string;\n options: SelectFilterOption[];\n value?: SelectFilterValue;\n onChange: (value: SelectFilterValue) => void;\n placeholder?: string;\n locale?: Locale;\n className?: string;\n multiSelect?: boolean;\n style?: React.CSSProperties;\n}\n\nexport function SelectFilter({\n label,\n options,\n value,\n onChange,\n placeholder,\n locale = { code: 'he', direction: 'rtl' },\n className,\n multiSelect = true,\n style,\n}: SelectFilterProps) {\n const [open, setOpen] = useState(false);\n const [internalValue, setInternalValue] = useState<SelectFilterValue | undefined>(value);\n\n const isRtl = locale?.direction === 'rtl';\n const showSearch = options.length > 10;\n const showSelectAll = multiSelect && options.length > 3;\n\n // Sync internal state with external value prop\n useEffect(() => {\n setInternalValue(value);\n }, [value]);\n\n const selectedValues = internalValue?.selectedValues || [];\n const allSelected = selectedValues.length === options.length;\n\n const labels = {\n selectAll: getLabel('all', locale.code),\n deselectAll: getLabel('all', locale.code),\n search: getLabel('selectOption', locale.code),\n noResults: getLabel('custom', locale.code),\n selected: getLabel('selectOption', locale.code),\n selectedOne: getLabel('selectOption', locale.code),\n };\n\n const getFilterValue = (values: string[]): SelectFilterValue => {\n if (values.length === 0) {\n return { type: 'none', selectedValues: [] };\n } else if (values.length === options.length) {\n return { type: 'all', selectedValues: values };\n } else {\n return { type: 'some', selectedValues: values };\n }\n };\n\n const handleSelectAll = () => {\n const allValues = options.map((option) => option.value);\n const newValue = getFilterValue(allValues);\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const handleClearAll = () => {\n const newValue = getFilterValue([]);\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const handleToggleSelectAll = () => {\n if (allSelected) {\n handleClearAll();\n } else {\n handleSelectAll();\n }\n };\n\n const handleToggleOption = (optionValue: string) => {\n let newValues: string[];\n\n if (multiSelect) {\n newValues = selectedValues.includes(optionValue)\n ? selectedValues.filter((val) => val !== optionValue)\n : [...selectedValues, optionValue];\n } else {\n newValues = [optionValue];\n setOpen(false);\n }\n\n const newValue = getFilterValue(newValues);\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const getDisplayText = () => {\n if (selectedValues.length === 0) {\n return placeholder || getLabel('selectOption', locale.code);\n } else if (selectedValues.length === options.length) {\n return labels.selectAll;\n } else {\n return `${selectedValues.length} ${selectedValues.length > 1 ? labels.selected : labels.selectedOne} `;\n }\n };\n\n return (\n <div className={cn('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'>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant='outline'\n role='combobox'\n aria-expanded={open}\n className='w-full justify-between bg-background relative'\n >\n <span className='truncate'>{getDisplayText()}</span>\n <ChevronsUpDown className='h-4 w-4 shrink-0 opacity-50' />\n </Button>\n </PopoverTrigger>\n <PopoverContent className='useTw w-80 p-0' align='start'>\n <Command>\n {showSearch && <CommandInput placeholder={labels.search} />}\n <CommandList>\n <CommandEmpty>{labels.noResults}</CommandEmpty>\n <CommandGroup>\n {showSelectAll && (\n <CommandItem onSelect={handleToggleSelectAll}>\n <div\n className={cn(\n 'useTw flex items-center w-full justify-between',\n isRtl && 'flex-row-reverse',\n )}\n >\n <Checkbox\n checked={allSelected}\n className={cn(isRtl ? 'useTw ml-2' : 'useTw mr-2')}\n />\n <span className={cn(isRtl && 'useTw text-right flex-1 mr-2')}>\n {allSelected ? labels.deselectAll : labels.selectAll}\n </span>\n </div>\n </CommandItem>\n )}\n {options.map((option) => (\n <CommandItem\n key={option.value}\n onSelect={() => handleToggleOption(option.value)}\n >\n <div\n className={cn(\n 'flex items-center w-full justify-between',\n isRtl && 'flex-row-reverse',\n )}\n >\n {multiSelect ? (\n <Checkbox\n checked={selectedValues.includes(option.value)}\n className={cn(isRtl ? 'useTw ml-2' : 'useTw mx-2')}\n />\n ) : (\n <Check\n className={cn(\n 'useTw h-4 w-4',\n isRtl ? 'ml-2' : 'mr-2',\n selectedValues.includes(option.value) ? 'opacity-100' : 'opacity-0',\n )}\n />\n )}\n <span className={cn(isRtl && 'text-right flex-1')}>{option.label}</span>\n </div>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n {selectedValues.length > 0 && (\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='h-3 w-3' />\n </button>\n )}\n </div>\n\n {multiSelect && selectedValues.length > 0 && selectedValues.length < options.length && (\n <div className='flex flex-wrap gap-1 mt-2'>\n {selectedValues.map((value) => {\n const option = options.find((opt) => opt.value === value);\n return (\n <Badge key={value} variant='secondary' className='text-xs bg-background border'>\n {option?.label || value}\n <button\n className='ml-1 hover:bg-muted rounded-full'\n onClick={() => handleToggleOption(value)}\n >\n ×\n </button>\n </Badge>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"names":["useEffect","useState","Check","ChevronsUpDown","X","Label","cn","Popover","PopoverContent","PopoverTrigger","Button","Command","CommandEmpty","CommandGroup","CommandInput","CommandItem","CommandList","Checkbox","Badge","getLabel","SelectFilter","label","options","value","onChange","placeholder","locale","code","direction","className","multiSelect","style","open","setOpen","internalValue","setInternalValue","isRtl","showSearch","length","showSelectAll","selectedValues","allSelected","labels","selectAll","deselectAll","search","noResults","selected","selectedOne","getFilterValue","values","type","handleSelectAll","allValues","map","option","newValue","handleClearAll","handleToggleSelectAll","handleToggleOption","optionValue","newValues","includes","filter","val","getDisplayText","div","dir","onOpenChange","asChild","variant","role","aria-expanded","span","align","onSelect","checked","button","onClick","e","stopPropagation","find","opt"],"mappings":"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"}
@@ -12,7 +12,8 @@ interface SmallSelectFilterProps {
12
12
  className?: string;
13
13
  multiSelect?: boolean;
14
14
  maxOptions?: number;
15
+ style?: React.CSSProperties;
15
16
  }
16
- export declare function SmallSelectFilter({ label, options, value, onChange, locale, className, multiSelect, maxOptions, }: SmallSelectFilterProps): import("react").JSX.Element;
17
+ export declare function SmallSelectFilter({ label, options, value, onChange, locale, className, multiSelect, maxOptions, style, }: SmallSelectFilterProps): import("react").JSX.Element;
17
18
  export {};
18
19
  //# sourceMappingURL=small-select-filter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"small-select-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/components/small-select-filter.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAKlE,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,sBAAsB;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAyC,EACzC,SAAS,EACT,WAAkB,EAClB,UAAc,GACf,EAAE,sBAAsB,+BA4HxB"}
1
+ {"version":3,"file":"small-select-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/components/small-select-filter.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAMlE,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,sBAAsB;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAyC,EACzC,SAAS,EACT,WAAkB,EAClB,UAAc,EACd,KAAK,GACN,EAAE,sBAAsB,+BA4HxB"}
@@ -8,12 +8,12 @@ import { Button } from '../../ui/button';
8
8
  export function SmallSelectFilter({ label, options, value, onChange, locale = {
9
9
  code: 'he',
10
10
  direction: 'rtl'
11
- }, className, multiSelect = true, maxOptions = 3 }) {
11
+ }, className, multiSelect = true, maxOptions = 3, style }) {
12
12
  const [internalValue, setInternalValue] = useState(value || {
13
13
  type: 'none',
14
14
  selectedValues: []
15
15
  });
16
- const isHebrew = locale.code === 'he';
16
+ const isRtl = locale?.direction === 'rtl';
17
17
  // Limit options to maxOptions
18
18
  const limitedOptions = options.slice(0, maxOptions);
19
19
  // Sync internal state with external value prop
@@ -81,9 +81,10 @@ export function SmallSelectFilter({ label, options, value, onChange, locale = {
81
81
  return /*#__PURE__*/ _jsxs("div", {
82
82
  className: cn('space-y-2', className),
83
83
  dir: locale.direction,
84
+ style: style,
84
85
  children: [
85
86
  label && /*#__PURE__*/ _jsx(Label, {
86
- className: cn('useTw text-sm font-medium', isHebrew && 'text-right block'),
87
+ className: cn('useTw text-sm font-medium', isRtl && 'text-right block'),
87
88
  children: label
88
89
  }),
89
90
  /*#__PURE__*/ _jsxs("div", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/filters/components/small-select-filter.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport { X } from 'lucide-react';\nimport { Locale, SelectFilterValue } from '../types/filters-type';\nimport { Label } from '../../ui/label';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../ui/button';\n\ninterface SmallSelectOption {\n value: string;\n label: string;\n}\n\ninterface SmallSelectFilterProps {\n label?: string;\n options: SmallSelectOption[];\n value?: SelectFilterValue;\n onChange: (value: SelectFilterValue) => void;\n locale?: Locale;\n className?: string;\n multiSelect?: boolean;\n maxOptions?: number;\n}\n\nexport function SmallSelectFilter({\n label,\n options,\n value,\n onChange,\n locale = { code: 'he', direction: 'rtl' },\n className,\n multiSelect = true,\n maxOptions = 3,\n}: SmallSelectFilterProps) {\n const [internalValue, setInternalValue] = useState<SelectFilterValue>(\n value || { type: 'none', selectedValues: [] },\n );\n\n const isHebrew = locale.code === 'he';\n\n // Limit options to maxOptions\n const limitedOptions = options.slice(0, maxOptions);\n\n // Sync internal state with external value prop\n useEffect(() => {\n setInternalValue(value || { type: 'none', selectedValues: [] });\n }, [value]);\n\n const handleOptionToggle = (optionValue: string) => {\n let newSelectedValues: string[];\n\n if (multiSelect) {\n // Multiple selection mode - allow multiple choices\n if (internalValue.selectedValues.includes(optionValue)) {\n newSelectedValues = internalValue.selectedValues.filter((val) => val !== optionValue);\n } else {\n newSelectedValues = [...internalValue.selectedValues, optionValue];\n }\n } else {\n // Single selection mode\n if (internalValue.selectedValues.includes(optionValue)) {\n newSelectedValues = []; // Deselect if already selected\n } else {\n newSelectedValues = [optionValue]; // Select only this option\n }\n }\n\n const newValue: SelectFilterValue = {\n type:\n newSelectedValues.length === 0\n ? 'none'\n : newSelectedValues.length === options.length\n ? 'all'\n : 'some',\n selectedValues: newSelectedValues,\n };\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const handleClear = () => {\n const newValue: SelectFilterValue = { type: 'none', selectedValues: [] };\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const hasSelection = internalValue.selectedValues.length > 0;\n\n const isOptionSelected = (optionValue: string) => {\n return internalValue.selectedValues.includes(optionValue);\n };\n\n const getButtonColor = (optionValue: string, index: number) => {\n if (!isOptionSelected(optionValue)) {\n return 'useTw bg-background text-muted-foreground hover:bg-muted';\n }\n\n // Different colors for different options when selected\n const colors = [\n 'bg-blue-600 text-white hover:bg-blue-700', // First option - blue\n 'bg-green-600 text-white hover:bg-green-700', // Second option - green\n 'bg-purple-600 text-white hover:bg-purple-700', // Third option - purple\n ];\n return colors[index] || 'bg-accent text-accent-foreground hover:bg-accent/80';\n };\n\n return (\n <div className={cn('space-y-2', className)} dir={locale.direction}>\n {label && (\n <Label className={cn('useTw text-sm font-medium', isHebrew && 'text-right block')}>\n {label}\n </Label>\n )}\n\n <div\n className={cn(\n 'flex items-center gap-3 transition-colors py-0.5',\n locale.direction === 'rtl' && 'justify-start',\n )}\n >\n <div className={cn('flex items-center', locale.direction === 'rtl' && 'order-first')}>\n {/* Toggle Options */}\n <div className='flex rounded-md border overflow-hidden'>\n {limitedOptions.map((option, index) => (\n <Button\n key={option.value}\n variant='ghost'\n size='sm'\n className={cn(\n 'px-3 py-1 text-xs rounded-none border-0',\n index > 0 && 'border-l',\n getButtonColor(option.value, index),\n )}\n onClick={() => handleOptionToggle(option.value)}\n >\n {option.label}\n </Button>\n ))}\n </div>\n </div>\n\n {hasSelection && (\n <Button\n variant='ghost'\n size='sm'\n className={cn(\n 'h-5 w-5 p-0 hover:bg-muted rounded-full -mt-1 -ml-1',\n locale.direction === 'rtl' ? 'order-last' : 'order-last',\n )}\n onClick={handleClear}\n >\n <X className='useTw h-3 w-3' />\n </Button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["useEffect","useState","X","Label","cn","Button","SmallSelectFilter","label","options","value","onChange","locale","code","direction","className","multiSelect","maxOptions","internalValue","setInternalValue","type","selectedValues","isHebrew","limitedOptions","slice","handleOptionToggle","optionValue","newSelectedValues","includes","filter","val","newValue","length","handleClear","hasSelection","isOptionSelected","getButtonColor","index","colors","div","dir","map","option","variant","size","onClick"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/filters/components/small-select-filter.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport { X } from 'lucide-react';\nimport { Locale, SelectFilterValue } from '../types/filters-type';\nimport { Label } from '../../ui/label';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../ui/button';\nimport { SupportedLocale } from '../../labels';\n\ninterface SmallSelectOption {\n value: string;\n label: string;\n}\n\ninterface SmallSelectFilterProps {\n label?: string;\n options: SmallSelectOption[];\n value?: SelectFilterValue;\n onChange: (value: SelectFilterValue) => void;\n locale?: Locale;\n className?: string;\n multiSelect?: boolean;\n maxOptions?: number;\n style?: React.CSSProperties;\n}\n\nexport function SmallSelectFilter({\n label,\n options,\n value,\n onChange,\n locale = { code: 'he', direction: 'rtl' },\n className,\n multiSelect = true,\n maxOptions = 3,\n style,\n}: SmallSelectFilterProps) {\n const [internalValue, setInternalValue] = useState<SelectFilterValue>(\n value || { type: 'none', selectedValues: [] },\n );\n\n const isRtl = locale?.direction === 'rtl';\n\n // Limit options to maxOptions\n const limitedOptions = options.slice(0, maxOptions);\n\n // Sync internal state with external value prop\n useEffect(() => {\n setInternalValue(value || { type: 'none', selectedValues: [] });\n }, [value]);\n\n const handleOptionToggle = (optionValue: string) => {\n let newSelectedValues: string[];\n\n if (multiSelect) {\n // Multiple selection mode - allow multiple choices\n if (internalValue.selectedValues.includes(optionValue)) {\n newSelectedValues = internalValue.selectedValues.filter((val) => val !== optionValue);\n } else {\n newSelectedValues = [...internalValue.selectedValues, optionValue];\n }\n } else {\n // Single selection mode\n if (internalValue.selectedValues.includes(optionValue)) {\n newSelectedValues = []; // Deselect if already selected\n } else {\n newSelectedValues = [optionValue]; // Select only this option\n }\n }\n\n const newValue: SelectFilterValue = {\n type:\n newSelectedValues.length === 0\n ? 'none'\n : newSelectedValues.length === options.length\n ? 'all'\n : 'some',\n selectedValues: newSelectedValues,\n };\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const handleClear = () => {\n const newValue: SelectFilterValue = { type: 'none', selectedValues: [] };\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const hasSelection = internalValue.selectedValues.length > 0;\n\n const isOptionSelected = (optionValue: string) => {\n return internalValue.selectedValues.includes(optionValue);\n };\n\n const getButtonColor = (optionValue: string, index: number) => {\n if (!isOptionSelected(optionValue)) {\n return 'useTw bg-background text-muted-foreground hover:bg-muted';\n }\n\n // Different colors for different options when selected\n const colors = [\n 'bg-blue-600 text-white hover:bg-blue-700', // First option - blue\n 'bg-green-600 text-white hover:bg-green-700', // Second option - green\n 'bg-purple-600 text-white hover:bg-purple-700', // Third option - purple\n ];\n return colors[index] || 'bg-accent text-accent-foreground hover:bg-accent/80';\n };\n\n return (\n <div className={cn('space-y-2', 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\n className={cn(\n 'flex items-center gap-3 transition-colors py-0.5',\n locale.direction === 'rtl' && 'justify-start',\n )}\n >\n <div className={cn('flex items-center', locale.direction === 'rtl' && 'order-first')}>\n {/* Toggle Options */}\n <div className='flex rounded-md border overflow-hidden'>\n {limitedOptions.map((option, index) => (\n <Button\n key={option.value}\n variant='ghost'\n size='sm'\n className={cn(\n 'px-3 py-1 text-xs rounded-none border-0',\n index > 0 && 'border-l',\n getButtonColor(option.value, index),\n )}\n onClick={() => handleOptionToggle(option.value)}\n >\n {option.label}\n </Button>\n ))}\n </div>\n </div>\n\n {hasSelection && (\n <Button\n variant='ghost'\n size='sm'\n className={cn(\n 'h-5 w-5 p-0 hover:bg-muted rounded-full -mt-1 -ml-1',\n locale.direction === 'rtl' ? 'order-last' : 'order-last',\n )}\n onClick={handleClear}\n >\n <X className='useTw h-3 w-3' />\n </Button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["useEffect","useState","X","Label","cn","Button","SmallSelectFilter","label","options","value","onChange","locale","code","direction","className","multiSelect","maxOptions","style","internalValue","setInternalValue","type","selectedValues","isRtl","limitedOptions","slice","handleOptionToggle","optionValue","newSelectedValues","includes","filter","val","newValue","length","handleClear","hasSelection","isOptionSelected","getButtonColor","index","colors","div","dir","map","option","variant","size","onClick"],"mappings":"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"}
@@ -1,6 +1,9 @@
1
+ import type { SupportedLocale } from '../../labels';
1
2
  import { DateFilterOption } from '../types/filters-type';
2
- export declare const pastDateFilterOptions: DateFilterOption[];
3
- export declare const futureDateFilterOptions: DateFilterOption[];
4
- export declare const pastDateFilterOptionsEn: DateFilterOption[];
5
- export declare const futureDateFilterOptionsEn: DateFilterOption[];
3
+ export declare const pastOptionKeys: readonly ["yesterday", "lastWeek", "lastMonth", "allPast"];
4
+ export declare const futureOptionKeys: readonly ["today", "nextWeek", "nextMonth", "allFuture"];
5
+ export declare const getDateFilterOptions: (locale: SupportedLocale | string) => {
6
+ pastOptions: DateFilterOption[];
7
+ futureOptions: DateFilterOption[];
8
+ };
6
9
  //# sourceMappingURL=date-filter-options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"date-filter-options.d.ts","sourceRoot":"","sources":["../../../src/filters/constants/date-filter-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,eAAO,MAAM,qBAAqB,EAAE,gBAAgB,EAKnD,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,gBAAgB,EAKrD,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,gBAAgB,EAKrD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,gBAAgB,EAKvD,CAAC"}
1
+ {"version":3,"file":"date-filter-options.d.ts","sourceRoot":"","sources":["../../../src/filters/constants/date-filter-options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,eAAO,MAAM,cAAc,4DAA6D,CAAC;AACzF,eAAO,MAAM,gBAAgB,0DAA2D,CAAC;AAazF,eAAO,MAAM,oBAAoB,WAAY,eAAe,GAAG,MAAM;;;CAKpE,CAAC"}
@@ -1,74 +1,29 @@
1
- export const pastDateFilterOptions = [
2
- {
3
- value: 'yesterday',
4
- label: 'אתמול'
5
- },
6
- {
7
- value: 'lastWeek',
8
- label: 'שבוע שעבר'
9
- },
10
- {
11
- value: 'lastMonth',
12
- label: 'חודש שעבר'
13
- },
14
- {
15
- value: 'allPast',
16
- label: 'בעבר'
17
- }
1
+ import { getLabel } from '../../labels';
2
+ // Define the option keys for past and future date filters
3
+ export const pastOptionKeys = [
4
+ 'yesterday',
5
+ 'lastWeek',
6
+ 'lastMonth',
7
+ 'allPast'
18
8
  ];
19
- export const futureDateFilterOptions = [
20
- {
21
- value: 'today',
22
- label: 'היום'
23
- },
24
- {
25
- value: 'nextWeek',
26
- label: 'השבוע'
27
- },
28
- {
29
- value: 'nextMonth',
30
- label: 'החודש'
31
- },
32
- {
33
- value: 'allFuture',
34
- label: 'בעתיד'
35
- }
36
- ];
37
- export const pastDateFilterOptionsEn = [
38
- {
39
- value: 'yesterday',
40
- label: 'Yesterday'
41
- },
42
- {
43
- value: 'lastWeek',
44
- label: 'Last Week'
45
- },
46
- {
47
- value: 'lastMonth',
48
- label: 'Last Month'
49
- },
50
- {
51
- value: 'allPast',
52
- label: 'All Past'
53
- }
54
- ];
55
- export const futureDateFilterOptionsEn = [
56
- {
57
- value: 'today',
58
- label: 'Today'
59
- },
60
- {
61
- value: 'nextWeek',
62
- label: 'This Week'
63
- },
64
- {
65
- value: 'nextMonth',
66
- label: 'This Month'
67
- },
68
- {
69
- value: 'allFuture',
70
- label: 'All Future'
71
- }
9
+ export const futureOptionKeys = [
10
+ 'today',
11
+ 'nextWeek',
12
+ 'nextMonth',
13
+ 'allFuture'
72
14
  ];
15
+ // Create date filter options dynamically based on locale
16
+ const createDateFilterOptions = (keys, locale)=>{
17
+ return keys.map((key)=>({
18
+ value: key,
19
+ label: getLabel(key, locale)
20
+ }));
21
+ };
22
+ export const getDateFilterOptions = (locale)=>{
23
+ return {
24
+ pastOptions: createDateFilterOptions(pastOptionKeys, locale),
25
+ futureOptions: createDateFilterOptions(futureOptionKeys, locale)
26
+ };
27
+ };
73
28
 
74
29
  //# sourceMappingURL=date-filter-options.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/filters/constants/date-filter-options.ts"],"sourcesContent":["import { DateFilterOption } from '../types/filters-type';\n\nexport const pastDateFilterOptions: DateFilterOption[] = [\n { value: 'yesterday', label: 'אתמול' },\n { value: 'lastWeek', label: 'שבוע שעבר' },\n { value: 'lastMonth', label: 'חודש שעבר' },\n { value: 'allPast', label: 'בעבר' },\n];\n\nexport const futureDateFilterOptions: DateFilterOption[] = [\n { value: 'today', label: 'היום' },\n { value: 'nextWeek', label: 'השבוע' },\n { value: 'nextMonth', label: 'החודש' },\n { value: 'allFuture', label: 'בעתיד' },\n];\n\nexport const pastDateFilterOptionsEn: DateFilterOption[] = [\n { value: 'yesterday', label: 'Yesterday' },\n { value: 'lastWeek', label: 'Last Week' },\n { value: 'lastMonth', label: 'Last Month' },\n { value: 'allPast', label: 'All Past' },\n];\n\nexport const futureDateFilterOptionsEn: DateFilterOption[] = [\n { value: 'today', label: 'Today' },\n { value: 'nextWeek', label: 'This Week' },\n { value: 'nextMonth', label: 'This Month' },\n { value: 'allFuture', label: 'All Future' },\n];\n"],"names":["pastDateFilterOptions","value","label","futureDateFilterOptions","pastDateFilterOptionsEn","futureDateFilterOptionsEn"],"mappings":"AAEA,OAAO,MAAMA,wBAA4C;IACvD;QAAEC,OAAO;QAAaC,OAAO;IAAQ;IACrC;QAAED,OAAO;QAAYC,OAAO;IAAY;IACxC;QAAED,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAWC,OAAO;IAAO;CACnC,CAAC;AAEF,OAAO,MAAMC,0BAA8C;IACzD;QAAEF,OAAO;QAASC,OAAO;IAAO;IAChC;QAAED,OAAO;QAAYC,OAAO;IAAQ;IACpC;QAAED,OAAO;QAAaC,OAAO;IAAQ;IACrC;QAAED,OAAO;QAAaC,OAAO;IAAQ;CACtC,CAAC;AAEF,OAAO,MAAME,0BAA8C;IACzD;QAAEH,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAYC,OAAO;IAAY;IACxC;QAAED,OAAO;QAAaC,OAAO;IAAa;IAC1C;QAAED,OAAO;QAAWC,OAAO;IAAW;CACvC,CAAC;AAEF,OAAO,MAAMG,4BAAgD;IAC3D;QAAEJ,OAAO;QAASC,OAAO;IAAQ;IACjC;QAAED,OAAO;QAAYC,OAAO;IAAY;IACxC;QAAED,OAAO;QAAaC,OAAO;IAAa;IAC1C;QAAED,OAAO;QAAaC,OAAO;IAAa;CAC3C,CAAC"}
1
+ {"version":3,"sources":["../../../src/filters/constants/date-filter-options.ts"],"sourcesContent":["import { getLabel } from '../../labels';\nimport type { SupportedLocale } from '../../labels';\nimport { DateFilterOption } from '../types/filters-type';\n\n// Define the option keys for past and future date filters\nexport const pastOptionKeys = ['yesterday', 'lastWeek', 'lastMonth', 'allPast'] as const;\nexport const futureOptionKeys = ['today', 'nextWeek', 'nextMonth', 'allFuture'] as const;\n\n// Create date filter options dynamically based on locale\nconst createDateFilterOptions = (\n keys: readonly string[],\n locale: SupportedLocale | string,\n): DateFilterOption[] => {\n return keys.map((key) => ({\n value: key,\n label: getLabel(key as any, locale as SupportedLocale),\n }));\n};\n\nexport const getDateFilterOptions = (locale: SupportedLocale | string) => {\n return {\n pastOptions: createDateFilterOptions(pastOptionKeys, locale),\n futureOptions: createDateFilterOptions(futureOptionKeys, locale),\n };\n};\n"],"names":["getLabel","pastOptionKeys","futureOptionKeys","createDateFilterOptions","keys","locale","map","key","value","label","getDateFilterOptions","pastOptions","futureOptions"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,eAAe;AAIxC,0DAA0D;AAC1D,OAAO,MAAMC,iBAAiB;IAAC;IAAa;IAAY;IAAa;CAAU,CAAU;AACzF,OAAO,MAAMC,mBAAmB;IAAC;IAAS;IAAY;IAAa;CAAY,CAAU;AAEzF,yDAAyD;AACzD,MAAMC,0BAA0B,CAC9BC,MACAC;IAEA,OAAOD,KAAKE,GAAG,CAAC,CAACC,MAAS,CAAA;YACxBC,OAAOD;YACPE,OAAOT,SAASO,KAAYF;QAC9B,CAAA;AACF;AAEA,OAAO,MAAMK,uBAAuB,CAACL;IACnC,OAAO;QACLM,aAAaR,wBAAwBF,gBAAgBI;QACrDO,eAAeT,wBAAwBD,kBAAkBG;IAC3D;AACF,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"filters-type.d.ts","sourceRoot":"","sources":["../../../src/filters/types/filters-type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filters-type.d.ts","sourceRoot":"","sources":["../../../src/filters/types/filters-type.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/filters/types/filters-type.ts"],"sourcesContent":["export interface DateFilterOption {\n value: string\n label: string\n}\n\nexport interface DateRange {\n from: Date | undefined\n to: Date | undefined\n}\n\nexport interface DateFilterValue {\n type: 'predefined' | 'custom'\n predefinedValue?: string\n customRange?: DateRange\n}\n\nexport interface SelectFilterOption {\n value: string\n label: string\n}\n\nexport interface SelectFilterValue {\n type: 'all' | 'some' | 'none'\n selectedValues: string[]\n}\n\nexport interface SmallSelectOption {\n value: string\n label: string\n}\n\nexport interface SmallSelectFilterValue {\n selectedValues: string[]\n}\n\nexport type CheckboxFilterState = 'checked' | 'unchecked' | 'indeterminate'\n\nexport interface Locale {\n code: 'he' | 'en'\n direction: 'rtl' | 'ltr'\n}\n\n// New filter configuration types\nexport type FilterType = 'date' | 'select' | 'checkbox' | 'small-select'\n\nexport interface BaseFilterConfig {\n id: string\n type: FilterType\n label: {\n he: string\n en: string\n }\n title: {\n he: string\n en: string\n }\n}\n\nexport interface DateFilterConfig extends BaseFilterConfig {\n type: 'date'\n placeholder?: {\n he: string\n en: string\n }\n}\n\nexport interface SelectFilterConfig extends BaseFilterConfig {\n type: 'select'\n options: {\n he: SelectFilterOption[]\n en: SelectFilterOption[]\n }\n placeholder?: {\n he: string\n en: string\n }\n multiSelect?: boolean\n showSearch?: boolean\n}\n\nexport interface CheckboxFilterConfig extends BaseFilterConfig {\n type: 'checkbox'\n checkboxLabel: {\n he: string\n en: string\n }\n}\n\nexport interface SmallSelectFilterConfig extends BaseFilterConfig {\n type: 'small-select'\n options: {\n he: SmallSelectOption[]\n en: SmallSelectOption[]\n }\n multiSelect?: boolean\n maxOptions?: number\n}\n\nexport type FilterConfig =\n | DateFilterConfig\n | SelectFilterConfig\n | CheckboxFilterConfig\n | SmallSelectFilterConfig\n\nexport interface FilterState {\n [filterId: string]:\n | DateFilterValue\n | SelectFilterValue\n | CheckboxFilterState\n | SmallSelectFilterValue\n | undefined\n}\n\nexport type FilterDetaild = {\n name: string\n label: string\n type: any\n options?: Array<any> // Replace `any` with a more specific type if known\n row?: number | undefined\n width?: string\n}\n\nexport interface FilterRow {\n rowNumber: number\n filters: FilterDetaild[]\n}\n"],"names":[],"mappings":"AA0HA,WAGC"}
1
+ {"version":3,"sources":["../../../src/filters/types/filters-type.ts"],"sourcesContent":["export interface DateFilterOption {\n value: string;\n label: string;\n}\n\nexport interface DateRange {\n from: Date | undefined;\n to: Date | undefined;\n}\n\nexport interface DateFilterValue {\n type: 'predefined' | 'custom';\n predefinedValue?: string;\n customRange?: DateRange;\n}\n\nexport interface SelectFilterOption {\n value: string;\n label: string;\n}\n\nexport interface SelectFilterValue {\n type: 'all' | 'some' | 'none';\n selectedValues: string[];\n}\n\nexport interface SmallSelectOption {\n value: string;\n label: string;\n}\n\nexport interface SmallSelectFilterValue {\n selectedValues: string[];\n}\n\nexport type CheckboxFilterState = 'checked' | 'unchecked' | 'indeterminate';\n\nexport interface Locale {\n code: 'he' | 'en';\n direction: 'rtl' | 'ltr';\n}\n\n// New filter configuration types\nexport type FilterType = 'date' | 'select' | 'checkbox' | 'small-select';\n\nexport interface BaseFilterConfig {\n id: string;\n type: FilterType;\n label: {\n he: string;\n en: string;\n };\n title: {\n he: string;\n en: string;\n };\n}\n\nexport interface DateFilterConfig extends BaseFilterConfig {\n type: 'date';\n placeholder?: {\n he: string;\n en: string;\n };\n}\n\nexport interface SelectFilterConfig extends BaseFilterConfig {\n type: 'select';\n options: {\n he: SelectFilterOption[];\n en: SelectFilterOption[];\n };\n placeholder?: {\n he: string;\n en: string;\n };\n multiSelect?: boolean;\n showSearch?: boolean;\n}\n\nexport interface CheckboxFilterConfig extends BaseFilterConfig {\n type: 'checkbox';\n checkboxLabel: {\n he: string;\n en: string;\n };\n}\n\nexport interface SmallSelectFilterConfig extends BaseFilterConfig {\n type: 'small-select';\n options: {\n he: SmallSelectOption[];\n en: SmallSelectOption[];\n };\n multiSelect?: boolean;\n maxOptions?: number;\n}\n\nexport type FilterConfig =\n | DateFilterConfig\n | SelectFilterConfig\n | CheckboxFilterConfig\n | SmallSelectFilterConfig;\n\nexport interface FilterState {\n [filterId: string]:\n | DateFilterValue\n | SelectFilterValue\n | CheckboxFilterState\n | SmallSelectFilterValue\n | undefined;\n}\n\nexport type FilterDetaild = {\n name: string;\n label: string;\n type: any;\n options?: Array<any>; // Replace `any` with a more specific type if known\n row?: number | undefined;\n width?: string;\n};\n\nexport interface FilterRow {\n rowNumber: number;\n filters: FilterDetaild[];\n}\n"],"names":[],"mappings":"AA0HA,WAGC"}