chordia-ui 3.7.1 → 3.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";const n=require("react/jsx-runtime"),$=require("react");function N({page:i=1,pageSize:o=10,totalCount:x=0,currentDataLength:p=0,onPageChange:c,onPageSizeChange:b,pageSizeOptions:d=[10,20,50,100],className:h="",showRecordCounter:e=!0,showPageSizeSelector:t=!0}){const r=Math.ceil(x/o),l=(i-1)*o+1,m=Math.min((i-1)*o+p,x),j=$.useMemo(()=>{if(r<=1)return[];const s=[];if(r<=7)for(let a=1;a<=r;a+=1)s.push(a);else{s.push(1);let a=Math.max(2,i-2),f=Math.min(r-1,i+2);i<=3&&(f=5),i>=r-2&&(a=r-4),a>2&&s.push("ellipsis-start");for(let g=a;g<=f;g+=1)s.push(g);f<r-1&&s.push("ellipsis-end"),s.push(r)}return s},[i,r]);if(!c||r===0)return null;const w=t&&typeof b=="function";return n.jsxs("div",{className:`flex items-center justify-between px-3 py-3 gap-4 bg-[white] rounded-b-lg ${h}`,children:[n.jsxs("div",{className:"flex items-center gap-4",children:[w&&n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("span",{className:"text-sm text-gray-700",children:"Rows per page:"}),n.jsx("select",{className:"border border-gray-300 rounded px-2 py-1 text-sm bg-white text-gray-700",value:o,onChange:s=>b(Number(s.target.value)),children:d.map(s=>n.jsx("option",{value:s,children:s},s))})]}),e&&n.jsxs("span",{className:"text-sm text-gray-700",children:["Showing"," ",m>0?`${l}-${m}`:0," ","of ",x]})]}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("button",{className:"px-3 py-1.5 rounded-lg bg-white border border-gray-300 text-gray-700 flex items-center justify-center hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white text-sm font-medium",onClick:()=>c(i-1),disabled:i<=1,"aria-label":"Previous page",children:"< Previous"}),j.map((s,y)=>{if(s==="ellipsis-start"||s==="ellipsis-end")return n.jsx("button",{className:"w-8 h-8 rounded-full text-gray-500 flex items-center justify-center cursor-default",disabled:!0,"aria-hidden":"true",children:n.jsx("span",{className:"text-xs",children:"..."})},`ellipsis-${y}`);const a=s===i;return n.jsx("button",{className:`w-8 h-8 rounded-full flex items-center justify-center transition-colors text-sm font-medium ${a?"bg-green-2 text-black font-semibold":"bg-white border border-gray-300 text-gray-700 hover:bg-gray-50"}`,onClick:()=>c(s),"aria-label":`Go to page ${s}`,"aria-current":a?"page":void 0,children:s},s)}),n.jsx("button",{className:"px-3 py-1.5 rounded-lg bg-white border border-gray-300 text-gray-700 flex items-center justify-center hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white text-sm font-medium",onClick:()=>c(i+1),disabled:i>=r,"aria-label":"Next page",children:"Next >"})]})]})}function u(i){return i.replace(/([A-Z])/g," $1").replace(/_/g," ").replace(/^./,o=>o.toUpperCase()).trim()}function v({filters:i,onChange:o,onClear:x,customFilters:p=[],fieldOptions:c={},className:b=""}){const d=[],h=(e,t)=>{if(c[e]&&Array.isArray(c[e])){const r=c[e].find(l=>{const m=typeof l=="object"?l.value!==void 0?l.value:l.id:l;return m===t||String(m)===String(t)});if(r)return typeof r=="object"&&(r.label||r.value)||String(r)}return String(t)};return Object.entries(i||{}).forEach(([e,t])=>{if(Array.isArray(t)&&t.length){const r=t.map(l=>h(e,l));d.push({key:e,label:`${u(e)}: ${r.join(", ")}`,onRemove:()=>{const l={...i};delete l[e],o(l)}})}else if(typeof t=="string"&&t.trim()!==""){const r=h(e,t);d.push({key:e,label:`${u(e)}: ${r}`,onRemove:()=>o({...i,[e]:""})})}}),Object.entries(i||{}).forEach(([e,t])=>{if(t&&typeof t=="object"&&(t.min!=null||t.max!=null)){const r=t.min!=null&&t.max!=null?`${u(e)}: ${t.min}–${t.max}`:t.min!=null?`${u(e)} ≥ ${t.min}`:`${u(e)} ≤ ${t.max}`;d.push({key:e,label:r,onRemove:()=>{const l={...i};delete l[e],o(l)}})}}),(p||[]).forEach(e=>{e&&e.active&&d.push({key:e.key,label:e.label,onRemove:e.onRemove})}),d.length?n.jsxs("div",{className:`flex flex-wrap items-center gap-4 ${b}`,children:[d.map(e=>n.jsxs("span",{className:"bg-white h-10 border border-gray-200 rounded-[14px] px-3 flex items-center text-[13px] transition-colors",children:[e.label,n.jsx("button",{onClick:e.onRemove,className:"ml-2 text-gray-500 hover:text-black transition-colors flex items-center",type:"button",children:n.jsx("span",{className:"relative top-[-1px]",children:"×"})})]},e.key)),n.jsxs("button",{onClick:x,className:"h-10 px-3.5 rounded-[14px] bg-white border border-gray-200 text-red-600 transition-colors flex items-center justify-center gap-1.5",type:"button",children:[n.jsx("span",{className:"text-red-600",children:"×"}),n.jsx("span",{children:"Clear"})]})]}):null}exports.CustomFilterChips=v;exports.Pagination=N;
1
+ "use strict";const i=require("react/jsx-runtime"),$=require("react");function N({page:n=1,pageSize:o=10,totalCount:x=0,currentDataLength:p=0,onPageChange:c,onPageSizeChange:b,pageSizeOptions:d=[10,20,50,100],className:h="",showRecordCounter:e=!0,showPageSizeSelector:t=!0}){const r=Math.ceil(x/o),l=(n-1)*o+1,m=Math.min((n-1)*o+p,x),j=$.useMemo(()=>{if(r<=1)return[];const s=[];if(r<=7)for(let a=1;a<=r;a+=1)s.push(a);else{s.push(1);let a=Math.max(2,n-2),f=Math.min(r-1,n+2);n<=3&&(f=5),n>=r-2&&(a=r-4),a>2&&s.push("ellipsis-start");for(let g=a;g<=f;g+=1)s.push(g);f<r-1&&s.push("ellipsis-end"),s.push(r)}return s},[n,r]);if(!c||r===0)return null;const w=t&&typeof b=="function";return i.jsxs("div",{className:`flex items-center justify-between px-3 py-3 gap-4 bg-[white] rounded-b-lg ${h}`,children:[i.jsxs("div",{className:"flex items-center gap-4",children:[w&&i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("span",{className:"text-sm text-gray-700",children:"Rows per page:"}),i.jsx("select",{className:"border border-gray-300 rounded px-2 py-1 text-sm bg-white text-gray-700",value:o,onChange:s=>b(Number(s.target.value)),children:d.map(s=>i.jsx("option",{value:s,children:s},s))})]}),e&&i.jsxs("span",{className:"text-sm text-gray-700",children:["Showing"," ",m>0?`${l}-${m}`:0," ","of ",x]})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{className:"px-3 py-1.5 rounded-lg bg-white border border-gray-300 text-gray-700 flex items-center justify-center hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white text-sm font-medium",onClick:()=>c(n-1),disabled:n<=1,"aria-label":"Previous page",children:"< Previous"}),j.map((s,y)=>{if(s==="ellipsis-start"||s==="ellipsis-end")return i.jsx("button",{className:"w-8 h-8 rounded-full text-gray-500 flex items-center justify-center cursor-default",disabled:!0,"aria-hidden":"true",children:i.jsx("span",{className:"text-xs",children:"..."})},`ellipsis-${y}`);const a=s===n;return i.jsx("button",{className:`w-8 h-8 rounded-full flex items-center justify-center transition-colors text-sm font-medium ${a?"bg-green-2 text-black font-semibold":"bg-white border border-gray-300 text-gray-700 hover:bg-gray-50"}`,onClick:()=>c(s),"aria-label":`Go to page ${s}`,"aria-current":a?"page":void 0,children:s},s)}),i.jsx("button",{className:"px-3 py-1.5 rounded-lg bg-white border border-gray-300 text-gray-700 flex items-center justify-center hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white text-sm font-medium",onClick:()=>c(n+1),disabled:n>=r,"aria-label":"Next page",children:"Next >"})]})]})}function u(n){return n.replace(/([A-Z])/g," $1").replace(/_/g," ").replace(/^./,o=>o.toUpperCase()).trim()}function v({filters:n,onChange:o,onClear:x,customFilters:p=[],fieldOptions:c={},className:b=""}){const d=[],h=(e,t)=>{if(c[e]&&Array.isArray(c[e])){const r=c[e].find(l=>{const m=typeof l=="object"?l.value!==void 0?l.value:l.id:l;return m===t||String(m)===String(t)});if(r)return typeof r=="object"&&(r.label||r.value)||String(r)}return String(t)};return Object.entries(n||{}).forEach(([e,t])=>{if(Array.isArray(t)&&t.length){const r=t.map(l=>h(e,l));d.push({key:e,label:`${u(e)}: ${r.join(", ")}`,onRemove:()=>{const l={...n};delete l[e],o(l)}})}else if(typeof t=="string"&&t.trim()!==""){const r=h(e,t),l=e==="contact_id"?"Contact Id":`${u(e)}: ${r}`;d.push({key:e,label:l,onRemove:()=>o({...n,[e]:""})})}}),Object.entries(n||{}).forEach(([e,t])=>{if(t&&typeof t=="object"&&(t.min!=null||t.max!=null)){const r=t.min!=null&&t.max!=null?`${u(e)}: ${t.min}–${t.max}`:t.min!=null?`${u(e)} ≥ ${t.min}`:`${u(e)} ≤ ${t.max}`;d.push({key:e,label:r,onRemove:()=>{const l={...n};delete l[e],o(l)}})}}),(p||[]).forEach(e=>{e&&e.active&&d.push({key:e.key,label:e.label,onRemove:e.onRemove})}),d.length?i.jsxs("div",{className:`flex flex-wrap items-center gap-4 ${b}`,children:[d.map(e=>i.jsxs("span",{className:"bg-white h-10 border border-gray-200 rounded-[14px] px-3 flex items-center text-[13px] transition-colors",children:[e.label,i.jsx("button",{onClick:e.onRemove,className:"ml-2 text-gray-500 hover:text-black transition-colors flex items-center",type:"button",children:i.jsx("span",{className:"relative top-[-1px]",children:"×"})})]},e.key)),i.jsxs("button",{onClick:x,className:"h-10 px-3.5 rounded-[14px] bg-white border border-gray-200 text-red-600 transition-colors flex items-center justify-center gap-1.5",type:"button",children:[i.jsx("span",{className:"text-red-600",children:"×"}),i.jsx("span",{children:"Clear"})]})]}):null}exports.CustomFilterChips=v;exports.Pagination=N;
2
2
  //# sourceMappingURL=CustomFilterChips.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomFilterChips.cjs.js","sources":["../src/components/common/Pagination.jsx","../src/components/common/CustomFilterChips.jsx"],"sourcesContent":[" \"use client\";\n\nimport React, { useMemo } from \"react\";\n\n/**\n * Pagination Component\n * @param {number} page - current page number (1-based)\n * @param {number} pageSize - rows per page\n * @param {number} totalCount - total row count (for pagination)\n * @param {number} currentDataLength - length of current page's data array\n * @param {function} onPageChange - function(newPage) for pagination\n * @param {function} onPageSizeChange - function(newPageSize) for changing rows/page\n * @param {Array} pageSizeOptions - array of page size options (default: [10, 20, 50, 100])\n * @param {string} className - additional CSS classes\n * @param {boolean} showRecordCounter - whether to show the record counter (default: true)\n * @param {boolean} showPageSizeSelector - whether to show the page size selector (default: true)\n */\nexport default function Pagination({\n page = 1,\n pageSize = 10,\n totalCount = 0,\n currentDataLength = 0,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = [10, 20, 50, 100],\n className = \"\",\n showRecordCounter = true,\n showPageSizeSelector = true,\n}) {\n const totalPages = Math.ceil(totalCount / pageSize);\n\n const currentRecordStart = (page - 1) * pageSize + 1;\n const currentRecordEnd = Math.min(\n (page - 1) * pageSize + currentDataLength,\n totalCount\n );\n\n const pageNumbers = useMemo(() => {\n if (totalPages <= 1) return [];\n\n const pages = [];\n const maxVisiblePages = 7;\n\n if (totalPages <= maxVisiblePages) {\n for (let i = 1; i <= totalPages; i += 1) {\n pages.push(i);\n }\n } else {\n pages.push(1);\n\n let startPage = Math.max(2, page - 2);\n let endPage = Math.min(totalPages - 1, page + 2);\n\n if (page <= 3) {\n endPage = 5;\n }\n\n if (page >= totalPages - 2) {\n startPage = totalPages - 4;\n }\n\n if (startPage > 2) {\n pages.push(\"ellipsis-start\");\n }\n\n for (let i = startPage; i <= endPage; i += 1) {\n pages.push(i);\n }\n\n if (endPage < totalPages - 1) {\n pages.push(\"ellipsis-end\");\n }\n\n pages.push(totalPages);\n }\n\n return pages;\n }, [page, totalPages]);\n\n if (!onPageChange || totalPages === 0) {\n return null;\n }\n\n const shouldShowPageSizeSelector =\n showPageSizeSelector && typeof onPageSizeChange === \"function\";\n\n return (\n <div\n className={`flex items-center justify-between px-3 py-3 gap-4 bg-[white] rounded-b-lg ${className}`}\n >\n <div className=\"flex items-center gap-4\">\n {shouldShowPageSizeSelector && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-gray-700\">Rows per page:</span>\n <select\n className=\"border border-gray-300 rounded px-2 py-1 text-sm bg-white text-gray-700\"\n value={pageSize}\n onChange={(e) => onPageSizeChange(Number(e.target.value))}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n )}\n {showRecordCounter && (\n <span className=\"text-sm text-gray-700\">\n Showing{\" \"}\n {currentRecordEnd > 0\n ? `${currentRecordStart}-${currentRecordEnd}`\n : 0}{\" \"}\n of {totalCount}\n </span>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n <button\n className=\"px-3 py-1.5 rounded-lg bg-white border border-gray-300 text-gray-700 flex items-center justify-center hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white text-sm font-medium\"\n onClick={() => onPageChange(page - 1)}\n disabled={page <= 1}\n aria-label=\"Previous page\"\n >\n &lt; Previous\n </button>\n\n {pageNumbers.map((pageNum, index) => {\n if (pageNum === \"ellipsis-start\" || pageNum === \"ellipsis-end\") {\n return (\n <button\n key={`ellipsis-${index}`}\n className=\"w-8 h-8 rounded-full text-gray-500 flex items-center justify-center cursor-default\"\n disabled\n aria-hidden=\"true\"\n >\n <span className=\"text-xs\">...</span>\n </button>\n );\n }\n\n const isActive = pageNum === page;\n\n return (\n <button\n key={pageNum}\n className={`w-8 h-8 rounded-full flex items-center justify-center transition-colors text-sm font-medium ${\n isActive\n ? \"bg-green-2 text-black font-semibold\"\n : \"bg-white border border-gray-300 text-gray-700 hover:bg-gray-50\"\n }`}\n onClick={() => onPageChange(pageNum)}\n aria-label={`Go to page ${pageNum}`}\n aria-current={isActive ? \"page\" : undefined}\n >\n {pageNum}\n </button>\n );\n })}\n\n <button\n className=\"px-3 py-1.5 rounded-lg bg-white border border-gray-300 text-gray-700 flex items-center justify-center hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white text-sm font-medium\"\n onClick={() => onPageChange(page + 1)}\n disabled={page >= totalPages}\n aria-label=\"Next page\"\n >\n Next &gt;\n </button>\n </div>\n </div>\n );\n}\n\n","\"use client\";\n\nimport React from \"react\";\n\nfunction formatLabel(key) {\n return key\n .replace(/([A-Z])/g, \" $1\")\n .replace(/_/g, \" \")\n .replace(/^./, (str) => str.toUpperCase())\n .trim();\n}\n\nexport default function CustomFilterChips({\n filters,\n onChange,\n onClear,\n customFilters = [],\n fieldOptions = {},\n className = \"\",\n}) {\n const chips = [];\n\n const getDisplayLabel = (key, value) => {\n if (fieldOptions[key] && Array.isArray(fieldOptions[key])) {\n const option = fieldOptions[key].find((opt) => {\n const optValue =\n typeof opt === \"object\"\n ? opt.value !== undefined\n ? opt.value\n : opt.id\n : opt;\n return optValue === value || String(optValue) === String(value);\n });\n if (option) {\n return typeof option === \"object\"\n ? option.label || option.value || String(option)\n : String(option);\n }\n }\n return String(value);\n };\n\n Object.entries(filters || {}).forEach(([key, value]) => {\n if (Array.isArray(value) && value.length) {\n const displayValues = value.map((v) => getDisplayLabel(key, v));\n chips.push({\n key,\n label: `${formatLabel(key)}: ${displayValues.join(\", \")}`,\n onRemove: () => {\n const newFilters = { ...filters };\n delete newFilters[key];\n onChange(newFilters);\n },\n });\n } else if (typeof value === \"string\" && value.trim() !== \"\") {\n const displayValue = getDisplayLabel(key, value);\n chips.push({\n key,\n label: `${formatLabel(key)}: ${displayValue}`,\n onRemove: () => onChange({ ...filters, [key]: \"\" }),\n });\n }\n });\n\n Object.entries(filters || {}).forEach(([key, value]) => {\n if (\n value &&\n typeof value === \"object\" &&\n (value.min != null || value.max != null)\n ) {\n const label =\n value.min != null && value.max != null\n ? `${formatLabel(key)}: ${value.min}\\u2013${value.max}`\n : value.min != null\n ? `${formatLabel(key)} \\u2265 ${value.min}`\n : `${formatLabel(key)} \\u2264 ${value.max}`;\n chips.push({\n key,\n label,\n onRemove: () => {\n const newFilters = { ...filters };\n delete newFilters[key];\n onChange(newFilters);\n },\n });\n }\n });\n\n (customFilters || []).forEach((filterObj) => {\n if (filterObj && filterObj.active) {\n chips.push({\n key: filterObj.key,\n label: filterObj.label,\n onRemove: filterObj.onRemove,\n });\n }\n });\n\n if (!chips.length) return null;\n\n return (\n <div className={`flex flex-wrap items-center gap-4 ${className}`}>\n {chips.map((c) => (\n <span\n key={c.key}\n className=\"bg-white h-10 border border-gray-200 rounded-[14px] px-3 flex items-center text-[13px] transition-colors\"\n >\n {c.label}\n <button\n onClick={c.onRemove}\n className=\"ml-2 text-gray-500 hover:text-black transition-colors flex items-center\"\n type=\"button\"\n >\n <span className=\"relative top-[-1px]\">×</span>\n </button>\n </span>\n ))}\n <button\n onClick={onClear}\n className=\"h-10 px-3.5 rounded-[14px] bg-white border border-gray-200 text-red-600 transition-colors flex items-center justify-center gap-1.5\"\n type=\"button\"\n >\n <span className=\"text-red-600\">×</span>\n <span>Clear</span>\n </button>\n </div>\n );\n}\n\n"],"names":["Pagination","page","pageSize","totalCount","currentDataLength","onPageChange","onPageSizeChange","pageSizeOptions","className","showRecordCounter","showPageSizeSelector","totalPages","currentRecordStart","currentRecordEnd","pageNumbers","useMemo","pages","i","startPage","endPage","shouldShowPageSizeSelector","jsxs","jsx","e","size","pageNum","index","isActive","formatLabel","key","str","CustomFilterChips","filters","onChange","onClear","customFilters","fieldOptions","chips","getDisplayLabel","value","option","opt","optValue","displayValues","v","newFilters","displayValue","label","filterObj","c"],"mappings":"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"}
1
+ {"version":3,"file":"CustomFilterChips.cjs.js","sources":["../src/components/common/Pagination.jsx","../src/components/common/CustomFilterChips.jsx"],"sourcesContent":[" \"use client\";\n\nimport React, { useMemo } from \"react\";\n\n/**\n * Pagination Component\n * @param {number} page - current page number (1-based)\n * @param {number} pageSize - rows per page\n * @param {number} totalCount - total row count (for pagination)\n * @param {number} currentDataLength - length of current page's data array\n * @param {function} onPageChange - function(newPage) for pagination\n * @param {function} onPageSizeChange - function(newPageSize) for changing rows/page\n * @param {Array} pageSizeOptions - array of page size options (default: [10, 20, 50, 100])\n * @param {string} className - additional CSS classes\n * @param {boolean} showRecordCounter - whether to show the record counter (default: true)\n * @param {boolean} showPageSizeSelector - whether to show the page size selector (default: true)\n */\nexport default function Pagination({\n page = 1,\n pageSize = 10,\n totalCount = 0,\n currentDataLength = 0,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = [10, 20, 50, 100],\n className = \"\",\n showRecordCounter = true,\n showPageSizeSelector = true,\n}) {\n const totalPages = Math.ceil(totalCount / pageSize);\n\n const currentRecordStart = (page - 1) * pageSize + 1;\n const currentRecordEnd = Math.min(\n (page - 1) * pageSize + currentDataLength,\n totalCount\n );\n\n const pageNumbers = useMemo(() => {\n if (totalPages <= 1) return [];\n\n const pages = [];\n const maxVisiblePages = 7;\n\n if (totalPages <= maxVisiblePages) {\n for (let i = 1; i <= totalPages; i += 1) {\n pages.push(i);\n }\n } else {\n pages.push(1);\n\n let startPage = Math.max(2, page - 2);\n let endPage = Math.min(totalPages - 1, page + 2);\n\n if (page <= 3) {\n endPage = 5;\n }\n\n if (page >= totalPages - 2) {\n startPage = totalPages - 4;\n }\n\n if (startPage > 2) {\n pages.push(\"ellipsis-start\");\n }\n\n for (let i = startPage; i <= endPage; i += 1) {\n pages.push(i);\n }\n\n if (endPage < totalPages - 1) {\n pages.push(\"ellipsis-end\");\n }\n\n pages.push(totalPages);\n }\n\n return pages;\n }, [page, totalPages]);\n\n if (!onPageChange || totalPages === 0) {\n return null;\n }\n\n const shouldShowPageSizeSelector =\n showPageSizeSelector && typeof onPageSizeChange === \"function\";\n\n return (\n <div\n className={`flex items-center justify-between px-3 py-3 gap-4 bg-[white] rounded-b-lg ${className}`}\n >\n <div className=\"flex items-center gap-4\">\n {shouldShowPageSizeSelector && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-gray-700\">Rows per page:</span>\n <select\n className=\"border border-gray-300 rounded px-2 py-1 text-sm bg-white text-gray-700\"\n value={pageSize}\n onChange={(e) => onPageSizeChange(Number(e.target.value))}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n )}\n {showRecordCounter && (\n <span className=\"text-sm text-gray-700\">\n Showing{\" \"}\n {currentRecordEnd > 0\n ? `${currentRecordStart}-${currentRecordEnd}`\n : 0}{\" \"}\n of {totalCount}\n </span>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n <button\n className=\"px-3 py-1.5 rounded-lg bg-white border border-gray-300 text-gray-700 flex items-center justify-center hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white text-sm font-medium\"\n onClick={() => onPageChange(page - 1)}\n disabled={page <= 1}\n aria-label=\"Previous page\"\n >\n &lt; Previous\n </button>\n\n {pageNumbers.map((pageNum, index) => {\n if (pageNum === \"ellipsis-start\" || pageNum === \"ellipsis-end\") {\n return (\n <button\n key={`ellipsis-${index}`}\n className=\"w-8 h-8 rounded-full text-gray-500 flex items-center justify-center cursor-default\"\n disabled\n aria-hidden=\"true\"\n >\n <span className=\"text-xs\">...</span>\n </button>\n );\n }\n\n const isActive = pageNum === page;\n\n return (\n <button\n key={pageNum}\n className={`w-8 h-8 rounded-full flex items-center justify-center transition-colors text-sm font-medium ${\n isActive\n ? \"bg-green-2 text-black font-semibold\"\n : \"bg-white border border-gray-300 text-gray-700 hover:bg-gray-50\"\n }`}\n onClick={() => onPageChange(pageNum)}\n aria-label={`Go to page ${pageNum}`}\n aria-current={isActive ? \"page\" : undefined}\n >\n {pageNum}\n </button>\n );\n })}\n\n <button\n className=\"px-3 py-1.5 rounded-lg bg-white border border-gray-300 text-gray-700 flex items-center justify-center hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white text-sm font-medium\"\n onClick={() => onPageChange(page + 1)}\n disabled={page >= totalPages}\n aria-label=\"Next page\"\n >\n Next &gt;\n </button>\n </div>\n </div>\n );\n}\n\n","\"use client\";\n\nimport React from \"react\";\n\nfunction formatLabel(key) {\n return key\n .replace(/([A-Z])/g, \" $1\")\n .replace(/_/g, \" \")\n .replace(/^./, (str) => str.toUpperCase())\n .trim();\n}\n\nexport default function CustomFilterChips({\n filters,\n onChange,\n onClear,\n customFilters = [],\n fieldOptions = {},\n className = \"\",\n}) {\n const chips = [];\n\n const getDisplayLabel = (key, value) => {\n if (fieldOptions[key] && Array.isArray(fieldOptions[key])) {\n const option = fieldOptions[key].find((opt) => {\n const optValue =\n typeof opt === \"object\"\n ? opt.value !== undefined\n ? opt.value\n : opt.id\n : opt;\n return optValue === value || String(optValue) === String(value);\n });\n if (option) {\n return typeof option === \"object\"\n ? option.label || option.value || String(option)\n : String(option);\n }\n }\n return String(value);\n };\n\n Object.entries(filters || {}).forEach(([key, value]) => {\n if (Array.isArray(value) && value.length) {\n const displayValues = value.map((v) => getDisplayLabel(key, v));\n chips.push({\n key,\n label: `${formatLabel(key)}: ${displayValues.join(\", \")}`,\n onRemove: () => {\n const newFilters = { ...filters };\n delete newFilters[key];\n onChange(newFilters);\n },\n });\n } else if (typeof value === \"string\" && value.trim() !== \"\") {\n const displayValue = getDisplayLabel(key, value);\n const label =\n key === \"contact_id\"\n ? \"Contact Id\"\n : `${formatLabel(key)}: ${displayValue}`;\n chips.push({\n key,\n label,\n onRemove: () => onChange({ ...filters, [key]: \"\" }),\n });\n }\n });\n\n Object.entries(filters || {}).forEach(([key, value]) => {\n if (\n value &&\n typeof value === \"object\" &&\n (value.min != null || value.max != null)\n ) {\n const label =\n value.min != null && value.max != null\n ? `${formatLabel(key)}: ${value.min}\\u2013${value.max}`\n : value.min != null\n ? `${formatLabel(key)} \\u2265 ${value.min}`\n : `${formatLabel(key)} \\u2264 ${value.max}`;\n chips.push({\n key,\n label,\n onRemove: () => {\n const newFilters = { ...filters };\n delete newFilters[key];\n onChange(newFilters);\n },\n });\n }\n });\n\n (customFilters || []).forEach((filterObj) => {\n if (filterObj && filterObj.active) {\n chips.push({\n key: filterObj.key,\n label: filterObj.label,\n onRemove: filterObj.onRemove,\n });\n }\n });\n\n if (!chips.length) return null;\n\n return (\n <div className={`flex flex-wrap items-center gap-4 ${className}`}>\n {chips.map((c) => (\n <span\n key={c.key}\n className=\"bg-white h-10 border border-gray-200 rounded-[14px] px-3 flex items-center text-[13px] transition-colors\"\n >\n {c.label}\n <button\n onClick={c.onRemove}\n className=\"ml-2 text-gray-500 hover:text-black transition-colors flex items-center\"\n type=\"button\"\n >\n <span className=\"relative top-[-1px]\">×</span>\n </button>\n </span>\n ))}\n <button\n onClick={onClear}\n className=\"h-10 px-3.5 rounded-[14px] bg-white border border-gray-200 text-red-600 transition-colors flex items-center justify-center gap-1.5\"\n type=\"button\"\n >\n <span className=\"text-red-600\">×</span>\n <span>Clear</span>\n </button>\n </div>\n );\n}\n\n"],"names":["Pagination","page","pageSize","totalCount","currentDataLength","onPageChange","onPageSizeChange","pageSizeOptions","className","showRecordCounter","showPageSizeSelector","totalPages","currentRecordStart","currentRecordEnd","pageNumbers","useMemo","pages","i","startPage","endPage","shouldShowPageSizeSelector","jsxs","jsx","e","size","pageNum","index","isActive","formatLabel","key","str","CustomFilterChips","filters","onChange","onClear","customFilters","fieldOptions","chips","getDisplayLabel","value","option","opt","optValue","displayValues","v","newFilters","displayValue","label","filterObj","c"],"mappings":"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"}
@@ -147,10 +147,10 @@ function P({
147
147
  }
148
148
  });
149
149
  } else if (typeof t == "string" && t.trim() !== "") {
150
- const r = p(e, t);
150
+ const r = p(e, t), i = e === "contact_id" ? "Contact Id" : `${h(e)}: ${r}`;
151
151
  d.push({
152
152
  key: e,
153
- label: `${h(e)}: ${r}`,
153
+ label: i,
154
154
  onRemove: () => o({ ...n, [e]: "" })
155
155
  });
156
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CustomFilterChips.es.js","sources":["../src/components/common/Pagination.jsx","../src/components/common/CustomFilterChips.jsx"],"sourcesContent":[" \"use client\";\n\nimport React, { useMemo } from \"react\";\n\n/**\n * Pagination Component\n * @param {number} page - current page number (1-based)\n * @param {number} pageSize - rows per page\n * @param {number} totalCount - total row count (for pagination)\n * @param {number} currentDataLength - length of current page's data array\n * @param {function} onPageChange - function(newPage) for pagination\n * @param {function} onPageSizeChange - function(newPageSize) for changing rows/page\n * @param {Array} pageSizeOptions - array of page size options (default: [10, 20, 50, 100])\n * @param {string} className - additional CSS classes\n * @param {boolean} showRecordCounter - whether to show the record counter (default: true)\n * @param {boolean} showPageSizeSelector - whether to show the page size selector (default: true)\n */\nexport default function Pagination({\n page = 1,\n pageSize = 10,\n totalCount = 0,\n currentDataLength = 0,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = [10, 20, 50, 100],\n className = \"\",\n showRecordCounter = true,\n showPageSizeSelector = true,\n}) {\n const totalPages = Math.ceil(totalCount / pageSize);\n\n const currentRecordStart = (page - 1) * pageSize + 1;\n const currentRecordEnd = Math.min(\n (page - 1) * pageSize + currentDataLength,\n totalCount\n );\n\n const pageNumbers = useMemo(() => {\n if (totalPages <= 1) return [];\n\n const pages = [];\n const maxVisiblePages = 7;\n\n if (totalPages <= maxVisiblePages) {\n for (let i = 1; i <= totalPages; i += 1) {\n pages.push(i);\n }\n } else {\n pages.push(1);\n\n let startPage = Math.max(2, page - 2);\n let endPage = Math.min(totalPages - 1, page + 2);\n\n if (page <= 3) {\n endPage = 5;\n }\n\n if (page >= totalPages - 2) {\n startPage = totalPages - 4;\n }\n\n if (startPage > 2) {\n pages.push(\"ellipsis-start\");\n }\n\n for (let i = startPage; i <= endPage; i += 1) {\n pages.push(i);\n }\n\n if (endPage < totalPages - 1) {\n pages.push(\"ellipsis-end\");\n }\n\n pages.push(totalPages);\n }\n\n return pages;\n }, [page, totalPages]);\n\n if (!onPageChange || totalPages === 0) {\n return null;\n }\n\n const shouldShowPageSizeSelector =\n showPageSizeSelector && typeof onPageSizeChange === \"function\";\n\n return (\n <div\n className={`flex items-center justify-between px-3 py-3 gap-4 bg-[white] rounded-b-lg ${className}`}\n >\n <div className=\"flex items-center gap-4\">\n {shouldShowPageSizeSelector && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-gray-700\">Rows per page:</span>\n <select\n className=\"border border-gray-300 rounded px-2 py-1 text-sm bg-white text-gray-700\"\n value={pageSize}\n onChange={(e) => onPageSizeChange(Number(e.target.value))}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n )}\n {showRecordCounter && (\n <span className=\"text-sm text-gray-700\">\n Showing{\" \"}\n {currentRecordEnd > 0\n ? `${currentRecordStart}-${currentRecordEnd}`\n : 0}{\" \"}\n of {totalCount}\n </span>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n <button\n className=\"px-3 py-1.5 rounded-lg bg-white border border-gray-300 text-gray-700 flex items-center justify-center hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white text-sm font-medium\"\n onClick={() => onPageChange(page - 1)}\n disabled={page <= 1}\n aria-label=\"Previous page\"\n >\n &lt; Previous\n </button>\n\n {pageNumbers.map((pageNum, index) => {\n if (pageNum === \"ellipsis-start\" || pageNum === \"ellipsis-end\") {\n return (\n <button\n key={`ellipsis-${index}`}\n className=\"w-8 h-8 rounded-full text-gray-500 flex items-center justify-center cursor-default\"\n disabled\n aria-hidden=\"true\"\n >\n <span className=\"text-xs\">...</span>\n </button>\n );\n }\n\n const isActive = pageNum === page;\n\n return (\n <button\n key={pageNum}\n className={`w-8 h-8 rounded-full flex items-center justify-center transition-colors text-sm font-medium ${\n isActive\n ? \"bg-green-2 text-black font-semibold\"\n : \"bg-white border border-gray-300 text-gray-700 hover:bg-gray-50\"\n }`}\n onClick={() => onPageChange(pageNum)}\n aria-label={`Go to page ${pageNum}`}\n aria-current={isActive ? \"page\" : undefined}\n >\n {pageNum}\n </button>\n );\n })}\n\n <button\n className=\"px-3 py-1.5 rounded-lg bg-white border border-gray-300 text-gray-700 flex items-center justify-center hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white text-sm font-medium\"\n onClick={() => onPageChange(page + 1)}\n disabled={page >= totalPages}\n aria-label=\"Next page\"\n >\n Next &gt;\n </button>\n </div>\n </div>\n );\n}\n\n","\"use client\";\n\nimport React from \"react\";\n\nfunction formatLabel(key) {\n return key\n .replace(/([A-Z])/g, \" $1\")\n .replace(/_/g, \" \")\n .replace(/^./, (str) => str.toUpperCase())\n .trim();\n}\n\nexport default function CustomFilterChips({\n filters,\n onChange,\n onClear,\n customFilters = [],\n fieldOptions = {},\n className = \"\",\n}) {\n const chips = [];\n\n const getDisplayLabel = (key, value) => {\n if (fieldOptions[key] && Array.isArray(fieldOptions[key])) {\n const option = fieldOptions[key].find((opt) => {\n const optValue =\n typeof opt === \"object\"\n ? opt.value !== undefined\n ? opt.value\n : opt.id\n : opt;\n return optValue === value || String(optValue) === String(value);\n });\n if (option) {\n return typeof option === \"object\"\n ? option.label || option.value || String(option)\n : String(option);\n }\n }\n return String(value);\n };\n\n Object.entries(filters || {}).forEach(([key, value]) => {\n if (Array.isArray(value) && value.length) {\n const displayValues = value.map((v) => getDisplayLabel(key, v));\n chips.push({\n key,\n label: `${formatLabel(key)}: ${displayValues.join(\", \")}`,\n onRemove: () => {\n const newFilters = { ...filters };\n delete newFilters[key];\n onChange(newFilters);\n },\n });\n } else if (typeof value === \"string\" && value.trim() !== \"\") {\n const displayValue = getDisplayLabel(key, value);\n chips.push({\n key,\n label: `${formatLabel(key)}: ${displayValue}`,\n onRemove: () => onChange({ ...filters, [key]: \"\" }),\n });\n }\n });\n\n Object.entries(filters || {}).forEach(([key, value]) => {\n if (\n value &&\n typeof value === \"object\" &&\n (value.min != null || value.max != null)\n ) {\n const label =\n value.min != null && value.max != null\n ? `${formatLabel(key)}: ${value.min}\\u2013${value.max}`\n : value.min != null\n ? `${formatLabel(key)} \\u2265 ${value.min}`\n : `${formatLabel(key)} \\u2264 ${value.max}`;\n chips.push({\n key,\n label,\n onRemove: () => {\n const newFilters = { ...filters };\n delete newFilters[key];\n onChange(newFilters);\n },\n });\n }\n });\n\n (customFilters || []).forEach((filterObj) => {\n if (filterObj && filterObj.active) {\n chips.push({\n key: filterObj.key,\n label: filterObj.label,\n onRemove: filterObj.onRemove,\n });\n }\n });\n\n if (!chips.length) return null;\n\n return (\n <div className={`flex flex-wrap items-center gap-4 ${className}`}>\n {chips.map((c) => (\n <span\n key={c.key}\n className=\"bg-white h-10 border border-gray-200 rounded-[14px] px-3 flex items-center text-[13px] transition-colors\"\n >\n {c.label}\n <button\n onClick={c.onRemove}\n className=\"ml-2 text-gray-500 hover:text-black transition-colors flex items-center\"\n type=\"button\"\n >\n <span className=\"relative top-[-1px]\">×</span>\n </button>\n </span>\n ))}\n <button\n onClick={onClear}\n className=\"h-10 px-3.5 rounded-[14px] bg-white border border-gray-200 text-red-600 transition-colors flex items-center justify-center gap-1.5\"\n type=\"button\"\n >\n <span className=\"text-red-600\">×</span>\n <span>Clear</span>\n </button>\n </div>\n );\n}\n\n"],"names":["Pagination","page","pageSize","totalCount","currentDataLength","onPageChange","onPageSizeChange","pageSizeOptions","className","showRecordCounter","showPageSizeSelector","totalPages","currentRecordStart","currentRecordEnd","pageNumbers","useMemo","pages","i","startPage","endPage","shouldShowPageSizeSelector","jsxs","jsx","e","size","pageNum","index","isActive","formatLabel","key","str","CustomFilterChips","filters","onChange","onClear","customFilters","fieldOptions","chips","getDisplayLabel","value","option","opt","optValue","displayValues","v","newFilters","displayValue","label","filterObj","c"],"mappings":"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"}
1
+ {"version":3,"file":"CustomFilterChips.es.js","sources":["../src/components/common/Pagination.jsx","../src/components/common/CustomFilterChips.jsx"],"sourcesContent":[" \"use client\";\n\nimport React, { useMemo } from \"react\";\n\n/**\n * Pagination Component\n * @param {number} page - current page number (1-based)\n * @param {number} pageSize - rows per page\n * @param {number} totalCount - total row count (for pagination)\n * @param {number} currentDataLength - length of current page's data array\n * @param {function} onPageChange - function(newPage) for pagination\n * @param {function} onPageSizeChange - function(newPageSize) for changing rows/page\n * @param {Array} pageSizeOptions - array of page size options (default: [10, 20, 50, 100])\n * @param {string} className - additional CSS classes\n * @param {boolean} showRecordCounter - whether to show the record counter (default: true)\n * @param {boolean} showPageSizeSelector - whether to show the page size selector (default: true)\n */\nexport default function Pagination({\n page = 1,\n pageSize = 10,\n totalCount = 0,\n currentDataLength = 0,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = [10, 20, 50, 100],\n className = \"\",\n showRecordCounter = true,\n showPageSizeSelector = true,\n}) {\n const totalPages = Math.ceil(totalCount / pageSize);\n\n const currentRecordStart = (page - 1) * pageSize + 1;\n const currentRecordEnd = Math.min(\n (page - 1) * pageSize + currentDataLength,\n totalCount\n );\n\n const pageNumbers = useMemo(() => {\n if (totalPages <= 1) return [];\n\n const pages = [];\n const maxVisiblePages = 7;\n\n if (totalPages <= maxVisiblePages) {\n for (let i = 1; i <= totalPages; i += 1) {\n pages.push(i);\n }\n } else {\n pages.push(1);\n\n let startPage = Math.max(2, page - 2);\n let endPage = Math.min(totalPages - 1, page + 2);\n\n if (page <= 3) {\n endPage = 5;\n }\n\n if (page >= totalPages - 2) {\n startPage = totalPages - 4;\n }\n\n if (startPage > 2) {\n pages.push(\"ellipsis-start\");\n }\n\n for (let i = startPage; i <= endPage; i += 1) {\n pages.push(i);\n }\n\n if (endPage < totalPages - 1) {\n pages.push(\"ellipsis-end\");\n }\n\n pages.push(totalPages);\n }\n\n return pages;\n }, [page, totalPages]);\n\n if (!onPageChange || totalPages === 0) {\n return null;\n }\n\n const shouldShowPageSizeSelector =\n showPageSizeSelector && typeof onPageSizeChange === \"function\";\n\n return (\n <div\n className={`flex items-center justify-between px-3 py-3 gap-4 bg-[white] rounded-b-lg ${className}`}\n >\n <div className=\"flex items-center gap-4\">\n {shouldShowPageSizeSelector && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-gray-700\">Rows per page:</span>\n <select\n className=\"border border-gray-300 rounded px-2 py-1 text-sm bg-white text-gray-700\"\n value={pageSize}\n onChange={(e) => onPageSizeChange(Number(e.target.value))}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n )}\n {showRecordCounter && (\n <span className=\"text-sm text-gray-700\">\n Showing{\" \"}\n {currentRecordEnd > 0\n ? `${currentRecordStart}-${currentRecordEnd}`\n : 0}{\" \"}\n of {totalCount}\n </span>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n <button\n className=\"px-3 py-1.5 rounded-lg bg-white border border-gray-300 text-gray-700 flex items-center justify-center hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white text-sm font-medium\"\n onClick={() => onPageChange(page - 1)}\n disabled={page <= 1}\n aria-label=\"Previous page\"\n >\n &lt; Previous\n </button>\n\n {pageNumbers.map((pageNum, index) => {\n if (pageNum === \"ellipsis-start\" || pageNum === \"ellipsis-end\") {\n return (\n <button\n key={`ellipsis-${index}`}\n className=\"w-8 h-8 rounded-full text-gray-500 flex items-center justify-center cursor-default\"\n disabled\n aria-hidden=\"true\"\n >\n <span className=\"text-xs\">...</span>\n </button>\n );\n }\n\n const isActive = pageNum === page;\n\n return (\n <button\n key={pageNum}\n className={`w-8 h-8 rounded-full flex items-center justify-center transition-colors text-sm font-medium ${\n isActive\n ? \"bg-green-2 text-black font-semibold\"\n : \"bg-white border border-gray-300 text-gray-700 hover:bg-gray-50\"\n }`}\n onClick={() => onPageChange(pageNum)}\n aria-label={`Go to page ${pageNum}`}\n aria-current={isActive ? \"page\" : undefined}\n >\n {pageNum}\n </button>\n );\n })}\n\n <button\n className=\"px-3 py-1.5 rounded-lg bg-white border border-gray-300 text-gray-700 flex items-center justify-center hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white text-sm font-medium\"\n onClick={() => onPageChange(page + 1)}\n disabled={page >= totalPages}\n aria-label=\"Next page\"\n >\n Next &gt;\n </button>\n </div>\n </div>\n );\n}\n\n","\"use client\";\n\nimport React from \"react\";\n\nfunction formatLabel(key) {\n return key\n .replace(/([A-Z])/g, \" $1\")\n .replace(/_/g, \" \")\n .replace(/^./, (str) => str.toUpperCase())\n .trim();\n}\n\nexport default function CustomFilterChips({\n filters,\n onChange,\n onClear,\n customFilters = [],\n fieldOptions = {},\n className = \"\",\n}) {\n const chips = [];\n\n const getDisplayLabel = (key, value) => {\n if (fieldOptions[key] && Array.isArray(fieldOptions[key])) {\n const option = fieldOptions[key].find((opt) => {\n const optValue =\n typeof opt === \"object\"\n ? opt.value !== undefined\n ? opt.value\n : opt.id\n : opt;\n return optValue === value || String(optValue) === String(value);\n });\n if (option) {\n return typeof option === \"object\"\n ? option.label || option.value || String(option)\n : String(option);\n }\n }\n return String(value);\n };\n\n Object.entries(filters || {}).forEach(([key, value]) => {\n if (Array.isArray(value) && value.length) {\n const displayValues = value.map((v) => getDisplayLabel(key, v));\n chips.push({\n key,\n label: `${formatLabel(key)}: ${displayValues.join(\", \")}`,\n onRemove: () => {\n const newFilters = { ...filters };\n delete newFilters[key];\n onChange(newFilters);\n },\n });\n } else if (typeof value === \"string\" && value.trim() !== \"\") {\n const displayValue = getDisplayLabel(key, value);\n const label =\n key === \"contact_id\"\n ? \"Contact Id\"\n : `${formatLabel(key)}: ${displayValue}`;\n chips.push({\n key,\n label,\n onRemove: () => onChange({ ...filters, [key]: \"\" }),\n });\n }\n });\n\n Object.entries(filters || {}).forEach(([key, value]) => {\n if (\n value &&\n typeof value === \"object\" &&\n (value.min != null || value.max != null)\n ) {\n const label =\n value.min != null && value.max != null\n ? `${formatLabel(key)}: ${value.min}\\u2013${value.max}`\n : value.min != null\n ? `${formatLabel(key)} \\u2265 ${value.min}`\n : `${formatLabel(key)} \\u2264 ${value.max}`;\n chips.push({\n key,\n label,\n onRemove: () => {\n const newFilters = { ...filters };\n delete newFilters[key];\n onChange(newFilters);\n },\n });\n }\n });\n\n (customFilters || []).forEach((filterObj) => {\n if (filterObj && filterObj.active) {\n chips.push({\n key: filterObj.key,\n label: filterObj.label,\n onRemove: filterObj.onRemove,\n });\n }\n });\n\n if (!chips.length) return null;\n\n return (\n <div className={`flex flex-wrap items-center gap-4 ${className}`}>\n {chips.map((c) => (\n <span\n key={c.key}\n className=\"bg-white h-10 border border-gray-200 rounded-[14px] px-3 flex items-center text-[13px] transition-colors\"\n >\n {c.label}\n <button\n onClick={c.onRemove}\n className=\"ml-2 text-gray-500 hover:text-black transition-colors flex items-center\"\n type=\"button\"\n >\n <span className=\"relative top-[-1px]\">×</span>\n </button>\n </span>\n ))}\n <button\n onClick={onClear}\n className=\"h-10 px-3.5 rounded-[14px] bg-white border border-gray-200 text-red-600 transition-colors flex items-center justify-center gap-1.5\"\n type=\"button\"\n >\n <span className=\"text-red-600\">×</span>\n <span>Clear</span>\n </button>\n </div>\n );\n}\n\n"],"names":["Pagination","page","pageSize","totalCount","currentDataLength","onPageChange","onPageSizeChange","pageSizeOptions","className","showRecordCounter","showPageSizeSelector","totalPages","currentRecordStart","currentRecordEnd","pageNumbers","useMemo","pages","i","startPage","endPage","shouldShowPageSizeSelector","jsxs","jsx","e","size","pageNum","index","isActive","formatLabel","key","str","CustomFilterChips","filters","onChange","onClear","customFilters","fieldOptions","chips","getDisplayLabel","value","option","opt","optValue","displayValues","v","newFilters","displayValue","label","filterObj","c"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("react/jsx-runtime"),f=require("react"),m=require("lucide-react");function v({open:t,onClose:n,title:r,subtitle:i,children:a,footer:o,width:g=515,height:p=762,toggleLabel:d,toggleChecked:x,onToggle:c,topOffset:l}){const y=f.useRef(null),u=l!=null,h=typeof l=="number"?`${l}px`:l;return f.useEffect(()=>{if(!t)return;const s=b=>{b.key==="Escape"&&(n==null||n())};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[t,n]),t?e.jsxs(e.Fragment,{children:[e.jsx("div",{onClick:n,style:{position:"fixed",inset:0,zIndex:1200,background:"rgba(0, 0, 0, 0.20)"}}),e.jsxs("div",{ref:y,style:{position:"fixed",top:u?h:"50%",right:0,transform:u?"none":"translateY(-50%)",zIndex:1201,display:"flex",width:g,height:p,maxHeight:u?`calc(100vh - ${h})`:"100vh",padding:"20px",flexDirection:"column",alignItems:"flex-start",gap:"20px",borderRadius:"12px 0 0 12px",background:"#FFF",boxShadow:"648px 0 100px 0 rgba(0, 0, 0, 0.20)"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",flexShrink:0},children:[e.jsx("h2",{style:{fontSize:"24px",fontWeight:600,fontStyle:"normal",color:"var(--Grey-3, #252525)",margin:0,lineHeight:"normal"},children:r}),e.jsx("button",{onClick:n,style:{display:"flex",alignItems:"center",justifyContent:"center",width:"28px",height:"28px",border:"none",background:"transparent",color:"var(--Grey-Strong, #808183)",cursor:"pointer",borderRadius:"4px",transition:"background 0.15s ease"},onMouseEnter:s=>{s.currentTarget.style.background="#ECEEF2"},onMouseLeave:s=>{s.currentTarget.style.background="transparent"},children:e.jsx(m.X,{size:20,strokeWidth:2})})]}),e.jsx("div",{style:{width:"100%",height:"1px",background:"#ECEEF2",flexShrink:0}}),(i||d)&&e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",gap:"12px",flexShrink:0},children:[i&&e.jsx("p",{style:{fontSize:"13px",fontStyle:"normal",fontWeight:400,lineHeight:"140%",color:"#0B0B0B",margin:0,flex:1},children:i}),d&&e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexShrink:0},children:[e.jsx("button",{onClick:()=>c==null?void 0:c(!x),style:{position:"relative",width:"40px",height:"22px",borderRadius:"11px",border:"none",background:x?"var(--Base-Strong, #0B0B0B)":"var(--Base-Faint, #D9D9D9)",cursor:"pointer",transition:"background 0.2s ease",padding:0,flexShrink:0},children:e.jsx("div",{style:{position:"absolute",top:"2px",left:x?"20px":"2px",width:"18px",height:"18px",borderRadius:"50%",background:"#FFF",transition:"left 0.2s ease",boxShadow:"0 1px 3px rgba(0,0,0,0.15)"}})}),e.jsx("span",{style:{fontSize:"13px",fontWeight:500,color:"var(--Base-Strong, #1E1E1E)",lineHeight:1.4},children:d})]})]}),e.jsx("div",{style:{flex:1,width:"100%",overflowY:"auto",display:"flex",flexDirection:"column",gap:"16px",minHeight:0},children:a}),o&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{width:"100%",height:"1px",background:"#ECEEF2",flexShrink:0}}),e.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"flex-end",gap:"12px",width:"100%",flexShrink:0},children:o})]})]})]}):null}function S({label:t,variant:n="secondary",onClick:r,disabled:i}){const a=n==="primary";return e.jsx("button",{onClick:r,disabled:i,style:{display:"flex",height:"36px",padding:"0 20px",justifyContent:"center",alignItems:"center",gap:"8px",borderRadius:"6px",border:a?"none":"1px solid #D9D9D9",background:a?"var(--Base-Strong, #0B0B0B)":"var(--Base-White, #FFF)",color:a?"#FFF":"var(--Base-Strong, #1E1E1E)",fontSize:"16px",fontWeight:600,cursor:i?"default":"pointer",opacity:i?.5:1,transition:"all 0.15s ease"},onMouseEnter:o=>{!i&&!a&&(o.currentTarget.style.background="#ECEEF2")},onMouseLeave:o=>{!i&&!a&&(o.currentTarget.style.background="var(--Base-White, #FFF)")},children:t})}function k({children:t,htmlFor:n}){return e.jsx("label",{htmlFor:n,style:{display:"block",color:"var(--Base-Strong, #2E3236)",fontSize:"16px",fontStyle:"normal",fontWeight:400,lineHeight:"normal",marginBottom:"6px"},children:t})}function j(t){return e.jsx("input",{...t,style:{width:"100%",padding:"10px 12px",borderRadius:"6px",border:"1px solid #D9D9D9",color:"var(--Base-Strong, #2E3236)",fontSize:"16px",fontStyle:"normal",fontWeight:400,lineHeight:"normal",outline:"none",boxSizing:"border-box",background:"#FFF",transition:"border-color 0.15s ease",...t.style},onFocus:n=>{var r;n.currentTarget.style.borderColor="#808183",(r=t.onFocus)==null||r.call(t,n)},onBlur:n=>{var r;n.currentTarget.style.borderColor="#D9D9D9",(r=t.onBlur)==null||r.call(t,n)}})}exports.DrawerButton=S;exports.DrawerInput=j;exports.DrawerLabel=k;exports.SideDrawer=v;
2
+ //# sourceMappingURL=SideDrawer.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideDrawer.cjs.js","sources":["../src/components/common/SideDrawer.jsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\nimport { X } from \"lucide-react\";\n\n/**\n * SideDrawer — slide-in panel from the right edge.\n *\n * Props:\n * - open boolean Whether the drawer is visible\n * - onClose function Close callback\n * - title string Header title\n * - subtitle string Optional description below the divider\n * - children ReactNode Drawer body content\n * - footer ReactNode Optional fixed footer (e.g. Cancel/Save buttons)\n * - width number|string Drawer width (default 515)\n * - height number|string Drawer height (default 762)\n * - toggleLabel string Optional toggle label (right side of subtitle row)\n * - toggleChecked boolean Toggle state\n * - onToggle function Toggle callback\n * - topOffset number|string Optional top offset (e.g. below navbar)\n */\nexport default function SideDrawer({\n open,\n onClose,\n title,\n subtitle,\n children,\n footer,\n width = 515,\n height = 762,\n toggleLabel,\n toggleChecked,\n onToggle,\n topOffset,\n}) {\n const drawerRef = useRef(null);\n const hasTopOffset = topOffset !== undefined && topOffset !== null;\n const normalizedTopOffset = typeof topOffset === \"number\" ? `${topOffset}px` : topOffset;\n\n // Close on Escape key\n useEffect(() => {\n if (!open) return;\n const handleKey = (e) => {\n if (e.key === \"Escape\") onClose?.();\n };\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [open, onClose]);\n\n if (!open) return null;\n\n return (\n <>\n {/* Backdrop */}\n <div\n onClick={onClose}\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 1200,\n background: \"rgba(0, 0, 0, 0.20)\",\n }}\n />\n\n {/* Drawer panel */}\n <div\n ref={drawerRef}\n style={{\n position: \"fixed\",\n top: hasTopOffset ? normalizedTopOffset : \"50%\",\n right: 0,\n transform: hasTopOffset ? \"none\" : \"translateY(-50%)\",\n zIndex: 1201,\n display: \"flex\",\n width,\n height,\n maxHeight: hasTopOffset ? `calc(100vh - ${normalizedTopOffset})` : \"100vh\",\n padding: \"20px\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: \"20px\",\n borderRadius: \"12px 0 0 12px\",\n background: \"#FFF\",\n boxShadow: \"648px 0 100px 0 rgba(0, 0, 0, 0.20)\",\n }}\n >\n {/* Header: Title + Close */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n flexShrink: 0,\n }}\n >\n <h2\n style={{\n fontSize: \"24px\",\n fontWeight: 600,\n fontStyle: \"normal\",\n color: \"var(--Grey-3, #252525)\",\n margin: 0,\n lineHeight: \"normal\",\n }}\n >\n {title}\n </h2>\n <button\n onClick={onClose}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"28px\",\n height: \"28px\",\n border: \"none\",\n background: \"transparent\",\n color: \"var(--Grey-Strong, #808183)\",\n cursor: \"pointer\",\n borderRadius: \"4px\",\n transition: \"background 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"#ECEEF2\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n }}\n >\n <X size={20} strokeWidth={2} />\n </button>\n </div>\n\n {/* Divider */}\n <div\n style={{\n width: \"100%\",\n height: \"1px\",\n background: \"#ECEEF2\",\n flexShrink: 0,\n }}\n />\n\n {/* Subtitle row with optional toggle */}\n {(subtitle || toggleLabel) && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n gap: \"12px\",\n flexShrink: 0,\n }}\n >\n {subtitle && (\n <p\n style={{\n fontSize: \"13px\",\n fontStyle: \"normal\",\n fontWeight: 400,\n lineHeight: \"140%\",\n color: \"#0B0B0B\",\n margin: 0,\n flex: 1,\n }}\n >\n {subtitle}\n </p>\n )}\n {toggleLabel && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n flexShrink: 0,\n }}\n >\n {/* Toggle switch */}\n <button\n onClick={() => onToggle?.(!toggleChecked)}\n style={{\n position: \"relative\",\n width: \"40px\",\n height: \"22px\",\n borderRadius: \"11px\",\n border: \"none\",\n background: toggleChecked\n ? \"var(--Base-Strong, #0B0B0B)\"\n : \"var(--Base-Faint, #D9D9D9)\",\n cursor: \"pointer\",\n transition: \"background 0.2s ease\",\n padding: 0,\n flexShrink: 0,\n }}\n >\n <div\n style={{\n position: \"absolute\",\n top: \"2px\",\n left: toggleChecked ? \"20px\" : \"2px\",\n width: \"18px\",\n height: \"18px\",\n borderRadius: \"50%\",\n background: \"#FFF\",\n transition: \"left 0.2s ease\",\n boxShadow: \"0 1px 3px rgba(0,0,0,0.15)\",\n }}\n />\n </button>\n <span\n style={{\n fontSize: \"13px\",\n fontWeight: 500,\n color: \"var(--Base-Strong, #1E1E1E)\",\n lineHeight: 1.4,\n }}\n >\n {toggleLabel}\n </span>\n </div>\n )}\n </div>\n )}\n\n {/* Body content — scrollable */}\n <div\n style={{\n flex: 1,\n width: \"100%\",\n overflowY: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\",\n minHeight: 0,\n }}\n >\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <>\n <div\n style={{\n width: \"100%\",\n height: \"1px\",\n background: \"#ECEEF2\",\n flexShrink: 0,\n }}\n />\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n gap: \"12px\",\n width: \"100%\",\n flexShrink: 0,\n }}\n >\n {footer}\n </div>\n </>\n )}\n </div>\n </>\n );\n}\n\n/**\n * DrawerButton — standard button for use in SideDrawer footer.\n *\n * Props:\n * - label string\n * - variant \"primary\" | \"secondary\" (default \"secondary\")\n * - onClick function\n * - disabled boolean\n */\nexport function DrawerButton({\n label,\n variant = \"secondary\",\n onClick,\n disabled,\n}) {\n const isPrimary = variant === \"primary\";\n\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n style={{\n display: \"flex\",\n height: \"36px\",\n padding: \"0 20px\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: \"8px\",\n borderRadius: \"6px\",\n border: isPrimary ? \"none\" : \"1px solid #D9D9D9\",\n background: isPrimary\n ? \"var(--Base-Strong, #0B0B0B)\"\n : \"var(--Base-White, #FFF)\",\n color: isPrimary ? \"#FFF\" : \"var(--Base-Strong, #1E1E1E)\",\n fontSize: \"16px\",\n fontWeight: 600,\n cursor: disabled ? \"default\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n transition: \"all 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n if (!disabled && !isPrimary) {\n e.currentTarget.style.background = \"#ECEEF2\";\n }\n }}\n onMouseLeave={(e) => {\n if (!disabled && !isPrimary) {\n e.currentTarget.style.background = \"var(--Base-White, #FFF)\";\n }\n }}\n >\n {label}\n </button>\n );\n}\n\n/**\n * DrawerLabel — form label for use inside SideDrawer.\n *\n * Props:\n * - children ReactNode\n * - htmlFor string\n */\nexport function DrawerLabel({ children, htmlFor }) {\n return (\n <label\n htmlFor={htmlFor}\n style={{\n display: \"block\",\n color: \"var(--Base-Strong, #2E3236)\",\n fontSize: \"16px\",\n fontStyle: \"normal\",\n fontWeight: 400,\n lineHeight: \"normal\",\n marginBottom: \"6px\",\n }}\n >\n {children}\n </label>\n );\n}\n\n/**\n * DrawerInput — text input for use inside SideDrawer.\n *\n * Props:\n * - All standard <input> props (type, placeholder, value, onChange, etc.)\n */\nexport function DrawerInput(props) {\n return (\n <input\n {...props}\n style={{\n width: \"100%\",\n padding: \"10px 12px\",\n borderRadius: \"6px\",\n border: \"1px solid #D9D9D9\",\n color: \"var(--Base-Strong, #2E3236)\",\n fontSize: \"16px\",\n fontStyle: \"normal\",\n fontWeight: 400,\n lineHeight: \"normal\",\n outline: \"none\",\n boxSizing: \"border-box\",\n background: \"#FFF\",\n transition: \"border-color 0.15s ease\",\n ...props.style,\n }}\n onFocus={(e) => {\n e.currentTarget.style.borderColor = \"#808183\";\n props.onFocus?.(e);\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = \"#D9D9D9\";\n props.onBlur?.(e);\n }}\n />\n );\n}\n"],"names":["SideDrawer","open","onClose","title","subtitle","children","footer","width","height","toggleLabel","toggleChecked","onToggle","topOffset","drawerRef","useRef","hasTopOffset","normalizedTopOffset","useEffect","handleKey","e","jsxs","Fragment","jsx","X","DrawerButton","label","variant","onClick","disabled","isPrimary","DrawerLabel","htmlFor","DrawerInput","props","_a"],"mappings":"+FAsBA,SAAwBA,EAAW,CACjC,KAAAC,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,SAAAC,EACA,OAAAC,EACA,MAAAC,EAAQ,IACR,OAAAC,EAAS,IACT,YAAAC,EACA,cAAAC,EACA,SAAAC,EACA,UAAAC,CACF,EAAG,CACK,MAAAC,EAAYC,SAAO,IAAI,EACvBC,EAA0CH,GAAc,KACxDI,EAAsB,OAAOJ,GAAc,SAAW,GAAGA,CAAS,KAAOA,EAY/E,OATAK,EAAAA,UAAU,IAAM,CACd,GAAI,CAAChB,EAAM,OACL,MAAAiB,EAAaC,GAAM,CACnBA,EAAE,MAAQ,WAAoBjB,GAAA,MAAAA,IAAA,EAE3B,gBAAA,iBAAiB,UAAWgB,CAAS,EACvC,IAAM,SAAS,oBAAoB,UAAWA,CAAS,CAAA,EAC7D,CAACjB,EAAMC,CAAO,CAAC,EAEbD,EAKDmB,EAAA,KAAAC,WAAA,CAAA,SAAA,CAAAC,EAAA,IAAC,MAAA,CACC,QAASpB,EACT,MAAO,CACL,SAAU,QACV,MAAO,EACP,OAAQ,KACR,WAAY,qBACd,CAAA,CACF,EAGAkB,EAAA,KAAC,MAAA,CACC,IAAKP,EACL,MAAO,CACL,SAAU,QACV,IAAKE,EAAeC,EAAsB,MAC1C,MAAO,EACP,UAAWD,EAAe,OAAS,mBACnC,OAAQ,KACR,QAAS,OACT,MAAAR,EACA,OAAAC,EACA,UAAWO,EAAe,gBAAgBC,CAAmB,IAAM,QACnE,QAAS,OACT,cAAe,SACf,WAAY,aACZ,IAAK,OACL,aAAc,gBACd,WAAY,OACZ,UAAW,qCACb,EAGA,SAAA,CAAAI,EAAA,KAAC,MAAA,CACC,MAAO,CACL,QAAS,OACT,WAAY,SACZ,eAAgB,gBAChB,MAAO,OACP,WAAY,CACd,EAEA,SAAA,CAAAE,EAAA,IAAC,KAAA,CACC,MAAO,CACL,SAAU,OACV,WAAY,IACZ,UAAW,SACX,MAAO,yBACP,OAAQ,EACR,WAAY,QACd,EAEC,SAAAnB,CAAA,CACH,EACAmB,EAAA,IAAC,SAAA,CACC,QAASpB,EACT,MAAO,CACL,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,MAAO,OACP,OAAQ,OACR,OAAQ,OACR,WAAY,cACZ,MAAO,8BACP,OAAQ,UACR,aAAc,MACd,WAAY,uBACd,EACA,aAAeiB,GAAM,CACjBA,EAAA,cAAc,MAAM,WAAa,SACrC,EACA,aAAeA,GAAM,CACjBA,EAAA,cAAc,MAAM,WAAa,aACrC,EAEA,SAACG,EAAA,IAAAC,IAAA,CAAE,KAAM,GAAI,YAAa,EAAG,CAAA,CAC/B,CAAA,CAAA,CACF,EAGAD,EAAA,IAAC,MAAA,CACC,MAAO,CACL,MAAO,OACP,OAAQ,MACR,WAAY,UACZ,WAAY,CACd,CAAA,CACF,GAGElB,GAAYK,IACZW,EAAA,KAAC,MAAA,CACC,MAAO,CACL,QAAS,OACT,WAAY,SACZ,eAAgB,gBAChB,MAAO,OACP,IAAK,OACL,WAAY,CACd,EAEC,SAAA,CACChB,GAAAkB,EAAA,IAAC,IAAA,CACC,MAAO,CACL,SAAU,OACV,UAAW,SACX,WAAY,IACZ,WAAY,OACZ,MAAO,UACP,OAAQ,EACR,KAAM,CACR,EAEC,SAAAlB,CAAA,CACH,EAEDK,GACCW,EAAA,KAAC,MAAA,CACC,MAAO,CACL,QAAS,OACT,WAAY,SACZ,IAAK,MACL,WAAY,CACd,EAGA,SAAA,CAAAE,EAAA,IAAC,SAAA,CACC,QAAS,IAAMX,GAAA,YAAAA,EAAW,CAACD,GAC3B,MAAO,CACL,SAAU,WACV,MAAO,OACP,OAAQ,OACR,aAAc,OACd,OAAQ,OACR,WAAYA,EACR,8BACA,6BACJ,OAAQ,UACR,WAAY,uBACZ,QAAS,EACT,WAAY,CACd,EAEA,SAAAY,EAAA,IAAC,MAAA,CACC,MAAO,CACL,SAAU,WACV,IAAK,MACL,KAAMZ,EAAgB,OAAS,MAC/B,MAAO,OACP,OAAQ,OACR,aAAc,MACd,WAAY,OACZ,WAAY,iBACZ,UAAW,4BACb,CAAA,CACF,CAAA,CACF,EACAY,EAAA,IAAC,OAAA,CACC,MAAO,CACL,SAAU,OACV,WAAY,IACZ,MAAO,8BACP,WAAY,GACd,EAEC,SAAAb,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,EAIFa,EAAA,IAAC,MAAA,CACC,MAAO,CACL,KAAM,EACN,MAAO,OACP,UAAW,OACX,QAAS,OACT,cAAe,SACf,IAAK,OACL,UAAW,CACb,EAEC,SAAAjB,CAAA,CACH,EAGCC,GAEGc,EAAA,KAAAC,WAAA,CAAA,SAAA,CAAAC,EAAA,IAAC,MAAA,CACC,MAAO,CACL,MAAO,OACP,OAAQ,MACR,WAAY,UACZ,WAAY,CACd,CAAA,CACF,EACAA,EAAA,IAAC,MAAA,CACC,MAAO,CACL,QAAS,OACT,WAAY,SACZ,eAAgB,WAChB,IAAK,OACL,MAAO,OACP,WAAY,CACd,EAEC,SAAAhB,CAAA,CACH,CAAA,EACF,CAAA,CAAA,CAEJ,CACF,CAAA,CAAA,EA3NgB,IA6NpB,CAWO,SAASkB,EAAa,CAC3B,MAAAC,EACA,QAAAC,EAAU,YACV,QAAAC,EACA,SAAAC,CACF,EAAG,CACD,MAAMC,EAAYH,IAAY,UAG5B,OAAAJ,EAAA,IAAC,SAAA,CACC,QAAAK,EACA,SAAAC,EACA,MAAO,CACL,QAAS,OACT,OAAQ,OACR,QAAS,SACT,eAAgB,SAChB,WAAY,SACZ,IAAK,MACL,aAAc,MACd,OAAQC,EAAY,OAAS,oBAC7B,WAAYA,EACR,8BACA,0BACJ,MAAOA,EAAY,OAAS,8BAC5B,SAAU,OACV,WAAY,IACZ,OAAQD,EAAW,UAAY,UAC/B,QAASA,EAAW,GAAM,EAC1B,WAAY,gBACd,EACA,aAAeT,GAAM,CACf,CAACS,GAAY,CAACC,IACdV,EAAA,cAAc,MAAM,WAAa,UAEvC,EACA,aAAeA,GAAM,CACf,CAACS,GAAY,CAACC,IACdV,EAAA,cAAc,MAAM,WAAa,0BAEvC,EAEC,SAAAM,CAAA,CAAA,CAGP,CASO,SAASK,EAAY,CAAE,SAAAzB,EAAU,QAAA0B,GAAW,CAE/C,OAAAT,EAAA,IAAC,QAAA,CACC,QAAAS,EACA,MAAO,CACL,QAAS,QACT,MAAO,8BACP,SAAU,OACV,UAAW,SACX,WAAY,IACZ,WAAY,SACZ,aAAc,KAChB,EAEC,SAAA1B,CAAA,CAAA,CAGP,CAQO,SAAS2B,EAAYC,EAAO,CAE/B,OAAAX,EAAA,IAAC,QAAA,CACE,GAAGW,EACJ,MAAO,CACL,MAAO,OACP,QAAS,YACT,aAAc,MACd,OAAQ,oBACR,MAAO,8BACP,SAAU,OACV,UAAW,SACX,WAAY,IACZ,WAAY,SACZ,QAAS,OACT,UAAW,aACX,WAAY,OACZ,WAAY,0BACZ,GAAGA,EAAM,KACX,EACA,QAAUd,GAAM,OACZA,EAAA,cAAc,MAAM,YAAc,WACpCe,EAAAD,EAAM,UAAN,MAAAC,EAAA,KAAAD,EAAgBd,EAClB,EACA,OAASA,GAAM,OACXA,EAAA,cAAc,MAAM,YAAc,WACpCe,EAAAD,EAAM,SAAN,MAAAC,EAAA,KAAAD,EAAed,EACjB,CAAA,CAAA,CAGN"}
@@ -0,0 +1,358 @@
1
+ import { jsxs as d, Fragment as p, jsx as t } from "react/jsx-runtime";
2
+ import { useRef as v, useEffect as S } from "react";
3
+ import { X as k } from "lucide-react";
4
+ function B({
5
+ open: e,
6
+ onClose: n,
7
+ title: r,
8
+ subtitle: i,
9
+ children: o,
10
+ footer: a,
11
+ width: g = 515,
12
+ height: y = 762,
13
+ toggleLabel: c,
14
+ toggleChecked: x,
15
+ onToggle: u,
16
+ topOffset: s
17
+ }) {
18
+ const b = v(null), h = s != null, f = typeof s == "number" ? `${s}px` : s;
19
+ return S(() => {
20
+ if (!e)
21
+ return;
22
+ const l = (m) => {
23
+ m.key === "Escape" && (n == null || n());
24
+ };
25
+ return document.addEventListener("keydown", l), () => document.removeEventListener("keydown", l);
26
+ }, [e, n]), e ? /* @__PURE__ */ d(p, { children: [
27
+ /* @__PURE__ */ t(
28
+ "div",
29
+ {
30
+ onClick: n,
31
+ style: {
32
+ position: "fixed",
33
+ inset: 0,
34
+ zIndex: 1200,
35
+ background: "rgba(0, 0, 0, 0.20)"
36
+ }
37
+ }
38
+ ),
39
+ /* @__PURE__ */ d(
40
+ "div",
41
+ {
42
+ ref: b,
43
+ style: {
44
+ position: "fixed",
45
+ top: h ? f : "50%",
46
+ right: 0,
47
+ transform: h ? "none" : "translateY(-50%)",
48
+ zIndex: 1201,
49
+ display: "flex",
50
+ width: g,
51
+ height: y,
52
+ maxHeight: h ? `calc(100vh - ${f})` : "100vh",
53
+ padding: "20px",
54
+ flexDirection: "column",
55
+ alignItems: "flex-start",
56
+ gap: "20px",
57
+ borderRadius: "12px 0 0 12px",
58
+ background: "#FFF",
59
+ boxShadow: "648px 0 100px 0 rgba(0, 0, 0, 0.20)"
60
+ },
61
+ children: [
62
+ /* @__PURE__ */ d(
63
+ "div",
64
+ {
65
+ style: {
66
+ display: "flex",
67
+ alignItems: "center",
68
+ justifyContent: "space-between",
69
+ width: "100%",
70
+ flexShrink: 0
71
+ },
72
+ children: [
73
+ /* @__PURE__ */ t(
74
+ "h2",
75
+ {
76
+ style: {
77
+ fontSize: "24px",
78
+ fontWeight: 600,
79
+ fontStyle: "normal",
80
+ color: "var(--Grey-3, #252525)",
81
+ margin: 0,
82
+ lineHeight: "normal"
83
+ },
84
+ children: r
85
+ }
86
+ ),
87
+ /* @__PURE__ */ t(
88
+ "button",
89
+ {
90
+ onClick: n,
91
+ style: {
92
+ display: "flex",
93
+ alignItems: "center",
94
+ justifyContent: "center",
95
+ width: "28px",
96
+ height: "28px",
97
+ border: "none",
98
+ background: "transparent",
99
+ color: "var(--Grey-Strong, #808183)",
100
+ cursor: "pointer",
101
+ borderRadius: "4px",
102
+ transition: "background 0.15s ease"
103
+ },
104
+ onMouseEnter: (l) => {
105
+ l.currentTarget.style.background = "#ECEEF2";
106
+ },
107
+ onMouseLeave: (l) => {
108
+ l.currentTarget.style.background = "transparent";
109
+ },
110
+ children: /* @__PURE__ */ t(k, { size: 20, strokeWidth: 2 })
111
+ }
112
+ )
113
+ ]
114
+ }
115
+ ),
116
+ /* @__PURE__ */ t(
117
+ "div",
118
+ {
119
+ style: {
120
+ width: "100%",
121
+ height: "1px",
122
+ background: "#ECEEF2",
123
+ flexShrink: 0
124
+ }
125
+ }
126
+ ),
127
+ (i || c) && /* @__PURE__ */ d(
128
+ "div",
129
+ {
130
+ style: {
131
+ display: "flex",
132
+ alignItems: "center",
133
+ justifyContent: "space-between",
134
+ width: "100%",
135
+ gap: "12px",
136
+ flexShrink: 0
137
+ },
138
+ children: [
139
+ i && /* @__PURE__ */ t(
140
+ "p",
141
+ {
142
+ style: {
143
+ fontSize: "13px",
144
+ fontStyle: "normal",
145
+ fontWeight: 400,
146
+ lineHeight: "140%",
147
+ color: "#0B0B0B",
148
+ margin: 0,
149
+ flex: 1
150
+ },
151
+ children: i
152
+ }
153
+ ),
154
+ c && /* @__PURE__ */ d(
155
+ "div",
156
+ {
157
+ style: {
158
+ display: "flex",
159
+ alignItems: "center",
160
+ gap: "8px",
161
+ flexShrink: 0
162
+ },
163
+ children: [
164
+ /* @__PURE__ */ t(
165
+ "button",
166
+ {
167
+ onClick: () => u == null ? void 0 : u(!x),
168
+ style: {
169
+ position: "relative",
170
+ width: "40px",
171
+ height: "22px",
172
+ borderRadius: "11px",
173
+ border: "none",
174
+ background: x ? "var(--Base-Strong, #0B0B0B)" : "var(--Base-Faint, #D9D9D9)",
175
+ cursor: "pointer",
176
+ transition: "background 0.2s ease",
177
+ padding: 0,
178
+ flexShrink: 0
179
+ },
180
+ children: /* @__PURE__ */ t(
181
+ "div",
182
+ {
183
+ style: {
184
+ position: "absolute",
185
+ top: "2px",
186
+ left: x ? "20px" : "2px",
187
+ width: "18px",
188
+ height: "18px",
189
+ borderRadius: "50%",
190
+ background: "#FFF",
191
+ transition: "left 0.2s ease",
192
+ boxShadow: "0 1px 3px rgba(0,0,0,0.15)"
193
+ }
194
+ }
195
+ )
196
+ }
197
+ ),
198
+ /* @__PURE__ */ t(
199
+ "span",
200
+ {
201
+ style: {
202
+ fontSize: "13px",
203
+ fontWeight: 500,
204
+ color: "var(--Base-Strong, #1E1E1E)",
205
+ lineHeight: 1.4
206
+ },
207
+ children: c
208
+ }
209
+ )
210
+ ]
211
+ }
212
+ )
213
+ ]
214
+ }
215
+ ),
216
+ /* @__PURE__ */ t(
217
+ "div",
218
+ {
219
+ style: {
220
+ flex: 1,
221
+ width: "100%",
222
+ overflowY: "auto",
223
+ display: "flex",
224
+ flexDirection: "column",
225
+ gap: "16px",
226
+ minHeight: 0
227
+ },
228
+ children: o
229
+ }
230
+ ),
231
+ a && /* @__PURE__ */ d(p, { children: [
232
+ /* @__PURE__ */ t(
233
+ "div",
234
+ {
235
+ style: {
236
+ width: "100%",
237
+ height: "1px",
238
+ background: "#ECEEF2",
239
+ flexShrink: 0
240
+ }
241
+ }
242
+ ),
243
+ /* @__PURE__ */ t(
244
+ "div",
245
+ {
246
+ style: {
247
+ display: "flex",
248
+ alignItems: "center",
249
+ justifyContent: "flex-end",
250
+ gap: "12px",
251
+ width: "100%",
252
+ flexShrink: 0
253
+ },
254
+ children: a
255
+ }
256
+ )
257
+ ] })
258
+ ]
259
+ }
260
+ )
261
+ ] }) : null;
262
+ }
263
+ function D({
264
+ label: e,
265
+ variant: n = "secondary",
266
+ onClick: r,
267
+ disabled: i
268
+ }) {
269
+ const o = n === "primary";
270
+ return /* @__PURE__ */ t(
271
+ "button",
272
+ {
273
+ onClick: r,
274
+ disabled: i,
275
+ style: {
276
+ display: "flex",
277
+ height: "36px",
278
+ padding: "0 20px",
279
+ justifyContent: "center",
280
+ alignItems: "center",
281
+ gap: "8px",
282
+ borderRadius: "6px",
283
+ border: o ? "none" : "1px solid #D9D9D9",
284
+ background: o ? "var(--Base-Strong, #0B0B0B)" : "var(--Base-White, #FFF)",
285
+ color: o ? "#FFF" : "var(--Base-Strong, #1E1E1E)",
286
+ fontSize: "16px",
287
+ fontWeight: 600,
288
+ cursor: i ? "default" : "pointer",
289
+ opacity: i ? 0.5 : 1,
290
+ transition: "all 0.15s ease"
291
+ },
292
+ onMouseEnter: (a) => {
293
+ !i && !o && (a.currentTarget.style.background = "#ECEEF2");
294
+ },
295
+ onMouseLeave: (a) => {
296
+ !i && !o && (a.currentTarget.style.background = "var(--Base-White, #FFF)");
297
+ },
298
+ children: e
299
+ }
300
+ );
301
+ }
302
+ function z({ children: e, htmlFor: n }) {
303
+ return /* @__PURE__ */ t(
304
+ "label",
305
+ {
306
+ htmlFor: n,
307
+ style: {
308
+ display: "block",
309
+ color: "var(--Base-Strong, #2E3236)",
310
+ fontSize: "16px",
311
+ fontStyle: "normal",
312
+ fontWeight: 400,
313
+ lineHeight: "normal",
314
+ marginBottom: "6px"
315
+ },
316
+ children: e
317
+ }
318
+ );
319
+ }
320
+ function I(e) {
321
+ return /* @__PURE__ */ t(
322
+ "input",
323
+ {
324
+ ...e,
325
+ style: {
326
+ width: "100%",
327
+ padding: "10px 12px",
328
+ borderRadius: "6px",
329
+ border: "1px solid #D9D9D9",
330
+ color: "var(--Base-Strong, #2E3236)",
331
+ fontSize: "16px",
332
+ fontStyle: "normal",
333
+ fontWeight: 400,
334
+ lineHeight: "normal",
335
+ outline: "none",
336
+ boxSizing: "border-box",
337
+ background: "#FFF",
338
+ transition: "border-color 0.15s ease",
339
+ ...e.style
340
+ },
341
+ onFocus: (n) => {
342
+ var r;
343
+ n.currentTarget.style.borderColor = "#808183", (r = e.onFocus) == null || r.call(e, n);
344
+ },
345
+ onBlur: (n) => {
346
+ var r;
347
+ n.currentTarget.style.borderColor = "#D9D9D9", (r = e.onBlur) == null || r.call(e, n);
348
+ }
349
+ }
350
+ );
351
+ }
352
+ export {
353
+ D,
354
+ B as S,
355
+ z as a,
356
+ I as b
357
+ };
358
+ //# sourceMappingURL=SideDrawer.es.js.map