dhanasekar-ui 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-2BM7TRDS.js +105 -0
- package/dist/chunk-2BM7TRDS.js.map +1 -0
- package/dist/chunk-2K6E3M6X.mjs +193 -0
- package/dist/chunk-2K6E3M6X.mjs.map +1 -0
- package/dist/chunk-2TXYJ7YE.js +201 -0
- package/dist/chunk-2TXYJ7YE.js.map +1 -0
- package/dist/chunk-33P6OQSB.mjs +129 -0
- package/dist/chunk-33P6OQSB.mjs.map +1 -0
- package/dist/chunk-3RAQQWLW.js +351 -0
- package/dist/chunk-3RAQQWLW.js.map +1 -0
- package/dist/chunk-4HRAPJIS.mjs +102 -0
- package/dist/chunk-4HRAPJIS.mjs.map +1 -0
- package/dist/chunk-4VCCLGED.mjs +85 -0
- package/dist/chunk-4VCCLGED.mjs.map +1 -0
- package/dist/chunk-5BAYROPS.js +129 -0
- package/dist/chunk-5BAYROPS.js.map +1 -0
- package/dist/chunk-6C7E4Q7J.js +136 -0
- package/dist/chunk-6C7E4Q7J.js.map +1 -0
- package/dist/chunk-6SVKDKK7.mjs +351 -0
- package/dist/chunk-6SVKDKK7.mjs.map +1 -0
- package/dist/chunk-BM36E6BY.js +85 -0
- package/dist/chunk-BM36E6BY.js.map +1 -0
- package/dist/chunk-BQFCZZDK.js +52 -0
- package/dist/chunk-BQFCZZDK.js.map +1 -0
- package/dist/chunk-BYYOIYEH.mjs +136 -0
- package/dist/chunk-BYYOIYEH.mjs.map +1 -0
- package/dist/chunk-CDALMRVJ.js +193 -0
- package/dist/chunk-CDALMRVJ.js.map +1 -0
- package/dist/chunk-CJ2DPBHE.js +93 -0
- package/dist/chunk-CJ2DPBHE.js.map +1 -0
- package/dist/chunk-CN4G4LGR.js +40 -0
- package/dist/chunk-CN4G4LGR.js.map +1 -0
- package/dist/chunk-EHI64N43.mjs +52 -0
- package/dist/chunk-EHI64N43.mjs.map +1 -0
- package/dist/chunk-GNMGJBBO.mjs +201 -0
- package/dist/chunk-GNMGJBBO.mjs.map +1 -0
- package/dist/chunk-GT5QTRLR.js +102 -0
- package/dist/chunk-GT5QTRLR.js.map +1 -0
- package/dist/chunk-H2LTPKLL.js +119 -0
- package/dist/chunk-H2LTPKLL.js.map +1 -0
- package/dist/chunk-ICWNP5NA.mjs +105 -0
- package/dist/chunk-ICWNP5NA.mjs.map +1 -0
- package/dist/chunk-L3Y3AD6X.js +85 -0
- package/dist/chunk-L3Y3AD6X.js.map +1 -0
- package/dist/chunk-N6F5P3SO.mjs +40 -0
- package/dist/chunk-N6F5P3SO.mjs.map +1 -0
- package/dist/chunk-RB4QTTZ3.mjs +116 -0
- package/dist/chunk-RB4QTTZ3.mjs.map +1 -0
- package/dist/chunk-RW2NNPXC.mjs +119 -0
- package/dist/chunk-RW2NNPXC.mjs.map +1 -0
- package/dist/chunk-SHZ3M7US.mjs +104 -0
- package/dist/chunk-SHZ3M7US.mjs.map +1 -0
- package/dist/chunk-UBWTBUO2.js +116 -0
- package/dist/chunk-UBWTBUO2.js.map +1 -0
- package/dist/chunk-V3WVMXXX.js +206 -0
- package/dist/chunk-V3WVMXXX.js.map +1 -0
- package/dist/chunk-VFGXUH56.mjs +206 -0
- package/dist/chunk-VFGXUH56.mjs.map +1 -0
- package/dist/chunk-YM6W6FK6.mjs +85 -0
- package/dist/chunk-YM6W6FK6.mjs.map +1 -0
- package/dist/chunk-YRYAP2N7.js +104 -0
- package/dist/chunk-YRYAP2N7.js.map +1 -0
- package/dist/chunk-ZEMR63S4.js +198 -0
- package/dist/chunk-ZEMR63S4.js.map +1 -0
- package/dist/chunk-ZUAS66IF.mjs +93 -0
- package/dist/chunk-ZUAS66IF.mjs.map +1 -0
- package/dist/chunk-ZY5AHZYZ.mjs +198 -0
- package/dist/chunk-ZY5AHZYZ.mjs.map +1 -0
- package/dist/components/Avatar/index.d.mts +65 -2
- package/dist/components/Avatar/index.d.ts +65 -2
- package/dist/components/Avatar/index.js +1 -1
- package/dist/components/Avatar/index.mjs +1 -1
- package/dist/components/Badge/index.d.mts +88 -2
- package/dist/components/Badge/index.d.ts +88 -2
- package/dist/components/Badge/index.js +1 -1
- package/dist/components/Badge/index.mjs +1 -1
- package/dist/components/Button/index.js +1 -1
- package/dist/components/Button/index.mjs +1 -1
- package/dist/components/Card/index.d.mts +103 -2
- package/dist/components/Card/index.d.ts +103 -2
- package/dist/components/Card/index.js +1 -1
- package/dist/components/Card/index.mjs +1 -1
- package/dist/components/Checkbox/index.d.mts +109 -6
- package/dist/components/Checkbox/index.d.ts +109 -6
- package/dist/components/Checkbox/index.js +1 -1
- package/dist/components/Checkbox/index.mjs +1 -1
- package/dist/components/ConfirmationDialog/index.d.mts +30 -0
- package/dist/components/ConfirmationDialog/index.d.ts +30 -0
- package/dist/components/ConfirmationDialog/index.js +2 -0
- package/dist/components/ConfirmationDialog/index.js.map +1 -0
- package/dist/components/ConfirmationDialog/index.mjs +2 -0
- package/dist/components/ConfirmationDialog/index.mjs.map +1 -0
- package/dist/components/DateFilter/index.d.mts +26 -0
- package/dist/components/DateFilter/index.d.ts +26 -0
- package/dist/components/DateFilter/index.js +2 -0
- package/dist/components/DateFilter/index.js.map +1 -0
- package/dist/components/DateFilter/index.mjs +2 -0
- package/dist/components/DateFilter/index.mjs.map +1 -0
- package/dist/components/FileUploadField/index.d.mts +0 -1
- package/dist/components/FileUploadField/index.d.ts +0 -1
- package/dist/components/FileUploadField/index.js +1 -1
- package/dist/components/FileUploadField/index.mjs +1 -1
- package/dist/components/FormLayout/index.d.mts +50 -0
- package/dist/components/FormLayout/index.d.ts +50 -0
- package/dist/components/FormLayout/index.js +2 -0
- package/dist/components/FormLayout/index.js.map +1 -0
- package/dist/components/FormLayout/index.mjs +2 -0
- package/dist/components/FormLayout/index.mjs.map +1 -0
- package/dist/components/IdleTimer/index.d.mts +0 -1
- package/dist/components/IdleTimer/index.d.ts +0 -1
- package/dist/components/IdleTimer/index.js +1 -1
- package/dist/components/IdleTimer/index.mjs +1 -1
- package/dist/components/Input/index.js +1 -1
- package/dist/components/Input/index.mjs +1 -1
- package/dist/components/Loader/index.d.mts +0 -1
- package/dist/components/Loader/index.d.ts +0 -1
- package/dist/components/Loader/index.js +1 -1
- package/dist/components/Loader/index.mjs +1 -1
- package/dist/components/Modal/index.d.mts +23 -7
- package/dist/components/Modal/index.d.ts +23 -7
- package/dist/components/Modal/index.js +1 -1
- package/dist/components/Modal/index.mjs +1 -1
- package/dist/components/Select/index.js +1 -1
- package/dist/components/Select/index.mjs +1 -1
- package/dist/components/Switch/index.js +1 -1
- package/dist/components/Switch/index.mjs +1 -1
- package/dist/components/Text/index.js +1 -1
- package/dist/components/Text/index.mjs +1 -1
- package/dist/components/Tooltip/index.d.mts +30 -7
- package/dist/components/Tooltip/index.d.ts +30 -7
- package/dist/components/Tooltip/index.js +1 -1
- package/dist/components/Tooltip/index.mjs +1 -1
- package/dist/index.d.mts +10 -6
- package/dist/index.d.ts +10 -6
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +13 -1
- package/dist/chunk-6CTAGKRH.js +0 -2
- package/dist/chunk-6CTAGKRH.js.map +0 -1
- package/dist/chunk-6KTHQKF2.js +0 -2
- package/dist/chunk-6KTHQKF2.js.map +0 -1
- package/dist/chunk-6S5MGYMQ.mjs +0 -2
- package/dist/chunk-6S5MGYMQ.mjs.map +0 -1
- package/dist/chunk-7CEQNZIX.mjs +0 -2
- package/dist/chunk-7CEQNZIX.mjs.map +0 -1
- package/dist/chunk-AVQSNP56.js +0 -2
- package/dist/chunk-AVQSNP56.js.map +0 -1
- package/dist/chunk-B3QF3KQL.js +0 -2
- package/dist/chunk-B3QF3KQL.js.map +0 -1
- package/dist/chunk-CBHX2QZA.mjs +0 -2
- package/dist/chunk-CBHX2QZA.mjs.map +0 -1
- package/dist/chunk-DVU5JMBP.js +0 -2
- package/dist/chunk-DVU5JMBP.js.map +0 -1
- package/dist/chunk-DYGRXBKP.js +0 -2
- package/dist/chunk-DYGRXBKP.js.map +0 -1
- package/dist/chunk-HNKQZLUA.mjs +0 -2
- package/dist/chunk-HNKQZLUA.mjs.map +0 -1
- package/dist/chunk-KZ3RDRIM.js +0 -2
- package/dist/chunk-KZ3RDRIM.js.map +0 -1
- package/dist/chunk-MYC7PW6C.js +0 -2
- package/dist/chunk-MYC7PW6C.js.map +0 -1
- package/dist/chunk-MZLSOEXC.mjs +0 -2
- package/dist/chunk-MZLSOEXC.mjs.map +0 -1
- package/dist/chunk-OTDTXBFF.mjs +0 -2
- package/dist/chunk-OTDTXBFF.mjs.map +0 -1
- package/dist/chunk-OXYWK4HK.js +0 -3
- package/dist/chunk-OXYWK4HK.js.map +0 -1
- package/dist/chunk-RRZTNQ5T.mjs +0 -2
- package/dist/chunk-RRZTNQ5T.mjs.map +0 -1
- package/dist/chunk-RXNNJUS6.mjs +0 -3
- package/dist/chunk-RXNNJUS6.mjs.map +0 -1
- package/dist/chunk-S74D6N7O.mjs +0 -2
- package/dist/chunk-S74D6N7O.mjs.map +0 -1
- package/dist/chunk-VIUZPAJZ.js +0 -2
- package/dist/chunk-VIUZPAJZ.js.map +0 -1
- package/dist/chunk-VPR3PX57.js +0 -2
- package/dist/chunk-VPR3PX57.js.map +0 -1
- package/dist/chunk-VXKXXAX6.mjs +0 -2
- package/dist/chunk-VXKXXAX6.mjs.map +0 -1
- package/dist/chunk-W4PFQVHM.mjs +0 -2
- package/dist/chunk-W4PFQVHM.mjs.map +0 -1
- package/dist/chunk-WEQINEMX.mjs +0 -2
- package/dist/chunk-WEQINEMX.mjs.map +0 -1
- package/dist/chunk-WGPJEQGU.mjs +0 -2
- package/dist/chunk-WGPJEQGU.mjs.map +0 -1
- package/dist/chunk-WVZF6FQ7.js +0 -3
- package/dist/chunk-WVZF6FQ7.js.map +0 -1
- package/dist/chunk-X7EUJD7E.js +0 -2
- package/dist/chunk-X7EUJD7E.js.map +0 -1
- package/dist/chunk-YKQKLQNI.js +0 -2
- package/dist/chunk-YKQKLQNI.js.map +0 -1
- package/dist/chunk-ZO6I27MY.mjs +0 -3
- package/dist/chunk-ZO6I27MY.mjs.map +0 -1
- package/dist/components/Button/index.css +0 -2
- package/dist/components/Button/index.css.map +0 -1
- package/dist/components/FileUploadField/index.css +0 -2
- package/dist/components/FileUploadField/index.css.map +0 -1
- package/dist/components/IdleTimer/index.css +0 -2
- package/dist/components/IdleTimer/index.css.map +0 -1
- package/dist/components/Input/index.css +0 -2
- package/dist/components/Input/index.css.map +0 -1
- package/dist/components/Loader/index.css +0 -2
- package/dist/components/Loader/index.css.map +0 -1
- package/dist/components/Select/index.css +0 -2
- package/dist/components/Select/index.css.map +0 -1
- package/dist/components/Switch/index.css +0 -2
- package/dist/components/Switch/index.css.map +0 -1
- package/dist/components/Text/index.css +0 -2
- package/dist/components/Text/index.css.map +0 -1
- package/dist/index.css +0 -2
- package/dist/index.css.map +0 -1
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
'use strict';var chunkDDGBDWFC_js=require('./chunk-DDGBDWFC.js'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var y=`
|
|
2
|
+
.conf-overlay {
|
|
3
|
+
position: fixed;
|
|
4
|
+
inset: 0;
|
|
5
|
+
z-index: 9999;
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
justify-content: center;
|
|
9
|
+
background-color: rgba(0, 0, 0, 0.4);
|
|
10
|
+
backdrop-filter: blur(4px);
|
|
11
|
+
animation: conf-fadeIn 0.2s ease-out;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.conf-dialog {
|
|
15
|
+
background-color: #ffffff;
|
|
16
|
+
border-radius: 12px;
|
|
17
|
+
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
|
18
|
+
width: 100%;
|
|
19
|
+
max-width: 400px;
|
|
20
|
+
margin: 16px;
|
|
21
|
+
overflow: hidden;
|
|
22
|
+
animation: conf-zoomIn 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.conf-content {
|
|
26
|
+
padding: 32px 24px;
|
|
27
|
+
display: flex;
|
|
28
|
+
flex-direction: column;
|
|
29
|
+
align-items: center;
|
|
30
|
+
text-align: center;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.conf-icon {
|
|
34
|
+
font-size: 80px;
|
|
35
|
+
margin-bottom: 16px;
|
|
36
|
+
line-height: 1;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.conf-title {
|
|
40
|
+
font-size: 20px;
|
|
41
|
+
font-weight: 600;
|
|
42
|
+
color: #1e293b;
|
|
43
|
+
margin: 0 0 8px 0;
|
|
44
|
+
line-height: 1.4;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.conf-description {
|
|
48
|
+
font-size: 15px;
|
|
49
|
+
color: #64748b;
|
|
50
|
+
margin: 0;
|
|
51
|
+
line-height: 1.5;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.conf-actions {
|
|
55
|
+
padding: 0 24px 24px 24px;
|
|
56
|
+
display: flex;
|
|
57
|
+
justify-content: center;
|
|
58
|
+
gap: 12px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.conf-btn {
|
|
62
|
+
padding: 10px 24px;
|
|
63
|
+
border-radius: 8px;
|
|
64
|
+
font-size: 14px;
|
|
65
|
+
font-weight: 600;
|
|
66
|
+
cursor: pointer;
|
|
67
|
+
transition: all 0.2s;
|
|
68
|
+
border: none;
|
|
69
|
+
min-width: 100px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.conf-btn-confirm {
|
|
73
|
+
background-color: #3498db;
|
|
74
|
+
color: white;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.conf-btn-confirm:hover {
|
|
78
|
+
background-color: #2980b9;
|
|
79
|
+
transform: translateY(-1px);
|
|
80
|
+
box-shadow: 0 4px 6px -1px rgba(52, 152, 219, 0.3);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.conf-btn-cancel {
|
|
84
|
+
background-color: #f1f5f9;
|
|
85
|
+
color: #475569;
|
|
86
|
+
border: 1px solid #e2e8f0;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.conf-btn-cancel:hover {
|
|
90
|
+
background-color: #e2e8f0;
|
|
91
|
+
color: #1e293b;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@keyframes conf-fadeIn {
|
|
95
|
+
from { opacity: 0; }
|
|
96
|
+
to { opacity: 1; }
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@keyframes conf-zoomIn {
|
|
100
|
+
from { opacity: 0; transform: scale(0.95); }
|
|
101
|
+
to { opacity: 1; transform: scale(1); }
|
|
102
|
+
}
|
|
103
|
+
`,N=({open:l,setOpen:i,title:f="Are you sure?",description:s="This action cannot be undone.",onConfirm:d,onCancel:c,confirmText:p="Yes",cancelText:m="No",icon:b="ti ti-alert-circle",iconColor:x="#3498db",className:g})=>{react.useEffect(()=>{let n="tabler-icons-cdn";if(!document.getElementById(n)){let t=document.createElement("link");t.id=n,t.rel="stylesheet",t.href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/dist/tabler-icons.min.css",document.head.appendChild(t);}},[]);let u=()=>{d(),i(false);},r=()=>{c&&c(),i(false);};return l?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("style",{dangerouslySetInnerHTML:{__html:y}}),jsxRuntime.jsx("div",{className:"conf-overlay",onClick:r,children:jsxRuntime.jsxs("div",{className:chunkDDGBDWFC_js.a("conf-dialog",g),onClick:n=>n.stopPropagation(),children:[jsxRuntime.jsxs("div",{className:"conf-content",children:[jsxRuntime.jsx("i",{className:b,style:{color:x,fontSize:"80px",marginBottom:"16px"}}),jsxRuntime.jsx("h3",{className:"conf-title",children:f}),jsxRuntime.jsx("p",{className:"conf-description",children:s})]}),jsxRuntime.jsxs("div",{className:"conf-actions",children:[jsxRuntime.jsx("button",{type:"button",className:"conf-btn conf-btn-confirm",onClick:u,children:p}),jsxRuntime.jsx("button",{type:"button",className:"conf-btn conf-btn-cancel",onClick:r,children:m})]})]})})]}):null};
|
|
104
|
+
exports.a=N;//# sourceMappingURL=chunk-2BM7TRDS.js.map
|
|
105
|
+
//# sourceMappingURL=chunk-2BM7TRDS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ConfirmationDialog/ConfirmationDialog.tsx"],"names":["STYLES","ConfirmationDialog","open","setOpen","title","description","onConfirm","onCancel","confirmText","cancelText","icon","iconColor","className","useEffect","cdnId","link","handleConfirm","handleCancel","jsxs","Fragment","jsx","cn","e"],"mappings":"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","file":"chunk-2BM7TRDS.js","sourcesContent":["'use client';\n\nimport React, { useEffect } from 'react';\nimport { cn } from '../../utils/cn';\nimport { ConfirmationDialogProps } from './types';\n\nconst STYLES = `\n .conf-overlay {\n position: fixed;\n inset: 0;\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: rgba(0, 0, 0, 0.4);\n backdrop-filter: blur(4px);\n animation: conf-fadeIn 0.2s ease-out;\n }\n\n .conf-dialog {\n background-color: #ffffff;\n border-radius: 12px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n width: 100%;\n max-width: 400px;\n margin: 16px;\n overflow: hidden;\n animation: conf-zoomIn 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);\n }\n\n .conf-content {\n padding: 32px 24px;\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n }\n\n .conf-icon {\n font-size: 80px;\n margin-bottom: 16px;\n line-height: 1;\n }\n\n .conf-title {\n font-size: 20px;\n font-weight: 600;\n color: #1e293b;\n margin: 0 0 8px 0;\n line-height: 1.4;\n }\n\n .conf-description {\n font-size: 15px;\n color: #64748b;\n margin: 0;\n line-height: 1.5;\n }\n\n .conf-actions {\n padding: 0 24px 24px 24px;\n display: flex;\n justify-content: center;\n gap: 12px;\n }\n\n .conf-btn {\n padding: 10px 24px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s;\n border: none;\n min-width: 100px;\n }\n\n .conf-btn-confirm {\n background-color: #3498db;\n color: white;\n }\n\n .conf-btn-confirm:hover {\n background-color: #2980b9;\n transform: translateY(-1px);\n box-shadow: 0 4px 6px -1px rgba(52, 152, 219, 0.3);\n }\n\n .conf-btn-cancel {\n background-color: #f1f5f9;\n color: #475569;\n border: 1px solid #e2e8f0;\n }\n\n .conf-btn-cancel:hover {\n background-color: #e2e8f0;\n color: #1e293b;\n }\n\n @keyframes conf-fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes conf-zoomIn {\n from { opacity: 0; transform: scale(0.95); }\n to { opacity: 1; transform: scale(1); }\n }\n`;\n\nexport const ConfirmationDialog: React.FC<ConfirmationDialogProps> = ({\n open,\n setOpen,\n title = 'Are you sure?',\n description = 'This action cannot be undone.',\n onConfirm,\n onCancel,\n confirmText = 'Yes',\n cancelText = 'No',\n icon = 'ti ti-alert-circle',\n iconColor = '#3498db',\n className,\n}) => {\n // Inject Tabler Icons if not present\n useEffect(() => {\n const cdnId = 'tabler-icons-cdn';\n if (!document.getElementById(cdnId)) {\n const link = document.createElement('link');\n link.id = cdnId;\n link.rel = 'stylesheet';\n link.href = 'https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/dist/tabler-icons.min.css';\n document.head.appendChild(link);\n }\n }, []);\n\n const handleConfirm = () => {\n onConfirm();\n setOpen(false);\n };\n\n const handleCancel = () => {\n if (onCancel) onCancel();\n setOpen(false);\n };\n\n if (!open) return null;\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <div className=\"conf-overlay\" onClick={handleCancel}>\n <div \n className={cn('conf-dialog', className)} \n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"conf-content\">\n <i \n className={icon} \n style={{ color: iconColor, fontSize: '80px', marginBottom: '16px' }} \n />\n <h3 className=\"conf-title\">{title}</h3>\n <p className=\"conf-description\">{description}</p>\n </div>\n <div className=\"conf-actions\">\n <button \n type=\"button\" \n className=\"conf-btn conf-btn-confirm\" \n onClick={handleConfirm}\n >\n {confirmText}\n </button>\n <button \n type=\"button\" \n className=\"conf-btn conf-btn-cancel\" \n onClick={handleCancel}\n >\n {cancelText}\n </button>\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default ConfirmationDialog;\n"]}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import {a}from'./chunk-547MQ4FI.mjs';import d,{forwardRef,useId,useState,useRef,useEffect}from'react';import {ChevronDown}from'lucide-react';import {jsxs,jsx,Fragment}from'react/jsx-runtime';var B=`
|
|
2
|
+
.ui-select-root {
|
|
3
|
+
display: inline-flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
position: relative;
|
|
6
|
+
min-width: 200px;
|
|
7
|
+
vertical-align: top;
|
|
8
|
+
font-family: 'Inter', system-ui, sans-serif;
|
|
9
|
+
margin: 0;
|
|
10
|
+
--ui-primary: #3b82f6;
|
|
11
|
+
--ui-secondary: #64748b;
|
|
12
|
+
--ui-error: #ef4444;
|
|
13
|
+
--ui-success: #22c55e;
|
|
14
|
+
--ui-warning: #f59e0b;
|
|
15
|
+
--ui-info: #0ea5e9;
|
|
16
|
+
--ui-text-primary: #1e293b;
|
|
17
|
+
--ui-text-secondary: #64748b;
|
|
18
|
+
--ui-bg: #ffffff;
|
|
19
|
+
--ui-border: #e2e8f0;
|
|
20
|
+
--ui-radius: 8px;
|
|
21
|
+
--ui-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.ui-select-fullWidth {
|
|
25
|
+
width: 100%;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.ui-select-label {
|
|
29
|
+
display: block;
|
|
30
|
+
margin-bottom: 6px;
|
|
31
|
+
font-size: 0.875rem;
|
|
32
|
+
font-weight: 500;
|
|
33
|
+
color: var(--ui-text-secondary);
|
|
34
|
+
transition: color 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.ui-select-label-focused {
|
|
38
|
+
color: var(--ui-primary);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.ui-select-container {
|
|
42
|
+
position: relative;
|
|
43
|
+
border-radius: var(--ui-radius);
|
|
44
|
+
display: flex;
|
|
45
|
+
align-items: center;
|
|
46
|
+
background-color: var(--ui-bg);
|
|
47
|
+
border: 1px solid var(--ui-border);
|
|
48
|
+
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
overflow: hidden;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.ui-select-container:hover {
|
|
54
|
+
border-color: #cbd5e1;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.ui-select-container-focused {
|
|
58
|
+
border-color: var(--ui-primary);
|
|
59
|
+
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.ui-select-display {
|
|
63
|
+
padding: 10px 32px 10px 14px;
|
|
64
|
+
font-size: 0.9375rem;
|
|
65
|
+
color: var(--ui-text-primary);
|
|
66
|
+
flex-grow: 1;
|
|
67
|
+
min-height: 1.5em;
|
|
68
|
+
line-height: 1.5;
|
|
69
|
+
white-space: nowrap;
|
|
70
|
+
overflow: hidden;
|
|
71
|
+
text-overflow: ellipsis;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.ui-select-icon {
|
|
75
|
+
position: absolute;
|
|
76
|
+
right: 8px;
|
|
77
|
+
top: 50%;
|
|
78
|
+
transform: translateY(-50%);
|
|
79
|
+
pointer-events: none;
|
|
80
|
+
color: var(--ui-text-secondary);
|
|
81
|
+
transition: transform 0.2s;
|
|
82
|
+
display: flex;
|
|
83
|
+
align-items: center;
|
|
84
|
+
justify-content: center;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.ui-select-icon-open {
|
|
88
|
+
transform: translateY(-50%) rotate(180deg);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.ui-select-variant-filled {
|
|
92
|
+
background-color: #f1f5f9;
|
|
93
|
+
border-color: transparent;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.ui-select-variant-filled:hover {
|
|
97
|
+
background-color: #e2e8f0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.ui-select-variant-filled.ui-select-container-focused {
|
|
101
|
+
background-color: var(--ui-bg);
|
|
102
|
+
border-color: var(--ui-primary);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.ui-select-variant-standard {
|
|
106
|
+
border-radius: 0;
|
|
107
|
+
border: 0;
|
|
108
|
+
border-bottom: 1px solid var(--ui-border);
|
|
109
|
+
background-color: transparent;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.ui-select-variant-standard.ui-select-container-focused {
|
|
113
|
+
border-bottom: 2px solid var(--ui-primary);
|
|
114
|
+
box-shadow: none;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.ui-select-menu {
|
|
118
|
+
position: absolute;
|
|
119
|
+
top: 100%;
|
|
120
|
+
left: 0;
|
|
121
|
+
z-index: 1000;
|
|
122
|
+
min-width: 100%;
|
|
123
|
+
background-color: var(--ui-bg);
|
|
124
|
+
border: 1px solid var(--ui-border);
|
|
125
|
+
border-radius: var(--ui-radius);
|
|
126
|
+
margin-top: 4px;
|
|
127
|
+
box-shadow: var(--ui-shadow-lg);
|
|
128
|
+
padding: 4px 0;
|
|
129
|
+
max-height: 300px;
|
|
130
|
+
overflow-y: auto;
|
|
131
|
+
animation: ui-select-menu-fade-in 0.15s ease-out;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
@keyframes ui-select-menu-fade-in {
|
|
135
|
+
from {
|
|
136
|
+
opacity: 0;
|
|
137
|
+
transform: translateY(-10px);
|
|
138
|
+
}
|
|
139
|
+
to {
|
|
140
|
+
opacity: 1;
|
|
141
|
+
transform: translateY(0);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.ui-select-menu-autoWidth {
|
|
146
|
+
min-width: unset;
|
|
147
|
+
width: max-content;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.ui-select-native {
|
|
151
|
+
width: 100%;
|
|
152
|
+
padding: 10px 14px;
|
|
153
|
+
font-size: 0.9375rem;
|
|
154
|
+
border: 1px solid var(--ui-border);
|
|
155
|
+
border-radius: var(--ui-radius);
|
|
156
|
+
background-color: var(--ui-bg);
|
|
157
|
+
appearance: none;
|
|
158
|
+
cursor: pointer;
|
|
159
|
+
outline: none;
|
|
160
|
+
font-family: inherit;
|
|
161
|
+
color: var(--ui-text-primary);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.ui-select-native:focus {
|
|
165
|
+
border-color: var(--ui-primary);
|
|
166
|
+
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.ui-select-menu-item {
|
|
170
|
+
padding: 10px 16px;
|
|
171
|
+
font-size: 0.9375rem;
|
|
172
|
+
cursor: pointer;
|
|
173
|
+
transition: background-color 0.2s;
|
|
174
|
+
color: var(--ui-text-primary);
|
|
175
|
+
display: flex;
|
|
176
|
+
align-items: center;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.ui-select-menu-item:hover {
|
|
180
|
+
background-color: #f1f5f9;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.ui-select-menu-item-selected {
|
|
184
|
+
background-color: #eff6ff;
|
|
185
|
+
color: var(--ui-primary);
|
|
186
|
+
font-weight: 500;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.ui-select-menu-item-selected:hover {
|
|
190
|
+
background-color: #dbeafe;
|
|
191
|
+
}
|
|
192
|
+
`,K=forwardRef((v,x)=>{let{autoWidth:N=false,children:s,classes:i={},defaultOpen:g=false,defaultValue:p,displayEmpty:M=false,fullWidth:k=false,IconComponent:q=ChevronDown,id:G,input:ve,inputProps:I={},label:f,labelId:C,MenuProps:S={},multiple:u=false,native:R=false,onChange:L,onClose:T,onOpen:J,open:P,renderValue:A,SelectDisplayProps:Q={},sx:H,value:V,variant:U="outlined",className:z,...X}=v,Z=useId(),m=G||Z,ee=`${m}-menu`,[te,re]=useState(p!==void 0?p:u?[]:""),[oe,D]=useState(g),[O,W]=useState(false),Y=V!==void 0,t=Y?V:te,y=P!==void 0,a$1=y?P:oe,h=useRef(null),w=useRef(null),ie=e=>{if(R)return;let r=!a$1;y||D(r),r?J?.(e):T?.(e);},F=e=>{y||D(false),T?.(e);},_=(e,r)=>{let l=e;if(u){let c=Array.isArray(t)?t:[];c.includes(e)?l=c.filter(ae=>ae!==e):l=[...c,e];}if(Y||re(l),L){let c={target:{value:l,name:I.name}};L(c,r);}u||F(null);};useEffect(()=>{let e=r=>{a$1&&h.current&&!h.current.contains(r.target)&&w.current&&!w.current.contains(r.target)&&F(r);};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e);}},[a$1]);let ne=()=>{if(A)return A(t);if(u&&Array.isArray(t))return t.length===0&&M?"":t.join(", ");if(t===""||t===void 0||t===null)return M?"":null;let e=t;return d.Children.forEach(s,r=>{d.isValidElement(r)&&r.props.value===t&&(e=r.props.children);}),e};return R?jsxs("div",{className:a("ui-select-root",k&&"ui-select-fullWidth",z,i.root),style:H,children:[jsx("style",{dangerouslySetInnerHTML:{__html:B}}),f&&jsx("label",{htmlFor:m,className:a("ui-select-label",i.label),children:f}),jsx("select",{id:m,value:t,onChange:e=>_(e.target.value),className:a("ui-select-native",i.native),...I,...X,children:s})]}):jsxs(Fragment,{children:[jsx("style",{dangerouslySetInnerHTML:{__html:B}}),jsxs("div",{ref:h,className:a("ui-select-root",k&&"ui-select-fullWidth",z,i.root),style:H,children:[f&&jsx("label",{id:C,className:a("ui-select-label",O&&"ui-select-label-focused",i.label),children:f}),jsxs("div",{ref:x,role:"button","aria-haspopup":"listbox","aria-expanded":a$1,"aria-labelledby":C,id:m,tabIndex:0,onClick:ie,onFocus:()=>W(true),onBlur:()=>W(false),className:a("ui-select-container",`ui-select-variant-${U}`,O&&"ui-select-container-focused",a$1&&"ui-select-container-open",i.container),...Q,children:[jsx("div",{className:a("ui-select-display",i.select),children:ne()}),jsx("div",{className:a("ui-select-icon",a$1&&"ui-select-icon-open",i.icon),children:jsx(q,{size:20})})]}),a$1&&jsx("div",{ref:w,id:ee,role:"listbox",className:a("ui-select-menu",N&&"ui-select-menu-autoWidth",S.className,i.menu),...S,children:d.Children.map(s,e=>{if(!d.isValidElement(e))return null;let r=u?Array.isArray(t)&&t.includes(e.props.value):t===e.props.value;return d.cloneElement(e,{onClick:l=>{e.props.onClick?.(l),_(e.props.value,e);},className:a("ui-select-menu-item",r&&"ui-select-menu-item-selected",e.props.className),role:"option","aria-selected":r})})})]})]})});K.displayName="Select";var de=K;var j=forwardRef(({className:v,children:x,value:N,disabled:s,selected:i,...g},p)=>jsx("div",{ref:p,className:a("ui-select-menu-item",i&&"ui-select-menu-item-selected",s&&"ui-select-menu-item-disabled",v),...g,children:x}));j.displayName="MenuItem";var me=j;export{de as a,me as b};//# sourceMappingURL=chunk-2K6E3M6X.mjs.map
|
|
193
|
+
//# sourceMappingURL=chunk-2K6E3M6X.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Select/Select.tsx","../src/components/Select/MenuItem.tsx"],"names":["STYLES","Select","forwardRef","props","ref","autoWidth","children","classes","defaultOpen","defaultValue","displayEmpty","fullWidth","Icon","ChevronDown","idProp","input","inputProps","label","labelId","MenuProps","multiple","native","onChange","onClose","onOpen","openProp","renderValue","SelectDisplayProps","sx","valueProp","variant","className","rest","generatedId","useId","id","menuId","internalValue","setInternalValue","useState","internalOpen","setInternalOpen","focused","setFocused","isControlledValue","value","isControlledOpen","isOpen","containerRef","useRef","menuRef","handleToggle","event","nextOpen","handleClose","handleSelect","val","child","newValue","currentArray","v","useEffect","handleClickOutside","getDisplayValue","labelFound","React","jsxs","cn","jsx","Fragment","isSelected","e","Select_default","MenuItem","disabled","selected","MenuItem_default"],"mappings":"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","file":"chunk-2K6E3M6X.mjs","sourcesContent":["'use client';\n\nimport React, { forwardRef, useState, useRef, useEffect, useId } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { SelectProps, SelectChangeEvent } from './types';\n\nconst STYLES = `\n .ui-select-root {\n display: inline-flex;\n flex-direction: column;\n position: relative;\n min-width: 200px;\n vertical-align: top;\n font-family: 'Inter', system-ui, sans-serif;\n margin: 0;\n --ui-primary: #3b82f6;\n --ui-secondary: #64748b;\n --ui-error: #ef4444;\n --ui-success: #22c55e;\n --ui-warning: #f59e0b;\n --ui-info: #0ea5e9;\n --ui-text-primary: #1e293b;\n --ui-text-secondary: #64748b;\n --ui-bg: #ffffff;\n --ui-border: #e2e8f0;\n --ui-radius: 8px;\n --ui-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n }\n\n .ui-select-fullWidth {\n width: 100%;\n }\n\n .ui-select-label {\n display: block;\n margin-bottom: 6px;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--ui-text-secondary);\n transition: color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .ui-select-label-focused {\n color: var(--ui-primary);\n }\n\n .ui-select-container {\n position: relative;\n border-radius: var(--ui-radius);\n display: flex;\n align-items: center;\n background-color: var(--ui-bg);\n border: 1px solid var(--ui-border);\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n cursor: pointer;\n overflow: hidden;\n }\n\n .ui-select-container:hover {\n border-color: #cbd5e1;\n }\n\n .ui-select-container-focused {\n border-color: var(--ui-primary);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n\n .ui-select-display {\n padding: 10px 32px 10px 14px;\n font-size: 0.9375rem;\n color: var(--ui-text-primary);\n flex-grow: 1;\n min-height: 1.5em;\n line-height: 1.5;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ui-select-icon {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n pointer-events: none;\n color: var(--ui-text-secondary);\n transition: transform 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .ui-select-icon-open {\n transform: translateY(-50%) rotate(180deg);\n }\n\n .ui-select-variant-filled {\n background-color: #f1f5f9;\n border-color: transparent;\n }\n\n .ui-select-variant-filled:hover {\n background-color: #e2e8f0;\n }\n\n .ui-select-variant-filled.ui-select-container-focused {\n background-color: var(--ui-bg);\n border-color: var(--ui-primary);\n }\n\n .ui-select-variant-standard {\n border-radius: 0;\n border: 0;\n border-bottom: 1px solid var(--ui-border);\n background-color: transparent;\n }\n\n .ui-select-variant-standard.ui-select-container-focused {\n border-bottom: 2px solid var(--ui-primary);\n box-shadow: none;\n }\n\n .ui-select-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n min-width: 100%;\n background-color: var(--ui-bg);\n border: 1px solid var(--ui-border);\n border-radius: var(--ui-radius);\n margin-top: 4px;\n box-shadow: var(--ui-shadow-lg);\n padding: 4px 0;\n max-height: 300px;\n overflow-y: auto;\n animation: ui-select-menu-fade-in 0.15s ease-out;\n }\n\n @keyframes ui-select-menu-fade-in {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .ui-select-menu-autoWidth {\n min-width: unset;\n width: max-content;\n }\n\n .ui-select-native {\n width: 100%;\n padding: 10px 14px;\n font-size: 0.9375rem;\n border: 1px solid var(--ui-border);\n border-radius: var(--ui-radius);\n background-color: var(--ui-bg);\n appearance: none;\n cursor: pointer;\n outline: none;\n font-family: inherit;\n color: var(--ui-text-primary);\n }\n\n .ui-select-native:focus {\n border-color: var(--ui-primary);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n\n .ui-select-menu-item {\n padding: 10px 16px;\n font-size: 0.9375rem;\n cursor: pointer;\n transition: background-color 0.2s;\n color: var(--ui-text-primary);\n display: flex;\n align-items: center;\n }\n\n .ui-select-menu-item:hover {\n background-color: #f1f5f9;\n }\n\n .ui-select-menu-item-selected {\n background-color: #eff6ff;\n color: var(--ui-primary);\n font-weight: 500;\n }\n\n .ui-select-menu-item-selected:hover {\n background-color: #dbeafe;\n }\n`;\n\nexport const Select = forwardRef<HTMLDivElement, SelectProps>((props, ref) => {\n const {\n autoWidth = false,\n children,\n classes = {},\n defaultOpen = false,\n defaultValue,\n displayEmpty = false,\n fullWidth = false,\n IconComponent: Icon = ChevronDown,\n id: idProp,\n input,\n inputProps = {},\n label,\n labelId,\n MenuProps = {},\n multiple = false,\n native = false,\n onChange,\n onClose,\n onOpen,\n open: openProp,\n renderValue,\n SelectDisplayProps = {},\n sx,\n value: valueProp,\n variant = 'outlined',\n className,\n ...rest\n } = props;\n\n const generatedId = useId();\n const id = idProp || generatedId;\n const menuId = `${id}-menu`;\n \n const [internalValue, setInternalValue] = useState(defaultValue !== undefined ? defaultValue : (multiple ? [] : ''));\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [focused, setFocused] = useState(false);\n\n const isControlledValue = valueProp !== undefined;\n const value = isControlledValue ? valueProp : internalValue;\n\n const isControlledOpen = openProp !== undefined;\n const isOpen = isControlledOpen ? openProp : internalOpen;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const handleToggle = (event: React.MouseEvent | React.KeyboardEvent) => {\n if (native) return;\n \n const nextOpen = !isOpen;\n if (!isControlledOpen) {\n setInternalOpen(nextOpen);\n }\n\n if (nextOpen) {\n onOpen?.(event);\n } else {\n onClose?.(event);\n }\n };\n\n const handleClose = (event: any) => {\n if (!isControlledOpen) {\n setInternalOpen(false);\n }\n onClose?.(event);\n };\n\n const handleSelect = (val: any, child?: React.ReactNode) => {\n let newValue = val;\n \n if (multiple) {\n const currentArray = Array.isArray(value) ? value : [];\n if (currentArray.includes(val)) {\n newValue = currentArray.filter((v) => v !== val);\n } else {\n newValue = [...currentArray, val];\n }\n }\n\n if (!isControlledValue) {\n setInternalValue(newValue);\n }\n\n if (onChange) {\n const event: SelectChangeEvent = {\n target: {\n value: newValue,\n name: inputProps.name,\n },\n };\n onChange(event, child);\n }\n\n if (!multiple) {\n handleClose(null);\n }\n };\n\n // Close menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n isOpen &&\n containerRef.current &&\n !containerRef.current.contains(event.target as Node) &&\n menuRef.current &&\n !menuRef.current.contains(event.target as Node)\n ) {\n handleClose(event);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n const getDisplayValue = () => {\n if (renderValue) {\n return renderValue(value);\n }\n\n if (multiple && Array.isArray(value)) {\n if (value.length === 0 && displayEmpty) return '';\n return value.join(', ');\n }\n\n if (value === '' || value === undefined || value === null) {\n return displayEmpty ? '' : null;\n }\n\n // Attempt to find the label from children\n let labelFound = value;\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && child.props.value === value) {\n labelFound = child.props.children;\n }\n });\n\n return labelFound;\n };\n\n if (native) {\n return (\n <div className={cn('ui-select-root', fullWidth && 'ui-select-fullWidth', className, classes.root)} style={sx}>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n {label && (\n <label htmlFor={id} className={cn('ui-select-label', classes.label)}>\n {label}\n </label>\n )}\n <select\n id={id}\n value={value}\n onChange={(e) => handleSelect(e.target.value)}\n className={cn('ui-select-native', classes.native)}\n {...inputProps}\n {...(rest as any)}\n >\n {children}\n </select>\n </div>\n );\n }\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <div\n ref={containerRef}\n className={cn(\n 'ui-select-root',\n fullWidth && 'ui-select-fullWidth',\n className,\n classes.root\n )}\n style={sx}\n >\n {label && (\n <label\n id={labelId}\n className={cn(\n 'ui-select-label',\n focused && 'ui-select-label-focused',\n classes.label\n )}\n >\n {label}\n </label>\n )}\n\n <div\n ref={ref}\n role=\"button\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-labelledby={labelId}\n id={id}\n tabIndex={0}\n onClick={handleToggle}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n className={cn(\n 'ui-select-container',\n `ui-select-variant-${variant}`,\n focused && 'ui-select-container-focused',\n isOpen && 'ui-select-container-open',\n classes.container\n )}\n {...SelectDisplayProps}\n >\n <div className={cn('ui-select-display', classes.select)}>\n {getDisplayValue()}\n </div>\n <div className={cn('ui-select-icon', isOpen && 'ui-select-icon-open', classes.icon)}>\n <Icon size={20} />\n </div>\n </div>\n\n {isOpen && (\n <div\n ref={menuRef}\n id={menuId}\n role=\"listbox\"\n className={cn(\n 'ui-select-menu',\n autoWidth && 'ui-select-menu-autoWidth',\n MenuProps.className,\n classes.menu\n )}\n {...MenuProps}\n >\n {React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) return null;\n\n const isSelected = multiple\n ? Array.isArray(value) && value.includes(child.props.value)\n : value === child.props.value;\n\n return React.cloneElement(child as React.ReactElement<any>, {\n onClick: (e: React.MouseEvent) => {\n child.props.onClick?.(e);\n handleSelect(child.props.value, child);\n },\n className: cn(\n 'ui-select-menu-item',\n isSelected && 'ui-select-menu-item-selected',\n child.props.className\n ),\n role: 'option',\n 'aria-selected': isSelected,\n });\n })}\n </div>\n )}\n </div>\n </>\n );\n});\n\nSelect.displayName = 'Select';\n\nexport default Select;\n","import React, { forwardRef, HTMLAttributes } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface MenuItemProps extends HTMLAttributes<HTMLDivElement> {\n value?: any;\n disabled?: boolean;\n selected?: boolean;\n}\n\nexport const MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(\n ({ className, children, value, disabled, selected, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'ui-select-menu-item',\n selected && 'ui-select-menu-item-selected',\n disabled && 'ui-select-menu-item-disabled',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nMenuItem.displayName = 'MenuItem';\n\nexport default MenuItem;\n"]}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime');var N=`
|
|
2
|
+
:root {
|
|
3
|
+
--df-primary: #3b82f6;
|
|
4
|
+
--df-primary-hover: #2563eb;
|
|
5
|
+
--df-text-main: #1e293b;
|
|
6
|
+
--df-text-secondary: #64748b;
|
|
7
|
+
--df-bg-main: #ffffff;
|
|
8
|
+
--df-bg-glass: rgba(255, 255, 255, 0.85);
|
|
9
|
+
--df-border: #e2e8f0;
|
|
10
|
+
--df-border-focus: #3b82f6;
|
|
11
|
+
--df-radius-lg: 12px;
|
|
12
|
+
--df-radius-md: 8px;
|
|
13
|
+
--df-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.df-backdrop {
|
|
17
|
+
position: fixed;
|
|
18
|
+
top: 0;
|
|
19
|
+
left: 0;
|
|
20
|
+
right: 0;
|
|
21
|
+
bottom: 0;
|
|
22
|
+
background: rgba(15, 23, 42, 0.4);
|
|
23
|
+
backdrop-filter: blur(4px);
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
justify-content: center;
|
|
27
|
+
z-index: 1000;
|
|
28
|
+
opacity: 0;
|
|
29
|
+
visibility: hidden;
|
|
30
|
+
transition: opacity 0.3s ease, visibility 0.3s ease;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.df-backdrop.df-open {
|
|
34
|
+
opacity: 1;
|
|
35
|
+
visibility: visible;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.df-dialog {
|
|
39
|
+
background: var(--df-bg-glass);
|
|
40
|
+
backdrop-filter: blur(16px);
|
|
41
|
+
width: 100%;
|
|
42
|
+
max-width: 400px;
|
|
43
|
+
border-radius: var(--df-radius-lg);
|
|
44
|
+
box-shadow: var(--df-shadow);
|
|
45
|
+
display: flex;
|
|
46
|
+
flex-direction: column;
|
|
47
|
+
transform: scale(0.95) translateY(10px);
|
|
48
|
+
opacity: 0;
|
|
49
|
+
transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 0.3s ease;
|
|
50
|
+
font-family: 'Inter', system-ui, -apple-system, sans-serif;
|
|
51
|
+
border: 1px solid rgba(255, 255, 255, 0.5);
|
|
52
|
+
margin: 16px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.df-backdrop.df-open .df-dialog {
|
|
56
|
+
transform: scale(1) translateY(0);
|
|
57
|
+
opacity: 1;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.df-header {
|
|
61
|
+
padding: 20px 24px 16px;
|
|
62
|
+
border-bottom: 1px solid var(--df-border);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.df-title {
|
|
66
|
+
margin: 0;
|
|
67
|
+
font-size: 18px;
|
|
68
|
+
font-weight: 600;
|
|
69
|
+
color: var(--df-primary);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.df-content {
|
|
73
|
+
padding: 24px;
|
|
74
|
+
display: flex;
|
|
75
|
+
flex-direction: column;
|
|
76
|
+
gap: 20px;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.df-form-group {
|
|
80
|
+
display: flex;
|
|
81
|
+
flex-direction: column;
|
|
82
|
+
gap: 8px;
|
|
83
|
+
position: relative;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.df-label {
|
|
87
|
+
font-size: 13px;
|
|
88
|
+
font-weight: 500;
|
|
89
|
+
color: var(--df-text-secondary);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.df-input {
|
|
93
|
+
width: 100%;
|
|
94
|
+
padding: 10px 14px;
|
|
95
|
+
font-size: 14px;
|
|
96
|
+
color: var(--df-text-main);
|
|
97
|
+
background: var(--df-bg-main);
|
|
98
|
+
border: 1px solid var(--df-border);
|
|
99
|
+
border-radius: var(--df-radius-md);
|
|
100
|
+
outline: none;
|
|
101
|
+
transition: all 0.2s ease;
|
|
102
|
+
box-sizing: border-box;
|
|
103
|
+
appearance: none;
|
|
104
|
+
font-family: inherit;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.df-input:focus {
|
|
108
|
+
border-color: var(--df-border-focus);
|
|
109
|
+
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Custom Select Wrapper for arrow */
|
|
113
|
+
.df-select-wrapper {
|
|
114
|
+
position: relative;
|
|
115
|
+
width: 100%;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.df-select-wrapper::after {
|
|
119
|
+
content: '';
|
|
120
|
+
position: absolute;
|
|
121
|
+
right: 14px;
|
|
122
|
+
top: 50%;
|
|
123
|
+
transform: translateY(-50%);
|
|
124
|
+
width: 0;
|
|
125
|
+
height: 0;
|
|
126
|
+
border-left: 5px solid transparent;
|
|
127
|
+
border-right: 5px solid transparent;
|
|
128
|
+
border-top: 5px solid var(--df-text-secondary);
|
|
129
|
+
pointer-events: none;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.df-select {
|
|
133
|
+
padding-right: 32px;
|
|
134
|
+
cursor: pointer;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.df-custom-range {
|
|
138
|
+
display: flex;
|
|
139
|
+
gap: 16px;
|
|
140
|
+
animation: dfSlideDown 0.3s ease-out;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.df-custom-range .df-form-group {
|
|
144
|
+
flex: 1;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
@keyframes dfSlideDown {
|
|
148
|
+
from { opacity: 0; transform: translateY(-10px); }
|
|
149
|
+
to { opacity: 1; transform: translateY(0); }
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.df-footer {
|
|
153
|
+
padding: 16px 24px 24px;
|
|
154
|
+
display: flex;
|
|
155
|
+
justify-content: flex-end;
|
|
156
|
+
gap: 12px;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.df-btn {
|
|
160
|
+
padding: 8px 16px;
|
|
161
|
+
font-size: 14px;
|
|
162
|
+
font-weight: 600;
|
|
163
|
+
border-radius: var(--df-radius-md);
|
|
164
|
+
cursor: pointer;
|
|
165
|
+
transition: all 0.2s ease;
|
|
166
|
+
border: 1px solid transparent;
|
|
167
|
+
font-family: inherit;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.df-btn-cancel {
|
|
171
|
+
background: transparent;
|
|
172
|
+
color: var(--df-text-secondary);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.df-btn-cancel:hover {
|
|
176
|
+
background: rgba(0, 0, 0, 0.04);
|
|
177
|
+
color: var(--df-text-main);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.df-btn-apply {
|
|
181
|
+
background: var(--df-primary);
|
|
182
|
+
color: white;
|
|
183
|
+
box-shadow: 0 2px 4px rgba(59, 130, 246, 0.3);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.df-btn-apply:hover {
|
|
187
|
+
background: var(--df-primary-hover);
|
|
188
|
+
transform: translateY(-1px);
|
|
189
|
+
box-shadow: 0 4px 6px rgba(59, 130, 246, 0.4);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.df-btn-apply:active {
|
|
193
|
+
transform: translateY(0);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/* Prevent background scrolling when modal is open */
|
|
197
|
+
body.df-modal-open {
|
|
198
|
+
overflow: hidden;
|
|
199
|
+
}
|
|
200
|
+
`,D=["Today","Yesterday","Last 7 Days","Last 30 Days","This Month","Last Month","Custom"],C=({open:r,title:x="Date Filter",options:g=D,initialValue:t,onClose:d,onApply:u})=>{let[s,f]=react.useState(t?.option||"Today"),[n,p]=react.useState(t?.from||""),[c,b]=react.useState(t?.to||""),m=react.useRef(null);react.useEffect(()=>{r&&t&&(f(t.option),p(t.from||""),b(t.to||""));},[r,t]),react.useEffect(()=>(r?document.body.classList.add("df-modal-open"):document.body.classList.remove("df-modal-open"),()=>document.body.classList.remove("df-modal-open")),[r]);let v=e=>{e.target===m.current&&d();};react.useEffect(()=>{let e=w=>{w.key==="Escape"&&r&&d();};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[r,d]);let y=()=>{u({option:s,...s==="Custom"?{from:n,to:c}:{}});},h=new Date().toISOString().split("T")[0];return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("style",{dangerouslySetInnerHTML:{__html:N}}),jsxRuntime.jsx("div",{ref:m,className:`df-backdrop ${r?"df-open":""}`,onClick:v,role:"dialog","aria-modal":"true","aria-labelledby":"df-dialog-title",children:jsxRuntime.jsxs("div",{className:"df-dialog",children:[jsxRuntime.jsx("div",{className:"df-header",children:jsxRuntime.jsx("h2",{id:"df-dialog-title",className:"df-title",children:x})}),jsxRuntime.jsxs("div",{className:"df-content",children:[jsxRuntime.jsxs("div",{className:"df-form-group",children:[jsxRuntime.jsx("label",{className:"df-label",children:"Select Range"}),jsxRuntime.jsx("div",{className:"df-select-wrapper",children:jsxRuntime.jsx("select",{className:"df-input df-select",value:s,onChange:e=>f(e.target.value),children:g.map(e=>jsxRuntime.jsx("option",{value:e,children:e},e))})})]}),s==="Custom"&&jsxRuntime.jsxs("div",{className:"df-custom-range",children:[jsxRuntime.jsxs("div",{className:"df-form-group",children:[jsxRuntime.jsx("label",{className:"df-label",children:"From Date"}),jsxRuntime.jsx("input",{type:"date",className:"df-input",value:n,onChange:e=>p(e.target.value),max:h})]}),jsxRuntime.jsxs("div",{className:"df-form-group",children:[jsxRuntime.jsx("label",{className:"df-label",children:"To Date"}),jsxRuntime.jsx("input",{type:"date",className:"df-input",value:c,onChange:e=>b(e.target.value),min:n||void 0})]})]})]}),jsxRuntime.jsxs("div",{className:"df-footer",children:[jsxRuntime.jsx("button",{className:"df-btn df-btn-cancel",onClick:d,children:"Cancel"}),jsxRuntime.jsx("button",{className:"df-btn df-btn-apply",onClick:y,children:"Apply"})]})]})})]})};exports.a=C;//# sourceMappingURL=chunk-2TXYJ7YE.js.map
|
|
201
|
+
//# sourceMappingURL=chunk-2TXYJ7YE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/DateFilter/DateFilter.tsx"],"names":["STYLES","DEFAULT_OPTIONS","DateFilter","open","title","options","initialValue","onClose","onApply","option","setOption","useState","from","setFrom","to","setTo","backdropRef","useRef","useEffect","handleBackdropClick","handleKeyDown","e","handleApply","todayStr","jsxs","Fragment","jsx","opt"],"mappings":"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","file":"chunk-2TXYJ7YE.js","sourcesContent":["'use client';\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport { DateFilterProps, DateFilterValue } from './DateFilter.types';\n\nconst STYLES = `\n :root {\n --df-primary: #3b82f6;\n --df-primary-hover: #2563eb;\n --df-text-main: #1e293b;\n --df-text-secondary: #64748b;\n --df-bg-main: #ffffff;\n --df-bg-glass: rgba(255, 255, 255, 0.85);\n --df-border: #e2e8f0;\n --df-border-focus: #3b82f6;\n --df-radius-lg: 12px;\n --df-radius-md: 8px;\n --df-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);\n }\n\n .df-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(15, 23, 42, 0.4);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n .df-backdrop.df-open {\n opacity: 1;\n visibility: visible;\n }\n\n .df-dialog {\n background: var(--df-bg-glass);\n backdrop-filter: blur(16px);\n width: 100%;\n max-width: 400px;\n border-radius: var(--df-radius-lg);\n box-shadow: var(--df-shadow);\n display: flex;\n flex-direction: column;\n transform: scale(0.95) translateY(10px);\n opacity: 0;\n transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 0.3s ease;\n font-family: 'Inter', system-ui, -apple-system, sans-serif;\n border: 1px solid rgba(255, 255, 255, 0.5);\n margin: 16px;\n }\n\n .df-backdrop.df-open .df-dialog {\n transform: scale(1) translateY(0);\n opacity: 1;\n }\n\n .df-header {\n padding: 20px 24px 16px;\n border-bottom: 1px solid var(--df-border);\n }\n\n .df-title {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--df-primary);\n }\n\n .df-content {\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n .df-form-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n position: relative;\n }\n\n .df-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--df-text-secondary);\n }\n\n .df-input {\n width: 100%;\n padding: 10px 14px;\n font-size: 14px;\n color: var(--df-text-main);\n background: var(--df-bg-main);\n border: 1px solid var(--df-border);\n border-radius: var(--df-radius-md);\n outline: none;\n transition: all 0.2s ease;\n box-sizing: border-box;\n appearance: none;\n font-family: inherit;\n }\n\n .df-input:focus {\n border-color: var(--df-border-focus);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);\n }\n\n /* Custom Select Wrapper for arrow */\n .df-select-wrapper {\n position: relative;\n width: 100%;\n }\n\n .df-select-wrapper::after {\n content: '';\n position: absolute;\n right: 14px;\n top: 50%;\n transform: translateY(-50%);\n width: 0;\n height: 0;\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n border-top: 5px solid var(--df-text-secondary);\n pointer-events: none;\n }\n\n .df-select {\n padding-right: 32px;\n cursor: pointer;\n }\n\n .df-custom-range {\n display: flex;\n gap: 16px;\n animation: dfSlideDown 0.3s ease-out;\n }\n\n .df-custom-range .df-form-group {\n flex: 1;\n }\n\n @keyframes dfSlideDown {\n from { opacity: 0; transform: translateY(-10px); }\n to { opacity: 1; transform: translateY(0); }\n }\n\n .df-footer {\n padding: 16px 24px 24px;\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n }\n\n .df-btn {\n padding: 8px 16px;\n font-size: 14px;\n font-weight: 600;\n border-radius: var(--df-radius-md);\n cursor: pointer;\n transition: all 0.2s ease;\n border: 1px solid transparent;\n font-family: inherit;\n }\n\n .df-btn-cancel {\n background: transparent;\n color: var(--df-text-secondary);\n }\n\n .df-btn-cancel:hover {\n background: rgba(0, 0, 0, 0.04);\n color: var(--df-text-main);\n }\n\n .df-btn-apply {\n background: var(--df-primary);\n color: white;\n box-shadow: 0 2px 4px rgba(59, 130, 246, 0.3);\n }\n\n .df-btn-apply:hover {\n background: var(--df-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 4px 6px rgba(59, 130, 246, 0.4);\n }\n\n .df-btn-apply:active {\n transform: translateY(0);\n }\n \n /* Prevent background scrolling when modal is open */\n body.df-modal-open {\n overflow: hidden;\n }\n`;\n\nconst DEFAULT_OPTIONS = [\n 'Today',\n 'Yesterday',\n 'Last 7 Days',\n 'Last 30 Days',\n 'This Month',\n 'Last Month',\n 'Custom'\n];\n\nexport const DateFilter = ({\n open,\n title = 'Date Filter',\n options = DEFAULT_OPTIONS,\n initialValue,\n onClose,\n onApply\n}: DateFilterProps) => {\n const [option, setOption] = useState<string>(initialValue?.option || 'Today');\n const [from, setFrom] = useState<string>(initialValue?.from || '');\n const [to, setTo] = useState<string>(initialValue?.to || '');\n \n const backdropRef = useRef<HTMLDivElement>(null);\n\n // Sync state with prop if it changes\n useEffect(() => {\n if (open && initialValue) {\n setOption(initialValue.option);\n setFrom(initialValue.from || '');\n setTo(initialValue.to || '');\n }\n }, [open, initialValue]);\n\n // Handle body scroll locking\n useEffect(() => {\n if (open) {\n document.body.classList.add('df-modal-open');\n } else {\n document.body.classList.remove('df-modal-open');\n }\n return () => document.body.classList.remove('df-modal-open');\n }, [open]);\n\n // Handle click outside\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === backdropRef.current) {\n onClose();\n }\n };\n\n // Handle Escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && open) {\n onClose();\n }\n };\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [open, onClose]);\n\n const handleApply = () => {\n onApply({\n option,\n ...(option === 'Custom' ? { from, to } : {})\n });\n };\n\n const todayStr = new Date().toISOString().split('T')[0];\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <div \n ref={backdropRef}\n className={`df-backdrop ${open ? 'df-open' : ''}`}\n onClick={handleBackdropClick}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"df-dialog-title\"\n >\n <div className=\"df-dialog\">\n <div className=\"df-header\">\n <h2 id=\"df-dialog-title\" className=\"df-title\">{title}</h2>\n </div>\n \n <div className=\"df-content\">\n <div className=\"df-form-group\">\n <label className=\"df-label\">Select Range</label>\n <div className=\"df-select-wrapper\">\n <select \n className=\"df-input df-select\"\n value={option}\n onChange={(e) => setOption(e.target.value)}\n >\n {options.map((opt) => (\n <option key={opt} value={opt}>{opt}</option>\n ))}\n </select>\n </div>\n </div>\n\n {option === 'Custom' && (\n <div className=\"df-custom-range\">\n <div className=\"df-form-group\">\n <label className=\"df-label\">From Date</label>\n <input \n type=\"date\"\n className=\"df-input\"\n value={from}\n onChange={(e) => setFrom(e.target.value)}\n max={todayStr}\n />\n </div>\n <div className=\"df-form-group\">\n <label className=\"df-label\">To Date</label>\n <input \n type=\"date\"\n className=\"df-input\"\n value={to}\n onChange={(e) => setTo(e.target.value)}\n min={from || undefined}\n />\n </div>\n </div>\n )}\n </div>\n\n <div className=\"df-footer\">\n <button className=\"df-btn df-btn-cancel\" onClick={onClose}>\n Cancel\n </button>\n <button className=\"df-btn df-btn-apply\" onClick={handleApply}>\n Apply\n </button>\n </div>\n </div>\n </div>\n </>\n );\n};\n"]}
|