@shefing/quickfilter 1.0.0

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 (90) hide show
  1. package/README.md +0 -0
  2. package/dist/FilterField.d.ts +8 -0
  3. package/dist/FilterField.d.ts.map +1 -0
  4. package/dist/FilterField.js +87 -0
  5. package/dist/FilterField.js.map +1 -0
  6. package/dist/QuickFilter.d.ts +9 -0
  7. package/dist/QuickFilter.d.ts.map +1 -0
  8. package/dist/QuickFilter.js +331 -0
  9. package/dist/QuickFilter.js.map +1 -0
  10. package/dist/filters/components/checkbox-filter.d.ts +12 -0
  11. package/dist/filters/components/checkbox-filter.d.ts.map +1 -0
  12. package/dist/filters/components/checkbox-filter.js +104 -0
  13. package/dist/filters/components/checkbox-filter.js.map +1 -0
  14. package/dist/filters/components/date-filter.d.ts +11 -0
  15. package/dist/filters/components/date-filter.d.ts.map +1 -0
  16. package/dist/filters/components/date-filter.js +379 -0
  17. package/dist/filters/components/date-filter.js.map +1 -0
  18. package/dist/filters/components/select-filter.d.ts +14 -0
  19. package/dist/filters/components/select-filter.d.ts.map +1 -0
  20. package/dist/filters/components/select-filter.js +223 -0
  21. package/dist/filters/components/select-filter.js.map +1 -0
  22. package/dist/filters/components/small-select-filter.d.ts +18 -0
  23. package/dist/filters/components/small-select-filter.d.ts.map +1 -0
  24. package/dist/filters/components/small-select-filter.js +120 -0
  25. package/dist/filters/components/small-select-filter.js.map +1 -0
  26. package/dist/filters/constants/date-filter-options.d.ts +6 -0
  27. package/dist/filters/constants/date-filter-options.d.ts.map +1 -0
  28. package/dist/filters/constants/date-filter-options.js +74 -0
  29. package/dist/filters/constants/date-filter-options.js.map +1 -0
  30. package/dist/filters/types/filters-type.d.ts +99 -0
  31. package/dist/filters/types/filters-type.d.ts.map +1 -0
  32. package/dist/filters/types/filters-type.js +3 -0
  33. package/dist/filters/types/filters-type.js.map +1 -0
  34. package/dist/filters/utils/date-helpers.d.ts +23 -0
  35. package/dist/filters/utils/date-helpers.d.ts.map +1 -0
  36. package/dist/filters/utils/date-helpers.js +159 -0
  37. package/dist/filters/utils/date-helpers.js.map +1 -0
  38. package/dist/filters/utils/layout-helpers.d.ts +6 -0
  39. package/dist/filters/utils/layout-helpers.d.ts.map +1 -0
  40. package/dist/filters/utils/layout-helpers.js +73 -0
  41. package/dist/filters/utils/layout-helpers.js.map +1 -0
  42. package/dist/index.d.ts +5 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +51 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/lib/utils.d.ts +5 -0
  47. package/dist/lib/utils.d.ts.map +1 -0
  48. package/dist/lib/utils.js +18 -0
  49. package/dist/lib/utils.js.map +1 -0
  50. package/dist/types.d.ts +7 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +3 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/ui/badge.d.ts +10 -0
  55. package/dist/ui/badge.d.ts.map +1 -0
  56. package/dist/ui/badge.js +28 -0
  57. package/dist/ui/badge.js.map +1 -0
  58. package/dist/ui/button.d.ts +12 -0
  59. package/dist/ui/button.d.ts.map +1 -0
  60. package/dist/ui/button.js +45 -0
  61. package/dist/ui/button.js.map +1 -0
  62. package/dist/ui/calendar.d.ts +9 -0
  63. package/dist/ui/calendar.d.ts.map +1 -0
  64. package/dist/ui/calendar.js +126 -0
  65. package/dist/ui/calendar.js.map +1 -0
  66. package/dist/ui/checkbox.d.ts +5 -0
  67. package/dist/ui/checkbox.d.ts.map +1 -0
  68. package/dist/ui/checkbox.js +21 -0
  69. package/dist/ui/checkbox.js.map +1 -0
  70. package/dist/ui/command.d.ts +81 -0
  71. package/dist/ui/command.d.ts.map +1 -0
  72. package/dist/ui/command.js +80 -0
  73. package/dist/ui/command.js.map +1 -0
  74. package/dist/ui/dialog.d.ts +20 -0
  75. package/dist/ui/dialog.d.ts.map +1 -0
  76. package/dist/ui/dialog.js +61 -0
  77. package/dist/ui/dialog.js.map +1 -0
  78. package/dist/ui/label.d.ts +6 -0
  79. package/dist/ui/label.d.ts.map +1 -0
  80. package/dist/ui/label.js +16 -0
  81. package/dist/ui/label.js.map +1 -0
  82. package/dist/ui/popover.d.ts +7 -0
  83. package/dist/ui/popover.d.ts.map +1 -0
  84. package/dist/ui/popover.js +20 -0
  85. package/dist/ui/popover.js.map +1 -0
  86. package/dist/ui/separator.d.ts +5 -0
  87. package/dist/ui/separator.d.ts.map +1 -0
  88. package/dist/ui/separator.js +16 -0
  89. package/dist/ui/separator.js.map +1 -0
  90. package/package.json +69 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/filters/components/checkbox-filter.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport { X } from 'lucide-react';\nimport { CheckboxFilterState, Locale } from '../types/filters-type';\nimport { Label } from '../../ui/label';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../ui/button';\n\ninterface CheckboxFilterProps {\n label?: string;\n checkboxLabel: string;\n value?: CheckboxFilterState;\n onChange: (state: CheckboxFilterState) => void;\n locale?: Locale;\n className?: string;\n}\n\nexport function CheckboxFilter({\n label,\n checkboxLabel,\n value = 'indeterminate',\n onChange,\n locale = { code: 'he', direction: 'rtl' },\n className,\n}: CheckboxFilterProps) {\n const [internalState, setInternalState] = useState<CheckboxFilterState>(value);\n\n const isHebrew = locale.code === 'he';\n\n // Sync internal state with external value prop\n useEffect(() => {\n setInternalState(value);\n }, [value]);\n\n const handleToggle = (newState: 'checked' | 'unchecked') => {\n setInternalState(newState);\n onChange(newState);\n };\n\n const handleClear = () => {\n setInternalState('indeterminate');\n onChange('indeterminate');\n };\n\n const isActive = internalState === 'checked' || internalState === 'unchecked';\n\n const labels_toggle = {\n yes: isHebrew ? 'כן' : 'YES',\n no: isHebrew ? 'לא' : 'NO',\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\n className={cn(\n 'flex items-center gap-3 transition-colors py-px',\n locale.direction === 'rtl' && 'justify-start',\n )}\n >\n <div className={cn('flex items-center', locale.direction === 'rtl' && 'order-first')}>\n {/* Two Button Toggle */}\n <div className='flex rounded-md border overflow-hidden'>\n {/* In RTL, YES comes first, in LTR, NO comes first */}\n {locale.direction === 'rtl' ? (\n <>\n <Button\n variant={internalState === 'checked' ? 'default' : 'ghost'}\n size='sm'\n className={cn(\n 'px-3 py-1 text-xs rounded-none border-0',\n internalState === 'checked'\n ? 'bg-green-600 text-white hover:bg-green-700'\n : 'bg-background text-muted-foreground hover:bg-muted',\n )}\n onClick={() => handleToggle('checked')}\n >\n {labels_toggle.yes}\n </Button>\n <Button\n variant={internalState === 'unchecked' ? 'default' : 'ghost'}\n size='sm'\n className={cn(\n 'px-3 py-1 text-xs rounded-none border-0 border-l',\n internalState === 'unchecked'\n ? 'bg-red-600 text-white hover:bg-red-700'\n : 'bg-background text-muted-foreground hover:bg-muted',\n )}\n onClick={() => handleToggle('unchecked')}\n >\n {labels_toggle.no}\n </Button>\n </>\n ) : (\n <>\n <Button\n variant={internalState === 'unchecked' ? 'default' : 'ghost'}\n size='sm'\n className={cn(\n 'px-3 py-1 text-xs rounded-none border-0',\n internalState === 'unchecked'\n ? 'bg-red-600 text-white hover:bg-red-700'\n : 'bg-background text-muted-foreground hover:bg-muted',\n )}\n onClick={() => handleToggle('unchecked')}\n >\n {labels_toggle.no}\n </Button>\n <Button\n variant={internalState === 'checked' ? 'default' : 'ghost'}\n size='sm'\n className={cn(\n 'px-3 py-1 text-xs rounded-none border-0 border-l',\n internalState === 'checked'\n ? 'bg-green-600 text-white hover:bg-green-700'\n : 'bg-background text-muted-foreground hover:bg-muted',\n )}\n onClick={() => handleToggle('checked')}\n >\n {labels_toggle.yes}\n </Button>\n </>\n )}\n </div>\n </div>\n\n {checkboxLabel && (\n <Label\n className={cn(\n 'useTw cursor-pointer select-none text-sm',\n isHebrew && 'text-right',\n locale.direction === 'rtl' && 'order-2',\n )}\n >\n {checkboxLabel}\n </Label>\n )}\n\n {(internalState === 'checked' || internalState === 'unchecked') && (\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',\n checkboxLabel\n ? locale.direction === 'rtl'\n ? 'order-last -ml-1'\n : 'order-last -mr-1'\n : locale.direction === 'rtl'\n ? 'ml-[80px] order-last'\n : 'mr-[80px] order-last',\n )}\n onClick={handleClear}\n >\n <X className='h-3 w-3' />\n </Button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["useEffect","useState","X","Label","cn","Button","CheckboxFilter","label","checkboxLabel","value","onChange","locale","code","direction","className","internalState","setInternalState","isHebrew","handleToggle","newState","handleClear","isActive","labels_toggle","yes","no","div","dir","variant","size","onClick"],"mappings":"AAAA;;AAEA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAE5C,SAASC,CAAC,QAAQ,eAAe;AAEjC,SAASC,KAAK,QAAQ,iBAAiB;AACvC,SAASC,EAAE,QAAQ,kBAAkB;AACrC,SAASC,MAAM,QAAQ,kBAAkB;AAWzC,OAAO,SAASC,eAAe,EAC7BC,KAAK,EACLC,aAAa,EACbC,QAAQ,eAAe,EACvBC,QAAQ,EACRC,SAAS;IAAEC,MAAM;IAAMC,WAAW;AAAM,CAAC,EACzCC,SAAS,EACW;IACpB,MAAM,CAACC,eAAeC,iBAAiB,GAAGf,SAA8BQ;IAExE,MAAMQ,WAAWN,OAAOC,IAAI,KAAK;IAEjC,+CAA+C;IAC/CZ,UAAU;QACRgB,iBAAiBP;IACnB,GAAG;QAACA;KAAM;IAEV,MAAMS,eAAe,CAACC;QACpBH,iBAAiBG;QACjBT,SAASS;IACX;IAEA,MAAMC,cAAc;QAClBJ,iBAAiB;QACjBN,SAAS;IACX;IAEA,MAAMW,WAAWN,kBAAkB,aAAaA,kBAAkB;IAElE,MAAMO,gBAAgB;QACpBC,KAAKN,WAAW,OAAO;QACvBO,IAAIP,WAAW,OAAO;IACxB;IAEA,qBACE,MAACQ;QAAIX,WAAWV,GAAG,aAAaU;QAAYY,KAAKf,OAAOE,SAAS;;YAC9DN,uBACC,KAACJ;gBAAMW,WAAWV,GAAG,6BAA6Ba,YAAY;0BAC3DV;;0BAIL,MAACkB;gBACCX,WAAWV,GACT,mDACAO,OAAOE,SAAS,KAAK,SAAS;;kCAGhC,KAACY;wBAAIX,WAAWV,GAAG,qBAAqBO,OAAOE,SAAS,KAAK,SAAS;kCAEpE,cAAA,KAACY;4BAAIX,WAAU;sCAEZH,OAAOE,SAAS,KAAK,sBACpB;;kDACE,KAACR;wCACCsB,SAASZ,kBAAkB,YAAY,YAAY;wCACnDa,MAAK;wCACLd,WAAWV,GACT,2CACAW,kBAAkB,YACd,+CACA;wCAENc,SAAS,IAAMX,aAAa;kDAE3BI,cAAcC,GAAG;;kDAEpB,KAAClB;wCACCsB,SAASZ,kBAAkB,cAAc,YAAY;wCACrDa,MAAK;wCACLd,WAAWV,GACT,oDACAW,kBAAkB,cACd,2CACA;wCAENc,SAAS,IAAMX,aAAa;kDAE3BI,cAAcE,EAAE;;;+CAIrB;;kDACE,KAACnB;wCACCsB,SAASZ,kBAAkB,cAAc,YAAY;wCACrDa,MAAK;wCACLd,WAAWV,GACT,2CACAW,kBAAkB,cACd,2CACA;wCAENc,SAAS,IAAMX,aAAa;kDAE3BI,cAAcE,EAAE;;kDAEnB,KAACnB;wCACCsB,SAASZ,kBAAkB,YAAY,YAAY;wCACnDa,MAAK;wCACLd,WAAWV,GACT,oDACAW,kBAAkB,YACd,+CACA;wCAENc,SAAS,IAAMX,aAAa;kDAE3BI,cAAcC,GAAG;;;;;;oBAO3Bf,+BACC,KAACL;wBACCW,WAAWV,GACT,4CACAa,YAAY,cACZN,OAAOE,SAAS,KAAK,SAAS;kCAG/BL;;oBAIHO,CAAAA,kBAAkB,aAAaA,kBAAkB,WAAU,mBAC3D,KAACV;wBACCsB,SAAQ;wBACRC,MAAK;wBACLd,WAAWV,GACT,iDACAI,gBACIG,OAAOE,SAAS,KAAK,QACnB,qBACA,qBACFF,OAAOE,SAAS,KAAK,QACnB,yBACA;wBAERgB,SAAST;kCAET,cAAA,KAAClB;4BAAEY,WAAU;;;;;;;AAMzB"}
@@ -0,0 +1,11 @@
1
+ import { DateFilterValue, Locale } from '../types/filters-type';
2
+ interface DateFilterProps {
3
+ label?: string;
4
+ value?: DateFilterValue;
5
+ onChange: (value: DateFilterValue) => void;
6
+ locale?: Locale;
7
+ className?: string;
8
+ }
9
+ export declare function DateFilter({ label, value, onChange, locale, className, }: DateFilterProps): import("react").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=date-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/components/date-filter.tsx"],"names":[],"mappings":"AAUA,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;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,QAAQ,EACR,MAAyC,EACzC,SAAS,GACV,EAAE,eAAe,+BAyVjB"}
@@ -0,0 +1,379 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useState } from 'react';
4
+ import { CalendarIcon, ChevronDown, X } from 'lucide-react';
5
+ import { cn } from '../../lib/utils';
6
+ import { Button } from '../../ui/button';
7
+ import { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover';
8
+ import { Separator } from '../../ui/separator';
9
+ import { futureDateFilterOptions, futureDateFilterOptionsEn, pastDateFilterOptions, pastDateFilterOptionsEn } from '../constants/date-filter-options';
10
+ import { formatDate, getDateRangeForOption } from '../utils/date-helpers';
11
+ import { Calendar } from '../../ui/calendar';
12
+ import { Label } from '../../ui/label';
13
+ export function DateFilter({ label, value, onChange, locale = {
14
+ code: 'he',
15
+ direction: 'rtl'
16
+ }, className }) {
17
+ const [internalValue, setInternalValue] = useState(value);
18
+ const [customRange, setCustomRange] = useState({
19
+ from: undefined,
20
+ to: undefined
21
+ });
22
+ const [showCustom, setShowCustom] = useState(false);
23
+ const [isOpen, setIsOpen] = useState(false);
24
+ const isHebrew = locale.code === 'he';
25
+ const pastOptions = isHebrew ? pastDateFilterOptions : pastDateFilterOptionsEn;
26
+ const futureOptions = isHebrew ? futureDateFilterOptions : futureDateFilterOptionsEn;
27
+ // Sync internal state with external value prop
28
+ useEffect(()=>{
29
+ setInternalValue(value);
30
+ if (value?.type === 'custom' && value.customRange) {
31
+ setCustomRange(value.customRange);
32
+ }
33
+ }, [
34
+ value
35
+ ]);
36
+ const labels = {
37
+ selectOption: isHebrew ? 'בחר אפשרות' : 'Select Option',
38
+ from: isHebrew ? 'מתאריך' : 'From Date',
39
+ to: isHebrew ? 'עד תאריך' : 'To Date',
40
+ selectDate: isHebrew ? 'בחר תאריך' : 'Select Date',
41
+ past: isHebrew ? 'עבר' : 'Past',
42
+ future: isHebrew ? 'עתיד' : 'Future',
43
+ custom: isHebrew ? 'טווח מותאם אישית' : 'Custom Range',
44
+ apply: isHebrew ? 'החל' : 'Apply',
45
+ cancel: isHebrew ? 'ביטול' : 'Cancel'
46
+ };
47
+ const handlePredefinedSelect = (optionValue)=>{
48
+ setShowCustom(false);
49
+ setIsOpen(false);
50
+ const dateRange = getDateRangeForOption(optionValue, locale.code);
51
+ const newValue = {
52
+ type: 'predefined',
53
+ predefinedValue: optionValue,
54
+ customRange: {
55
+ from: dateRange.from,
56
+ to: dateRange.to
57
+ }
58
+ };
59
+ setInternalValue(newValue);
60
+ onChange(newValue);
61
+ };
62
+ const handleCustomSelect = ()=>{
63
+ setShowCustom(true);
64
+ };
65
+ const handleCustomRangeChange = (newRange)=>{
66
+ setCustomRange(newRange);
67
+ };
68
+ const handleApplyCustomRange = ()=>{
69
+ const newValue = {
70
+ type: 'custom',
71
+ customRange
72
+ };
73
+ setInternalValue(newValue);
74
+ onChange(newValue);
75
+ setIsOpen(false);
76
+ setShowCustom(false);
77
+ };
78
+ const handleCancelCustomRange = ()=>{
79
+ setIsOpen(false);
80
+ setShowCustom(false);
81
+ setCustomRange({
82
+ from: undefined,
83
+ to: undefined
84
+ });
85
+ };
86
+ const handleClearAll = ()=>{
87
+ setInternalValue(undefined);
88
+ setCustomRange({
89
+ from: undefined,
90
+ to: undefined
91
+ });
92
+ setShowCustom(false);
93
+ onChange({});
94
+ };
95
+ const hasValue = ()=>{
96
+ return internalValue && (internalValue.type === 'predefined' || internalValue.type === 'custom');
97
+ };
98
+ const getDisplayValue = ()=>{
99
+ if (internalValue?.type === 'custom' && internalValue.customRange) {
100
+ const { from, to } = internalValue.customRange;
101
+ if (from && to) {
102
+ return `${formatDate(from, 'dd/MM/yyyy')}-${formatDate(to, 'dd/MM/yyyy')}`;
103
+ } else if (from) {
104
+ return `${labels.from}: ${formatDate(from, 'dd/MM/yyyy')}`;
105
+ } else if (to) {
106
+ return `${labels.to}: ${formatDate(to, 'dd/MM/yyyy')}`;
107
+ }
108
+ return labels.custom;
109
+ }
110
+ if (internalValue?.type === 'predefined' && internalValue.predefinedValue) {
111
+ const allOptions = [
112
+ ...pastOptions,
113
+ ...futureOptions
114
+ ];
115
+ const option = allOptions.find((opt)=>opt.value === internalValue.predefinedValue);
116
+ const dateRange = getDateRangeForOption(internalValue.predefinedValue, locale.code);
117
+ return `${option?.label || internalValue.predefinedValue} ${dateRange.description}`;
118
+ }
119
+ return labels.selectOption;
120
+ };
121
+ const formatDateRange = (description)=>{
122
+ // Check if description contains a date range (has " - " in it)
123
+ if (description.includes(' - ') && isHebrew) {
124
+ // Split by " - " and reverse the order for RTL
125
+ const parts = description.replace(/[()]/g, '').split(' - ');
126
+ if (parts.length === 2) {
127
+ return `(${parts[1]}-${parts[0]})`;
128
+ }
129
+ }
130
+ return description;
131
+ };
132
+ const renderOptionWithDate = (option)=>{
133
+ const dateRange = getDateRangeForOption(option.value, locale.code);
134
+ const formattedDescription = formatDateRange(dateRange.description);
135
+ return /*#__PURE__*/ _jsx(Button, {
136
+ variant: "ghost",
137
+ className: cn(' w-full h-auto py-1 px-2 text-xs leading-tight justify-start', isHebrew ? ' text-right' : ' text-left', internalValue?.predefinedValue === option.value && 'bg-accent'),
138
+ onClick: ()=>handlePredefinedSelect(option.value),
139
+ children: /*#__PURE__*/ _jsxs("div", {
140
+ className: cn('flex flex-col'),
141
+ children: [
142
+ /*#__PURE__*/ _jsx("span", {
143
+ className: "font-medium",
144
+ children: option.label
145
+ }),
146
+ /*#__PURE__*/ _jsx("span", {
147
+ className: "text-[10px] text-muted-foreground",
148
+ dir: locale.direction,
149
+ children: formattedDescription
150
+ })
151
+ ]
152
+ })
153
+ }, option.value);
154
+ };
155
+ return /*#__PURE__*/ _jsxs("div", {
156
+ className: cn('useTw space-y-1', className),
157
+ dir: locale.direction,
158
+ children: [
159
+ label && /*#__PURE__*/ _jsx(Label, {
160
+ className: cn('useTw text-sm font-medium', isHebrew && 'text-right block'),
161
+ children: label
162
+ }),
163
+ /*#__PURE__*/ _jsxs("div", {
164
+ className: "relative useTw",
165
+ children: [
166
+ /*#__PURE__*/ _jsxs(Popover, {
167
+ open: isOpen,
168
+ onOpenChange: setIsOpen,
169
+ children: [
170
+ /*#__PURE__*/ _jsx(PopoverTrigger, {
171
+ asChild: true,
172
+ className: "useTw",
173
+ children: /*#__PURE__*/ _jsxs(Button, {
174
+ variant: "outline",
175
+ role: "combobox",
176
+ "aria-expanded": isOpen,
177
+ className: "useTw w-full justify-between bg-background relative min-w-70",
178
+ children: [
179
+ /*#__PURE__*/ _jsx("span", {
180
+ className: `useTw truncate ${isHebrew && 'text-right'}`,
181
+ children: getDisplayValue()
182
+ }),
183
+ /*#__PURE__*/ _jsx(ChevronDown, {
184
+ className: "useTw h-4 w-4 shrink-0 opacity-50"
185
+ })
186
+ ]
187
+ })
188
+ }),
189
+ /*#__PURE__*/ _jsx(PopoverContent, {
190
+ className: "useTw w-80 p-0",
191
+ children: /*#__PURE__*/ _jsxs("div", {
192
+ className: "p-4",
193
+ children: [
194
+ /*#__PURE__*/ _jsxs("div", {
195
+ className: "grid grid-cols-2 gap-4",
196
+ children: [
197
+ /*#__PURE__*/ _jsxs("div", {
198
+ className: "space-y-1",
199
+ children: [
200
+ /*#__PURE__*/ _jsx("div", {
201
+ className: cn('text-sm font-semibold text-muted-foreground mb-2', isHebrew && 'text-right'),
202
+ children: labels.future
203
+ }),
204
+ /*#__PURE__*/ _jsx("div", {
205
+ className: "space-y-0.5",
206
+ children: futureOptions.map((option)=>/*#__PURE__*/ _jsx("div", {
207
+ children: renderOptionWithDate(option)
208
+ }, option.value))
209
+ })
210
+ ]
211
+ }),
212
+ /*#__PURE__*/ _jsxs("div", {
213
+ className: "space-y-1",
214
+ children: [
215
+ /*#__PURE__*/ _jsx("div", {
216
+ className: cn('text-sm font-semibold text-muted-foreground mb-2', isHebrew && 'text-right'),
217
+ children: labels.past
218
+ }),
219
+ /*#__PURE__*/ _jsx("div", {
220
+ className: "space-y-0.5",
221
+ children: pastOptions.map((option)=>/*#__PURE__*/ _jsx("div", {
222
+ children: renderOptionWithDate(option)
223
+ }, option.value))
224
+ })
225
+ ]
226
+ })
227
+ ]
228
+ }),
229
+ /*#__PURE__*/ _jsx(Separator, {
230
+ className: "my-4"
231
+ }),
232
+ /*#__PURE__*/ _jsxs("div", {
233
+ className: "space-y-3",
234
+ children: [
235
+ /*#__PURE__*/ _jsx(Button, {
236
+ variant: "ghost",
237
+ className: cn('useTw w-full justify-start h-auto py-2 px-2', (showCustom || internalValue?.type === 'custom') && 'bg-accent', isHebrew && 'justify-start text-right'),
238
+ onClick: handleCustomSelect,
239
+ children: labels.custom
240
+ }),
241
+ showCustom && /*#__PURE__*/ _jsxs("div", {
242
+ className: "space-y-3 pl-2",
243
+ children: [
244
+ /*#__PURE__*/ _jsxs("div", {
245
+ className: "grid grid-cols-1 gap-3",
246
+ children: [
247
+ /*#__PURE__*/ _jsxs("div", {
248
+ className: cn('flex items-center gap-2'),
249
+ children: [
250
+ /*#__PURE__*/ _jsx(Label, {
251
+ className: cn('useTw text-xs w-[20%]', isHebrew && 'text-right text-start'),
252
+ children: labels.from
253
+ }),
254
+ /*#__PURE__*/ _jsxs(Popover, {
255
+ children: [
256
+ /*#__PURE__*/ _jsx(PopoverTrigger, {
257
+ asChild: true,
258
+ className: "useTw",
259
+ children: /*#__PURE__*/ _jsxs(Button, {
260
+ variant: "outline",
261
+ className: cn('useTw w-[60%] justify-start text-left font-normal text-xs h-8 bg-background', !customRange.from && 'text-muted-foreground'),
262
+ children: [
263
+ /*#__PURE__*/ _jsx(CalendarIcon, {
264
+ className: "useTw mr-1 h-3 w-3"
265
+ }),
266
+ /*#__PURE__*/ _jsx("span", {
267
+ dir: locale.direction,
268
+ children: customRange.from ? formatDate(customRange.from, 'dd/MM/yyyy') : labels.selectDate
269
+ })
270
+ ]
271
+ })
272
+ }),
273
+ /*#__PURE__*/ _jsx(PopoverContent, {
274
+ className: "useTw w-auto p-0",
275
+ align: "start",
276
+ children: /*#__PURE__*/ _jsx(Calendar, {
277
+ mode: "single",
278
+ selected: customRange.from,
279
+ onSelect: (date)=>handleCustomRangeChange({
280
+ ...customRange,
281
+ from: date
282
+ }),
283
+ initialFocus: true,
284
+ className: "useTw"
285
+ })
286
+ })
287
+ ]
288
+ })
289
+ ]
290
+ }),
291
+ /*#__PURE__*/ _jsxs("div", {
292
+ className: cn('flex items-center gap-2'),
293
+ children: [
294
+ /*#__PURE__*/ _jsx(Label, {
295
+ className: cn('useTw useTw text-xs w-[20%]', isHebrew && 'text-right text-strat'),
296
+ children: labels.to
297
+ }),
298
+ /*#__PURE__*/ _jsxs(Popover, {
299
+ children: [
300
+ /*#__PURE__*/ _jsx(PopoverTrigger, {
301
+ asChild: true,
302
+ className: "useTw",
303
+ children: /*#__PURE__*/ _jsxs(Button, {
304
+ variant: "outline",
305
+ className: cn('useTw w-[60%] justify-start text-left font-normal text-xs h-8 bg-background', !customRange.to && 'text-muted-foreground'),
306
+ children: [
307
+ /*#__PURE__*/ _jsx(CalendarIcon, {
308
+ className: "useTw mr-1 h-3 w-3"
309
+ }),
310
+ /*#__PURE__*/ _jsx("span", {
311
+ dir: locale.direction,
312
+ children: customRange.to ? formatDate(customRange.to, 'dd/MM/yyyy') : labels.selectDate
313
+ })
314
+ ]
315
+ })
316
+ }),
317
+ /*#__PURE__*/ _jsx(PopoverContent, {
318
+ className: "useTw w-auto p-0",
319
+ align: "start",
320
+ children: /*#__PURE__*/ _jsx(Calendar, {
321
+ mode: "single",
322
+ selected: customRange.to,
323
+ onSelect: (date)=>handleCustomRangeChange({
324
+ ...customRange,
325
+ to: date
326
+ }),
327
+ initialFocus: true,
328
+ className: "useTw"
329
+ })
330
+ })
331
+ ]
332
+ })
333
+ ]
334
+ })
335
+ ]
336
+ }),
337
+ /*#__PURE__*/ _jsxs("div", {
338
+ className: "flex gap-2",
339
+ children: [
340
+ /*#__PURE__*/ _jsx(Button, {
341
+ onClick: handleApplyCustomRange,
342
+ className: "useTw flex-1 text-xs h-8",
343
+ disabled: !customRange.from && !customRange.to,
344
+ children: labels.apply
345
+ }),
346
+ /*#__PURE__*/ _jsx(Button, {
347
+ onClick: handleCancelCustomRange,
348
+ variant: "outline",
349
+ className: "useTw flex-1 text-xs h-8 bg-transparent",
350
+ children: labels.cancel
351
+ })
352
+ ]
353
+ })
354
+ ]
355
+ })
356
+ ]
357
+ })
358
+ ]
359
+ })
360
+ })
361
+ ]
362
+ }),
363
+ hasValue() && /*#__PURE__*/ _jsx("button", {
364
+ className: "useTw absolute left-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",
365
+ onClick: (e)=>{
366
+ e.stopPropagation();
367
+ handleClearAll();
368
+ },
369
+ children: /*#__PURE__*/ _jsx(X, {
370
+ className: "useTw h-3 w-3"
371
+ })
372
+ })
373
+ ]
374
+ })
375
+ ]
376
+ });
377
+ }
378
+
379
+ //# sourceMappingURL=date-filter.js.map
@@ -0,0 +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';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../ui/button';\n\nimport { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover';\n\nimport { Separator } from '../../ui/separator';\nimport { DateFilterValue, DateRange, Locale } from '../types/filters-type';\nimport {\n futureDateFilterOptions,\n futureDateFilterOptionsEn,\n pastDateFilterOptions,\n pastDateFilterOptionsEn,\n} from '../constants/date-filter-options';\nimport { formatDate, getDateRangeForOption } from '../utils/date-helpers';\nimport { Calendar } from '../../ui/calendar';\nimport { Label } from '../../ui/label';\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\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 Date',\n to: isHebrew ? 'עד תאריך' : 'To Date',\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>\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 }\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>\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 }\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 left-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","cn","Button","Popover","PopoverContent","PopoverTrigger","Separator","futureDateFilterOptions","futureDateFilterOptionsEn","pastDateFilterOptions","pastDateFilterOptionsEn","formatDate","getDateRangeForOption","Calendar","Label","DateFilter","label","value","onChange","locale","code","direction","className","internalValue","setInternalValue","customRange","setCustomRange","from","undefined","to","showCustom","setShowCustom","isOpen","setIsOpen","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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"}
@@ -0,0 +1,14 @@
1
+ import { Locale, SelectFilterOption, SelectFilterValue } from '../types/filters-type';
2
+ interface SelectFilterProps {
3
+ label?: string;
4
+ options: SelectFilterOption[];
5
+ value?: SelectFilterValue;
6
+ onChange: (value: SelectFilterValue) => void;
7
+ placeholder?: string;
8
+ locale?: Locale;
9
+ className?: string;
10
+ multiSelect?: boolean;
11
+ }
12
+ export declare function SelectFilter({ label, options, value, onChange, placeholder, locale, className, multiSelect, }: SelectFilterProps): import("react").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=select-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/components/select-filter.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAItF,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,+BAkMnB"}