{"version":3,"file":"index.mjs","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/assets/svg.tsx","../src/listing/components/table-change-layout.tsx","../src/listing/libs/hooks/useFullScreen.tsx","../src/listing/components/viewmore/index.tsx","../src/listing/components/sorting-modal.tsx/sorting-item.tsx","../src/listing/components/sorting-modal.tsx/index.tsx","../src/listing/components/column-visibility-modal/column-list-item.tsx","../src/listing/types/common.ts","../src/listing/components/column-visibility-modal/index.tsx","../src/listing/libs/utils/debounce.ts","../src/listing/components/search/style.ts","../src/listing/components/search/index.tsx","../src/listing/libs/hooks/useOutsideClick.tsx","../src/listing/components/topbar/index.tsx","../src/listing/components/pagination/default/pagination.styles.ts","../src/listing/components/pagination/default/index.tsx","../src/kanban/constants/kanban-constants.ts","../src/listing/libs/utils/common.ts","../src/listing/components/table-body/table-body.styles.ts","../src/listing/components/table-body/table-body-dnd-cell.tsx","../src/listing/components/inputs/checkbox/index.tsx","../src/listing/components/table-body/table-body.tsx","../src/listing/components/table-head/table-head.styles.ts","../src/listing/components/table-head/table-head-pin.tsx","../src/listing/components/table-head/table-head-popover.tsx","../src/listing/components/table-head/table-head-resizer.tsx","../src/listing/components/table-head/table-head-dnd-cell.tsx","../src/listing/components/table-head/table-head.tsx","../src/listing/components/table.tsx","../src/listing/components/table-dnd.tsx","../src/listing/components/index-table.tsx","../src/listing/libs/hooks/useCraftTable.tsx","../src/listing/libs/hooks/useCraftTableFilterSettings.tsx","../src/listing/components/tabs/tabs.styles.ts","../src/listing/components/tabs/index.tsx","../src/listing/components/common/confirm-modal/index.tsx","../src/listing/components/filter/components/tabs/custom-tab-panel.tsx","../src/listing/components/filter/components/tabs/index.tsx","../src/listing/components/filter/components/forms/components/Dropdown.tsx","../src/listing/components/filter/style.ts","../src/listing/components/filter/components/search/index.tsx","../src/listing/components/filter/components/forms/components/empty-list.tsx","../src/listing/components/filter/components/forms/components/filter-criteria-entity-list.tsx","../src/listing/components/common/loader/loader.tsx","../src/listing/components/filter/components/forms/components/filter-criteria-list.tsx","../src/listing/components/filter/components/forms/components/styles.tsx","../src/listing/components/filter/components/forms/components/Textfield.tsx","../src/listing/components/filter/components/forms/components/Date.tsx","../src/listing/components/filter/components/forms/components/Multi-Select.tsx","../src/listing/components/filter/components/forms/utils/filter-date-input-resolver.tsx","../src/listing/components/filter/components/forms/components/Filter-criteria.tsx","../src/listing/libs/hooks/useElementWidth.tsx","../src/listing/components/filter/components/forms/index.tsx","../src/listing/components/filter/components/main-filter.tsx","../src/listing/components/filter/components/saved-edit-filter.tsx","../src/listing/components/filter/components/saved-filter.tsx","../src/listing/components/filter/components/attributes-filter.tsx","../src/listing/libs/utils/deep-merge-objects.ts","../src/listing/components/filter/components/single-filter-rendering.tsx","../src/listing/components/common/saved-filter-modal/index.tsx","../src/listing/components/filter/index.tsx","../src/listing/components/table-settings/tabs/styles.ts","../src/listing/components/table-settings/tabs/vertical/index.tsx","../src/listing/components/table-settings/tabs/vertical/custom-tab-panel.tsx","../src/listing/components/table-settings/common/draggable-listitem.tsx","../src/listing/components/table-settings/style.ts","../src/listing/components/table-settings/common/listing-values.tsx","../src/listing/components/table-settings/common/info-alert.tsx","../src/listing/components/table-settings/components/quick-tab.tsx","../src/listing/components/table-settings/components/toggle-button-switch.tsx","../src/listing/components/table-settings/constants.ts","../src/listing/components/table-settings/tabs/horizontal/index.tsx","../src/listing/components/table-settings/components/column.tsx","../src/listing/components/table-settings/components/sorting.tsx","../src/listing/components/table-settings/components/custom-dialog.tsx","../src/listing/components/table-settings/components/custom-button.tsx","../src/listing/components/table-settings/components/lane.tsx","../src/listing/components/table-settings/components/swim-lane.tsx","../src/listing/components/table-settings/index.tsx","../src/kanban/styles/styles.tsx","../src/kanban/index.tsx"],"sourcesContent":["function styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nexport default styleInject;\n","import React from \"react\";\r\n\r\nexport const SortIcon = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    fill=\"none\"\r\n    viewBox=\"0 0 24 24\"\r\n    strokeWidth={1.5}\r\n    stroke=\"currentColor\"\r\n  >\r\n    <path\r\n      strokeLinecap=\"round\"\r\n      strokeLinejoin=\"round\"\r\n      d=\"M3 7.5L7.5 3m0 0L12 7.5M7.5 3v13.5m13.5 0L16.5 21m0 0L12 16.5m4.5 4.5V7.5\"\r\n    />\r\n  </svg>\r\n);\r\n\r\nexport const GreenDot = () => (\r\n  <svg\r\n    width=\"8\"\r\n    height=\"8\"\r\n    viewBox=\"0 0 8 8\"\r\n    fill=\"none\"\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n  >\r\n    <circle cx=\"4\" cy=\"4\" r=\"4\" fill=\"#5CD961\" />\r\n  </svg>\r\n);\r\n\r\nexport const RedDot = () => (\r\n  <svg\r\n    width=\"8\"\r\n    height=\"8\"\r\n    viewBox=\"0 0 8 8\"\r\n    fill=\"none\"\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n  >\r\n    <circle cx=\"4\" cy=\"4\" r=\"4\" fill=\"#F94144\" />\r\n  </svg>\r\n);\r\n\r\nexport const BlueDot = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"8\"\r\n    height=\"8\"\r\n    viewBox=\"0 0 8 8\"\r\n    fill=\"none\"\r\n  >\r\n    <circle cx=\"4\" cy=\"4\" r=\"4\" fill=\"#04769A\" />\r\n  </svg>\r\n);\r\n\r\nexport const UpArrow = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    viewBox=\"0 0 24 24\"\r\n    width=\"14\"\r\n    height=\"14\"\r\n    fill=\"none\"\r\n    stroke=\"currentColor\"\r\n    strokeWidth=\"2\"\r\n    strokeLinecap=\"round\"\r\n    strokeLinejoin=\"round\"\r\n  >\r\n    <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\r\n    <polyline points=\"19 12 12 5 5 12\"></polyline>\r\n  </svg>\r\n);\r\n\r\nexport const DownArrow = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    viewBox=\"0 0 24 24\"\r\n    width=\"14\"\r\n    height=\"14\"\r\n    fill=\"none\"\r\n    stroke=\"currentColor\"\r\n    strokeWidth=\"2\"\r\n    strokeLinecap=\"round\"\r\n    strokeLinejoin=\"round\"\r\n  >\r\n    <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\"></line>\r\n    <polyline points=\"5 12 12 19 19 12\"></polyline>\r\n  </svg>\r\n);\r\n\r\nexport const TableFirstPageIcon = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"24\"\r\n    height=\"24\"\r\n    viewBox=\"0 0 24 24\"\r\n    aria-hidden=\"true\"\r\n    role=\"presentation\"\r\n  >\r\n    <path d=\"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\"></path>\r\n    <path fill=\"none\" d=\"M24 24H0V0h24v24z\"></path>\r\n  </svg>\r\n);\r\n\r\nexport const TablePreviousPageIcon = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"24\"\r\n    height=\"24\"\r\n    viewBox=\"0 0 24 24\"\r\n    aria-hidden=\"true\"\r\n    role=\"presentation\"\r\n  >\r\n    <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"></path>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\r\n  </svg>\r\n);\r\n\r\nexport const TableNextPageIcon = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"24\"\r\n    height=\"24\"\r\n    viewBox=\"0 0 24 24\"\r\n    aria-hidden=\"true\"\r\n    role=\"presentation\"\r\n  >\r\n    <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"></path>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\r\n  </svg>\r\n);\r\n\r\nexport const TableLastPageIcon = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"24\"\r\n    height=\"24\"\r\n    viewBox=\"0 0 24 24\"\r\n    aria-hidden=\"true\"\r\n    role=\"presentation\"\r\n  >\r\n    <path d=\"M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\"></path>\r\n    <path fill=\"none\" d=\"M0 0h24v24H0V0z\"></path>\r\n  </svg>\r\n);\r\n\r\nexport const VerticalThreeDots = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"14\"\r\n    height=\"14\"\r\n    fill=\"currentColor\"\r\n    className=\"bi bi-three-dots-vertical\"\r\n    viewBox=\"0 0 16 16\"\r\n  >\r\n    <path d=\"M9.5 13a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0\" />\r\n  </svg>\r\n);\r\n\r\nexport const ArrowDownUp = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"12\"\r\n    height=\"12\"\r\n    fill=\"currentColor\"\r\n    className=\"bi bi-arrow-down-up\"\r\n    viewBox=\"0 0 16 16\"\r\n  >\r\n    <path\r\n      fillRule=\"evenodd\"\r\n      d=\"M11.5 15a.5.5 0 0 0 .5-.5V2.707l3.146 3.147a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L11 2.707V14.5a.5.5 0 0 0 .5.5m-7-14a.5.5 0 0 1 .5.5v11.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L4 13.293V1.5a.5.5 0 0 1 .5-.5\"\r\n    />\r\n  </svg>\r\n);\r\nexport const EditIcon = () => (\r\n  <svg\r\n    width=\"18\"\r\n    height=\"12\"\r\n    viewBox=\"0 0 12 12\"\r\n    fill=\"none\"\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n  >\r\n    <path\r\n      d=\"M1.33331 10.6663H2.17431L8.99865 3.84201L8.15765 3.00101L1.33331 9.82534V10.6663ZM0.93598 11.6663C0.765202 11.6663 0.622091 11.6086 0.506646 11.493C0.391091 11.3776 0.333313 11.2345 0.333313 11.0637V9.90867C0.333313 9.74612 0.364535 9.59118 0.42698 9.44384C0.489313 9.29651 0.575202 9.16812 0.684646 9.05868L9.12698 0.620174C9.22776 0.528619 9.33904 0.457897 9.46081 0.408008C9.5827 0.358008 9.71048 0.333008 9.84415 0.333008C9.97781 0.333008 10.1073 0.35673 10.2325 0.404175C10.3578 0.451619 10.4688 0.527063 10.5653 0.630507L11.3795 1.45484C11.4829 1.5514 11.5566 1.66251 11.6006 1.78817C11.6446 1.91384 11.6666 2.03951 11.6666 2.16517C11.6666 2.29929 11.6438 2.42723 11.598 2.54901C11.5522 2.6709 11.4794 2.78223 11.3795 2.88301L2.94098 11.315C2.83154 11.4245 2.70315 11.5103 2.55581 11.5727C2.40848 11.6351 2.25354 11.6663 2.09098 11.6663H0.93598ZM8.57081 3.42884L8.15765 3.00101L8.99865 3.84201L8.57081 3.42884Z\"\r\n      fill=\"#0E0C0B\"\r\n      fillOpacity={0.4}\r\n    />\r\n  </svg>\r\n);\r\n\r\nexport const DeleteIcon = () => (\r\n  <svg\r\n    width=\"18\"\r\n    height=\"20\"\r\n    viewBox=\"0 0 10 12\"\r\n    fill=\"none\"\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n  >\r\n    <path\r\n      d=\"M1.87183 11.6665C1.54039 11.6665 1.25667 11.5485 1.02067 11.3125C0.784667 11.0765 0.666667 10.7928 0.666667 10.4613V1.99982H0.5C0.358333 1.99982 0.239611 1.95188 0.143833 1.85599C0.0479445 1.7601 0 1.64132 0 1.49966C0 1.35788 0.0479445 1.23916 0.143833 1.14349C0.239611 1.04771 0.358333 0.999823 0.5 0.999823H3C3 0.836601 3.0575 0.69749 3.1725 0.58249C3.28739 0.467601 3.42644 0.410156 3.58967 0.410156H6.41033C6.57356 0.410156 6.71261 0.467601 6.8275 0.58249C6.9425 0.69749 7 0.836601 7 0.999823H9.5C9.64167 0.999823 9.76039 1.04777 9.85617 1.14366C9.95206 1.23955 10 1.35832 10 1.49999C10 1.64177 9.95206 1.76049 9.85617 1.85616C9.76039 1.95193 9.64167 1.99982 9.5 1.99982H9.33333V10.4613C9.33333 10.7928 9.21533 11.0765 8.97933 11.3125C8.74333 11.5485 8.45961 11.6665 8.12817 11.6665H1.87183ZM8.33333 1.99982H1.66667V10.4613C1.66667 10.5212 1.68589 10.5704 1.72433 10.6088C1.76278 10.6473 1.81194 10.6665 1.87183 10.6665H8.12817C8.18806 10.6665 8.23722 10.6473 8.27567 10.6088C8.31411 10.5704 8.33333 10.5212 8.33333 10.4613V1.99982ZM3.7695 9.33316C3.91117 9.33316 4.02989 9.28527 4.12567 9.18949C4.22133 9.0936 4.26917 8.97482 4.26917 8.83316V3.83316C4.26917 3.69149 4.22122 3.57271 4.12533 3.47682C4.02956 3.38104 3.91078 3.33316 3.769 3.33316C3.62733 3.33316 3.50861 3.38104 3.41283 3.47682C3.31717 3.57271 3.26933 3.69149 3.26933 3.83316V8.83316C3.26933 8.97482 3.31722 9.0936 3.413 9.18949C3.50889 9.28527 3.62772 9.33316 3.7695 9.33316ZM6.231 9.33316C6.37267 9.33316 6.49139 9.28527 6.58717 9.18949C6.68283 9.0936 6.73067 8.97482 6.73067 8.83316V3.83316C6.73067 3.69149 6.68278 3.57271 6.587 3.47682C6.49111 3.38104 6.37228 3.33316 6.2305 3.33316C6.08883 3.33316 5.97011 3.38104 5.87433 3.47682C5.77867 3.57271 5.73083 3.69149 5.73083 3.83316V8.83316C5.73083 8.97482 5.77878 9.0936 5.87467 9.18949C5.97044 9.28527 6.08922 9.33316 6.231 9.33316Z\"\r\n      fill=\"#F63D68\"\r\n    />\r\n  </svg>\r\n);\r\n\r\nexport const CrossSearchIcon = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"24\"\r\n    height=\"24\"\r\n    viewBox=\"0 0 24 24\"\r\n    fill=\"none\"\r\n    stroke=\"currentColor\"\r\n    strokeWidth=\"2\"\r\n    strokeLinecap=\"round\"\r\n    strokeLinejoin=\"round\"\r\n    className=\"tabler-icon tabler-icon-search-off\"\r\n  >\r\n    <path d=\"M5.039 5.062a7 7 0 0 0 9.91 9.89m1.584 -2.434a7 7 0 0 0 -9.038 -9.057\"></path>\r\n    <path d=\"M3 3l18 18\"></path>\r\n  </svg>\r\n);\r\n\r\nexport const FilterIcon = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"20\"\r\n    height=\"20\"\r\n    fill=\"currentColor\"\r\n    className=\"bi bi-funnel\"\r\n    viewBox=\"0 0 16 16\"\r\n  >\r\n    <path d=\"M1.5 1.5A.5.5 0 0 1 2 1h12a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.128.334L10 8.692V13.5a.5.5 0 0 1-.342.474l-3 1A.5.5 0 0 1 6 14.5V8.692L1.628 3.834A.5.5 0 0 1 1.5 3.5zm1 .5v1.308l4.372 4.858A.5.5 0 0 1 7 8.5v5.306l2-.666V8.5a.5.5 0 0 1 .128-.334L13.5 3.308V2z\" />\r\n  </svg>\r\n);\r\n\r\nexport const HideColumnIcon = () => (\r\n  <svg\r\n    width=\"28\"\r\n    height=\"28\"\r\n    viewBox=\"0 0 24 24\"\r\n    fill=\"none\"\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n  >\r\n    <path\r\n      d=\"M15 3.5H3C2.175 3.5 1.5 4.175 1.5 5V14C1.5 14.825 2.175 15.5 3 15.5H15C15.825 15.5 16.5 14.825 16.5 14V5C16.5 4.175 15.825 3.5 15 3.5ZM6 14H3V5H6V14ZM10.5 14H7.5V5H10.5V14ZM15 14H12V5H15V14Z\"\r\n      fill=\"currentColor\"\r\n      stroke=\"white\"\r\n      strokeWidth=\"0.5\"\r\n    />\r\n  </svg>\r\n);\r\n\r\nexport const PaddingMD = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"20\"\r\n    height=\"20\"\r\n    viewBox=\"0 0 24 24\"\r\n    fill=\"none\"\r\n    stroke=\"currentColor\"\r\n    strokeWidth=\"2\"\r\n    strokeLinecap=\"round\"\r\n    strokeLinejoin=\"round\"\r\n    className=\"tabler-icon tabler-icon-baseline-density-medium\"\r\n  >\r\n    <path d=\"M4 20h16\"></path>\r\n    <path d=\"M4 12h16\"></path>\r\n    <path d=\"M4 4h16\"></path>\r\n  </svg>\r\n);\r\n\r\nexport const PaddingSM = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"20\"\r\n    height=\"20\"\r\n    viewBox=\"0 0 24 24\"\r\n    fill=\"none\"\r\n    stroke=\"currentColor\"\r\n    strokeWidth=\"2\"\r\n    strokeLinecap=\"round\"\r\n    strokeLinejoin=\"round\"\r\n    className=\"tabler-icon tabler-icon-baseline-density-small\"\r\n  >\r\n    <path d=\"M4 3h16\"></path>\r\n    <path d=\"M4 9h16\"></path>\r\n    <path d=\"M4 15h16\"></path>\r\n    <path d=\"M4 21h16\"></path>\r\n  </svg>\r\n);\r\n\r\nexport const PaddingLG = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"20\"\r\n    height=\"20\"\r\n    viewBox=\"0 0 24 24\"\r\n    fill=\"none\"\r\n    stroke=\"currentColor\"\r\n    strokeWidth=\"2\"\r\n    strokeLinecap=\"round\"\r\n    strokeLinejoin=\"round\"\r\n    className=\"tabler-icon tabler-icon-baseline-density-large\"\r\n  >\r\n    <path d=\"M4 4h16\"></path>\r\n    <path d=\"M4 20h16\"></path>\r\n  </svg>\r\n);\r\n\r\nexport const DragHandleIcon = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"20\"\r\n    height=\"20\"\r\n    viewBox=\"0 0 24 24\"\r\n    fill=\"none\"\r\n    stroke=\"currentColor\"\r\n    strokeWidth=\"2\"\r\n    strokeLinecap=\"round\"\r\n    strokeLinejoin=\"round\"\r\n    className=\"tabler-icon tabler-icon-grip-horizontal\"\r\n    transform=\"rotate(90)\"\r\n  >\r\n    <path d=\"M10 9m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\r\n    <path d=\"M10 15m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\r\n    <path d=\"M18 9m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\r\n    <path d=\"M18 15m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\"></path>\r\n  </svg>\r\n);\r\n\r\nexport const IconPinOutline = (props: React.SVGProps<SVGSVGElement>) => {\r\n  return (\r\n    <svg\r\n      viewBox=\"0 0 24 24\"\r\n      fill=\"currentColor\"\r\n      height=\"1rem\"\r\n      width=\"1rem\"\r\n      {...props}\r\n    >\r\n      <path d=\"M16 12V4h1V2H7v2h1v8l-2 2v2h5.2v6h1.6v-6H18v-2l-2-2m-7.2 2l1.2-1.2V4h4v8.8l1.2 1.2H8.8z\" />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const IconPinOffOutline = (props: React.SVGProps<SVGSVGElement>) => {\r\n  return (\r\n    <svg\r\n      viewBox=\"0 0 24 24\"\r\n      fill=\"currentColor\"\r\n      height=\"1rem\"\r\n      width=\"1rem\"\r\n      {...props}\r\n    >\r\n      <path d=\"M8 6.2V4H7V2h10v2h-1v8l2 2v2h-.2L14 12.2V4h-4v4.2l-2-2m12 14.5L18.7 22l-5.9-5.9V22h-1.6v-6H6v-2l2-2v-.7l-6-6L3.3 4 20 20.7M8.8 14h1.8l-.9-.9-.9.9z\" />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const IconExpand = (props: React.SVGProps<SVGSVGElement>) => {\r\n  return (\r\n    <svg\r\n      viewBox=\"0 0 1024 1024\"\r\n      fill=\"currentColor\"\r\n      height=\"1rem\"\r\n      width=\"1rem\"\r\n      {...props}\r\n    >\r\n      <defs>\r\n        <style />\r\n      </defs>\r\n      <path d=\"M342 88H120c-17.7 0-32 14.3-32 32v224c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16V168h174c8.8 0 16-7.2 16-16v-48c0-8.8-7.2-16-16-16zm578 576h-48c-8.8 0-16 7.2-16 16v176H682c-8.8 0-16 7.2-16 16v48c0 8.8 7.2 16 16 16h222c17.7 0 32-14.3 32-32V680c0-8.8-7.2-16-16-16zM342 856H168V680c0-8.8-7.2-16-16-16h-48c-8.8 0-16 7.2-16 16v224c0 17.7 14.3 32 32 32h222c8.8 0 16-7.2 16-16v-48c0-8.8-7.2-16-16-16zM904 88H682c-8.8 0-16 7.2-16 16v48c0 8.8 7.2 16 16 16h174v176c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16V120c0-17.7-14.3-32-32-32z\" />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const LoaderAnimation = () => {\r\n  return (\r\n    <svg viewBox=\"0 0 60 60\" width={\"4rem\"}>\r\n      <circle fill=\"currentColor\" stroke=\"none\" cx=\"6\" cy=\"30\" r=\"5\">\r\n        <animateTransform\r\n          attributeName=\"transform\"\r\n          dur=\"1s\"\r\n          type=\"translate\"\r\n          values=\"0 15 ; 0 -15; 0 15\"\r\n          repeatCount=\"indefinite\"\r\n          begin=\"0.1\"\r\n        />\r\n      </circle>\r\n      <circle fill=\"currentColor\" stroke=\"none\" cx=\"24\" cy=\"30\" r=\"5\">\r\n        <animateTransform\r\n          attributeName=\"transform\"\r\n          dur=\"1s\"\r\n          type=\"translate\"\r\n          values=\"0 10 ; 0 -10; 0 10\"\r\n          repeatCount=\"indefinite\"\r\n          begin=\"0.2\"\r\n        />\r\n      </circle>\r\n      <circle fill=\"currentColor\" stroke=\"none\" cx=\"42\" cy=\"30\" r=\"5\">\r\n        <animateTransform\r\n          attributeName=\"transform\"\r\n          dur=\"1s\"\r\n          type=\"translate\"\r\n          values=\"0 5 ; 0 -5; 0 5\"\r\n          repeatCount=\"indefinite\"\r\n          begin=\"0.3\"\r\n        />\r\n      </circle>\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const ChangeLayoutIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"20\"\r\n      height=\"20\"\r\n      viewBox=\"0 0 20 20\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <mask\r\n        id=\"mask0_811_12587\"\r\n        style={{ maskType: \"alpha\" }}\r\n        maskUnits=\"userSpaceOnUse\"\r\n        x=\"0\"\r\n        y=\"0\"\r\n        width=\"20\"\r\n        height=\"20\"\r\n      >\r\n        <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n      </mask>\r\n      <g mask=\"url(#mask0_811_12587)\">\r\n        <path\r\n          d=\"M4.42311 17.0834C4.00214 17.0834 3.64582 16.9375 3.35416 16.6459C3.06249 16.3542 2.91666 15.9979 2.91666 15.5769V4.42315C2.91666 4.00217 3.06249 3.64585 3.35416 3.35419C3.64582 3.06252 4.00214 2.91669 4.42311 2.91669H15.5769C15.9978 2.91669 16.3542 3.06252 16.6458 3.35419C16.9375 3.64585 17.0833 4.00217 17.0833 4.42315V15.5769C17.0833 15.9979 16.9375 16.3542 16.6458 16.6459C16.3542 16.9375 15.9978 17.0834 15.5769 17.0834H4.42311ZM4.42311 15.8334H9.37499V4.16669H4.42311C4.35895 4.16669 4.3002 4.19342 4.24687 4.24689C4.19339 4.30023 4.16666 4.35898 4.16666 4.42315V15.5769C4.16666 15.6411 4.19339 15.6998 4.24687 15.7531C4.3002 15.8066 4.35895 15.8334 4.42311 15.8334ZM10.625 15.8334H15.5769C15.641 15.8334 15.6998 15.8066 15.7531 15.7531C15.8066 15.6998 15.8333 15.6411 15.8333 15.5769V10H10.625V15.8334ZM10.625 8.75002H15.8333V4.42315C15.8333 4.35898 15.8066 4.30023 15.7531 4.24689C15.6998 4.19342 15.641 4.16669 15.5769 4.16669H10.625V8.75002Z\"\r\n          fill=\"#1E1E1E\"\r\n        />\r\n      </g>\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const BoardIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"13\"\r\n      height=\"10\"\r\n      viewBox=\"0 0 13 10\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M1.37179 9H4.05763V1H1.37179C1.3119 1 1.26274 1.01922 1.22429 1.05767C1.18585 1.09611 1.16663 1.14528 1.16663 1.20517V8.79483C1.16663 8.85472 1.18585 8.90389 1.22429 8.94233C1.26274 8.98078 1.3119 9 1.37179 9ZM5.05763 9H7.94229V1H5.05763V9ZM8.94229 9H11.6281C11.688 9 11.7372 8.98078 11.7756 8.94233C11.8141 8.90389 11.8333 8.85472 11.8333 8.79483V1.20517C11.8333 1.14528 11.8141 1.09611 11.7756 1.05767C11.7372 1.01922 11.688 1 11.6281 1H8.94229V9ZM1.37179 10C1.03501 10 0.749959 9.88333 0.516626 9.65C0.283293 9.41667 0.166626 9.13161 0.166626 8.79483V1.20517C0.166626 0.868389 0.283293 0.583333 0.516626 0.35C0.749959 0.116667 1.03501 0 1.37179 0H11.6281C11.9649 0 12.25 0.116667 12.4833 0.35C12.7166 0.583333 12.8333 0.868389 12.8333 1.20517V8.79483C12.8333 9.13161 12.7166 9.41667 12.4833 9.65C12.25 9.88333 11.9649 10 11.6281 10H1.37179Z\"\r\n        fill=\"#A6A6A6\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const TableIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"13\"\r\n      height=\"12\"\r\n      viewBox=\"0 0 13 12\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M3.17954 9.16671H5.82054C5.96243 9.16671 6.08121 9.11882 6.17687 9.02304C6.27265 8.92737 6.32054 8.8086 6.32054 8.66671C6.32054 8.52482 6.27265 8.40604 6.17687 8.31037C6.08121 8.2146 5.96243 8.16671 5.82054 8.16671H3.17954C3.03765 8.16671 2.91887 8.2146 2.82321 8.31037C2.72743 8.40604 2.67954 8.52482 2.67954 8.66671C2.67954 8.8086 2.72743 8.92737 2.82321 9.02304C2.91887 9.11882 3.03765 9.16671 3.17954 9.16671ZM5.17954 6.50004H7.82054C7.96243 6.50004 8.08121 6.45215 8.17687 6.35637C8.27265 6.26071 8.32054 6.14193 8.32054 6.00004C8.32054 5.85815 8.27265 5.73937 8.17687 5.64371C8.08121 5.54793 7.96243 5.50004 7.82054 5.50004H5.17954C5.03765 5.50004 4.91887 5.54793 4.82321 5.64371C4.72743 5.73937 4.67954 5.85815 4.67954 6.00004C4.67954 6.14193 4.72743 6.26071 4.82321 6.35637C4.91887 6.45215 5.03765 6.50004 5.17954 6.50004ZM7.17954 3.83337H9.82054C9.96243 3.83337 10.0812 3.78549 10.1769 3.68971C10.2727 3.59404 10.3205 3.47526 10.3205 3.33337C10.3205 3.19148 10.2727 3.07271 10.1769 2.97704C10.0812 2.88126 9.96243 2.83337 9.82054 2.83337H7.17954C7.03765 2.83337 6.91887 2.88126 6.82321 2.97704C6.72743 3.07271 6.67954 3.19148 6.67954 3.33337C6.67954 3.47526 6.72743 3.59404 6.82321 3.68971C6.91887 3.78549 7.03765 3.83337 7.17954 3.83337ZM2.03854 11.6667C1.70176 11.6667 1.41671 11.55 1.18337 11.3167C0.950041 11.0834 0.833374 10.7983 0.833374 10.4615V1.53854C0.833374 1.20176 0.950041 0.916707 1.18337 0.683374C1.41671 0.450041 1.70176 0.333374 2.03854 0.333374H10.9615C11.2983 0.333374 11.5834 0.450041 11.8167 0.683374C12.05 0.916707 12.1667 1.20176 12.1667 1.53854V10.4615C12.1667 10.7983 12.05 11.0834 11.8167 11.3167C11.5834 11.55 11.2983 11.6667 10.9615 11.6667H2.03854ZM2.03854 10.6667H10.9615C11.0129 10.6667 11.0599 10.6453 11.1025 10.6025C11.1453 10.5599 11.1667 10.5129 11.1667 10.4615V1.53854C11.1667 1.48721 11.1453 1.44021 11.1025 1.39754C11.0599 1.35476 11.0129 1.33337 10.9615 1.33337H2.03854C1.98721 1.33337 1.94021 1.35476 1.89754 1.39754C1.85476 1.44021 1.83337 1.48721 1.83337 1.53854V10.4615C1.83337 10.5129 1.85476 10.5599 1.89754 10.6025C1.94021 10.6453 1.98721 10.6667 2.03854 10.6667Z\"\r\n        fill=\"#A6A6A6\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const TimeLineIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"13\"\r\n      height=\"12\"\r\n      viewBox=\"0 0 13 12\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M3.17954 9.16671H5.82054C5.96243 9.16671 6.08121 9.11882 6.17687 9.02304C6.27265 8.92737 6.32054 8.8086 6.32054 8.66671C6.32054 8.52482 6.27265 8.40604 6.17687 8.31037C6.08121 8.2146 5.96243 8.16671 5.82054 8.16671H3.17954C3.03765 8.16671 2.91887 8.2146 2.82321 8.31037C2.72743 8.40604 2.67954 8.52482 2.67954 8.66671C2.67954 8.8086 2.72743 8.92737 2.82321 9.02304C2.91887 9.11882 3.03765 9.16671 3.17954 9.16671ZM5.17954 6.50004H7.82054C7.96243 6.50004 8.08121 6.45215 8.17687 6.35637C8.27265 6.26071 8.32054 6.14193 8.32054 6.00004C8.32054 5.85815 8.27265 5.73937 8.17687 5.64371C8.08121 5.54793 7.96243 5.50004 7.82054 5.50004H5.17954C5.03765 5.50004 4.91887 5.54793 4.82321 5.64371C4.72743 5.73937 4.67954 5.85815 4.67954 6.00004C4.67954 6.14193 4.72743 6.26071 4.82321 6.35637C4.91887 6.45215 5.03765 6.50004 5.17954 6.50004ZM7.17954 3.83337H9.82054C9.96243 3.83337 10.0812 3.78549 10.1769 3.68971C10.2727 3.59404 10.3205 3.47526 10.3205 3.33337C10.3205 3.19148 10.2727 3.07271 10.1769 2.97704C10.0812 2.88126 9.96243 2.83337 9.82054 2.83337H7.17954C7.03765 2.83337 6.91887 2.88126 6.82321 2.97704C6.72743 3.07271 6.67954 3.19148 6.67954 3.33337C6.67954 3.47526 6.72743 3.59404 6.82321 3.68971C6.91887 3.78549 7.03765 3.83337 7.17954 3.83337ZM2.03854 11.6667C1.70176 11.6667 1.41671 11.55 1.18337 11.3167C0.950041 11.0834 0.833374 10.7983 0.833374 10.4615V1.53854C0.833374 1.20176 0.950041 0.916707 1.18337 0.683374C1.41671 0.450041 1.70176 0.333374 2.03854 0.333374H10.9615C11.2983 0.333374 11.5834 0.450041 11.8167 0.683374C12.05 0.916707 12.1667 1.20176 12.1667 1.53854V10.4615C12.1667 10.7983 12.05 11.0834 11.8167 11.3167C11.5834 11.55 11.2983 11.6667 10.9615 11.6667H2.03854ZM2.03854 10.6667H10.9615C11.0129 10.6667 11.0599 10.6453 11.1025 10.6025C11.1453 10.5599 11.1667 10.5129 11.1667 10.4615V1.53854C11.1667 1.48721 11.1453 1.44021 11.1025 1.39754C11.0599 1.35476 11.0129 1.33337 10.9615 1.33337H2.03854C1.98721 1.33337 1.94021 1.35476 1.89754 1.39754C1.85476 1.44021 1.83337 1.48721 1.83337 1.53854V10.4615C1.83337 10.5129 1.85476 10.5599 1.89754 10.6025C1.94021 10.6453 1.98721 10.6667 2.03854 10.6667Z\"\r\n        fill=\"#A6A6A6\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const ListIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"13\"\r\n      height=\"12\"\r\n      viewBox=\"0 0 13 12\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M5.20521 10.5C5.06354 10.5 4.94476 10.452 4.84887 10.3562C4.7531 10.2603 4.70521 10.1415 4.70521 9.99982C4.70521 9.85805 4.7531 9.73932 4.84887 9.64366C4.94476 9.54788 5.06354 9.49999 5.20521 9.49999H11.6667C11.8084 9.49999 11.9271 9.54794 12.0229 9.64382C12.1188 9.73971 12.1667 9.85849 12.1667 10.0002C12.1667 10.1419 12.1188 10.2607 12.0229 10.3563C11.9271 10.4521 11.8084 10.5 11.6667 10.5H5.20521ZM5.20521 6.49999C5.06354 6.49999 4.94476 6.45205 4.84887 6.35616C4.7531 6.26027 4.70521 6.14149 4.70521 5.99982C4.70521 5.85805 4.7531 5.73932 4.84887 5.64366C4.94476 5.54788 5.06354 5.49999 5.20521 5.49999H11.6667C11.8084 5.49999 11.9271 5.54794 12.0229 5.64382C12.1188 5.73971 12.1667 5.85849 12.1667 6.00016C12.1667 6.14194 12.1188 6.26066 12.0229 6.35632C11.9271 6.4521 11.8084 6.49999 11.6667 6.49999H5.20521ZM5.20521 2.49999C5.06354 2.49999 4.94476 2.45205 4.84887 2.35616C4.7531 2.26027 4.70521 2.14149 4.70521 1.99982C4.70521 1.85805 4.7531 1.73932 4.84887 1.64366C4.94476 1.54788 5.06354 1.49999 5.20521 1.49999H11.6667C11.8084 1.49999 11.9271 1.54794 12.0229 1.64382C12.1188 1.73971 12.1667 1.85849 12.1667 2.00016C12.1667 2.14194 12.1188 2.26066 12.0229 2.35632C11.9271 2.4521 11.8084 2.49999 11.6667 2.49999H5.20521ZM1.94237 11.109C1.63737 11.109 1.37632 11.0004 1.15921 10.7832C0.941985 10.566 0.833374 10.305 0.833374 9.99999C0.833374 9.69499 0.941985 9.43394 1.15921 9.21682C1.37632 8.9996 1.63737 8.89099 1.94237 8.89099C2.24737 8.89099 2.50843 8.9996 2.72554 9.21682C2.94276 9.43394 3.05137 9.69499 3.05137 9.99999C3.05137 10.305 2.94276 10.566 2.72554 10.7832C2.50843 11.0004 2.24737 11.109 1.94237 11.109ZM1.94237 7.10899C1.63737 7.10899 1.37632 7.00038 1.15921 6.78316C0.941985 6.56605 0.833374 6.30499 0.833374 5.99999C0.833374 5.69499 0.941985 5.43394 1.15921 5.21682C1.37632 4.9996 1.63737 4.89099 1.94237 4.89099C2.24737 4.89099 2.50843 4.9996 2.72554 5.21682C2.94276 5.43394 3.05137 5.69499 3.05137 5.99999C3.05137 6.30499 2.94276 6.56605 2.72554 6.78316C2.50843 7.00038 2.24737 7.10899 1.94237 7.10899ZM1.94237 3.10899C1.63737 3.10899 1.37632 3.00038 1.15921 2.78316C0.941985 2.56605 0.833374 2.30499 0.833374 1.99999C0.833374 1.69499 0.941985 1.43394 1.15921 1.21682C1.37632 0.999602 1.63737 0.890991 1.94237 0.890991C2.24737 0.890991 2.50843 0.999602 2.72554 1.21682C2.94276 1.43394 3.05137 1.69499 3.05137 1.99999C3.05137 2.30499 2.94276 2.56605 2.72554 2.78316C2.50843 3.00038 2.24737 3.10899 1.94237 3.10899Z\"\r\n        fill=\"#A6A6A6\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const CalendarIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"13\"\r\n      height=\"14\"\r\n      viewBox=\"0 0 13 14\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M2.03854 13.3333C1.70176 13.3333 1.41671 13.2167 1.18337 12.9833C0.950041 12.75 0.833374 12.465 0.833374 12.1282V3.20518C0.833374 2.8684 0.950041 2.58334 1.18337 2.35001C1.41671 2.11668 1.70176 2.00001 2.03854 2.00001H2.96154V1.10251C2.96154 0.956399 3.01049 0.834399 3.10837 0.73651C3.20626 0.638732 3.32826 0.589844 3.47437 0.589844C3.6206 0.589844 3.7426 0.638732 3.84037 0.73651C3.93826 0.834399 3.98721 0.956399 3.98721 1.10251V2.00001H9.03854V1.08984C9.03854 0.947955 9.08637 0.829121 9.18204 0.733344C9.27782 0.637677 9.39665 0.589844 9.53854 0.589844C9.68043 0.589844 9.79921 0.637677 9.89487 0.733344C9.99065 0.829121 10.0385 0.947955 10.0385 1.08984V2.00001H10.9615C11.2983 2.00001 11.5834 2.11668 11.8167 2.35001C12.05 2.58334 12.1667 2.8684 12.1667 3.20518V12.1282C12.1667 12.465 12.05 12.75 11.8167 12.9833C11.5834 13.2167 11.2983 13.3333 10.9615 13.3333H2.03854ZM2.03854 12.3333H10.9615C11.0129 12.3333 11.0599 12.312 11.1025 12.2692C11.1453 12.2265 11.1667 12.1795 11.1667 12.1282V5.87184H1.83337V12.1282C1.83337 12.1795 1.85476 12.2265 1.89754 12.2692C1.94021 12.312 1.98721 12.3333 2.03854 12.3333ZM1.83337 4.87184H11.1667V3.20518C11.1667 3.15384 11.1453 3.10684 11.1025 3.06418C11.0599 3.0214 11.0129 3.00001 10.9615 3.00001H2.03854C1.98721 3.00001 1.94021 3.0214 1.89754 3.06418C1.85476 3.10684 1.83337 3.15384 1.83337 3.20518V4.87184ZM6.50004 8.38468C6.33682 8.38468 6.19771 8.32718 6.08271 8.21218C5.96782 8.09729 5.91037 7.95818 5.91037 7.79484C5.91037 7.63162 5.96782 7.49251 6.08271 7.37751C6.19771 7.26262 6.33682 7.20518 6.50004 7.20518C6.66326 7.20518 6.80237 7.26262 6.91737 7.37751C7.03226 7.49251 7.08971 7.63162 7.08971 7.79484C7.08971 7.95818 7.03226 8.09729 6.91737 8.21218C6.80237 8.32718 6.66326 8.38468 6.50004 8.38468ZM3.83337 8.38468C3.67015 8.38468 3.53104 8.32718 3.41604 8.21218C3.30115 8.09729 3.24371 7.95818 3.24371 7.79484C3.24371 7.63162 3.30115 7.49251 3.41604 7.37751C3.53104 7.26262 3.67015 7.20518 3.83337 7.20518C3.9966 7.20518 4.13571 7.26262 4.25071 7.37751C4.3656 7.49251 4.42304 7.63162 4.42304 7.79484C4.42304 7.95818 4.3656 8.09729 4.25071 8.21218C4.13571 8.32718 3.9966 8.38468 3.83337 8.38468ZM9.16671 8.38468C9.00348 8.38468 8.86437 8.32718 8.74937 8.21218C8.63449 8.09729 8.57704 7.95818 8.57704 7.79484C8.57704 7.63162 8.63449 7.49251 8.74937 7.37751C8.86437 7.26262 9.00348 7.20518 9.16671 7.20518C9.32993 7.20518 9.46904 7.26262 9.58404 7.37751C9.69893 7.49251 9.75637 7.63162 9.75637 7.79484C9.75637 7.95818 9.69893 8.09729 9.58404 8.21218C9.46904 8.32718 9.32993 8.38468 9.16671 8.38468ZM6.50004 11C6.33682 11 6.19771 10.9425 6.08271 10.8275C5.96782 10.7126 5.91037 10.5736 5.91037 10.4103C5.91037 10.247 5.96782 10.1079 6.08271 9.99301C6.19771 9.87801 6.33682 9.82051 6.50004 9.82051C6.66326 9.82051 6.80237 9.87801 6.91737 9.99301C7.03226 10.1079 7.08971 10.247 7.08971 10.4103C7.08971 10.5736 7.03226 10.7126 6.91737 10.8275C6.80237 10.9425 6.66326 11 6.50004 11ZM3.83337 11C3.67015 11 3.53104 10.9425 3.41604 10.8275C3.30115 10.7126 3.24371 10.5736 3.24371 10.4103C3.24371 10.247 3.30115 10.1079 3.41604 9.99301C3.53104 9.87801 3.67015 9.82051 3.83337 9.82051C3.9966 9.82051 4.13571 9.87801 4.25071 9.99301C4.3656 10.1079 4.42304 10.247 4.42304 10.4103C4.42304 10.5736 4.3656 10.7126 4.25071 10.8275C4.13571 10.9425 3.9966 11 3.83337 11ZM9.16671 11C9.00348 11 8.86437 10.9425 8.74937 10.8275C8.63449 10.7126 8.57704 10.5736 8.57704 10.4103C8.57704 10.247 8.63449 10.1079 8.74937 9.99301C8.86437 9.87801 9.00348 9.82051 9.16671 9.82051C9.32993 9.82051 9.46904 9.87801 9.58404 9.99301C9.69893 10.1079 9.75637 10.247 9.75637 10.4103C9.75637 10.5736 9.69893 10.7126 9.58404 10.8275C9.46904 10.9425 9.32993 11 9.16671 11Z\"\r\n        fill=\"#A6A6A6\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const GalleryIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"15\"\r\n      height=\"10\"\r\n      viewBox=\"0 0 15 10\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M1.87179 9.33329C1.54035 9.33329 1.25663 9.21529 1.02063 8.97929C0.784626 8.74329 0.666626 8.45957 0.666626 8.12813V1.87179C0.666626 1.54035 0.784626 1.25663 1.02063 1.02063C1.25663 0.784626 1.54035 0.666626 1.87179 0.666626H8.12813C8.45957 0.666626 8.74329 0.784626 8.97929 1.02063C9.21529 1.25663 9.33329 1.54035 9.33329 1.87179V8.12813C9.33329 8.45957 9.21529 8.74329 8.97929 8.97929C8.74329 9.21529 8.45957 9.33329 8.12813 9.33329H1.87179ZM11.2723 4.33329C11.0984 4.33329 10.954 4.27579 10.8391 4.16079C10.7241 4.0459 10.6666 3.90151 10.6666 3.72763V1.27246C10.6666 1.09846 10.7241 0.954014 10.8391 0.839126C10.954 0.724126 11.0984 0.666626 11.2723 0.666626H13.7275C13.9015 0.666626 14.0459 0.724126 14.1608 0.839126C14.2758 0.954014 14.3333 1.09846 14.3333 1.27246V3.72763C14.3333 3.90151 14.2758 4.0459 14.1608 4.16079C14.0459 4.27579 13.9015 4.33329 13.7275 4.33329H11.2723ZM11.6666 3.33329H13.3333V1.66663H11.6666V3.33329ZM1.87179 8.33329H8.12813C8.18802 8.33329 8.23718 8.31407 8.27563 8.27563C8.31407 8.23718 8.33329 8.18802 8.33329 8.12813V1.87179C8.33329 1.8119 8.31407 1.76274 8.27563 1.72429C8.23718 1.68585 8.18802 1.66663 8.12813 1.66663H1.87179C1.8119 1.66663 1.76274 1.68585 1.72429 1.72429C1.68585 1.76274 1.66663 1.8119 1.66663 1.87179V8.12813C1.66663 8.18802 1.68585 8.23718 1.72429 8.27563C1.76274 8.31407 1.8119 8.33329 1.87179 8.33329ZM2.99996 6.96796H6.99996C7.11829 6.96796 7.20707 6.91324 7.26629 6.80379C7.32552 6.69435 7.31707 6.58835 7.24096 6.48579L6.15763 5.03579C6.09529 4.95546 6.01496 4.91529 5.91663 4.91529C5.81829 4.91529 5.73796 4.95546 5.67563 5.03579L4.66663 6.38463L3.99096 5.48579C3.92863 5.40546 3.84829 5.36529 3.74996 5.36529C3.65163 5.36529 3.57129 5.40546 3.50896 5.48579L2.75896 6.48579C2.68285 6.58835 2.6744 6.69435 2.73363 6.80379C2.79285 6.91324 2.88163 6.96796 2.99996 6.96796ZM11.2723 9.33329C11.0984 9.33329 10.954 9.27579 10.8391 9.16079C10.7241 9.0459 10.6666 8.90146 10.6666 8.72746V6.27229C10.6666 6.0984 10.7241 5.95402 10.8391 5.83913C10.954 5.72413 11.0984 5.66663 11.2723 5.66663H13.7275C13.9015 5.66663 14.0459 5.72413 14.1608 5.83913C14.2758 5.95402 14.3333 6.0984 14.3333 6.27229V8.72746C14.3333 8.90146 14.2758 9.0459 14.1608 9.16079C14.0459 9.27579 13.9015 9.33329 13.7275 9.33329H11.2723ZM11.6666 8.33329H13.3333V6.66663H11.6666V8.33329Z\"\r\n        fill=\"#A6A6A6\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const ChartsIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"13\"\r\n      height=\"14\"\r\n      viewBox=\"0 0 13 14\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M7.14485 1.42317C7.14485 1.22028 7.22413 1.058 7.38268 0.936332C7.54124 0.814666 7.71879 0.777333 7.91535 0.824333C9.12135 1.07389 10.16 1.64056 11.0314 2.52433C11.9028 3.40811 12.4633 4.46328 12.7128 5.68983C12.753 5.86583 12.7148 6.02133 12.5985 6.15633C12.4822 6.29144 12.3228 6.359 12.1205 6.359H8.42435C8.38424 6.359 8.34907 6.34894 8.31885 6.32883C8.28874 6.30872 8.26363 6.27861 8.24352 6.2385C8.14352 6.01794 8.00863 5.82105 7.83885 5.64783C7.66896 5.47461 7.47779 5.34072 7.26535 5.24617C7.22524 5.22628 7.19513 5.20389 7.17502 5.179C7.1549 5.15411 7.14485 5.12178 7.14485 5.082V1.42317ZM8.14485 1.95133V4.60267C8.29274 4.70689 8.43079 4.82206 8.55902 4.94817C8.68724 5.07417 8.80135 5.21111 8.90135 5.359H11.5653C11.3158 4.54278 10.8874 3.831 10.2802 3.22367C9.67285 2.61644 8.96107 2.19233 8.14485 1.95133ZM5.10518 13.1692C3.6804 12.8462 2.5039 12.113 1.57568 10.9697C0.647461 9.82644 0.18335 8.50322 0.18335 7C0.18335 5.49367 0.647461 4.17028 1.57568 3.02983C2.5039 1.8895 3.6804 1.1565 5.10518 0.830832C5.30607 0.783832 5.48685 0.8265 5.64752 0.958833C5.80818 1.09117 5.88852 1.25917 5.88852 1.46283V5.108C5.88852 5.11867 5.85729 5.16128 5.79485 5.23583C5.43852 5.38294 5.15352 5.61672 4.93985 5.93717C4.72607 6.25772 4.61918 6.61244 4.61918 7.00133C4.61918 7.39022 4.72607 7.74 4.93985 8.05067C5.15352 8.36133 5.43852 8.58805 5.79485 8.73083C5.81285 8.73761 5.84407 8.77989 5.88852 8.85767V12.5577C5.88852 12.7643 5.80818 12.9297 5.64752 13.0537C5.48685 13.1777 5.30607 13.2162 5.10518 13.1692ZM4.88852 1.95133C3.78341 2.28033 2.88957 2.91194 2.20702 3.84617C1.52457 4.78039 1.18335 5.83167 1.18335 7C1.18335 8.16833 1.52457 9.21961 2.20702 10.1538C2.88957 11.0881 3.78341 11.7265 4.88852 12.0692V9.37183C4.50052 9.08805 4.19196 8.74122 3.96285 8.33133C3.73385 7.92156 3.61935 7.47672 3.61935 6.99683C3.61935 6.51694 3.73279 6.071 3.95968 5.659C4.18657 5.247 4.49618 4.89911 4.88852 4.61533V1.95133ZM7.89618 13.1757C7.69963 13.2183 7.52524 13.1806 7.37302 13.0625C7.2209 12.9443 7.14485 12.7867 7.14485 12.5897V8.90133C7.14485 8.86111 7.1549 8.82594 7.17502 8.79583C7.19513 8.76572 7.22524 8.74061 7.26535 8.7205C7.48335 8.62472 7.67707 8.49194 7.84652 8.32217C8.01596 8.15228 8.14829 7.96111 8.24352 7.74867C8.2504 7.735 8.30713 7.69483 8.41368 7.62817H12.1205C12.3022 7.62817 12.4536 7.70405 12.5747 7.85583C12.6958 8.0075 12.7363 8.17822 12.6962 8.368C12.4355 9.59444 11.8667 10.6417 10.9897 11.5097C10.1128 12.3776 9.08163 12.9329 7.89618 13.1757ZM8.90135 8.62817C8.79957 8.77172 8.68502 8.90656 8.55768 9.03267C8.43035 9.15878 8.29274 9.27183 8.14485 9.37183V12.0487C8.9654 11.8034 9.67824 11.3772 10.2833 10.7698C10.8885 10.1626 11.3158 9.44872 11.5653 8.62817H8.90135Z\"\r\n        fill=\"#A6A6A6\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\nexport const ViewMoreIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"20\"\r\n      height=\"20\"\r\n      viewBox=\"0 0 20 20\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <mask\r\n        id=\"mask0_811_12719\"\r\n        style={{ maskType: \"alpha\" }}\r\n        maskUnits=\"userSpaceOnUse\"\r\n        x=\"0\"\r\n        y=\"0\"\r\n        width=\"20\"\r\n        height=\"20\"\r\n      >\r\n        <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n      </mask>\r\n      <g mask=\"url(#mask0_811_12719)\">\r\n        <path\r\n          d=\"M4.99998 11.6666C4.54165 11.6666 4.14929 11.5035 3.8229 11.1771C3.49651 10.8507 3.33331 10.4583 3.33331 9.99998C3.33331 9.54165 3.49651 9.14929 3.8229 8.8229C4.14929 8.49651 4.54165 8.33331 4.99998 8.33331C5.45831 8.33331 5.85067 8.49651 6.17706 8.8229C6.50345 9.14929 6.66665 9.54165 6.66665 9.99998C6.66665 10.4583 6.50345 10.8507 6.17706 11.1771C5.85067 11.5035 5.45831 11.6666 4.99998 11.6666ZM9.99998 11.6666C9.54165 11.6666 9.14929 11.5035 8.8229 11.1771C8.49651 10.8507 8.33331 10.4583 8.33331 9.99998C8.33331 9.54165 8.49651 9.14929 8.8229 8.8229C9.14929 8.49651 9.54165 8.33331 9.99998 8.33331C10.4583 8.33331 10.8507 8.49651 11.1771 8.8229C11.5035 9.14929 11.6666 9.54165 11.6666 9.99998C11.6666 10.4583 11.5035 10.8507 11.1771 11.1771C10.8507 11.5035 10.4583 11.6666 9.99998 11.6666ZM15 11.6666C14.5416 11.6666 14.1493 11.5035 13.8229 11.1771C13.4965 10.8507 13.3333 10.4583 13.3333 9.99998C13.3333 9.54165 13.4965 9.14929 13.8229 8.8229C14.1493 8.49651 14.5416 8.33331 15 8.33331C15.4583 8.33331 15.8507 8.49651 16.1771 8.8229C16.5035 9.14929 16.6666 9.54165 16.6666 9.99998C16.6666 10.4583 16.5035 10.8507 16.1771 11.1771C15.8507 11.5035 15.4583 11.6666 15 11.6666Z\"\r\n          fill=\"#1C1B1F\"\r\n        />\r\n      </g>\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const CloseIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"14\"\r\n      height=\"14\"\r\n      viewBox=\"0 0 14 14\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M11.0833 3.73919L10.2608 2.91669L6.99996 6.17752L3.73913 2.91669L2.91663 3.73919L6.17746 7.00002L2.91663 10.2609L3.73913 11.0834L6.99996 7.82252L10.2608 11.0834L11.0833 10.2609L7.82246 7.00002L11.0833 3.73919Z\"\r\n        fill=\"#0C2033\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const SearchIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"20\"\r\n      height=\"20\"\r\n      viewBox=\"0 0 20 20\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <mask\r\n        id=\"mask0_811_12583\"\r\n        style={{ maskType: \"alpha\" }}\r\n        maskUnits=\"userSpaceOnUse\"\r\n        x=\"0\"\r\n        y=\"0\"\r\n        width=\"20\"\r\n        height=\"20\"\r\n      >\r\n        <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n      </mask>\r\n      <g mask=\"url(#mask0_811_12583)\">\r\n        <path\r\n          d=\"M7.93274 13.0127C6.50969 13.0127 5.30455 12.5192 4.31733 11.5321C3.33024 10.5449 2.8367 9.33971 2.8367 7.91666C2.8367 6.4936 3.33024 5.28847 4.31733 4.30124C5.30455 3.31416 6.50969 2.82062 7.93274 2.82062C9.3558 2.82062 10.5609 3.31416 11.5482 4.30124C12.5352 5.28847 13.0288 6.4936 13.0288 7.91666C13.0288 8.5118 12.9289 9.0802 12.7292 9.62187C12.5293 10.1635 12.2627 10.6346 11.9294 11.0352L16.7244 15.8302C16.8398 15.9455 16.8989 16.0905 16.9015 16.2652C16.9041 16.4399 16.8451 16.5876 16.7244 16.7083C16.6037 16.829 16.4573 16.8894 16.2852 16.8894C16.1133 16.8894 15.967 16.829 15.8463 16.7083L11.0513 11.9133C10.6346 12.2574 10.1554 12.5266 9.61378 12.721C9.07212 12.9155 8.51177 13.0127 7.93274 13.0127ZM7.93274 11.7629C9.00649 11.7629 9.91594 11.3903 10.6611 10.645C11.4064 9.89985 11.779 8.99041 11.779 7.91666C11.779 6.84291 11.4064 5.93346 10.6611 5.18833C9.91594 4.44305 9.00649 4.07041 7.93274 4.07041C6.85899 4.07041 5.94955 4.44305 5.20441 5.18833C4.45913 5.93346 4.08649 6.84291 4.08649 7.91666C4.08649 8.99041 4.45913 9.89985 5.20441 10.645C5.94955 11.3903 6.85899 11.7629 7.93274 11.7629Z\"\r\n          fill=\"#1E1E1E\"\r\n        />\r\n      </g>\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const SortingIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"20\"\r\n      height=\"20\"\r\n      viewBox=\"0 0 20 20\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <mask\r\n        id=\"mask0_811_12710\"\r\n        style={{ maskType: \"alpha\" }}\r\n        maskUnits=\"userSpaceOnUse\"\r\n        x=\"0\"\r\n        y=\"0\"\r\n        width=\"20\"\r\n        height=\"20\"\r\n      >\r\n        <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n      </mask>\r\n      <g mask=\"url(#mask0_811_12710)\">\r\n        <path\r\n          d=\"M7.63605 10.5369C7.45883 10.5369 7.31036 10.477 7.19064 10.3571C7.07105 10.2374 7.01126 10.089 7.01126 9.9119V4.4696L5.08022 6.40065C4.96744 6.51606 4.82654 6.57377 4.65751 6.57377C4.48848 6.57377 4.33932 6.51398 4.21001 6.3944C4.0807 6.26398 4.01605 6.11488 4.01605 5.94711C4.01605 5.77947 4.0807 5.63099 4.21001 5.50169L7.10105 2.61065C7.17897 2.53259 7.26154 2.47759 7.34876 2.44565C7.43612 2.41356 7.52966 2.39752 7.62939 2.39752C7.72911 2.39752 7.82383 2.41363 7.91355 2.44586C8.00327 2.47822 8.08661 2.53315 8.16355 2.61065L11.0754 5.52252C11.1993 5.64641 11.2604 5.79009 11.2588 5.95356C11.2572 6.11704 11.1918 6.26398 11.0625 6.3944C10.9332 6.51398 10.7868 6.57592 10.6233 6.58023C10.4599 6.5844 10.3136 6.5219 10.1844 6.39273L8.26126 4.4696V9.91981C8.26126 10.0947 8.20133 10.2412 8.08147 10.3594C7.96161 10.4777 7.81314 10.5369 7.63605 10.5369ZM12.3706 17.5946C12.2709 17.5946 12.1762 17.5784 12.0865 17.5461C11.9967 17.5138 11.9134 17.459 11.8365 17.3815L8.92459 14.4696C8.8007 14.3456 8.73959 14.2019 8.74126 14.0386C8.74279 13.8751 8.8082 13.7281 8.93751 13.5977C9.06682 13.4781 9.2132 13.4162 9.37668 13.4119C9.54015 13.4076 9.68647 13.4701 9.81564 13.5994L11.7388 15.5225V10.0721C11.7388 9.89738 11.7987 9.75085 11.9186 9.63252C12.0384 9.51433 12.1869 9.45523 12.364 9.45523C12.5412 9.45523 12.6897 9.51509 12.8094 9.63481C12.929 9.75467 12.9888 9.90315 12.9888 10.0802V15.5225L14.9198 13.5913C15.0326 13.476 15.1735 13.4184 15.3425 13.4184C15.5115 13.4184 15.6607 13.4781 15.79 13.5977C15.9193 13.7281 15.984 13.8772 15.984 14.0448C15.984 14.2126 15.9193 14.3611 15.79 14.4904L12.899 17.3815C12.8211 17.4594 12.7385 17.5144 12.6513 17.5465C12.5639 17.5786 12.4704 17.5946 12.3706 17.5946Z\"\r\n          fill=\"#1C1B1F\"\r\n        />\r\n      </g>\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const FilterationIcon = ({ color = \"#1C1B1F\", ...props }) => {\r\n  return (\r\n    <svg\r\n      width=\"20\"\r\n      height=\"20\"\r\n      viewBox=\"0 0 20 20\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <mask\r\n        id=\"mask0_811_12698\"\r\n        style={{ maskType: \"alpha\" }}\r\n        maskUnits=\"userSpaceOnUse\"\r\n        x=\"0\"\r\n        y=\"0\"\r\n        width=\"20\"\r\n        height=\"20\"\r\n      >\r\n        <rect width=\"20\" height=\"20\" fill=\"#D9D9D9\" />\r\n      </mask>\r\n      <g mask=\"url(#mask0_811_12698)\">\r\n        <path\r\n          d=\"M8.33333 15V13.3333H11.6667V15H8.33333ZM5 10.8333V9.16667H15V10.8333H5ZM2.5 6.66667V5H17.5V6.66667H2.5Z\"\r\n          fill={color}\r\n          {...props}\r\n        />\r\n      </g>\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const HideIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"16\"\r\n      height=\"16\"\r\n      viewBox=\"0 0 16 16\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <mask\r\n        id=\"mask0_957_24305\"\r\n        style={{ maskType: \"alpha\" }}\r\n        maskUnits=\"userSpaceOnUse\"\r\n        x=\"0\"\r\n        y=\"0\"\r\n        width=\"16\"\r\n        height=\"16\"\r\n      >\r\n        <rect width=\"16\" height=\"16\" fill=\"#D9D9D9\" />\r\n      </mask>\r\n      <g mask=\"url(#mask0_957_24305)\">\r\n        <path\r\n          d=\"M9.91805 5.74863C10.1889 6.01963 10.3983 6.34891 10.5462 6.73647C10.6941 7.12413 10.75 7.51325 10.714 7.9038C10.714 8.03202 10.6679 8.14058 10.5757 8.22947C10.4834 8.31836 10.3731 8.3628 10.2449 8.3628C10.1167 8.3628 10.0081 8.31836 9.91922 8.22947C9.83033 8.14058 9.78588 8.03202 9.78588 7.9038C9.82866 7.61069 9.80455 7.33291 9.71355 7.07047C9.62255 6.80813 9.4826 6.58252 9.29372 6.39363C9.10483 6.20475 8.87705 6.06136 8.61038 5.96347C8.34372 5.86558 8.06249 5.84013 7.76672 5.88713C7.63849 5.89147 7.52783 5.84852 7.43472 5.7583C7.34149 5.66819 7.29277 5.55902 7.28855 5.4308C7.28422 5.30258 7.32544 5.19186 7.41222 5.09863C7.49899 5.00552 7.60649 4.95686 7.73472 4.95263C8.12272 4.90819 8.51266 4.9588 8.90455 5.10447C9.29644 5.25025 9.63427 5.46497 9.91805 5.74863ZM8.00005 3.99997C7.76327 3.99997 7.53099 4.01152 7.30322 4.03463C7.07544 4.05763 6.84872 4.09563 6.62305 4.14863C6.48116 4.17774 6.35338 4.15747 6.23972 4.0878C6.12605 4.01813 6.04788 3.91791 6.00522 3.78713C5.96244 3.65213 5.97655 3.52375 6.04755 3.40197C6.11844 3.28019 6.22138 3.20474 6.35638 3.17563C6.62483 3.11152 6.89599 3.06625 7.16988 3.0398C7.44388 3.01325 7.7206 2.99997 8.00005 2.99997C9.43249 2.99997 10.7483 3.37219 11.9475 4.11663C13.1467 4.86108 14.0688 5.86836 14.714 7.13847C14.7585 7.22302 14.7908 7.30825 14.8109 7.39413C14.831 7.48002 14.841 7.57086 14.841 7.66663C14.841 7.76241 14.8327 7.85325 14.816 7.93913C14.7994 8.02502 14.7688 8.11024 14.7244 8.1948C14.5202 8.62213 14.2719 9.02063 13.9796 9.3903C13.6872 9.75997 13.3654 10.0995 13.0141 10.409C12.9107 10.5013 12.7926 10.5395 12.6597 10.5236C12.5267 10.5079 12.4175 10.4414 12.332 10.3243C12.2466 10.2072 12.2112 10.0816 12.2257 9.94747C12.2403 9.81325 12.2992 9.69997 12.4026 9.60763C12.7034 9.33497 12.9778 9.03691 13.2257 8.71347C13.4736 8.38991 13.6873 8.04097 13.8667 7.66663C13.3112 6.54441 12.5084 5.65275 11.4584 4.99163C10.4084 4.33052 9.2556 3.99997 8.00005 3.99997ZM8.00005 12.3333C6.5966 12.3333 5.31027 11.9583 4.14105 11.2083C2.97183 10.4583 2.04238 9.47047 1.35272 8.2448C1.29716 8.16025 1.25655 8.06836 1.23088 7.96913C1.20522 7.87002 1.19238 7.76919 1.19238 7.66663C1.19238 7.56408 1.20349 7.46491 1.22572 7.36913C1.24794 7.27347 1.28683 7.17991 1.34238 7.08847C1.59027 6.63547 1.87105 6.20402 2.18472 5.79413C2.49838 5.38436 2.85905 5.01708 3.26672 4.6923L1.76155 3.1768C1.66933 3.07769 1.62383 2.95997 1.62505 2.82363C1.62638 2.6873 1.67533 2.57086 1.77188 2.4743C1.86844 2.37775 1.98555 2.32947 2.12322 2.32947C2.26077 2.32947 2.37783 2.37775 2.47438 2.4743L13.5257 13.5256C13.618 13.618 13.667 13.7322 13.6725 13.8685C13.6781 14.0048 13.6292 14.1247 13.5257 14.2281C13.4292 14.3247 13.312 14.373 13.1744 14.373C13.0368 14.373 12.9198 14.3247 12.8232 14.2281L10.477 11.9025C10.0838 12.0546 9.67972 12.1644 9.26472 12.232C8.84983 12.2995 8.42827 12.3333 8.00005 12.3333ZM3.96938 5.3948C3.57872 5.69658 3.22761 6.0378 2.91605 6.41847C2.60449 6.79924 2.3436 7.2153 2.13338 7.66663C2.68894 8.78886 3.49172 9.68052 4.54172 10.3416C5.59172 11.0027 6.74449 11.3333 8.00005 11.3333C8.28638 11.3333 8.56822 11.3141 8.84555 11.2756C9.12288 11.2372 9.39833 11.1778 9.67188 11.0975L8.82822 10.2333C8.69322 10.2923 8.55838 10.3322 8.42372 10.3531C8.28916 10.3741 8.14794 10.3846 8.00005 10.3846C7.2436 10.3846 6.60149 10.1207 6.07372 9.59297C5.54594 9.06519 5.28205 8.42308 5.28205 7.66663C5.28205 7.51874 5.2936 7.37752 5.31672 7.24297C5.33983 7.1083 5.37872 6.97347 5.43338 6.83847L3.96938 5.3948Z\"\r\n          fill=\"#1C1B1F\"\r\n        />\r\n      </g>\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const PinIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"8\"\r\n      height=\"13\"\r\n      viewBox=\"0 0 8 13\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M6.33337 1.33337V6.14104L7.37686 7.18471C7.42642 7.23426 7.46364 7.29004 7.48853 7.35204C7.51331 7.41393 7.5257 7.47793 7.5257 7.54404V7.82904C7.5257 7.96949 7.47714 8.08865 7.38003 8.18654C7.28303 8.28443 7.16275 8.33337 7.0192 8.33337H4.50003V11.9257C4.50003 12.0674 4.45209 12.1861 4.3562 12.2819C4.26031 12.3777 4.14153 12.4255 3.99987 12.4255C3.85809 12.4255 3.73937 12.3777 3.6437 12.2819C3.54792 12.1861 3.50003 12.0674 3.50003 11.9257V8.33337H0.980865C0.83731 8.33337 0.717032 8.28443 0.620032 8.18654C0.522921 8.08865 0.474365 7.96949 0.474365 7.82904V7.54404C0.474365 7.47793 0.486754 7.41393 0.511532 7.35204C0.536421 7.29004 0.573643 7.23426 0.623199 7.18471L1.6667 6.14104V1.33337H1.50003C1.35837 1.33337 1.23964 1.28543 1.14387 1.18954C1.04798 1.09365 1.00003 0.974874 1.00003 0.833207C1.00003 0.691429 1.04798 0.572707 1.14387 0.477041C1.23964 0.381263 1.35837 0.333374 1.50003 0.333374H6.50003C6.6417 0.333374 6.76042 0.381319 6.8562 0.477207C6.95209 0.573096 7.00003 0.691874 7.00003 0.833541C7.00003 0.975319 6.95209 1.09404 6.8562 1.18971C6.76042 1.28549 6.6417 1.33337 6.50003 1.33337H6.33337ZM1.90003 7.33337H6.10003L5.33336 6.56671V1.33337H2.6667V6.56671L1.90003 7.33337Z\"\r\n        fill=\"#1C1B1F\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const VisibilityIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"14\"\r\n      height=\"10\"\r\n      viewBox=\"0 0 14 10\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M7.00147 7.38467C7.75692 7.38467 8.39853 7.12028 8.92631 6.5915C9.45408 6.06272 9.71797 5.42061 9.71797 4.66517C9.71797 3.90972 9.45358 3.26811 8.9248 2.74033C8.39603 2.21256 7.75392 1.94867 6.99847 1.94867C6.24303 1.94867 5.60142 2.21306 5.07364 2.74183C4.54586 3.27061 4.28197 3.91272 4.28197 4.66817C4.28197 5.42361 4.54636 6.06522 5.07514 6.593C5.60392 7.12078 6.24603 7.38467 7.00147 7.38467ZM6.99997 6.46667C6.49997 6.46667 6.07497 6.29167 5.72497 5.94167C5.37497 5.59167 5.19997 5.16667 5.19997 4.66667C5.19997 4.16667 5.37497 3.74167 5.72497 3.39167C6.07497 3.04167 6.49997 2.86667 6.99997 2.86667C7.49997 2.86667 7.92497 3.04167 8.27497 3.39167C8.62497 3.74167 8.79997 4.16667 8.79997 4.66667C8.79997 5.16667 8.62497 5.59167 8.27497 5.94167C7.92497 6.29167 7.49997 6.46667 6.99997 6.46667ZM6.99997 9.33333C5.59653 9.33333 4.31297 8.95894 3.1493 8.21017C1.98564 7.4615 1.0568 6.4765 0.362803 5.25517C0.307248 5.15939 0.266637 5.06289 0.24097 4.96567C0.215414 4.86844 0.202637 4.76867 0.202637 4.66633C0.202637 4.564 0.215414 4.46433 0.24097 4.36733C0.266637 4.27033 0.307248 4.17394 0.362803 4.07817C1.0568 2.85683 1.98564 1.87183 3.1493 1.12317C4.31297 0.374389 5.59653 0 6.99997 0C8.40342 0 9.68697 0.374389 10.8506 1.12317C12.0143 1.87183 12.9431 2.85683 13.6371 4.07817C13.6927 4.17394 13.7333 4.27044 13.759 4.36767C13.7845 4.46489 13.7973 4.56467 13.7973 4.667C13.7973 4.76933 13.7845 4.869 13.759 4.966C13.7333 5.063 13.6927 5.15939 13.6371 5.25517C12.9431 6.4765 12.0143 7.4615 10.8506 8.21017C9.68697 8.95894 8.40342 9.33333 6.99997 9.33333ZM6.99997 8.33333C8.25553 8.33333 9.4083 8.00278 10.4583 7.34167C11.5083 6.68055 12.3111 5.78889 12.8666 4.66667C12.3111 3.54444 11.5083 2.65278 10.4583 1.99167C9.4083 1.33056 8.25553 1 6.99997 1C5.74442 1 4.59164 1.33056 3.54164 1.99167C2.49164 2.65278 1.68886 3.54444 1.1333 4.66667C1.68886 5.78889 2.49164 6.68055 3.54164 7.34167C4.59164 8.00278 5.74442 8.33333 6.99997 8.33333Z\"\r\n        fill=\"#505050\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const VisibilityOffIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"14\"\r\n      height=\"13\"\r\n      viewBox=\"0 0 14 13\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M8.91793 3.74863C9.18882 4.01963 9.39821 4.34891 9.54609 4.73647C9.69398 5.12413 9.74993 5.51325 9.71393 5.9038C9.71393 6.03202 9.66782 6.14058 9.57559 6.22947C9.48326 6.31836 9.37298 6.3628 9.24476 6.3628C9.11654 6.3628 9.00798 6.31836 8.9191 6.22947C8.83021 6.14058 8.78576 6.03202 8.78576 5.9038C8.82854 5.61069 8.80443 5.33291 8.71343 5.07047C8.62243 4.80813 8.48248 4.58252 8.29359 4.39363C8.1047 4.20475 7.87693 4.06136 7.61026 3.96347C7.34359 3.86558 7.06237 3.84013 6.76659 3.88713C6.63837 3.89147 6.52771 3.84852 6.43459 3.7583C6.34137 3.66819 6.29265 3.55902 6.28843 3.4308C6.28409 3.30258 6.32532 3.19186 6.41209 3.09863C6.49887 3.00552 6.60637 2.95686 6.73459 2.95263C7.12259 2.90819 7.51254 2.9588 7.90443 3.10447C8.29632 3.25025 8.63415 3.46497 8.91793 3.74863ZM6.99993 1.99997C6.76315 1.99997 6.53087 2.01152 6.30309 2.03463C6.07532 2.05763 5.84859 2.09563 5.62293 2.14863C5.48104 2.17774 5.35326 2.15747 5.23959 2.0878C5.12593 2.01813 5.04776 1.91791 5.00509 1.78713C4.96232 1.65213 4.97643 1.52375 5.04743 1.40197C5.11832 1.28019 5.22126 1.20474 5.35626 1.17563C5.62471 1.11152 5.89587 1.06625 6.16976 1.0398C6.44376 1.01325 6.72048 0.999967 6.99993 0.999967C8.43237 0.999967 9.74821 1.37219 10.9474 2.11663C12.1465 2.86108 13.0687 3.86836 13.7139 5.13847C13.7584 5.22302 13.7907 5.30825 13.8108 5.39413C13.8309 5.48002 13.8409 5.57086 13.8409 5.66663C13.8409 5.76241 13.8326 5.85325 13.8159 5.93913C13.7993 6.02502 13.7687 6.11024 13.7243 6.1948C13.52 6.62213 13.2718 7.02063 12.9794 7.3903C12.6871 7.75997 12.3653 8.09952 12.0139 8.40897C11.9106 8.5013 11.7925 8.53952 11.6596 8.52363C11.5266 8.50786 11.4174 8.44141 11.3319 8.3243C11.2465 8.20719 11.211 8.08158 11.2256 7.94747C11.2402 7.81325 11.2991 7.69997 11.4024 7.60763C11.7033 7.33497 11.9777 7.03691 12.2256 6.71347C12.4735 6.38991 12.6872 6.04097 12.8666 5.66663C12.311 4.54441 11.5083 3.65275 10.4583 2.99163C9.40826 2.33052 8.25548 1.99997 6.99993 1.99997ZM6.99993 10.3333C5.59648 10.3333 4.31015 9.9583 3.14093 9.2083C1.97171 8.4583 1.04226 7.47047 0.352594 6.2448C0.297039 6.16025 0.256427 6.06836 0.230761 5.96913C0.205094 5.87002 0.192261 5.76919 0.192261 5.66663C0.192261 5.56408 0.203372 5.46491 0.225594 5.36913C0.247816 5.27347 0.286705 5.17991 0.342261 5.08847C0.59015 4.63547 0.870927 4.20402 1.18459 3.79413C1.49826 3.38436 1.85893 3.01708 2.26659 2.6923L0.761427 1.1768C0.669205 1.07769 0.623705 0.959967 0.624927 0.823634C0.626261 0.6873 0.675205 0.570857 0.771761 0.474301C0.868316 0.377746 0.985427 0.329468 1.12309 0.329468C1.26065 0.329468 1.37771 0.377746 1.47426 0.474301L12.5256 11.5256C12.6179 11.618 12.6669 11.7322 12.6724 11.8685C12.678 12.0048 12.629 12.1247 12.5256 12.2281C12.429 12.3247 12.3119 12.373 12.1743 12.373C12.0367 12.373 11.9197 12.3247 11.8231 12.2281L9.47693 9.90247C9.08371 10.0546 8.67959 10.1644 8.2646 10.232C7.84971 10.2995 7.42815 10.3333 6.99993 10.3333ZM2.96926 3.3948C2.57859 3.69658 2.22748 4.0378 1.91593 4.41847C1.60437 4.79924 1.34348 5.2153 1.13326 5.66663C1.68882 6.78886 2.49159 7.68052 3.54159 8.34163C4.59159 9.00274 5.74437 9.3333 6.99993 9.3333C7.28626 9.3333 7.56809 9.31408 7.84543 9.27563C8.12276 9.23719 8.3982 9.1778 8.67176 9.09747L7.82809 8.2333C7.69309 8.2923 7.55826 8.33224 7.42359 8.35313C7.28904 8.37413 7.14782 8.38463 6.99993 8.38463C6.24348 8.38463 5.60137 8.12074 5.07359 7.59297C4.54582 7.06519 4.28193 6.42308 4.28193 5.66663C4.28193 5.51874 4.29348 5.37752 4.31659 5.24297C4.33971 5.1083 4.37859 4.97347 4.43326 4.83847L2.96926 3.3948Z\"\r\n        fill=\"#C5C5C5\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const DragandDrogIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"8\"\r\n      height=\"12\"\r\n      viewBox=\"0 0 8 12\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M2.00005 11.0768C1.70394 11.0768 1.45044 10.9714 1.23955 10.7605C1.02866 10.5496 0.923218 10.2961 0.923218 9.99999C0.923218 9.70388 1.02866 9.45038 1.23955 9.23949C1.45044 9.0286 1.70394 8.92316 2.00005 8.92316C2.29616 8.92316 2.54966 9.0286 2.76055 9.23949C2.97144 9.45038 3.07688 9.70388 3.07688 9.99999C3.07688 10.2961 2.97144 10.5496 2.76055 10.7605C2.54966 10.9714 2.29616 11.0768 2.00005 11.0768ZM6.00005 11.0768C5.70394 11.0768 5.45044 10.9714 5.23955 10.7605C5.02866 10.5496 4.92322 10.2961 4.92322 9.99999C4.92322 9.70388 5.02866 9.45038 5.23955 9.23949C5.45044 9.0286 5.70394 8.92316 6.00005 8.92316C6.29616 8.92316 6.54966 9.0286 6.76055 9.23949C6.97144 9.45038 7.07688 9.70388 7.07688 9.99999C7.07688 10.2961 6.97144 10.5496 6.76055 10.7605C6.54966 10.9714 6.29616 11.0768 6.00005 11.0768ZM2.00005 7.07682C1.70394 7.07682 1.45044 6.97138 1.23955 6.76049C1.02866 6.5496 0.923218 6.2961 0.923218 5.99999C0.923218 5.70388 1.02866 5.45038 1.23955 5.23949C1.45044 5.0286 1.70394 4.92316 2.00005 4.92316C2.29616 4.92316 2.54966 5.0286 2.76055 5.23949C2.97144 5.45038 3.07688 5.70388 3.07688 5.99999C3.07688 6.2961 2.97144 6.5496 2.76055 6.76049C2.54966 6.97138 2.29616 7.07682 2.00005 7.07682ZM6.00005 7.07682C5.70394 7.07682 5.45044 6.97138 5.23955 6.76049C5.02866 6.5496 4.92322 6.2961 4.92322 5.99999C4.92322 5.70388 5.02866 5.45038 5.23955 5.23949C5.45044 5.0286 5.70394 4.92316 6.00005 4.92316C6.29616 4.92316 6.54966 5.0286 6.76055 5.23949C6.97144 5.45038 7.07688 5.70388 7.07688 5.99999C7.07688 6.2961 6.97144 6.5496 6.76055 6.76049C6.54966 6.97138 6.29616 7.07682 6.00005 7.07682ZM2.00005 3.07682C1.70394 3.07682 1.45044 2.97138 1.23955 2.76049C1.02866 2.5496 0.923218 2.2961 0.923218 1.99999C0.923218 1.70388 1.02866 1.45038 1.23955 1.23949C1.45044 1.0286 1.70394 0.923157 2.00005 0.923157C2.29616 0.923157 2.54966 1.0286 2.76055 1.23949C2.97144 1.45038 3.07688 1.70388 3.07688 1.99999C3.07688 2.2961 2.97144 2.5496 2.76055 2.76049C2.54966 2.97138 2.29616 3.07682 2.00005 3.07682ZM6.00005 3.07682C5.70394 3.07682 5.45044 2.97138 5.23955 2.76049C5.02866 2.5496 4.92322 2.2961 4.92322 1.99999C4.92322 1.70388 5.02866 1.45038 5.23955 1.23949C5.45044 1.0286 5.70394 0.923157 6.00005 0.923157C6.29616 0.923157 6.54966 1.0286 6.76055 1.23949C6.97144 1.45038 7.07688 1.70388 7.07688 1.99999C7.07688 2.2961 6.97144 2.5496 6.76055 2.76049C6.54966 2.97138 6.29616 3.07682 6.00005 3.07682Z\"\r\n        fill=\"#A6A6A6\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\n// export const SettingIcon = () => {\r\n//   return (\r\n//     <svg\r\n//       width=\"18\"\r\n//       height=\"17\"\r\n//       viewBox=\"0 0 18 17\"\r\n//       fill=\"none\"\r\n//       xmlns=\"http://www.w3.org/2000/svg\"\r\n//     >\r\n//       <path\r\n//         d=\"M15.1935 9.31669C15.2269 9.05002 15.2519 8.78335 15.2519 8.50002C15.2519 8.21669 15.2269 7.95002 15.1935 7.68335L16.9519 6.30835C17.1102 6.18335 17.1518 5.95835 17.0518 5.77502L15.3852 2.89169C15.3102 2.75835 15.1685 2.68335 15.0185 2.68335C14.9685 2.68335 14.9185 2.69169 14.8768 2.70835L12.8018 3.54169C12.3685 3.20835 11.9018 2.93335 11.3935 2.72502L11.0768 0.516687C11.0518 0.316687 10.8769 0.166687 10.6685 0.166687H7.33518C7.12685 0.166687 6.95185 0.316687 6.92685 0.516687L6.61018 2.72502C6.10185 2.93335 5.63518 3.21669 5.20185 3.54169L3.12685 2.70835C3.07685 2.69169 3.02685 2.68335 2.97685 2.68335C2.83518 2.68335 2.69352 2.75835 2.61852 2.89169L0.95185 5.77502C0.843516 5.95835 0.893517 6.18335 1.05185 6.30835L2.81018 7.68335C2.77685 7.95002 2.75185 8.22502 2.75185 8.50002C2.75185 8.77502 2.77685 9.05002 2.81018 9.31669L1.05185 10.6917C0.893517 10.8167 0.85185 11.0417 0.95185 11.225L2.61852 14.1084C2.69352 14.2417 2.83518 14.3167 2.98518 14.3167C3.03518 14.3167 3.08518 14.3084 3.12685 14.2917L5.20185 13.4584C5.63518 13.7917 6.10185 14.0667 6.61018 14.275L6.92685 16.4834C6.95185 16.6834 7.12685 16.8334 7.33518 16.8334H10.6685C10.8769 16.8334 11.0518 16.6834 11.0768 16.4834L11.3935 14.275C11.9018 14.0667 12.3685 13.7834 12.8018 13.4584L14.8768 14.2917C14.9268 14.3084 14.9768 14.3167 15.0268 14.3167C15.1685 14.3167 15.3102 14.2417 15.3852 14.1084L17.0518 11.225C17.1518 11.0417 17.1102 10.8167 16.9519 10.6917L15.1935 9.31669ZM13.5435 7.89169C13.5769 8.15002 13.5852 8.32502 13.5852 8.50002C13.5852 8.67502 13.5685 8.85835 13.5435 9.10835L13.4268 10.05L14.1685 10.6334L15.0685 11.3334L14.4852 12.3417L13.4268 11.9167L12.5602 11.5667L11.8102 12.1334C11.4518 12.4 11.1102 12.6 10.7685 12.7417L9.88518 13.1L9.75185 14.0417L9.58518 15.1667H8.41852L8.12685 13.1L7.24352 12.7417C6.88518 12.5917 6.55185 12.4 6.21852 12.15L5.46018 11.5667L4.57685 11.925L3.51852 12.35L2.93518 11.3417L3.83518 10.6417L4.57685 10.0584L4.46018 9.11669C4.43518 8.85835 4.41852 8.66669 4.41852 8.50002C4.41852 8.33335 4.43518 8.14169 4.46018 7.89169L4.57685 6.95002L3.83518 6.36669L2.93518 5.66669L3.51852 4.65835L4.57685 5.08335L5.44352 5.43335L6.19352 4.86669C6.55185 4.60002 6.89352 4.40002 7.23518 4.25835L8.11852 3.90002L8.25185 2.95835L8.41852 1.83335H9.57685L9.86852 3.90002L10.7519 4.25835C11.1102 4.40835 11.4435 4.60002 11.7768 4.85002L12.5352 5.43335L13.4185 5.07502L14.4768 4.65002L15.0602 5.65835L14.1685 6.36669L13.4268 6.95002L13.5435 7.89169ZM9.00185 5.16669C7.16018 5.16669 5.66852 6.65835 5.66852 8.50002C5.66852 10.3417 7.16018 11.8334 9.00185 11.8334C10.8435 11.8334 12.3352 10.3417 12.3352 8.50002C12.3352 6.65835 10.8435 5.16669 9.00185 5.16669ZM9.00185 10.1667C8.08518 10.1667 7.33518 9.41669 7.33518 8.50002C7.33518 7.58335 8.08518 6.83335 9.00185 6.83335C9.91852 6.83335 10.6685 7.58335 10.6685 8.50002C10.6685 9.41669 9.91852 10.1667 9.00185 10.1667Z\"\r\n//         fill=\"#1E1E1E\"\r\n//       />\r\n//     </svg>\r\n//   );\r\n// };\r\n\r\nexport const DropDownIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"10\"\r\n      height=\"7\"\r\n      viewBox=\"0 0 10 7\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M8.825 0.412476L5 4.22914L1.175 0.412476L0 1.58748L5 6.58748L10 1.58748L8.825 0.412476Z\"\r\n        fill=\"#1E1E1E\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const AddIcon = ({ ...props }) => {\r\n  return (\r\n    <svg\r\n      width=\"10\"\r\n      height=\"10\"\r\n      viewBox=\"0 0 10 10\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n      {...props}\r\n    >\r\n      <path\r\n        d=\"M4.50002 5.50002H1.16669C1.02502 5.50002 0.906298 5.45208 0.81052 5.35619C0.714632 5.2603 0.666687 5.14152 0.666687 4.99985C0.666687 4.85808 0.714632 4.73935 0.81052 4.64369C0.906298 4.54791 1.02502 4.50002 1.16669 4.50002H4.50002V1.16669C4.50002 1.02502 4.54797 0.906298 4.64385 0.81052C4.73974 0.714632 4.85852 0.666687 5.00019 0.666687C5.14197 0.666687 5.26069 0.714632 5.35635 0.81052C5.45213 0.906298 5.50002 1.02502 5.50002 1.16669V4.50002H8.83335C8.97502 4.50002 9.09374 4.54797 9.18952 4.64385C9.28541 4.73974 9.33335 4.85852 9.33335 5.00019C9.33335 5.14197 9.28541 5.26069 9.18952 5.35635C9.09374 5.45213 8.97502 5.50002 8.83335 5.50002H5.50002V8.83335C5.50002 8.97502 5.45208 9.09374 5.35619 9.18952C5.2603 9.28541 5.14152 9.33335 4.99985 9.33335C4.85808 9.33335 4.73935 9.28541 4.64369 9.18952C4.54791 9.09374 4.50002 8.97502 4.50002 8.83335V5.50002Z\"\r\n        fill=\"currentColor\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const ChevronDownIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"12\"\r\n      height=\"6\"\r\n      viewBox=\"0 0 12 6\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M1 0.5L6 5.5L11 0.5\"\r\n        stroke=\"#181D27\"\r\n        stroke-linecap=\"round\"\r\n        stroke-linejoin=\"round\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\nexport const CheckBox = () => {\r\n  return (\r\n    <svg\r\n      width=\"13\"\r\n      height=\"14\"\r\n      viewBox=\"0 0 13 14\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M5.72054 8.43116L4.17187 6.88233C4.07954 6.7901 3.96349 6.74288 3.82371 6.74066C3.68404 6.73855 3.56587 6.78577 3.46921 6.88233C3.37265 6.97899 3.32437 7.0961 3.32437 7.23366C3.32437 7.37121 3.37265 7.48833 3.46921 7.58499L5.29871 9.41449C5.41926 9.53494 5.55987 9.59516 5.72054 9.59516C5.88121 9.59516 6.02182 9.53494 6.14237 9.41449L9.85137 5.70549C9.9436 5.61316 9.99082 5.4971 9.99304 5.35733C9.99515 5.21766 9.94793 5.09949 9.85137 5.00283C9.75471 4.90627 9.6376 4.85799 9.50004 4.85799C9.36249 4.85799 9.24537 4.90627 9.14871 5.00283L5.72054 8.43116ZM6.66787 13.3337C5.79187 13.3337 4.96848 13.1674 4.19771 12.835C3.42693 12.5025 2.75648 12.0514 2.18637 11.4815C1.61626 10.9116 1.16487 10.2414 0.832207 9.47099C0.499652 8.70055 0.333374 7.87738 0.333374 7.00149C0.333374 6.12549 0.499596 5.3021 0.832041 4.53133C1.16449 3.76055 1.61565 3.0901 2.18554 2.51999C2.75543 1.94988 3.4256 1.49849 4.19604 1.16583C4.96649 0.83327 5.78965 0.666992 6.66554 0.666992C7.54154 0.666992 8.36493 0.833214 9.13571 1.16566C9.90649 1.4981 10.5769 1.94927 11.147 2.51916C11.7172 3.08905 12.1685 3.75921 12.5012 4.52966C12.8338 5.3001 13 6.12327 13 6.99916C13 7.87516 12.8338 8.69855 12.5014 9.46933C12.1689 10.2401 11.7178 10.9105 11.1479 11.4807C10.578 12.0508 9.90782 12.5022 9.13737 12.8348C8.36693 13.1674 7.54376 13.3337 6.66787 13.3337Z\"\r\n        fill=\"#16B364\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\nexport const CrossBox = () => {\r\n  return (\r\n    <svg\r\n      width=\"13\"\r\n      height=\"14\"\r\n      viewBox=\"0 0 13 14\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M6.66659 7.70283L8.71525 9.75166C8.80759 9.84388 8.92364 9.8911 9.06342 9.89333C9.20309 9.89544 9.32125 9.84821 9.41792 9.75166C9.51447 9.65499 9.56275 9.53788 9.56275 9.40033C9.56275 9.26277 9.51447 9.14566 9.41792 9.04899L7.36909 7.00033L9.41792 4.95166C9.51014 4.85933 9.55736 4.74327 9.55959 4.60349C9.5617 4.46383 9.51447 4.34566 9.41792 4.24899C9.32125 4.15244 9.20414 4.10416 9.06659 4.10416C8.92903 4.10416 8.81192 4.15244 8.71525 4.24899L6.66659 6.29783L4.61792 4.24899C4.52559 4.15677 4.40953 4.10955 4.26975 4.10733C4.13009 4.10521 4.01192 4.15244 3.91525 4.24899C3.8187 4.34566 3.77042 4.46277 3.77042 4.60033C3.77042 4.73788 3.8187 4.85499 3.91525 4.95166L5.96409 7.00033L3.91525 9.04899C3.82303 9.14133 3.77581 9.25738 3.77359 9.39716C3.77147 9.53683 3.8187 9.65499 3.91525 9.75166C4.01192 9.84821 4.12903 9.89649 4.26659 9.89649C4.40414 9.89649 4.52125 9.84821 4.61792 9.75166L6.66659 7.70283ZM6.66775 13.3337C5.79175 13.3337 4.96836 13.1674 4.19759 12.835C3.42681 12.5025 2.75636 12.0514 2.18625 11.4815C1.61614 10.9116 1.16475 10.2414 0.832085 9.47099C0.49953 8.70055 0.333252 7.87738 0.333252 7.00149C0.333252 6.12549 0.499474 5.3021 0.831919 4.53133C1.16436 3.76055 1.61553 3.0901 2.18542 2.51999C2.75531 1.94988 3.42547 1.49849 4.19592 1.16583C4.96636 0.83327 5.78953 0.666992 6.66542 0.666992C7.54142 0.666992 8.36481 0.833214 9.13559 1.16566C9.90636 1.4981 10.5768 1.94927 11.1469 2.51916C11.717 3.08905 12.1684 3.75921 12.5011 4.52966C12.8336 5.3001 12.9999 6.12327 12.9999 6.99916C12.9999 7.87516 12.8337 8.69855 12.5013 9.46933C12.1688 10.2401 11.7176 10.9105 11.1478 11.4807C10.5779 12.0508 9.9077 12.5022 9.13725 12.8348C8.36681 13.1674 7.54364 13.3337 6.66775 13.3337Z\"\r\n        fill=\"#F63D68\"\r\n      />\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const EyeIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"24\"\r\n      height=\"24\"\r\n      viewBox=\"0 0 16 16\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <mask\r\n        id=\"mask0_6673_82208\"\r\n        style={{ maskType: \"alpha\" }}\r\n        maskUnits=\"userSpaceOnUse\"\r\n        x=\"0\"\r\n        y=\"0\"\r\n        width=\"16\"\r\n        height=\"16\"\r\n      >\r\n        <rect width=\"16\" height=\"16\" fill=\"#D9D9D9\" />\r\n      </mask>\r\n      <g mask=\"url(#mask0_6673_82208)\">\r\n        <path\r\n          d=\"M8.00147 10.3847C8.75692 10.3847 9.39853 10.1203 9.92631 9.5915C10.4541 9.06272 10.718 8.42061 10.718 7.66517C10.718 6.90972 10.4536 6.26811 9.9248 5.74033C9.39603 5.21256 8.75392 4.94867 7.99847 4.94867C7.24303 4.94867 6.60142 5.21306 6.07364 5.74183C5.54586 6.27061 5.28197 6.91272 5.28197 7.66817C5.28197 8.42361 5.54636 9.06522 6.07514 9.593C6.60392 10.1208 7.24603 10.3847 8.00147 10.3847ZM7.99997 9.46667C7.49997 9.46667 7.07497 9.29167 6.72497 8.94167C6.37497 8.59167 6.19997 8.16667 6.19997 7.66667C6.19997 7.16667 6.37497 6.74167 6.72497 6.39167C7.07497 6.04167 7.49997 5.86667 7.99997 5.86667C8.49997 5.86667 8.92497 6.04167 9.27497 6.39167C9.62497 6.74167 9.79997 7.16667 9.79997 7.66667C9.79997 8.16667 9.62497 8.59167 9.27497 8.94167C8.92497 9.29167 8.49997 9.46667 7.99997 9.46667ZM7.99997 12.3333C6.59653 12.3333 5.31297 11.9589 4.1493 11.2102C2.98564 10.4615 2.0568 9.4765 1.3628 8.25517C1.30725 8.15939 1.26664 8.06289 1.24097 7.96567C1.21541 7.86844 1.20264 7.76867 1.20264 7.66633C1.20264 7.564 1.21541 7.46433 1.24097 7.36733C1.26664 7.27033 1.30725 7.17394 1.3628 7.07817C2.0568 5.85683 2.98564 4.87183 4.1493 4.12317C5.31297 3.37439 6.59653 3 7.99997 3C9.40342 3 10.687 3.37439 11.8506 4.12317C13.0143 4.87183 13.9431 5.85683 14.6371 7.07817C14.6927 7.17394 14.7333 7.27044 14.759 7.36767C14.7845 7.46489 14.7973 7.56467 14.7973 7.667C14.7973 7.76933 14.7845 7.869 14.759 7.966C14.7333 8.063 14.6927 8.15939 14.6371 8.25517C13.9431 9.4765 13.0143 10.4615 11.8506 11.2102C10.687 11.9589 9.40342 12.3333 7.99997 12.3333ZM7.99997 11.3333C9.25553 11.3333 10.4083 11.0028 11.4583 10.3417C12.5083 9.68055 13.3111 8.78889 13.8666 7.66667C13.3111 6.54444 12.5083 5.65278 11.4583 4.99167C10.4083 4.33056 9.25553 4 7.99997 4C6.74442 4 5.59164 4.33056 4.54164 4.99167C3.49164 5.65278 2.68886 6.54444 2.1333 7.66667C2.68886 8.78889 3.49164 9.68055 4.54164 10.3417C5.59164 11.0028 6.74442 11.3333 7.99997 11.3333Z\"\r\n          fill=\"#505050\"\r\n        />\r\n      </g>\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const ClosedEyeIcon = () => {\r\n  return (\r\n    <svg\r\n      width=\"24\"\r\n      height=\"24\"\r\n      viewBox=\"0 0 16 16\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <mask\r\n        id=\"mask0_6673_82183\"\r\n        style={{ maskType: \"alpha\" }}\r\n        maskUnits=\"userSpaceOnUse\"\r\n        x=\"0\"\r\n        y=\"0\"\r\n        width=\"16\"\r\n        height=\"16\"\r\n      >\r\n        <rect width=\"16\" height=\"16\" fill=\"#D9D9D9\" />\r\n      </mask>\r\n      <g mask=\"url(#mask0_6673_82183)\">\r\n        <path\r\n          d=\"M9.91793 5.74876C10.1888 6.01976 10.3982 6.34903 10.5461 6.73659C10.694 7.12426 10.7499 7.51337 10.7139 7.90392C10.7139 8.03215 10.6678 8.1407 10.5756 8.22959C10.4833 8.31848 10.373 8.36292 10.2448 8.36292C10.1165 8.36292 10.008 8.31848 9.9191 8.22959C9.83021 8.1407 9.78576 8.03215 9.78576 7.90392C9.82854 7.61081 9.80443 7.33303 9.71343 7.07059C9.62243 6.80826 9.48248 6.58264 9.29359 6.39376C9.1047 6.20487 8.87693 6.06148 8.61026 5.96359C8.34359 5.8657 8.06237 5.84026 7.76659 5.88726C7.63837 5.89159 7.52771 5.84864 7.43459 5.75842C7.34137 5.66831 7.29265 5.55914 7.28843 5.43092C7.28409 5.3027 7.32532 5.19198 7.41209 5.09876C7.49887 5.00564 7.60637 4.95698 7.73459 4.95276C8.12259 4.90831 8.51254 4.95892 8.90443 5.10459C9.29632 5.25037 9.63415 5.46509 9.91793 5.74876ZM7.99993 4.00009C7.76315 4.00009 7.53087 4.01165 7.30309 4.03476C7.07532 4.05776 6.84859 4.09576 6.62293 4.14876C6.48104 4.17787 6.35326 4.15759 6.23959 4.08792C6.12593 4.01826 6.04776 3.91803 6.00509 3.78726C5.96232 3.65226 5.97643 3.52387 6.04743 3.40209C6.11832 3.28031 6.22126 3.20487 6.35626 3.17576C6.62471 3.11164 6.89587 3.06637 7.16976 3.03992C7.44376 3.01337 7.72048 3.00009 7.99993 3.00009C9.43237 3.00009 10.7482 3.37231 11.9474 4.11676C13.1465 4.8612 14.0687 5.86848 14.7139 7.13859C14.7584 7.22315 14.7907 7.30837 14.8108 7.39426C14.8309 7.48014 14.8409 7.57098 14.8409 7.66676C14.8409 7.76253 14.8326 7.85337 14.8159 7.93926C14.7993 8.02515 14.7687 8.11037 14.7243 8.19492C14.52 8.62226 14.2718 9.02076 13.9794 9.39042C13.6871 9.76009 13.3653 10.0996 13.0139 10.4091C12.9106 10.5014 12.7925 10.5396 12.6596 10.5238C12.5266 10.508 12.4174 10.4415 12.3319 10.3244C12.2465 10.2073 12.211 10.0817 12.2256 9.94759C12.2402 9.81337 12.2991 9.70009 12.4024 9.60776C12.7033 9.33509 12.9777 9.03703 13.2256 8.71359C13.4735 8.39003 13.6872 8.04109 13.8666 7.66676C13.311 6.54453 12.5083 5.65287 11.4583 4.99176C10.4083 4.33065 9.25548 4.00009 7.99993 4.00009ZM7.99993 12.3334C6.59648 12.3334 5.31015 11.9584 4.14093 11.2084C2.97171 10.4584 2.04226 9.47059 1.35259 8.24492C1.29704 8.16037 1.25643 8.06848 1.23076 7.96926C1.20509 7.87014 1.19226 7.76931 1.19226 7.66676C1.19226 7.5642 1.20337 7.46503 1.22559 7.36926C1.24782 7.27359 1.28671 7.18003 1.34226 7.08859C1.59015 6.63559 1.87093 6.20415 2.18459 5.79426C2.49826 5.38448 2.85893 5.0172 3.26659 4.69242L1.76143 3.17692C1.66921 3.07781 1.62371 2.96009 1.62493 2.82376C1.62626 2.68742 1.67521 2.57098 1.77176 2.47442C1.86832 2.37787 1.98543 2.32959 2.12309 2.32959C2.26065 2.32959 2.37771 2.37787 2.47426 2.47442L13.5256 13.5258C13.6179 13.6181 13.6669 13.7324 13.6724 13.8686C13.678 14.0049 13.629 14.1248 13.5256 14.2283C13.429 14.3248 13.3119 14.3731 13.1743 14.3731C13.0367 14.3731 12.9197 14.3248 12.8231 14.2283L10.4769 11.9026C10.0837 12.0547 9.67959 12.1645 9.2646 12.2321C8.84971 12.2996 8.42815 12.3334 7.99993 12.3334ZM3.96926 5.39492C3.57859 5.6967 3.22748 6.03792 2.91593 6.41859C2.60437 6.79937 2.34348 7.21542 2.13326 7.66676C2.68882 8.78898 3.49159 9.68064 4.54159 10.3418C5.59159 11.0029 6.74437 11.3334 7.99993 11.3334C8.28626 11.3334 8.56809 11.3142 8.84543 11.2758C9.12276 11.2373 9.3982 11.1779 9.67176 11.0976L8.82809 10.2334C8.69309 10.2924 8.55826 10.3324 8.42359 10.3533C8.28904 10.3743 8.14782 10.3848 7.99993 10.3848C7.24348 10.3848 6.60137 10.1209 6.07359 9.59309C5.54582 9.06531 5.28193 8.4232 5.28193 7.66676C5.28193 7.51887 5.29348 7.37765 5.31659 7.24309C5.33971 7.10842 5.37859 6.97359 5.43326 6.83859L3.96926 5.39492Z\"\r\n          fill=\"#C5C5C5\"\r\n        />\r\n      </g>\r\n    </svg>\r\n  );\r\n};\r\n\r\nexport const SettingIcon: React.FC = () => (\r\n  <svg\r\n    xmlns=\"http://www.w3.org/2000/svg\"\r\n    width=\"20\"\r\n    height=\"21\"\r\n    viewBox=\"0 0 20 21\"\r\n    fill=\"none\"\r\n  >\r\n    <path\r\n      d=\"M11.3748 18.8346H8.62484C8.47206 18.8346 8.33664 18.786 8.21859 18.6888C8.10053 18.5916 8.02762 18.4666 7.99984 18.3138L7.6665 16.2096C7.40262 16.1124 7.12484 15.9805 6.83317 15.8138C6.5415 15.6471 6.28456 15.4735 6.06234 15.293L4.12484 16.1888C3.97206 16.2582 3.81928 16.2687 3.6665 16.2201C3.51373 16.1714 3.39567 16.0707 3.31234 15.918L1.93734 13.4805C1.854 13.3416 1.83317 13.1957 1.87484 13.043C1.9165 12.8902 1.99984 12.7652 2.12484 12.668L3.9165 11.3555C3.88873 11.2305 3.87137 11.0881 3.86442 10.9284C3.85748 10.7687 3.854 10.6263 3.854 10.5013C3.854 10.3763 3.85748 10.2339 3.86442 10.0742C3.87137 9.9145 3.88873 9.77214 3.9165 9.64714L2.12484 8.33464C1.99984 8.23741 1.9165 8.11241 1.87484 7.95964C1.83317 7.80686 1.854 7.66102 1.93734 7.52214L3.31234 5.08464C3.39567 4.93186 3.51373 4.83116 3.6665 4.78255C3.81928 4.73394 3.97206 4.74436 4.12484 4.8138L6.06234 5.70964C6.28456 5.52908 6.5415 5.35547 6.83317 5.1888C7.12484 5.02214 7.40262 4.89714 7.6665 4.8138L7.99984 2.6888C8.02762 2.53602 8.10053 2.41102 8.21859 2.3138C8.33664 2.21658 8.47206 2.16797 8.62484 2.16797H11.3748C11.5276 2.16797 11.663 2.21658 11.7811 2.3138C11.8991 2.41102 11.9721 2.53602 11.9998 2.6888L12.3332 4.79297C12.5971 4.89019 12.8783 5.01866 13.1769 5.17839C13.4755 5.33811 13.729 5.51519 13.9373 5.70964L15.8748 4.8138C16.0276 4.74436 16.1804 4.73394 16.3332 4.78255C16.4859 4.83116 16.604 4.93186 16.6873 5.08464L18.0623 7.5013C18.1457 7.64019 18.17 7.7895 18.1353 7.94922C18.1005 8.10894 18.0137 8.23741 17.8748 8.33464L16.0832 9.60547C16.1109 9.74436 16.1283 9.89366 16.1353 10.0534C16.1422 10.2131 16.1457 10.3624 16.1457 10.5013C16.1457 10.6402 16.1422 10.786 16.1353 10.9388C16.1283 11.0916 16.1109 11.2374 16.0832 11.3763L17.8748 12.668C17.9998 12.7652 18.0832 12.8902 18.1248 13.043C18.1665 13.1957 18.1457 13.3416 18.0623 13.4805L16.6873 15.918C16.604 16.0707 16.4859 16.1714 16.3332 16.2201C16.1804 16.2687 16.0276 16.2582 15.8748 16.1888L13.9373 15.293C13.7151 15.4735 13.4616 15.6506 13.1769 15.8242C12.8922 15.9978 12.6109 16.1263 12.3332 16.2096L11.9998 18.3138C11.9721 18.4666 11.8991 18.5916 11.7811 18.6888C11.663 18.786 11.5276 18.8346 11.3748 18.8346ZM9.99984 13.2096C10.7498 13.2096 11.3887 12.9457 11.9165 12.418C12.4443 11.8902 12.7082 11.2513 12.7082 10.5013C12.7082 9.7513 12.4443 9.11241 11.9165 8.58464C11.3887 8.05686 10.7498 7.79297 9.99984 7.79297C9.24984 7.79297 8.61095 8.05686 8.08317 8.58464C7.55539 9.11241 7.2915 9.7513 7.2915 10.5013C7.2915 11.2513 7.55539 11.8902 8.08317 12.418C8.61095 12.9457 9.24984 13.2096 9.99984 13.2096ZM9.99984 11.9596C9.59706 11.9596 9.25331 11.8173 8.96859 11.5326C8.68387 11.2478 8.5415 10.9041 8.5415 10.5013C8.5415 10.0985 8.68387 9.75477 8.96859 9.47005C9.25331 9.18533 9.59706 9.04297 9.99984 9.04297C10.4026 9.04297 10.7464 9.18533 11.0311 9.47005C11.3158 9.75477 11.4582 10.0985 11.4582 10.5013C11.4582 10.9041 11.3158 11.2478 11.0311 11.5326C10.7464 11.8173 10.4026 11.9596 9.99984 11.9596ZM9.08317 17.5846H10.9165L11.2082 15.2513C11.6665 15.1402 12.1005 14.9666 12.5103 14.7305C12.92 14.4944 13.2915 14.2096 13.6248 13.8763L15.8332 14.8346L16.6665 13.3346L14.7082 11.8971C14.7637 11.661 14.8089 11.4284 14.8436 11.1992C14.8783 10.9701 14.8957 10.7374 14.8957 10.5013C14.8957 10.2652 14.8818 10.0326 14.854 9.80339C14.8262 9.57422 14.7776 9.34158 14.7082 9.10547L16.6665 7.66797L15.8332 6.16797L13.6248 7.1263C13.3054 6.76519 12.9443 6.46311 12.5415 6.22005C12.1387 5.977 11.6943 5.82075 11.2082 5.7513L10.9165 3.41797H9.08317L8.7915 5.7513C8.31928 5.84852 7.87831 6.01519 7.46859 6.2513C7.05887 6.48741 6.69428 6.77908 6.37484 7.1263L4.1665 6.16797L3.33317 7.66797L5.2915 9.10547C5.23595 9.34158 5.19081 9.57422 5.15609 9.80339C5.12137 10.0326 5.104 10.2652 5.104 10.5013C5.104 10.7374 5.12137 10.9701 5.15609 11.1992C5.19081 11.4284 5.23595 11.661 5.2915 11.8971L3.33317 13.3346L4.1665 14.8346L6.37484 13.8763C6.70817 14.2096 7.0797 14.4944 7.48942 14.7305C7.89914 14.9666 8.33317 15.1402 8.7915 15.2513L9.08317 17.5846Z\"\r\n      fill=\"#0E0C0B\"\r\n      fill-opacity=\"0.7\"\r\n    />\r\n  </svg>\r\n);\r\n","import {\r\n  BoardIcon,\r\n  CalendarIcon,\r\n  ChartsIcon,\r\n  CloseIcon,\r\n  GalleryIcon,\r\n  ListIcon,\r\n  TableIcon,\r\n  TimeLineIcon,\r\n} from \"../../assets/svg\";\r\nimport { Box, Typography, ButtonBase, Grid, IconButton } from \"@mui/material\";\r\n\r\ninterface LayoutSelectorProps {\r\n  onSelect: (layout: string) => void;\r\n  selectedLayout?: string;\r\n}\r\n\r\nconst layoutIcons: Record<string, JSX.Element> = {\r\n  Board: <BoardIcon />,\r\n  Table: <TableIcon />,\r\n  Timeline: <TimeLineIcon />,\r\n  List: <ListIcon />,\r\n  Calendar: <CalendarIcon />,\r\n  Gallery: <GalleryIcon />,\r\n  Charts: <ChartsIcon />,\r\n};\r\n\r\nconst LayoutSelector = ({ onSelect, selectedLayout }: LayoutSelectorProps) => {\r\n  return (\r\n    <Box\r\n      sx={{\r\n        width: \"100%\",\r\n        maxWidth: \"500px\",\r\n        height: \"330px\",\r\n        // backgroundColor: \"#fff\",\r\n        // borderRadius: 2,\r\n        // overflow: \"hidden\",\r\n      }}\r\n    >\r\n      <Box\r\n        sx={{\r\n          display: \"flex\",\r\n          justifyContent: \"space-between\",\r\n          alignItems: \"center\",\r\n          px: 3,\r\n          py: 2,\r\n          // borderBottom: \"1px solid #eee\",\r\n          backgroundColor: \"#FBFBFC\",\r\n        }}\r\n      >\r\n        <Typography\r\n          variant=\"h5\"\r\n          sx={{ fontWeight: 400, fontSize: 18, color: \"#0C2033\" }}\r\n        >\r\n          Layouts\r\n        </Typography>\r\n        <IconButton onClick={() => onSelect(\"close\")}>\r\n          <CloseIcon />\r\n        </IconButton>\r\n      </Box>\r\n\r\n      {/* Layout Grid */}\r\n      <Grid container spacing={2} sx={{ p: 3 }}>\r\n        {Object.keys(layoutIcons).map((layout) => {\r\n          const isSelected = layout === selectedLayout;\r\n          return (\r\n            <Grid size={3} key={layout}>\r\n              <ButtonBase\r\n                onClick={() => onSelect(layout)}\r\n                sx={{\r\n                  border: isSelected\r\n                    ? \"1.5px solid #1E1E1E\"\r\n                    : \"1.5px solid #E5E7EB\",\r\n                  borderRadius: 2,\r\n                  p: 2,\r\n                  width: \"100%\",\r\n                  height: \"100%\",\r\n                  flexDirection: \"column\",\r\n                  backgroundColor: isSelected ? \"#fff\" : \"\",\r\n                  transition: \"0.3s\",\r\n                  boxShadow: isSelected\r\n                    ? \"0px 2px 6px rgba(0,0,0,0.06)\"\r\n                    : \"none\",\r\n                }}\r\n              >\r\n                <Box mb={1}>{layoutIcons[layout]}</Box>\r\n                <Typography\r\n                  variant=\"subtitle1\"\r\n                  sx={{\r\n                    color: \"#1E1E1E\",\r\n                    fontWeight: isSelected ? 400 : 200,\r\n                    opacity: isSelected ? 1 : 0.5,\r\n                  }}\r\n                >\r\n                  {layout}\r\n                </Typography>\r\n              </ButtonBase>\r\n            </Grid>\r\n          );\r\n        })}\r\n      </Grid>\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default LayoutSelector;\r\n","import { useEffect, useState } from \"react\";\r\n\r\nexport function useFullscreenPopoverContainer() {\r\n  const [isFullscreen, setIsFullscreen] = useState<boolean>(\r\n    !!document.fullscreenElement\r\n  );\r\n  const [container, setContainer] = useState<Element | undefined>(\r\n    document.fullscreenElement ?? undefined\r\n  );\r\n\r\n  useEffect(() => {\r\n    const handleFullscreenChange = () => {\r\n      const el = document.fullscreenElement ?? undefined;\r\n      setIsFullscreen(!!el);\r\n      setContainer(el);\r\n    };\r\n\r\n    document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\r\n    return () => {\r\n      document.removeEventListener(\"fullscreenchange\", handleFullscreenChange);\r\n    };\r\n  }, []);\r\n\r\n  return { isFullscreen, container };\r\n}\r\n","import React from \"react\";\r\nimport {\r\n  Popover,\r\n  Typography,\r\n  Box,\r\n  MenuItem,\r\n  Select,\r\n  IconButton,\r\n  Switch as MUISwitch,\r\n} from \"@mui/material\";\r\nimport { CloseIcon, ViewMoreIcon } from \"../../../assets/svg\";\r\nimport { useFullscreenPopoverContainer } from \"../../libs/hooks/useFullScreen\";\r\nimport { CraftTableOptionsProps } from \"../../types/table-options\";\r\n\r\n// interface ViewMorePopoverProps {\r\n//   compactMode: boolean;\r\n//   onCompactToggle: (value: string) => void;\r\n//   isFullscreen: boolean;\r\n//   onFullscreenToggle: () => void;\r\n//   groupBy: string;\r\n//   onGroupByChange: (value: string) => void;\r\n//   tableStates: CraftTableOptionsProps;\r\n// }\r\n\r\n// const ViewMore = ({\r\n//   compactMode,\r\n//   onCompactToggle,\r\n//   isFullscreen,\r\n//   onFullscreenToggle,\r\n//   // groupBy,\r\n//   // onGroupByChange,\r\n//   tableStates,\r\n// }: ViewMorePopoverProps) => {\r\n//   const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\r\n\r\n//   const open = Boolean(anchorEl);\r\n//   const { container: fullscreenContainer } = useFullscreenPopoverContainer();\r\n\r\n//   const handleClick = (event: React.MouseEvent<HTMLElement>) => {\r\n//     setAnchorEl(event.currentTarget);\r\n//   };\r\n\r\n//   const handleClose = () => {\r\n//     setAnchorEl(null);\r\n//   };\r\n\r\n//   const { wrapColumns, setWrapColumns } = tableStates;\r\n\r\n//   const onWrapCellToggle = () => {\r\n//     setWrapColumns((prev: Record<string, boolean>) => ({\r\n//       all_wrap: !prev[\"all_wrap\"],\r\n//     }));\r\n//   };\r\n\r\n//   return (\r\n//     <>\r\n//       <div onClick={handleClick}>\r\n//         <ViewMoreIcon />\r\n//       </div>\r\n\r\n//       <Popover\r\n//         open={open}\r\n//         anchorEl={anchorEl}\r\n//         onClose={handleClose}\r\n//         container={fullscreenContainer}\r\n//         anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n//         transformOrigin={{ vertical: \"top\", horizontal: \"left\" }}\r\n//         PaperProps={{\r\n//           sx: {\r\n//             mt: 2,\r\n//             padding: 3,\r\n//             width: 380,\r\n//             borderRadius: 1,\r\n//             boxShadow: 4,\r\n//           },\r\n//         }}\r\n//       >\r\n//         <Box\r\n//           display=\"flex\"\r\n//           justifyContent=\"space-between\"\r\n//           alignItems=\"center\"\r\n//           px={2}\r\n//           py={2}\r\n//           sx={{\r\n//             backgroundColor: \"#F9FAFB\",\r\n//             // borderBottom: \"1px solid #E0E0E0\",\r\n//             // borderTopLeftRadius: 4,\r\n//             // borderTopRightRadius: 4,\r\n//             margin: \"-24px -24px 24px -24px\",\r\n//           }}\r\n//         >\r\n//           <Typography fontSize=\"18px\" fontWeight={400} color=\"#0C2033\">\r\n//             View\r\n//           </Typography>\r\n//           <IconButton size=\"small\" onClick={handleClose}>\r\n//             <CloseIcon />\r\n//           </IconButton>\r\n//         </Box>\r\n\r\n//         {/* Wrap Cell */}\r\n//         <Box\r\n//           display=\"flex\"\r\n//           justifyContent=\"space-between\"\r\n//           alignItems=\"center\"\r\n//           mb={2}\r\n//         >\r\n//           <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n//             Wrap Cell\r\n//           </Typography>\r\n//           <MUISwitch\r\n//             checked={wrapColumns?.all_wrap || false}\r\n//             onChange={onWrapCellToggle}\r\n//           />\r\n//         </Box>\r\n\r\n//         {/* List View */}\r\n//         <Box\r\n//           display=\"flex\"\r\n//           justifyContent=\"space-between\"\r\n//           alignItems=\"center\"\r\n//           mb={2}\r\n//         >\r\n//           <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n//             List View\r\n//           </Typography>\r\n//           <Select\r\n//             size=\"small\"\r\n//             value={compactMode ? \"Compact\" : \"Comfy\"}\r\n//             onChange={(e) => onCompactToggle(e.target.value)}\r\n//             sx={{\r\n//               minWidth: 120,\r\n//               fontWeight: 400,\r\n//               color: \"#000\",\r\n//               fontSize: \"13px\",\r\n//             }}\r\n//             MenuProps={{\r\n//               container: fullscreenContainer,\r\n//               disablePortal: false,\r\n//               PaperProps: {\r\n//                 style: {\r\n//                   zIndex: 1500,\r\n//                 },\r\n//               },\r\n//             }}\r\n//           >\r\n//             <MenuItem value=\"Comfy\">Comfy</MenuItem>\r\n//             <MenuItem value=\"Compact\">Compact</MenuItem>\r\n//           </Select>\r\n//         </Box>\r\n\r\n//         {/* Group By */}\r\n//         {/* <Box\r\n//           display=\"flex\"\r\n//           justifyContent=\"space-between\"\r\n//           alignItems=\"center\"\r\n//           mb={2}\r\n//         >\r\n//           <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n//             Group By\r\n//           </Typography>\r\n//           <Select\r\n//             size=\"small\"\r\n//             value={groupBy}\r\n//             onChange={(e) => onGroupByChange(e.target.value)}\r\n//             sx={{\r\n//               minWidth: 120,\r\n//               fontWeight: 400,\r\n//               color: \"#000\",\r\n//               fontSize: \"13px\",\r\n//             }}\r\n//             MenuProps={{\r\n//               container: fullscreenContainer,\r\n//               disablePortal: false,\r\n//               PaperProps: {\r\n//                 style: {\r\n//                   zIndex: 1500,\r\n//                 },\r\n//               },\r\n//             }}\r\n//           >\r\n//             <MenuItem value=\"None\">None</MenuItem>\r\n//             <MenuItem value=\"Status\">Status</MenuItem>\r\n//             <MenuItem value=\"Owner\">Owner</MenuItem>\r\n//           </Select>\r\n//         </Box> */}\r\n\r\n//         {/* Fullscreen */}\r\n//         <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\">\r\n//           <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n//             Fullscreen\r\n//           </Typography>\r\n//           <MUISwitch checked={isFullscreen} onChange={onFullscreenToggle} />\r\n//         </Box>\r\n//       </Popover>\r\n//     </>\r\n//   );\r\n// };\r\n\r\n// export default ViewMore;\r\n\r\ninterface ViewMoreProps {\r\n  compactMode: boolean;\r\n  onCompactToggle: (value: string) => void;\r\n  isFullscreen: boolean;\r\n  onFullscreenToggle: () => void;\r\n  groupBy?: string;\r\n  onGroupByChange?: (value: string) => void;\r\n  tableStates: CraftTableOptionsProps;\r\n  onClose?: () => void;\r\n}\r\n\r\nconst ViewMore = ({\r\n  compactMode,\r\n  onCompactToggle,\r\n  isFullscreen,\r\n  onFullscreenToggle,\r\n  // groupBy,\r\n  // onGroupByChange,\r\n  tableStates,\r\n  onClose,\r\n}: ViewMoreProps) => {\r\n  const { container: fullscreenContainer } = useFullscreenPopoverContainer();\r\n  const { wrapColumns, setWrapColumns } = tableStates;\r\n\r\n  const onWrapCellToggle = () => {\r\n    setWrapColumns((prev: Record<string, boolean>) => ({\r\n      all_wrap: !prev[\"all_wrap\"],\r\n    }));\r\n  };\r\n\r\n  return (\r\n    <Box sx={{ p: 3, width: 380 }}>\r\n      {/* Header */}\r\n      <Box\r\n        display=\"flex\"\r\n        justifyContent=\"space-between\"\r\n        alignItems=\"center\"\r\n        mb={3}\r\n      >\r\n        <Typography fontSize=\"18px\" fontWeight={400} color=\"#0C2033\">\r\n          View\r\n        </Typography>\r\n        <IconButton size=\"small\" onClick={onClose}>\r\n          <CloseIcon />\r\n        </IconButton>\r\n      </Box>\r\n\r\n      {/* Wrap Cell */}\r\n      <Box\r\n        display=\"flex\"\r\n        justifyContent=\"space-between\"\r\n        alignItems=\"center\"\r\n        mb={2}\r\n      >\r\n        <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n          Wrap Cell\r\n        </Typography>\r\n        <MUISwitch\r\n          checked={wrapColumns?.all_wrap || false}\r\n          onChange={onWrapCellToggle}\r\n        />\r\n      </Box>\r\n\r\n      {/* List View */}\r\n      {/* <Box\r\n        display=\"flex\"\r\n        justifyContent=\"space-between\"\r\n        alignItems=\"center\"\r\n        mb={2}\r\n      >\r\n        <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n          List View\r\n        </Typography>\r\n        <Select\r\n          size=\"small\"\r\n          value={compactMode ? \"Compact\" : \"Comfy\"}\r\n          onChange={(e) => onCompactToggle(e.target.value)}\r\n          sx={{\r\n            minWidth: 120,\r\n            fontWeight: 400,\r\n            color: \"#000\",\r\n            fontSize: \"13px\",\r\n          }}\r\n          MenuProps={{\r\n            container: fullscreenContainer,\r\n            disablePortal: false,\r\n            PaperProps: {\r\n              style: {\r\n                zIndex: 1500,\r\n              },\r\n            },\r\n          }}\r\n        >\r\n          <MenuItem value=\"Comfy\">Comfy</MenuItem>\r\n          <MenuItem value=\"Compact\">Compact</MenuItem>\r\n        </Select>\r\n      </Box> */}\r\n\r\n      {/* Fullscreen */}\r\n      <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\">\r\n        <Typography fontSize=\"14px\" fontWeight={400} color=\"#000000DE\">\r\n          Fullscreen\r\n        </Typography>\r\n        <MUISwitch checked={isFullscreen} onChange={onFullscreenToggle} />\r\n      </Box>\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default ViewMore;\r\n","import React from \"react\";\r\nimport { useSortable } from \"@dnd-kit/sortable\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { DragHandleIcon } from \"../../../assets/svg\";\r\n\r\nconst SortableItem = ({\r\n  id,\r\n  children,\r\n}: {\r\n  id: string;\r\n  children: React.ReactNode;\r\n}) => {\r\n  const { attributes, listeners, setNodeRef, transform, transition } =\r\n    useSortable({ id });\r\n\r\n  return (\r\n    <div\r\n      ref={setNodeRef}\r\n      style={{\r\n        transform: CSS.Transform.toString(transform),\r\n        transition,\r\n        display: \"flex\",\r\n        alignItems: \"center\",\r\n        gap: 8,\r\n      }}\r\n    >\r\n      <span {...attributes} {...listeners} style={{ cursor: \"grab\" }}>\r\n        <DragHandleIcon />\r\n      </span>\r\n      <div style={{ flexGrow: 1 }}>{children}</div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default SortableItem;\r\n","import { useState } from \"react\";\r\nimport {\r\n  Popover,\r\n  Box,\r\n  IconButton,\r\n  MenuItem,\r\n  Select,\r\n  Typography,\r\n  Button,\r\n} from \"@mui/material\";\r\nimport {\r\n  DndContext,\r\n  closestCenter,\r\n  useSensor,\r\n  useSensors,\r\n  MouseSensor,\r\n  TouchSensor,\r\n  KeyboardSensor,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n  arrayMove,\r\n  SortableContext,\r\n  verticalListSortingStrategy,\r\n} from \"@dnd-kit/sortable\";\r\nimport SortableItem from \"./sorting-item\";\r\nimport { AddIcon, CloseIcon } from \"../../../assets/svg\";\r\n\r\ninterface SortItem {\r\n  id: string;\r\n  field: string;\r\n  direction: \"asc\" | \"desc\";\r\n}\r\n\r\ntype SortPopoverProps = {\r\n  anchorEl: HTMLElement | null;\r\n  onClose: () => void;\r\n  columns: { id: string; label: string }[];\r\n  onChange: (sorting: { id: string; desc: boolean }[]) => void;\r\n};\r\n\r\nconst SortPopover = ({\r\n  anchorEl,\r\n  onClose,\r\n  columns,\r\n  onChange,\r\n}: SortPopoverProps) => {\r\n  const [sorts, setSorts] = useState<SortItem[]>([]);\r\n\r\n  const sensors = useSensors(\r\n    useSensor(MouseSensor),\r\n    useSensor(TouchSensor),\r\n    useSensor(KeyboardSensor)\r\n  );\r\n\r\n  const handleDragEnd = (event: any) => {\r\n    const { active, over } = event;\r\n    if (active.id !== over.id) {\r\n      const oldIndex = sorts.findIndex((item) => item.id === active.id);\r\n      const newIndex = sorts.findIndex((item) => item.id === over.id);\r\n      const updated = arrayMove(sorts, oldIndex, newIndex);\r\n      setSorts(updated);\r\n      triggerTableSortUpdate(updated);\r\n    }\r\n  };\r\n\r\n  const handleChange = (id: string, field: keyof SortItem, value: any) => {\r\n    const updated = sorts.map((item) =>\r\n      item.id === id ? { ...item, [field]: value } : item\r\n    );\r\n    setSorts(updated);\r\n    triggerTableSortUpdate(updated);\r\n  };\r\n\r\n  const handleAddSort = () => {\r\n    const newSort: SortItem = {\r\n      id: Date.now().toString(),\r\n      field: columns[0]?.id ?? \"\",\r\n      direction: \"asc\",\r\n    };\r\n    const updated = [...sorts, newSort];\r\n    setSorts(updated);\r\n    triggerTableSortUpdate(updated);\r\n  };\r\n\r\n  const handleRemove = (id: string) => {\r\n    const updated = sorts.filter((item) => item.id !== id);\r\n    setSorts(updated);\r\n    triggerTableSortUpdate(updated);\r\n  };\r\n\r\n  const triggerTableSortUpdate = (sortItems: SortItem[]) => {\r\n    const sortingPayload = sortItems.map((item) => ({\r\n      id: item.field,\r\n      desc: item.direction === \"desc\",\r\n    }));\r\n    onChange(sortingPayload);\r\n  };\r\n\r\n  return (\r\n    <Popover\r\n      open={Boolean(anchorEl)}\r\n      anchorEl={anchorEl}\r\n      onClose={onClose}\r\n      anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n    >\r\n      <Box p={2} minWidth={300}>\r\n        <Box\r\n          display=\"flex\"\r\n          justifyContent=\"space-between\"\r\n          alignItems=\"center\"\r\n          px={2}\r\n          py={1}\r\n          sx={{\r\n            backgroundColor: \"#F9FAFB\",\r\n            // borderBottom: \"1px solid #E0E0E0\",\r\n            margin: \"-16px -16px 16px -16px\",\r\n          }}\r\n        >\r\n          <Typography fontSize=\"18px\" fontWeight={600} color=\"#0C2033\">\r\n            Sort By\r\n          </Typography>\r\n          <IconButton size=\"small\" onClick={onClose}>\r\n            <CloseIcon />\r\n          </IconButton>\r\n        </Box>\r\n\r\n        {sorts.length > 0 && (\r\n          <DndContext\r\n            sensors={sensors}\r\n            collisionDetection={closestCenter}\r\n            onDragEnd={handleDragEnd}\r\n          >\r\n            <SortableContext\r\n              items={sorts.map((s) => s.id)}\r\n              strategy={verticalListSortingStrategy}\r\n            >\r\n              {sorts.map((sort) => (\r\n                <SortableItem key={sort.id} id={sort.id}>\r\n                  <Box display=\"flex\" gap={1} alignItems=\"center\" mb={1}>\r\n                    <Select\r\n                      value={sort.field}\r\n                      onChange={(e) =>\r\n                        handleChange(sort.id, \"field\", e.target.value)\r\n                      }\r\n                      size=\"small\"\r\n                      fullWidth\r\n                      sx={{ fontWeight: 400, fontSize: 14, color: \"#000\" }}\r\n                    >\r\n                      {columns.map((col) => (\r\n                        <MenuItem key={col.id} value={col.id}>\r\n                          {col.label}\r\n                        </MenuItem>\r\n                      ))}\r\n                    </Select>\r\n                    <Select\r\n                      value={sort.direction}\r\n                      onChange={(e) =>\r\n                        handleChange(sort.id, \"direction\", e.target.value)\r\n                      }\r\n                      size=\"small\"\r\n                      sx={{ fontWeight: 400, fontSize: 14, color: \"#000\" }}\r\n                    >\r\n                      <MenuItem value=\"asc\">Ascending</MenuItem>\r\n                      <MenuItem value=\"desc\">Descending</MenuItem>\r\n                    </Select>\r\n                    <IconButton\r\n                      size=\"small\"\r\n                      onClick={() => handleRemove(sort.id)}\r\n                    >\r\n                      <CloseIcon />\r\n                    </IconButton>\r\n                  </Box>\r\n                </SortableItem>\r\n              ))}\r\n            </SortableContext>\r\n          </DndContext>\r\n        )}\r\n\r\n        <Button\r\n          onClick={handleAddSort}\r\n          startIcon={\r\n            <span>\r\n              <AddIcon />\r\n            </span>\r\n          }\r\n          size=\"small\"\r\n          sx={{\r\n            fontWeight: 400,\r\n            fontSize: 12,\r\n            color: \"#888888\",\r\n          }}\r\n        >\r\n          Add Sort\r\n        </Button>\r\n      </Box>\r\n    </Popover>\r\n  );\r\n};\r\n\r\nexport default SortPopover;\r\n","import { useSortable } from \"@dnd-kit/sortable\";\r\nimport { Box, Typography } from \"@mui/material\";\r\nimport {\r\n  DragandDrogIcon,\r\n  VisibilityIcon,\r\n  VisibilityOffIcon,\r\n} from \"../../../assets/svg\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { camelCaseToTitle } from \"../../types/common\";\r\n\r\nconst DraggableColumn = ({\r\n  column,\r\n  onToggle,\r\n}: {\r\n  column: any;\r\n  onToggle: () => void;\r\n}) => {\r\n  const { attributes, listeners, setNodeRef, transform, transition } =\r\n    useSortable({\r\n      id: column.id,\r\n    });\r\n\r\n  const style = {\r\n    transform: CSS.Transform.toString(transform),\r\n    transition,\r\n  };\r\n\r\n  const isVisible = column.getIsVisible();\r\n  const label =\r\n    typeof column.columnDef.header === \"string\"\r\n      ? column.columnDef.header\r\n      : column.id;\r\n\r\n  return (\r\n    <div ref={setNodeRef} style={style} {...attributes} className=\"column-row\">\r\n      <Box {...listeners} className=\"drag-icon\">\r\n        <DragandDrogIcon />\r\n      </Box>\r\n      <Typography>{camelCaseToTitle(label as string)}</Typography>\r\n      <Box onClick={onToggle} className=\"visibility-icon\">\r\n        {isVisible ? <VisibilityIcon /> : <VisibilityOffIcon />}\r\n      </Box>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default DraggableColumn;\r\n","export interface defaultColumnsProps {\r\n  id: number;\r\n  name: string;\r\n  department: string;\r\n  position: string;\r\n  email: string;\r\n  location: string;\r\n  phone: string;\r\n  dateOfJoining: string;\r\n  salary: number;\r\n  performanceRating: string;\r\n  subRows?: any;\r\n}\r\n\r\nexport interface amountFormatProps {\r\n  amount: number;\r\n  decimal?: boolean;\r\n  removeFloat?: boolean;\r\n  compactFormat?: \"crore\" | \"10lakh\" | \"lakh\";\r\n}\r\n\r\nexport interface formatDateProps {\r\n  date: string;\r\n  style: string;\r\n}\r\n\r\nexport type alignProps = \"left\" | \"center\" | \"right\";\r\nexport interface align {\r\n  align: alignProps;\r\n}\r\n\r\nexport const camelCaseToTitle = (str: string): string => {\r\n  if (!str) return \"\";\r\n\r\n  return str\r\n    .replace(/_/g, \" \") // Replace underscores with spaces\r\n    .replace(/([a-z])([A-Z])/g, \"$1 $2\") // Add space between camelCase transitions\r\n    .replace(/\\b\\w/g, (char) => char.toUpperCase()) // Capitalize each word's first letter\r\n    .trim();\r\n};\r\n\r\n//API INTEGRATION\r\nexport interface EntityTableAPIProps {\r\n  entity_type?: string;\r\n  page: number;\r\n  size: number;\r\n  tabs?: {\r\n    columnName: string;\r\n    sortBy: \"ASC\" | \"DSC\";\r\n    value?: string;\r\n    name?: string;\r\n  };\r\n  sortby?: {\r\n    sortColum: string;\r\n    sortType: \"ASC\" | \"DSC\";\r\n  }[];\r\n  quickFilter?: {\r\n    filter_attribute: string;\r\n    filter_operator: string;\r\n    filter_value: string[] | string;\r\n  }[];\r\n  attributeFilter?: {\r\n    filter_attribute: string;\r\n    filter_operator: string;\r\n    filter_value: string[] | string;\r\n  }[];\r\n  flatJson: boolean;\r\n  module_code?: string;\r\n  getAllAttributes?: boolean;\r\n}\r\n\r\nexport interface viewSettingsDropDownAPIProps {\r\n  entity_type: string;\r\n  column: string | undefined;\r\n  sort_by: string | undefined;\r\n}\r\n\r\ninterface EntityListTab {\r\n  tab_name: string | null;\r\n  count: string | number;\r\n}\r\n\r\ninterface EntityList {\r\n  id: string;\r\n  entity_type: string;\r\n  name: string;\r\n  status: string | null;\r\n  parent_type: string | null;\r\n  parent_id: string | null;\r\n  code: string;\r\n  created_by: string | null;\r\n  created_date: string | null;\r\n  modified_by: string | null;\r\n  modified_date: string | null;\r\n  enterprise_id: string | null;\r\n  organization_id: number | null;\r\n  app_code: string | null;\r\n  is_system: number | null;\r\n  description: string | null;\r\n}\r\n\r\nexport interface EntityListingResponse {\r\n  data: {\r\n    entity_tabs: EntityListTab[];\r\n    entity_list: EntityList[];\r\n  };\r\n}\r\n\r\nexport interface APIParamsProps {\r\n  page?: number;\r\n  size?: number;\r\n  use_flatjson?: boolean;\r\n}\r\n\r\nexport type DropdownOption = {\r\n  value: string | number;\r\n  label: string;\r\n};\r\n\r\nexport interface onFilterChangeFunctionProps {\r\n  updatedFilters?: any;\r\n  filterMaster?: any;\r\n  filters?: any;\r\n}\r\n","import React from \"react\";\r\nimport {\r\n  DndContext,\r\n  closestCenter,\r\n  useSensor,\r\n  useSensors,\r\n  MouseSensor,\r\n  TouchSensor,\r\n  KeyboardSensor,\r\n  DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n  SortableContext,\r\n  arrayMove,\r\n  verticalListSortingStrategy,\r\n} from \"@dnd-kit/sortable\";\r\nimport { Popover, IconButton, Typography, Box } from \"@mui/material\";\r\nimport { Table } from \"@tanstack/react-table\";\r\nimport DraggableColumn from \"./column-list-item\";\r\nimport \"./index.scss\";\r\nimport { CloseIcon } from \"../../../assets/svg\";\r\n\r\ninterface ColumnToggleProps<T> {\r\n  anchorEl: HTMLElement | null;\r\n  onClose: () => void;\r\n  table: Table<T>;\r\n  columnOrder: string[];\r\n  setColumnOrder: React.Dispatch<React.SetStateAction<string[]>>;\r\n}\r\n\r\nconst ColumnToggle = <T,>({\r\n  anchorEl,\r\n  onClose,\r\n  table,\r\n  columnOrder,\r\n  setColumnOrder,\r\n}: ColumnToggleProps<T>) => {\r\n  const open = Boolean(anchorEl);\r\n  const sensors = useSensors(\r\n    useSensor(MouseSensor),\r\n    useSensor(TouchSensor),\r\n    useSensor(KeyboardSensor)\r\n  );\r\n\r\n  const allColumns = table.getAllLeafColumns();\r\n\r\n  const shownColumns = columnOrder\r\n    .map((id) => allColumns.find((col) => col.id === id))\r\n    .filter((col) => col?.getIsVisible());\r\n\r\n  const hiddenColumns = columnOrder\r\n    .map((id) => allColumns.find((col) => col.id === id))\r\n    .filter((col) => col && !col.getIsVisible());\r\n\r\n  const handleDragEnd = (event: DragEndEvent) => {\r\n    const { active, over } = event;\r\n\r\n    if (!over || active.id === over.id) return;\r\n\r\n    const activeCol = table.getColumn(active.id as string);\r\n    const overCol = table.getColumn(over.id as string);\r\n    if (!activeCol || !overCol) return;\r\n\r\n    const activeVisible = activeCol.getIsVisible();\r\n    const overVisible = overCol.getIsVisible();\r\n\r\n    if (activeVisible !== overVisible) {\r\n      activeCol.toggleVisibility();\r\n    }\r\n\r\n    const oldIndex = columnOrder.indexOf(active.id as string);\r\n    const newIndex = columnOrder.indexOf(over.id as string);\r\n    setColumnOrder(arrayMove(columnOrder, oldIndex, newIndex));\r\n  };\r\n\r\n  const toggleVisibility = (columnId: string) => {\r\n    const col = table.getColumn(columnId);\r\n    col?.toggleVisibility();\r\n  };\r\n\r\n  const handleHideAll = () => {\r\n    allColumns.forEach((col) => col.toggleVisibility(false));\r\n  };\r\n\r\n  const handleShowAll = () => {\r\n    allColumns.forEach((col) => col.toggleVisibility(true));\r\n  };\r\n\r\n  return (\r\n    <Popover\r\n      open={open}\r\n      anchorEl={anchorEl}\r\n      onClose={onClose}\r\n      anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n      sx={{ width: \"600px\" }}\r\n    >\r\n      <div className=\"column-manager\">\r\n        <div className=\"header\">\r\n          <Typography variant=\"h6\">Column</Typography>\r\n          <IconButton size=\"small\" onClick={onClose}>\r\n            <CloseIcon />\r\n          </IconButton>\r\n        </div>\r\n\r\n        <div className=\"content-wrapper\">\r\n          <DndContext\r\n            sensors={sensors}\r\n            collisionDetection={closestCenter}\r\n            onDragEnd={handleDragEnd}\r\n          >\r\n            <div className=\"list-section\">\r\n              <div className=\"list-header\">\r\n                <Typography variant=\"subtitle2\">Shown in List</Typography>\r\n                {/* <button onClick={handleHideAll}>Hide All</button> */}\r\n                <Box\r\n                  onClick={handleHideAll}\r\n                  fontStyle={{\r\n                    cursor: \"pointer\",\r\n                    color: \"#C5C5C5\",\r\n                    fontSize: \"12px\",\r\n                  }}\r\n                >\r\n                  Hide All\r\n                </Box>\r\n              </div>\r\n              <SortableContext\r\n                items={shownColumns.map((col) => col!.id)}\r\n                strategy={verticalListSortingStrategy}\r\n              >\r\n                {shownColumns.map((col) => (\r\n                  <DraggableColumn\r\n                    key={col!.id}\r\n                    column={col!}\r\n                    onToggle={() => toggleVisibility(col!.id)}\r\n                  />\r\n                ))}\r\n              </SortableContext>\r\n            </div>\r\n\r\n            <div className=\"list-section\">\r\n              <div className=\"list-header\">\r\n                <Typography variant=\"subtitle2\">Hidden in List</Typography>\r\n                {/* <button onClick={handleShowAll}>Show All</button> */}\r\n                <Box\r\n                  onClick={handleShowAll}\r\n                  fontStyle={{\r\n                    cursor: \"pointer\",\r\n                    color: \"#C5C5C5\",\r\n                    fontSize: \"12px\",\r\n                  }}\r\n                >\r\n                  Show All\r\n                </Box>\r\n              </div>\r\n              <SortableContext\r\n                items={hiddenColumns.map((col) => col!.id)}\r\n                strategy={verticalListSortingStrategy}\r\n              >\r\n                {hiddenColumns.map((col) => (\r\n                  <DraggableColumn\r\n                    key={col!.id}\r\n                    column={col!}\r\n                    onToggle={() => toggleVisibility(col!.id)}\r\n                  />\r\n                ))}\r\n              </SortableContext>\r\n            </div>\r\n          </DndContext>\r\n        </div>\r\n      </div>\r\n    </Popover>\r\n  );\r\n};\r\n\r\nexport default ColumnToggle;\r\n","export const customDebounce = <T extends (...args: any[]) => any>(\r\n  func: T,\r\n  delay: number\r\n) => {\r\n  let timerId: NodeJS.Timeout;\r\n\r\n  return function (this: any, ...args: Parameters<T>) {\r\n    const context = this;\r\n\r\n    clearTimeout(timerId);\r\n    timerId = setTimeout(() => {\r\n      func.apply(context, args);\r\n    }, delay);\r\n  };\r\n};\r\n","import { Theme } from \"@emotion/react\";\r\nimport { SxProps } from \"@mui/material\";\r\n\r\nexport interface StyleProps {\r\n  searchField: (showSearchInput: boolean) => SxProps<Theme>;\r\n}\r\n\r\nexport const searchStyles: StyleProps = {\r\n  searchField: (showSearchInput: boolean): SxProps<Theme> => ({\r\n    width: showSearchInput ? \"180px\" : \"40px\",\r\n    transition: \"all 0.3s ease\",\r\n    opacity: showSearchInput ? 1 : 0.8,\r\n    marginRight: \"0.5rem\",\r\n\r\n    \"& .MuiOutlinedInput-root\": {\r\n      paddingRight: \"4px\",\r\n      height: \"32px\",\r\n      borderRadius: \"6px\",\r\n      backgroundColor: \"#fff\",\r\n      border: showSearchInput ? \"1px solid #ccc\" : \"none\",\r\n    },\r\n\r\n    \"& .MuiOutlinedInput-notchedOutline\": {\r\n      border: \"none\",\r\n    },\r\n\r\n    \"&:hover .MuiOutlinedInput-notchedOutline\": {\r\n      border: \"none\",\r\n    },\r\n\r\n    \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {},\r\n\r\n    \" & .css-4bojcr-MuiInputBase-root-MuiOutlinedInput-root \": {\r\n      paddingLeft: \"6px !important\",\r\n    },\r\n    \"& .css-1mnoz6i-MuiInputBase-root-MuiOutlinedInput-root\": {\r\n      paddingLeft: \"6px !important\",\r\n    },\r\n  }),\r\n};\r\n","import React, { useState, useRef, useEffect, useCallback } from \"react\";\r\nimport { SearchIcon } from \"../../../assets/svg\";\r\nimport useOutsideClick from \"../../libs/hooks/useOutsideClick\";\r\nimport { customDebounce } from \"../../libs/utils/debounce\";\r\nimport { Box, IconButton, InputAdornment, TextField } from \"@mui/material\";\r\nimport CloseRoundedIcon from \"@mui/icons-material/CloseRounded\";\r\nimport { searchStyles } from \"./style\";\r\n\r\ninterface TableSearchProps {\r\n  value: string;\r\n  onChange: (value: string) => void;\r\n}\r\n\r\nexport const TableSearch = ({\r\n  value,\r\n  onChange,\r\n}: TableSearchProps): JSX.Element => {\r\n  const [showSearchInput, setShowSearchInput] = useState(false);\r\n  const [localValue, setLocalValue] = useState(value);\r\n  const searchContainerRef = useRef<HTMLDivElement>(null);\r\n\r\n  // Debounced onChange function\r\n  const debouncedOnChange = useCallback(\r\n    customDebounce((newValue: string) => {\r\n      onChange(newValue);\r\n    }, 1000),\r\n    [onChange]\r\n  );\r\n\r\n  // Sync local state with prop value\r\n  useEffect(() => {\r\n    setLocalValue(value);\r\n  }, [value]);\r\n\r\n  useOutsideClick({\r\n    ref: searchContainerRef,\r\n    handler: () => {\r\n      setShowSearchInput(false);\r\n    },\r\n  });\r\n\r\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n    const newValue = e.target.value;\r\n    setLocalValue(newValue);\r\n    debouncedOnChange(newValue);\r\n  };\r\n\r\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n    if (e.key === \"Enter\") {\r\n      onChange(localValue);\r\n    }\r\n    if (e.key === \"Escape\") {\r\n      setShowSearchInput(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <Box\r\n      ref={searchContainerRef}\r\n      className=\"search-container\"\r\n      sx={{ position: \"relative\" }}\r\n    >\r\n      <TextField\r\n        type=\"text\"\r\n        placeholder=\"Search\"\r\n        value={localValue}\r\n        onChange={handleChange}\r\n        onKeyDown={handleKeyDown}\r\n        className={`search-input ${showSearchInput ? \"expanded\" : \"\"}`}\r\n        sx={searchStyles.searchField(showSearchInput)}\r\n        InputProps={{\r\n          startAdornment: (\r\n            <InputAdornment position=\"start\">\r\n              <IconButton\r\n                size=\"small\"\r\n                onClick={() => {\r\n                  setShowSearchInput((prev) => !prev);\r\n                  if (!showSearchInput) {\r\n                    setTimeout(() => {\r\n                      searchContainerRef.current\r\n                        ?.querySelector(\"input\")\r\n                        ?.focus();\r\n                    }, 100);\r\n                  }\r\n                }}\r\n                sx={{ color: \"black\", fontSize: 14 }}\r\n                edge=\"start\"\r\n              >\r\n                <SearchIcon />\r\n              </IconButton>\r\n            </InputAdornment>\r\n          ),\r\n          endAdornment:\r\n            showSearchInput && localValue !== \"\" ? (\r\n              <InputAdornment position=\"end\">\r\n                <IconButton\r\n                  size=\"small\"\r\n                  onClick={() => {\r\n                    setLocalValue(\"\");\r\n                    handleChange({ target: { value: \"\" } } as any);\r\n                  }}\r\n                  sx={{ color: \"black\", fontSize: 14 }}\r\n                  edge=\"end\"\r\n                >\r\n                  <CloseRoundedIcon\r\n                    fontSize=\"small\"\r\n                    sx={{ color: \"black\", fontSize: 14 }}\r\n                  />\r\n                </IconButton>\r\n              </InputAdornment>\r\n            ) : null,\r\n        }}\r\n      />\r\n    </Box>\r\n  );\r\n};\r\n","import React, { useEffect } from \"react\";\r\n\r\ninterface OutsideClickHandlerProps {\r\n  ref: React.RefObject<HTMLElement>;\r\n  handler: () => void;\r\n}\r\n\r\nconst useOutsideClick = ({ ref, handler }: OutsideClickHandlerProps) => {\r\n  useEffect(() => {\r\n    const handleClickOutside = (event: MouseEvent) => {\r\n      if (ref.current && !ref.current.contains(event.target as Node)) {\r\n        handler();\r\n      }\r\n    };\r\n\r\n    document.addEventListener(\"mousedown\", handleClickOutside);\r\n\r\n    return () => {\r\n      document.removeEventListener(\"mousedown\", handleClickOutside);\r\n    };\r\n  }, [ref, handler]);\r\n};\r\n\r\nexport default useOutsideClick;\r\n","import React, { useState, useRef, useEffect } from \"react\";\r\nimport {\r\n  ChangeLayoutIcon,\r\n  SortingIcon,\r\n  FilterationIcon,\r\n  HideColumnIcon,\r\n} from \"../../../assets/svg.tsx\";\r\nimport { Box, Popover } from \"@mui/material\";\r\nimport LayoutSelector from \"../table-change-layout.tsx\";\r\nimport { Table } from \"@tanstack/react-table\";\r\nimport { TopbarOptionsProps } from \"../../types/table.ts\";\r\nimport \"./index.scss\";\r\nimport ViewMore from \"../viewmore/index.tsx\";\r\nimport { useFullscreenPopoverContainer } from \"../../libs/hooks/useFullScreen.tsx\";\r\nimport SortPopover from \"../sorting-modal.tsx/index.tsx\";\r\nimport ColumnToggle from \"../column-visibility-modal/index.tsx\";\r\nimport { CraftTableOptionsProps } from \"../../types/table-options.ts\";\r\nimport { TableSearch } from \"../search/index.tsx\";\r\n\r\ninterface TopbarProps<T> {\r\n  table: Table<T>;\r\n  isFullscreen: boolean;\r\n  fullscreenToggle: () => void;\r\n  isCompactTable: boolean;\r\n  setIsCompactTable: React.Dispatch<React.SetStateAction<boolean>>;\r\n  paginationComponent?: React.ReactNode;\r\n  topbarOptions?: TopbarOptionsProps;\r\n  columnOrder?: string[];\r\n  setColumnOrder?: React.Dispatch<React.SetStateAction<string[]>>;\r\n  tableStates: CraftTableOptionsProps;\r\n  searchValue?: string;\r\n  onSearchChange?: (val: string) => void;\r\n  onFilterButtonClick?: () => void;\r\n}\r\n\r\nfunction Topbar<T>({\r\n  table,\r\n  isCompactTable,\r\n  isFullscreen,\r\n  fullscreenToggle,\r\n  setIsCompactTable,\r\n  paginationComponent,\r\n  topbarOptions,\r\n  tableStates,\r\n  onFilterButtonClick,\r\n}: TopbarProps<T>) {\r\n  const [sortAnchorEl, setSortAnchorEl] = useState<HTMLElement | null>(null);\r\n  const [groupBy, setGroupBy] = useState<string>(\"None\");\r\n\r\n  const [layoutAnchorEl, setLayoutAnchorEl] = useState<null | HTMLElement>(\r\n    null\r\n  );\r\n  const [selectedLayout, setSelectedLayout] = useState(\"Table\");\r\n  const [columnAnchorEl, setColumnAnchorEl] = useState<HTMLElement | null>(\r\n    null\r\n  );\r\n  const [columnOrder, setColumnOrder] = useState<string[]>(\r\n    table.getAllLeafColumns().map((col) => col.id)\r\n  );\r\n\r\n  const searchContainerRef = useRef<HTMLDivElement>(null);\r\n\r\n  // sync column order with table instance\r\n  useEffect(() => {\r\n    table.setColumnOrder(columnOrder);\r\n  }, [columnOrder]);\r\n\r\n  useEffect(() => {\r\n    if (isFullscreen) {\r\n      // Close all popovers when fullscreen is enabled\r\n      setLayoutAnchorEl(null);\r\n      setSortAnchorEl(null);\r\n      setColumnAnchorEl(null);\r\n      setViewMoreAnchorEl(null);\r\n    }\r\n  }, [isFullscreen]);\r\n\r\n  const {\r\n    leftSideComponent,\r\n    rightSideComponent,\r\n    showColumnToggle,\r\n    showChangeLayoutToggle,\r\n    showSortingToggle,\r\n    showFilterToggle,\r\n    showSearch,\r\n    searchValue,\r\n    onSearchChange,\r\n  } = topbarOptions ?? {};\r\n\r\n  const { container: fullscreenContainer } = useFullscreenPopoverContainer();\r\n\r\n  const handleLayoutSelect = (layout: string) => {\r\n    setSelectedLayout(layout);\r\n    setLayoutAnchorEl(null);\r\n  };\r\n\r\n  useEffect(() => {\r\n    const handleExternalLayoutTrigger = (e: Event) => {\r\n      const target = (e as CustomEvent).detail?.target as HTMLElement;\r\n      setLayoutAnchorEl(target);\r\n    };\r\n\r\n    const handleExternalFilterTrigger = () => {\r\n      onFilterButtonClick?.();\r\n    };\r\n\r\n    const handleExternalViewMoreTrigger = (e: Event) => {\r\n      const target = (e as CustomEvent).detail?.target as HTMLElement;\r\n      if (target) setViewMoreAnchorEl(target);\r\n    };\r\n\r\n    const handleExternalSearchTrigger = () => {\r\n      setTimeout(() => {\r\n        searchContainerRef.current?.querySelector(\"input\")?.focus();\r\n      }, 100);\r\n    };\r\n\r\n    window.addEventListener(\r\n      \"triggerLayoutPopover\",\r\n      handleExternalLayoutTrigger\r\n    );\r\n    window.addEventListener(\"triggerFilterButton\", handleExternalFilterTrigger);\r\n    window.addEventListener(\"triggerViewMore\", handleExternalViewMoreTrigger);\r\n    window.addEventListener(\"triggerSearchInput\", handleExternalSearchTrigger); // ✅\r\n\r\n    return () => {\r\n      window.removeEventListener(\r\n        \"triggerLayoutPopover\",\r\n        handleExternalLayoutTrigger\r\n      );\r\n      window.removeEventListener(\r\n        \"triggerFilterButton\",\r\n        handleExternalFilterTrigger\r\n      );\r\n      window.removeEventListener(\r\n        \"triggerViewMore\",\r\n        handleExternalViewMoreTrigger\r\n      );\r\n      window.removeEventListener(\r\n        \"triggerSearchInput\",\r\n        handleExternalSearchTrigger\r\n      ); // ✅\r\n    };\r\n  }, [onFilterButtonClick]);\r\n\r\n  const [viewMoreAnchorEl, setViewMoreAnchorEl] = useState<HTMLElement | null>(\r\n    null\r\n  );\r\n\r\n  const isViewMoreOpen = Boolean(viewMoreAnchorEl);\r\n\r\n  return (\r\n    <div className=\"ts-topbar\">\r\n      <div className=\"tabs-section\">\r\n        <div style={{ overflowX: \"auto\", whiteSpace: \"nowrap\" }}>\r\n          {leftSideComponent}\r\n        </div>\r\n      </div>\r\n\r\n      <div className=\"right-section\">\r\n        {rightSideComponent}\r\n        {paginationComponent}\r\n\r\n        <Box\r\n          sx={{\r\n            display: \"flex\",\r\n            alignItems: \"center\",\r\n            justifyContent: \"center\",\r\n            gap: 0.5,\r\n          }}\r\n        >\r\n          {showSearch && (\r\n            <Box\r\n              title=\"Search\"\r\n              className=\"external-search-trigger\"\r\n              onClick={() => {\r\n                const customEvent = new CustomEvent(\"triggerSearchInput\");\r\n                window.dispatchEvent(customEvent);\r\n              }}\r\n              ref={searchContainerRef}\r\n            >\r\n              <TableSearch\r\n                value={searchValue ?? \"\"}\r\n                onChange={onSearchChange ?? (() => {})}\r\n              />\r\n            </Box>\r\n          )}\r\n\r\n          {showChangeLayoutToggle && (\r\n            <>\r\n              <div className=\"change-layout ts--button\" title=\"Layout\">\r\n                <div\r\n                  onClick={(e) => {\r\n                    const customEvent = new CustomEvent(\r\n                      \"triggerLayoutPopover\",\r\n                      {\r\n                        detail: { target: e.currentTarget },\r\n                      }\r\n                    );\r\n                    window.dispatchEvent(customEvent);\r\n                  }}\r\n                  className=\"external-layout-trigger\"\r\n                >\r\n                  <ChangeLayoutIcon />\r\n                </div>\r\n              </div>\r\n            </>\r\n          )}\r\n          <Popover\r\n            open={Boolean(layoutAnchorEl)}\r\n            anchorEl={layoutAnchorEl}\r\n            onClose={() => setLayoutAnchorEl(null)}\r\n            anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n            container={fullscreenContainer}\r\n            sx={{\r\n              mt: 2.2,\r\n            }}\r\n          >\r\n            <LayoutSelector\r\n              onSelect={handleLayoutSelect}\r\n              selectedLayout={selectedLayout}\r\n            />\r\n          </Popover>\r\n          {showColumnToggle && (\r\n            <>\r\n              <div\r\n                className=\"hide-column ts--button\"\r\n                onClick={(e) => setColumnAnchorEl(e.currentTarget)}\r\n                title=\"Column\"\r\n              >\r\n                <HideColumnIcon />\r\n              </div>\r\n              <ColumnToggle\r\n                anchorEl={columnAnchorEl}\r\n                onClose={() => setColumnAnchorEl(null)}\r\n                table={table}\r\n                columnOrder={columnOrder}\r\n                setColumnOrder={setColumnOrder}\r\n              />\r\n            </>\r\n          )}\r\n\r\n          {showSortingToggle && (\r\n            <>\r\n              <div\r\n                className=\"filter ts--button\"\r\n                title=\"Sort\"\r\n                onClick={(e) => setSortAnchorEl(e.currentTarget)}\r\n              >\r\n                <SortingIcon />\r\n              </div>\r\n              <SortPopover\r\n                anchorEl={sortAnchorEl}\r\n                onClose={() => setSortAnchorEl(null)}\r\n                columns={table.getAllLeafColumns().map((col) => ({\r\n                  id: col.id,\r\n                  label: (col.columnDef.meta as any)?.label || col.id,\r\n                }))}\r\n                onChange={(sortingRules) => table.setSorting(sortingRules)}\r\n              />\r\n            </>\r\n          )}\r\n\r\n          {/* {showFilterToggle && (\r\n          <div\r\n            className=\"filter ts--button\"\r\n            title=\"Filter\"\r\n            onClick={onFilterButtonClick}\r\n            style={{\r\n              display: \"flex\",\r\n              justifyContent: \"center\",\r\n              alignItems: \"center\",\r\n              backgroundColor:\r\n                tableStates.showTableFilter || tableStates.filters.length > 0\r\n                  ? \"#e8e2fb\"\r\n                  : \"transparent\",\r\n              height: \"25px\",\r\n              width: \"25px\",\r\n              borderRadius: \"6px\",\r\n              cursor: \"pointer\",\r\n            }}\r\n          >\r\n            <FilterationIcon\r\n              color={\r\n                tableStates.showTableFilter || tableStates.filters.length > 0\r\n                  ? \"#7A5AF8\"\r\n                  : \"#1C1B1F\"\r\n              }\r\n            />\r\n          </div>\r\n        )} */}\r\n\r\n          {showFilterToggle && (\r\n            <div\r\n              className=\"filter ts--button\"\r\n              title=\"Filter\"\r\n              onClick={onFilterButtonClick}\r\n              style={{\r\n                position: \"relative\",\r\n                display: \"flex\",\r\n                justifyContent: \"center\",\r\n                alignItems: \"center\",\r\n                backgroundColor:\r\n                  tableStates.showTableFilter || tableStates.filters.length > 0\r\n                    ? \"#eae4fe\"\r\n                    : \"transparent\",\r\n                height: \"25px\",\r\n                width: \"25px\",\r\n                borderRadius: \"6px\",\r\n                cursor: \"pointer\",\r\n              }}\r\n            >\r\n              <FilterationIcon\r\n                color={\r\n                  tableStates.showTableFilter || tableStates.filters.length > 0\r\n                    ? \"#7A5AF8\"\r\n                    : \"#1C1B1F\"\r\n                }\r\n              />\r\n\r\n              {tableStates.filters.length > 0 &&\r\n                !tableStates.showTableFilter && (\r\n                  <span\r\n                    style={{\r\n                      position: \"absolute\",\r\n                      top: \"1px\",\r\n                      right: \"1px\",\r\n                      width: \"6px\",\r\n                      height: \"6px\",\r\n                      borderRadius: \"50%\",\r\n                      backgroundColor: \"#F63D68\",\r\n                    }}\r\n                  />\r\n                )}\r\n            </div>\r\n          )}\r\n\r\n          {/* {viewMoreToggle && (\r\n          <div className=\"view-more ts--button\" title=\"View More\">\r\n            <ViewMore\r\n              compactMode={isCompactTable}\r\n              onCompactToggle={(value: string) =>\r\n                setIsCompactTable(value === \"Compact\")\r\n              }\r\n              isFullscreen={isFullscreen}\r\n              onFullscreenToggle={fullscreenToggle}\r\n              groupBy={groupBy}\r\n              onGroupByChange={(value: string) => setGroupBy(value)}\r\n              tableStates={tableStates}\r\n            />\r\n          </div>\r\n        )} */}\r\n          {/* {viewMoreToggle && (\r\n          <div\r\n            className=\"view-more ts--button view-more-trigger\"\r\n            title=\"View More\"\r\n          >\r\n            <ViewMore\r\n              compactMode={isCompactTable}\r\n              onCompactToggle={(value: string) =>\r\n                setIsCompactTable(value === \"Compact\")\r\n              }\r\n              isFullscreen={isFullscreen}\r\n              onFullscreenToggle={fullscreenToggle}\r\n              groupBy={groupBy}\r\n              onGroupByChange={(value: string) => setGroupBy(value)}\r\n              tableStates={tableStates}\r\n            />\r\n          </div>\r\n        )} */}\r\n          <Popover\r\n            open={isViewMoreOpen}\r\n            anchorEl={viewMoreAnchorEl}\r\n            onClose={() => setViewMoreAnchorEl(null)}\r\n            anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n            transformOrigin={{ vertical: \"top\", horizontal: \"left\" }}\r\n            container={fullscreenContainer}\r\n            // PaperProps={{\r\n            //   sx: {\r\n            //     mt: 2,\r\n            //     padding: 0,\r\n            //     width: 380,\r\n            //     borderRadius: 1,\r\n            //     boxShadow: 4,\r\n            //   },\r\n            // }}\r\n          >\r\n            <ViewMore\r\n              compactMode={isCompactTable}\r\n              onCompactToggle={(value: string) =>\r\n                setIsCompactTable(value === \"Compact\")\r\n              }\r\n              isFullscreen={isFullscreen}\r\n              onFullscreenToggle={fullscreenToggle}\r\n              groupBy={groupBy}\r\n              onGroupByChange={(value: string) => setGroupBy(value)}\r\n              tableStates={tableStates}\r\n              onClose={() => setViewMoreAnchorEl(null)}\r\n            />\r\n          </Popover>\r\n        </Box>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default Topbar;\r\n","import { styled } from \"@mui/material/styles\";\r\nimport { Box, IconButton, Select, InputBase } from \"@mui/material\";\r\n\r\n/* Root container */\r\nexport const PaginationContainer = styled(Box)(({ theme }) => ({\r\n  padding: theme.spacing(0.5),\r\n  display: \"flex\",\r\n  justifyContent: \"flex-end\",\r\n  alignItems: \"center\",\r\n  gap: theme.spacing(2),\r\n  fontSize: theme.typography.pxToRem(14),\r\n  backgroundColor: theme.palette.common.white,\r\n\r\n  [theme.breakpoints.down(\"md\")]: {\r\n    justifyContent: \"center\",\r\n    fontSize: theme.typography.pxToRem(12),\r\n  },\r\n}));\r\n\r\n/* Hide go-to-page on <= 991px */\r\nexport const GoToPageContainer = styled(Box)(({ theme }) => ({\r\n  display: \"flex\",\r\n  alignItems: \"center\",\r\n\r\n  [theme.breakpoints.down(\"md\")]: {\r\n    display: \"none\",\r\n  },\r\n}));\r\n\r\n/* Rows per page */\r\nexport const RowsPerPageContainer = styled(Box)(({ theme }) => ({\r\n  display: \"flex\",\r\n  alignItems: \"center\",\r\n\r\n  [theme.breakpoints.down(\"sm\")]: {\r\n    display: \"none\",\r\n  },\r\n}));\r\n\r\n/* Records range */\r\nexport const RecordsRangeContainer = styled(Box)(({ theme }) => ({\r\n  whiteSpace: \"nowrap\",\r\n  fontSize: theme.typography.pxToRem(14),\r\n\r\n  [theme.breakpoints.down(\"sm\")]: {\r\n    display: \"none\",\r\n  },\r\n}));\r\n\r\n/* Page range */\r\nexport const PageRangeContainer = styled(Box)(({ theme }) => ({\r\n  whiteSpace: \"nowrap\",\r\n  fontSize: theme.typography.pxToRem(14),\r\n}));\r\n\r\n/* Buttons wrapper */\r\nexport const PaginationButtons = styled(Box)(({ theme }) => ({\r\n  display: \"flex\",\r\n  gap: theme.spacing(1),\r\n}));\r\n\r\n/* Pagination button */\r\nexport const PaginationButton = styled(IconButton)(({ theme }) => ({\r\n  borderRadius: \"50%\",\r\n  height: 24,\r\n  width: 24,\r\n  padding: 2,\r\n  transition: \"0.4s\",\r\n\r\n  \"&:hover\": {\r\n    backgroundColor: theme.palette.grey[300],\r\n    boxShadow: \"0 1px 2px 0 rgba(60,64,67,.6), 0 1px 3px 1px rgba(60,64,67,.3)\",\r\n  },\r\n\r\n  \"&.Mui-disabled\": {\r\n    color: theme.palette.action.disabled,\r\n  },\r\n\r\n  [theme.breakpoints.down(\"sm\")]: {\r\n    height: 24,\r\n    width: 24,\r\n    padding: 0,\r\n\r\n    \"& svg\": {\r\n      width: 20,\r\n      height: 20,\r\n    },\r\n  },\r\n}));\r\n\r\n/* Select (rows per page) */\r\nexport const RowsPerPageSelect = styled(Select)(({ theme }) => ({\r\n  borderRadius: theme.shape.borderRadius,\r\n  padding: theme.spacing(0),\r\n  fontSize: theme.typography.pxToRem(12),\r\n\r\n  \"& .MuiSelect-select\": {\r\n    fontSize: theme.typography.pxToRem(12),\r\n    padding: theme.spacing(0.5, 0.75),\r\n  },\r\n}));\r\n\r\n/* Input for go-to-page */\r\nexport const GoToPageInput = styled(InputBase)(({ theme }) => ({\r\n  width: 60,\r\n  textAlign: \"center\",\r\n  borderRadius: theme.shape.borderRadius,\r\n  border: `1px solid ${theme.palette.divider}`,\r\n  fontSize: theme.typography.pxToRem(12),\r\n\r\n  \"& .MuiInputBase-input\": {\r\n    fontSize: theme.typography.pxToRem(12),\r\n    padding: theme.spacing(0.25, 0.75),\r\n  },\r\n}));\r\n","import { Table } from \"@tanstack/react-table\";\r\nimport { TableFirstPageIcon, TableLastPageIcon } from \"../../../../assets/svg\";\r\nimport NavigateBeforeRounded from \"@mui/icons-material/NavigateBeforeRounded\";\r\nimport NavigateNextRounded from \"@mui/icons-material/NavigateNextRounded\";\r\nimport { MenuItem, Typography } from \"@mui/material\";\r\nimport { CraftTablePaginationProps } from \"../../../types/table\";\r\nimport {\r\n  PaginationContainer,\r\n  GoToPageContainer,\r\n  RowsPerPageContainer,\r\n  RecordsRangeContainer,\r\n  PageRangeContainer,\r\n  PaginationButtons,\r\n  PaginationButton,\r\n  RowsPerPageSelect,\r\n  GoToPageInput,\r\n} from \"./pagination.styles\";\r\n\r\ninterface DefaultPaginationProps<T> {\r\n  table: Table<T>;\r\n  rowsPerPageArray: number[];\r\n  paginationOptions?: CraftTablePaginationProps;\r\n}\r\n\r\nfunction DefaultPagination<T>({\r\n  table,\r\n  rowsPerPageArray,\r\n  paginationOptions,\r\n}: DefaultPaginationProps<T>) {\r\n  const pageIndex = table.getState().pagination.pageIndex + 1;\r\n  const pageCount = table.getPageCount();\r\n  const pageSize = table.getState().pagination.pageSize;\r\n  const rowCount = table.getRowCount();\r\n\r\n  const recordsRangeFirst = pageIndex * pageSize - pageSize + 1;\r\n  const recordsRangeLast = Math.min(pageIndex * pageSize, rowCount);\r\n\r\n  const isFullView = paginationOptions?.paginationView === \"full\";\r\n\r\n  return (\r\n    <PaginationContainer>\r\n      {isFullView && (\r\n        <GoToPageContainer>\r\n          <Typography variant=\"body2\" fontSize={14} mr={1}>\r\n            Go to page:\r\n          </Typography>\r\n          <GoToPageInput\r\n            defaultValue={pageIndex}\r\n            type=\"number\"\r\n            inputProps={{\r\n              name: \"pagination-size\",\r\n              min: 1,\r\n              max: pageCount,\r\n            }}\r\n            onKeyDown={(e) => {\r\n              if (e.key === \"Enter\") {\r\n                const page = e.currentTarget.value\r\n                  ? Number(e.currentTarget.value) - 1\r\n                  : 0;\r\n                table.setPageIndex(page);\r\n              }\r\n            }}\r\n          />\r\n        </GoToPageContainer>\r\n      )}\r\n\r\n      <RowsPerPageContainer>\r\n        {isFullView && (\r\n          <Typography variant=\"body2\" fontSize={14} mr={1}>\r\n            Rows per page:\r\n          </Typography>\r\n        )}\r\n        <RowsPerPageSelect\r\n          value={pageSize}\r\n          onChange={(e) => table.setPageSize(Number(e.target.value))}\r\n        >\r\n          {rowsPerPageArray.map((size) => (\r\n            <MenuItem key={size} value={size} sx={{ fontSize: 12 }}>\r\n              {size}\r\n            </MenuItem>\r\n          ))}\r\n        </RowsPerPageSelect>\r\n      </RowsPerPageContainer>\r\n\r\n      <RecordsRangeContainer>\r\n        <strong>\r\n          {recordsRangeFirst} – {recordsRangeLast} of {rowCount}\r\n        </strong>\r\n      </RecordsRangeContainer>\r\n\r\n      {isFullView && (\r\n        <PageRangeContainer>\r\n          <strong>\r\n            Page {pageIndex} of {pageCount}\r\n          </strong>\r\n        </PageRangeContainer>\r\n      )}\r\n\r\n      <PaginationButtons>\r\n        {isFullView && (\r\n          <PaginationButton\r\n            title=\"First Page\"\r\n            disabled={!table.getCanPreviousPage()}\r\n            onClick={() => table.setPageIndex(0)}\r\n          >\r\n            <TableFirstPageIcon />\r\n          </PaginationButton>\r\n        )}\r\n\r\n        <PaginationButton\r\n          title=\"Previous Page\"\r\n          disabled={!table.getCanPreviousPage()}\r\n          onClick={() => table.previousPage()}\r\n        >\r\n          <NavigateBeforeRounded fontSize=\"small\" />\r\n        </PaginationButton>\r\n\r\n        <PaginationButton\r\n          title=\"Next Page\"\r\n          disabled={!table.getCanNextPage()}\r\n          onClick={() => table.nextPage()}\r\n        >\r\n          <NavigateNextRounded fontSize=\"small\" />\r\n        </PaginationButton>\r\n\r\n        {isFullView && (\r\n          <PaginationButton\r\n            title=\"Last Page\"\r\n            disabled={!table.getCanNextPage()}\r\n            onClick={() => table.setPageIndex(pageCount - 1)}\r\n          >\r\n            <TableLastPageIcon />\r\n          </PaginationButton>\r\n        )}\r\n      </PaginationButtons>\r\n    </PaginationContainer>\r\n  );\r\n}\r\n\r\nexport default DefaultPagination;\r\n","export const rawData = {\r\n  lanes: [\r\n    { id: 1, name: \"Enquiry\", color: \"#fff0f3\", darkColor: \"#fea3b4\" },\r\n    { id: 2, name: \"Qualified Lead\", color: \"#fffbed\", darkColor: \"#fde272\" },\r\n    { id: 3, name: \"Application\", color: \"#ebf9fc\", darkColor: \"#67e3f9\" },\r\n    { id: 4, name: \"Admission\", color: \"#edf9f3\", darkColor: \"#73e2a3\" },\r\n    { id: 5, name: \"Documents\", color: \"#edf9f3\", darkColor: \"#73e2a3\" },\r\n    { id: 6, name: \"Admission\", color: \"#edf9f3\", darkColor: \"#73e2a3\" },\r\n  ],\r\n  swim_lanes: [\r\n    {\r\n      id: 12,\r\n      name: \"Active\",\r\n      sub_lanes: [\r\n        {\r\n          id: 1,\r\n          name: \"Lead Assignment\",\r\n          color: \"red\",\r\n          lane_id: 1,\r\n          expanded: true,\r\n        },\r\n        {\r\n          id: 2,\r\n          name: \"Initial Outreach\",\r\n          color: \"green\",\r\n          lane_id: 1,\r\n          expanded: true,\r\n        },\r\n        {\r\n          id: 3,\r\n          name: \"Lead Assessment\",\r\n          color: \"yellow\",\r\n          lane_id: 2,\r\n          expanded: true,\r\n        },\r\n        {\r\n          id: 4,\r\n          name: \"Campus Visit\",\r\n          color: \"#FFE885\",\r\n          lane_id: 2,\r\n          expanded: true,\r\n        },\r\n        {\r\n          id: 5,\r\n          name: \"Application Collection\",\r\n          color: \"#90E0F3\",\r\n          lane_id: 3,\r\n          expanded: true,\r\n        },\r\n        {\r\n          id: 6,\r\n          name: \"Student Assessment\",\r\n          color: \"#90E0F3\",\r\n          lane_id: 3,\r\n          expanded: true,\r\n        },\r\n        {\r\n          id: 7,\r\n          name: \"Fee Collection\",\r\n          color: \"#90EE90\",\r\n          lane_id: 4,\r\n          expanded: true,\r\n        },\r\n        {\r\n          id: 8,\r\n          name: \"System Integration\",\r\n          color: \"#90EE90\",\r\n          lane_id: 4,\r\n          expanded: true,\r\n        },\r\n      ],\r\n    },\r\n    {\r\n      id: 13,\r\n      name: \"Dormant\",\r\n      sub_lanes: [],\r\n    },\r\n    {\r\n      id: 14,\r\n      name: \"Disqualify\",\r\n      sub_lanes: [],\r\n    },\r\n    {\r\n      id: 15,\r\n      name: \"Lost\",\r\n      sub_lanes: [],\r\n    },\r\n  ],\r\n  data: [\r\n    // Lead Assignment\r\n    {\r\n      id: 1,\r\n      name: \"Aditi Sharma\",\r\n      sub_lane_id: 1,\r\n      email: \"aditisharma@gmail.com\",\r\n      phone: \"+91 9846213495\",\r\n      status: \"Active\",\r\n      progress: 0,\r\n      days: \"10 Days\",\r\n      reference_id: \"INQ2024XY\",\r\n      priority: null,\r\n      lost: false,\r\n    },\r\n    {\r\n      id: 2,\r\n      name: \"Aditi Sharma\",\r\n      sub_lane_id: 1,\r\n      email: \"aditisharma@gmail.com\",\r\n      phone: \"+91 9846213495\",\r\n      status: \"Active\",\r\n      progress: 0,\r\n      days: \"10 Days\",\r\n      reference_id: \"INQ2024XY\",\r\n      priority: null,\r\n      lost: false,\r\n    },\r\n    // Initial Outreach\r\n    {\r\n      id: 3,\r\n      name: \"Rashmi Desai\",\r\n      sub_lane_id: 2,\r\n      email: \"aditisharma@gmail.com\",\r\n      phone: \"+91 9765874320\",\r\n      status: \"Active\",\r\n      progress: 0,\r\n      days: \"10 Days\",\r\n      reference_id: \"INQ2024XY\",\r\n      priority: null,\r\n      lost: false,\r\n    },\r\n    // Lead Assessment\r\n    {\r\n      id: 4,\r\n      name: \"Aditi Sharma\",\r\n      sub_lane_id: 3,\r\n      email: \"aditisharma@gmail.com\",\r\n      phone: \"+91 9846213495\",\r\n      status: \"Active\",\r\n      progress: 0,\r\n      days: \"10 Days\",\r\n      reference_id: \"INQ2024XY\",\r\n      priority: null,\r\n      lost: false,\r\n    },\r\n    // Campus Visit\r\n    {\r\n      id: 5,\r\n      name: \"Aditi Sharma\",\r\n      sub_lane_id: 4,\r\n      email: \"aditisharma@gmail.com\",\r\n      phone: \"+91 9846213495\",\r\n      status: \"Lost\",\r\n      progress: 0,\r\n      days: \"10 Days\",\r\n      reference_id: \"2DQ2024XY\",\r\n      priority: null,\r\n      lost: true,\r\n    },\r\n    {\r\n      id: 6,\r\n      name: \"Aditi Sharma\",\r\n      sub_lane_id: 4,\r\n      email: \"aditisharma@gmail.com\",\r\n      phone: \"+91 9846213495\",\r\n      status: \"Active\",\r\n      progress: 0,\r\n      days: \"10 Days\",\r\n      reference_id: \"INQ2024XY\",\r\n      priority: null,\r\n      lost: false,\r\n    },\r\n    // Application Collection\r\n    {\r\n      id: 7,\r\n      name: \"Aditi Sharma\",\r\n      sub_lane_id: 5,\r\n      email: \"aditisharma@gmail.com\",\r\n      phone: \"+91 9452013495\",\r\n      status: \"Active\",\r\n      progress: 0,\r\n      days: \"10 Days\",\r\n      reference_id: \"INQ2024XY\",\r\n      priority: null,\r\n      lost: false,\r\n    },\r\n    {\r\n      id: 8,\r\n      name: \"Aditi Sharma\",\r\n      sub_lane_id: 5,\r\n      email: \"aditisharma@gmail.com\",\r\n      phone: \"+91 9452013495\",\r\n      status: \"Active\",\r\n      progress: 0,\r\n      days: \"10 Days\",\r\n      reference_id: \"INQ2024XY\",\r\n      priority: null,\r\n      lost: false,\r\n    },\r\n    // Student Assessment\r\n    {\r\n      id: 9,\r\n      name: \"Aditi Sharma\",\r\n      sub_lane_id: 6,\r\n      email: \"aditisharma@gmail.com\",\r\n      phone: \"+91 9452013495\",\r\n      status: \"Active\",\r\n      progress: 0,\r\n      days: \"10 Days\",\r\n      reference_id: \"INQ2024XY\",\r\n      priority: null,\r\n      lost: false,\r\n    },\r\n    // Fee Collection\r\n    {\r\n      id: 10,\r\n      name: \"Aditi Sharma\",\r\n      sub_lane_id: 7,\r\n      email: \"aditisharma@gmail.com\",\r\n      phone: \"+91 9846015495\",\r\n      status: \"Active\",\r\n      progress: 0,\r\n      days: \"You\",\r\n      reference_id: \"INQ2024XY\",\r\n      priority: \"High\",\r\n      lost: false,\r\n    },\r\n    // System Integration\r\n    {\r\n      id: 11,\r\n      name: \"Aditi Sharma\",\r\n      sub_lane_id: 8,\r\n      email: \"aditisharma@gmail.com\",\r\n      phone: \"+91 9846015495\",\r\n      status: \"Lost\",\r\n      progress: 0,\r\n      days: \"You\",\r\n      reference_id: \"INQ2024XY\",\r\n      priority: \"Low\",\r\n      lost: true,\r\n    },\r\n  ],\r\n};\r\n\r\nexport const COLOR_CONSTANTS = [\r\n  { color: \"#fff0f3\", darkColor: \"#fea3b4\", darkerColor: \"#e31b54\" },\r\n  { color: \"#fffbed\", darkColor: \"#fde272\", darkerColor: \"#ca8504\" },\r\n  { color: \"#ebf9fc\", darkColor: \"#67e3f9\", darkerColor: \"#088ab2\" },\r\n  { color: \"#edf9f3\", darkColor: \"#73e2a3\", darkerColor: \"#099250\" },\r\n];\r\n\r\nexport const STAGE_GROUP = \"stage_group_id\";\r\nexport const LEAD_STATUS = \"lead_status\";\r\nexport const STAGE = \"stage_id\";\r\nexport const LEAD_SOURCE = \"lead_source\";\r\n","import { Column } from \"@tanstack/react-table\";\r\nimport { alignProps } from \"../../types/common\";\r\nimport { CSSProperties } from \"react\";\r\nimport axios from \"axios\";\r\nimport { LEAD_STATUS } from \"../../../kanban/constants/kanban-constants\";\r\n\r\nexport const formatClassName = (className: string): string => {\r\n  return className.replace(/\\s+/g, \" \").trim();\r\n};\r\n\r\nexport const getColumnAlignment = (align: string) => {\r\n  const contentAlignment = {\r\n    left: \"flex-start\",\r\n    center: \"center\",\r\n    right: \"flex-end\",\r\n  };\r\n\r\n  const alignment = contentAlignment[(align as alignProps) || \"left\"];\r\n  return alignment;\r\n};\r\n\r\nexport const getColumnPinningStyles = <T>(column: Column<T>): CSSProperties => {\r\n  const isPinned = column.getIsPinned();\r\n  const isLastLeftPinnedColumn =\r\n    isPinned === \"left\" && column.getIsLastColumn(\"left\");\r\n  const isFirstRightPinnedColumn =\r\n    isPinned === \"right\" && column.getIsFirstColumn(\"right\");\r\n\r\n  return {\r\n    boxShadow: isLastLeftPinnedColumn\r\n      ? \"-4px 0 4px -4px gray inset\"\r\n      : isFirstRightPinnedColumn\r\n      ? \"4px 0 4px -4px gray inset\"\r\n      : undefined,\r\n    background: \"inherit\",\r\n    left: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\r\n    right: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\r\n    position: isPinned ? \"sticky\" : \"relative\",\r\n    width: column.getSize(),\r\n  };\r\n};\r\n\r\nexport const getColumnPinningStylesBody = <T>(\r\n  column: Column<T>\r\n): CSSProperties => {\r\n  const isPinned = column.getIsPinned();\r\n  const isLastLeftPinnedColumn =\r\n    isPinned === \"left\" && column.getIsLastColumn(\"left\");\r\n  const isFirstRightPinnedColumn =\r\n    isPinned === \"right\" && column.getIsFirstColumn(\"right\");\r\n\r\n  return {\r\n    boxShadow: isLastLeftPinnedColumn\r\n      ? \"-4px 0 4px -4px gray inset\"\r\n      : isFirstRightPinnedColumn\r\n      ? \"4px 0 4px -4px gray inset\"\r\n      : undefined,\r\n    background: \"inherit\",\r\n    left: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\r\n    right: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\r\n    position: isPinned ? \"sticky\" : \"relative\",\r\n    width: column.getSize(),\r\n  };\r\n};\r\n\r\nexport function customDebounce<T extends (...args: any[]) => any>(\r\n  func: T,\r\n  delay: number\r\n): (...args: Parameters<T>) => void {\r\n  let timerId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n  return function (this: ThisParameterType<T>, ...args: Parameters<T>): void {\r\n    if (timerId) clearTimeout(timerId);\r\n    timerId = setTimeout(() => {\r\n      func.apply(this, args);\r\n    }, delay);\r\n  };\r\n}\r\n\r\n//ENTITY TYPE\r\nconst ENVIRONMENT = \"crm_dev\";\r\nexport const ENTITY_TYPE = \"LEAD\";\r\nexport const MODULE_CODE = \"school_adm_org\";\r\nexport const MAPPED_ENTITY_TYPE = \"LYPR\"; // LAP OR LYPR\r\nexport const USER_ID = 226;\r\nexport const APP_CODE = \"crm\";\r\n\r\nconst environments = {\r\n  adm_dev: \"http://localhost:6010/api\",\r\n  crm_dev: \"http://localhost:6011/api\",\r\n  uat: \"https://api.eth-qa.rezolut.in/api/enrol\",\r\n};\r\n\r\nconst getBaseUrl = () => environments[ENVIRONMENT];\r\n\r\n// API INTEGRATION\r\nexport const api = axios.create({\r\n  baseURL: getBaseUrl(),\r\n  timeout: 10000,\r\n  headers: {\r\n    \"Content-Type\": \"application/json\",\r\n  },\r\n});\r\n\r\napi.interceptors.request.use(\r\n  (config) => {\r\n    const token = localStorage.getItem(\"authToken\");\r\n    if (token) {\r\n      config.headers.Authorization = `Bearer ${token}`;\r\n    }\r\n    return config;\r\n  },\r\n  (error) => {\r\n    return Promise.reject(error);\r\n  }\r\n);\r\n\r\nexport const formatTableHeaders = (columns: any) => {\r\n  const mapped = columns.map((col: any) => {\r\n    const meta =\r\n      col.attribute_key === \"status\" ||\r\n      col.attribute_key === LEAD_STATUS ||\r\n      col.attribute_key === \"flag\" ||\r\n      col.attribute_key === \"invitation_status\"\r\n        ? { type: \"custom\", propName: \"renderStatus\", align: col.align }\r\n        : col.attribute_key === \"profile_image\" ||\r\n          col.attribute_key === \"short_logo\"\r\n        ? {\r\n            type: \"custom\",\r\n            propName: \"profileImageFetch\",\r\n            align: col.align,\r\n          }\r\n        : col.attribute_key === \"start_date\" || col.attribute_key === \"end_date\"\r\n        ? { type: \"custom\", propName: \"dateFormater\", align: col.align }\r\n        : col.attribute_key === \"action\"\r\n        ? { type: \"custom\", propName: \"renderAction\", align: col.align }\r\n        : col.attribute_key === \"code\"\r\n        ? {\r\n            type: \"custom\",\r\n            propName: \"drillCellRenderer\",\r\n            align: col.align,\r\n          }\r\n        : col.attribute_key === \"primary_mobile\"\r\n        ? {\r\n            type: \"custom\",\r\n            propName: \"apiCallonClick\",\r\n            align: col.align,\r\n          }\r\n        : undefined;\r\n\r\n    return {\r\n      header: col.name ?? \"\",\r\n      accessorKey: col.attribute_key ?? \"\",\r\n      size: col.size,\r\n      meta,\r\n    };\r\n  });\r\n\r\n  return mapped;\r\n};\r\n","import { styled } from \"@mui/material\";\r\n\r\nexport const TableBodyRow = styled(\"tr\", {\r\n  shouldForwardProp: (prop) =>\r\n    prop !== \"hoverable\" &&\r\n    prop !== \"selected\" &&\r\n    prop !== \"striped\" &&\r\n    prop !== \"expanded\",\r\n})<{\r\n  hoverable?: boolean;\r\n  selected?: boolean;\r\n  striped?: boolean;\r\n  expanded?: boolean;\r\n}>(({ theme, hoverable, selected, striped }) => ({\r\n  backgroundColor: selected\r\n    ? theme.palette.action.selected\r\n    : theme.palette.background.paper,\r\n\r\n  ...(striped && {\r\n    \"&:nth-of-type(odd)\": {\r\n      backgroundColor:\r\n        theme.palette.mode === \"dark\"\r\n          ? theme.palette.action.hover\r\n          : theme.palette.grey[50],\r\n    },\r\n  }),\r\n\r\n  ...(hoverable && {\r\n    transition: \"background-color 0.2s ease, box-shadow 0.2s ease\",\r\n    \"&:hover\": {\r\n      boxShadow: `inset 0 2px 2px rgba(0,0,0,0.05),\r\n                  inset 0 -2px 2px rgba(0,0,0,0.05)`,\r\n    },\r\n  }),\r\n}));\r\n\r\nexport const TableBodyCell = styled(\"td\", {\r\n  shouldForwardProp: (prop) =>\r\n    prop !== \"compact\" &&\r\n    prop !== \"isDragging\" &&\r\n    prop !== \"isPinned\" &&\r\n    prop !== \"wrap\",\r\n})<{\r\n  compact?: boolean;\r\n  isDragging?: boolean;\r\n  isPinned?: boolean;\r\n  wrap?: boolean;\r\n}>(({ theme, compact, isDragging, wrap }) => ({\r\n  fontSize: theme.typography.pxToRem(14),\r\n  padding: compact ? theme.spacing(0.5, 0.75) : theme.spacing(0.75, 1.25),\r\n  borderBottom: `1px solid ${theme.palette.grey[200]}`,\r\n\r\n  ...(wrap && {\r\n    wordBreak: \"break-all\",\r\n    whiteSpace: \"normal\",\r\n  }),\r\n\r\n  ...(isDragging && {\r\n    opacity: 0.85,\r\n    backgroundColor: theme.palette.action.hover,\r\n  }),\r\n}));\r\n","import { useSortable } from \"@dnd-kit/sortable\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { Cell, flexRender } from \"@tanstack/react-table\";\r\nimport { align } from \"../../types/common\";\r\nimport { getColumnPinningStylesBody } from \"../../libs/utils/common\";\r\nimport {\r\n  CraftTableFeatureProps,\r\n  CraftTableOptionsProps,\r\n} from \"../../types/table-options\";\r\nimport { TableBodyCell } from \"./table-body.styles\";\r\n\r\ninterface DragAlongCellProps<T> {\r\n  cell: Cell<T, unknown>;\r\n  featureOptions: CraftTableFeatureProps;\r\n  tableStates: CraftTableOptionsProps;\r\n}\r\n\r\nfunction DragAlongCell<T>({\r\n  cell,\r\n  // featureOptions,\r\n  tableStates,\r\n}: DragAlongCellProps<T>) {\r\n  const { isDragging, setNodeRef, transform } = useSortable({\r\n    id: cell.column.id,\r\n  });\r\n  // const { enableWordBreakAll } = featureOptions;\r\n  const { wrapColumns } = tableStates;\r\n\r\n  const isPinned = cell.column.getIsPinned();\r\n\r\n  return (\r\n    <TableBodyCell\r\n      ref={setNodeRef}\r\n      align={(cell.column.columnDef.meta as align)?.align || \"left\"}\r\n      style={{\r\n        opacity: isDragging ? 0.8 : 1,\r\n        transform: CSS.Translate.toString(transform),\r\n        transition: \"width transform 0.2s ease-in-out\",\r\n        width: cell.column.getSize(),\r\n        ...getColumnPinningStylesBody(cell.column),\r\n        ...((wrapColumns.all_wrap || wrapColumns[cell.column.id]) && {\r\n          wordBreak: \"break-all\",\r\n          whiteSpace: \"normal\",\r\n        }),\r\n        zIndex: isPinned ? 2 : isDragging ? 1 : 0,\r\n      }}\r\n      className=\"table-row-cell\"\r\n    >\r\n      {cell.getIsPlaceholder()\r\n        ? null\r\n        : flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n    </TableBodyCell>\r\n  );\r\n}\r\n\r\nexport default DragAlongCell;\r\n","import React, { useEffect, useRef } from \"react\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\ninterface CheckboxProps {\r\n  type?: \"checkbox\";\r\n  checked: boolean;\r\n  disabled?: boolean;\r\n  onChange: (checked: boolean) => void;\r\n  indeterminate?: boolean;\r\n  className?: string;\r\n  style?: React.CSSProperties;\r\n}\r\n\r\nconst Checkbox = ({\r\n  checked = false,\r\n  disabled = false,\r\n  onChange = () => {},\r\n  indeterminate = false,\r\n  className,\r\n  style,\r\n  ...props\r\n}: CheckboxProps) => {\r\n  const id = uuidv4();\r\n  const [check, setCheck] = React.useState<boolean>(checked);\r\n  const ref = useRef(null);\r\n\r\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n    const isChecked = e.target.checked;\r\n    setCheck(isChecked);\r\n\r\n    if (onChange) onChange(isChecked);\r\n  };\r\n\r\n  useEffect(() => {\r\n    setCheck(checked);\r\n  }, [checked]);\r\n\r\n  useEffect(() => {\r\n    if (ref.current) {\r\n      (ref.current as HTMLInputElement).indeterminate = indeterminate;\r\n    }\r\n  }, [indeterminate]);\r\n\r\n  return (\r\n    <input\r\n      id={id}\r\n      ref={ref}\r\n      type=\"checkbox\"\r\n      checked={check}\r\n      onChange={handleChange}\r\n      disabled={disabled}\r\n      className={className}\r\n      {...props}\r\n    />\r\n  );\r\n};\r\n\r\nexport default Checkbox;\r\n","import React from \"react\";\r\nimport {\r\n  ColumnOrderState,\r\n  flexRender,\r\n  Row,\r\n  Table,\r\n} from \"@tanstack/react-table\";\r\nimport {\r\n  CraftTableFeatureProps,\r\n  CraftTableOptionsProps,\r\n} from \"../../types/table-options\";\r\nimport { align } from \"../../types/common\";\r\nimport DragAlongCell from \"./table-body-dnd-cell\";\r\nimport {\r\n  horizontalListSortingStrategy,\r\n  SortableContext,\r\n} from \"@dnd-kit/sortable\";\r\nimport { getColumnPinningStylesBody } from \"../../libs/utils/common\";\r\nimport Checkbox from \"../inputs/checkbox\";\r\nimport { TableBodyCell, TableBodyRow } from \"./table-body.styles\";\r\n\r\ninterface TableBodyProps<T> {\r\n  table: Table<T>;\r\n  featureOptions: CraftTableFeatureProps;\r\n  NestedComponent?: React.ComponentType<{ row: Row<T> }>;\r\n  columnOrder: ColumnOrderState;\r\n  tableStates: CraftTableOptionsProps;\r\n}\r\n\r\nfunction TableBody<T>({\r\n  table,\r\n  featureOptions,\r\n  NestedComponent,\r\n  columnOrder,\r\n  tableStates,\r\n}: TableBodyProps<T>) {\r\n  const { enableColumnReordering, enableRowSelection } = featureOptions;\r\n\r\n  const { wrapColumns } = tableStates;\r\n\r\n  const renderRow = (row: Row<T>) => {\r\n    const renderedRow = (\r\n      <TableBodyRow\r\n        key={row?.id}\r\n        hoverable\r\n        striped={featureOptions.striped}\r\n        selected={row.getIsSelected()}\r\n        expanded={row.getIsExpanded()}\r\n      >\r\n        {enableRowSelection && (\r\n          <TableBodyCell\r\n            style={{\r\n              position: \"sticky\",\r\n              left: 0,\r\n              width: \"50px\",\r\n            }}\r\n          >\r\n            <Checkbox\r\n              checked={row.getIsSelected()}\r\n              indeterminate={row.getIsSomeSelected()}\r\n              onChange={row.getToggleSelectedHandler()}\r\n              className=\"checkbox__input\"\r\n            />\r\n          </TableBodyCell>\r\n        )}\r\n\r\n        {row?.getVisibleCells()?.map((cell) => {\r\n          return enableColumnReordering ? (\r\n            <SortableContext\r\n              key={cell.id}\r\n              items={columnOrder}\r\n              strategy={horizontalListSortingStrategy}\r\n            >\r\n              <DragAlongCell\r\n                cell={cell}\r\n                featureOptions={featureOptions}\r\n                tableStates={tableStates}\r\n              />\r\n            </SortableContext>\r\n          ) : (\r\n            <TableBodyCell\r\n              style={{\r\n                ...getColumnPinningStylesBody(cell.column),\r\n                width: cell.column.getSize(),\r\n                ...((wrapColumns.all_wrap || wrapColumns[cell.column.id]) && {\r\n                  wordBreak: \"break-all\",\r\n                  whiteSpace: \"normal\",\r\n                }),\r\n              }}\r\n              className=\"table-row-cell\"\r\n              align={(cell.column.columnDef.meta as align)?.align || \"left\"}\r\n            >\r\n              {flexRender(cell?.column?.columnDef?.cell, cell?.getContext())}\r\n            </TableBodyCell>\r\n          );\r\n        })}\r\n      </TableBodyRow>\r\n    );\r\n\r\n    if (row.getIsExpanded()) {\r\n      return (\r\n        <React.Fragment key={row.id}>\r\n          {renderedRow}\r\n          {NestedComponent && (\r\n            <TableBodyRow\r\n              hoverable\r\n              striped={featureOptions.striped}\r\n              selected={row.getIsSelected()}\r\n              expanded={row.getIsExpanded()}\r\n            >\r\n              {<NestedComponent {...{ row }} />}\r\n            </TableBodyRow>\r\n          )}\r\n        </React.Fragment>\r\n      );\r\n    } else {\r\n      return renderedRow;\r\n    }\r\n  };\r\n\r\n  return (\r\n    <tbody>{table?.getRowModel()?.rows?.map((row) => renderRow(row))}</tbody>\r\n  );\r\n}\r\n\r\nexport default TableBody;\r\n","// columnResize.styles.ts\r\nimport { Box } from \"@mui/material\";\r\nimport { styled } from \"@mui/material/styles\";\r\n\r\nexport const ColumnResizeHandle = styled(Box, {\r\n  shouldForwardProp: (prop) => prop !== \"isResizing\",\r\n})<{ isResizing?: boolean }>(({ theme, isResizing }) => ({\r\n  position: \"absolute\",\r\n  top: 0,\r\n  right: 0,\r\n  height: \"100%\",\r\n  width: theme.spacing(0.5),\r\n  cursor: \"col-resize\",\r\n  userSelect: \"none\",\r\n  touchAction: \"none\",\r\n  opacity: isResizing ? 1 : 0,\r\n  background: isResizing ? \"rgba(0, 0, 0, 0.8)\" : \"rgba(0, 0, 0, 0.5)\",\r\n\r\n  \"&:hover\": {\r\n    opacity: 1,\r\n  },\r\n}));\r\n\r\nexport const TableHeadButton = styled(Box)(({ theme }) => ({\r\n  display: \"flex\",\r\n  justifyContent: \"center\",\r\n  alignItems: \"center\",\r\n  cursor: \"pointer\",\r\n  transition: \"transform 0.15s ease\",\r\n\r\n  \"&:hover\": {\r\n    transform: \"scale(1.1)\",\r\n  },\r\n\r\n  \"& svg\": {\r\n    color: theme.palette.grey[700],\r\n  },\r\n}));\r\n\r\nexport const TableHeadSort = styled(Box, {\r\n  shouldForwardProp: (prop) => prop !== \"sortable\",\r\n})<{ sortable?: boolean }>(({ theme, sortable }) => ({\r\n  userSelect: sortable ? \"none\" : \"auto\",\r\n  fontSize: theme.typography.pxToRem(14),\r\n\r\n  \"& svg\": {\r\n    marginLeft: \"0.25rem\",\r\n  },\r\n}));\r\n\r\nexport const TableDndButton = styled(Box)(({ theme }) => ({\r\n  display: \"inline-flex\",\r\n  alignItems: \"center\",\r\n  justifyContent: \"center\",\r\n  color: theme.palette.grey[600],\r\n  cursor: \"grab\",\r\n  transition: \"transform 0.15s ease, color 0.15s ease\",\r\n\r\n  \"&:hover\": {\r\n    transform: \"scale(1.1)\",\r\n    color: theme.palette.grey[900],\r\n    cursor: \"grabbing\",\r\n  },\r\n}));\r\n\r\nexport const TableHeadContent = styled(Box)(({ theme }) => ({\r\n  display: \"flex\",\r\n  alignItems: \"center\",\r\n  justifyContent: \"space-between\",\r\n  gap: theme.spacing(1),\r\n}));\r\n\r\nexport const TableHeadRoot = styled(\"thead\", {\r\n  shouldForwardProp: (prop) => prop !== \"sticky\",\r\n})<{ sticky?: boolean }>(({ sticky }) => ({\r\n  position: sticky ? \"sticky\" : \"relative\",\r\n  top: sticky ? 0 : \"auto\",\r\n  zIndex: sticky ? 3 : \"auto\",\r\n}));\r\n\r\nexport const TableHeadRow = styled(\"tr\", {\r\n  shouldForwardProp: (prop) => prop !== \"striped\",\r\n})<{ striped?: boolean }>(({ theme, striped }) => ({\r\n  backgroundColor: striped\r\n    ? theme.palette.common.white\r\n    : theme.palette.grey[50],\r\n}));\r\n\r\nexport const TableHeadCell = styled(\"th\", {\r\n  shouldForwardProp: (prop) =>\r\n    prop !== \"compact\" && prop !== \"isDragging\" && prop !== \"isPinned\",\r\n})<{\r\n  compact?: boolean;\r\n  isDragging?: boolean;\r\n  isPinned?: boolean;\r\n  sticky?: boolean;\r\n}>(({ theme, compact, isDragging, isPinned, sticky }) => ({\r\n  position: \"relative\",\r\n  padding: compact ? theme.spacing(0.5, 0.75) : theme.spacing(0.75, 1.25),\r\n  border: `0.5px solid ${theme.palette.grey[200]}`,\r\n  cursor: \"pointer\",\r\n  backgroundColor: theme.palette.common.white,\r\n  userSelect: \"none\",\r\n  // smoother drag feedback\r\n  opacity: isDragging ? 0.8 : 1,\r\n  zIndex: isPinned ? 3 : isDragging ? 1 : 0,\r\n\r\n  ...(sticky && {\r\n    position: \"sticky\",\r\n    left: 0,\r\n    zIndex: 4,\r\n  }),\r\n}));\r\n","import { IconPinOffOutline } from \"../../../assets/svg\";\r\nimport { TableHeaderProps } from \"../../types/table\";\r\nimport { TableHeadButton } from \"./table-head.styles\";\r\n\r\nfunction TableHeadPin<T>({ header }: TableHeaderProps<T>) {\r\n  // ! Header now is pinned via dropdown on table head\r\n  // if (header.column.getIsPinned() !== \"left\") {\r\n  //   return (\r\n  //     <TableHeadButton onClick={() => header.column.pin(\"left\")}>\r\n  //       {/* <IconPinOutline /> */}\r\n  //     </TableHeadButton>\r\n  //   );\r\n  // }\r\n\r\n  return (\r\n    header.column.getIsPinned() && (\r\n      <TableHeadButton\r\n        onClick={(e) => {\r\n          e.stopPropagation();\r\n          header.column.pin(false);\r\n        }}\r\n      >\r\n        <IconPinOffOutline />\r\n      </TableHeadButton>\r\n    )\r\n  );\r\n}\r\n\r\nexport default TableHeadPin;\r\n","import {\r\n  Popover,\r\n  List,\r\n  ListItemButton,\r\n  ListItemText,\r\n  ListItemIcon,\r\n  Switch,\r\n} from \"@mui/material\";\r\nimport { Header } from \"@tanstack/react-table\";\r\nimport {\r\n  UpArrow,\r\n  DownArrow,\r\n  HideIcon,\r\n  IconPinOffOutline,\r\n  IconPinOutline,\r\n} from \"../../../assets/svg\";\r\nimport {\r\n  craftTableFilterSettingsOptionsProps,\r\n  CraftTableOptionsProps,\r\n} from \"../../types/table-options\";\r\nimport { useFullscreenPopoverContainer } from \"../../libs/hooks/useFullScreen\";\r\n\r\ntype Props<T> = {\r\n  anchorEl: HTMLElement | null;\r\n  activeTab?: string;\r\n  onClose: () => void;\r\n  header: Header<T, unknown>;\r\n  tableStates: CraftTableOptionsProps;\r\n  filterSettingStates?: craftTableFilterSettingsOptionsProps;\r\n  onSaveSettings?: (columnId: string) => void;\r\n};\r\n\r\nfunction TableHeadPopover<T>({\r\n  anchorEl,\r\n  onClose,\r\n  header,\r\n  tableStates,\r\n  onSaveSettings,\r\n}: Props<T>) {\r\n  const open = Boolean(anchorEl);\r\n  const column = header.column;\r\n  const isPinned = column.getIsPinned() === \"left\";\r\n  const { container: fullscreenContainer } = useFullscreenPopoverContainer();\r\n  const { wrapColumns, setWrapColumns } = tableStates;\r\n\r\n  const toggleWrapForColumn = (columnId: string) => {\r\n    setWrapColumns((prev: Record<string, boolean>) => ({\r\n      ...prev,\r\n      [columnId]: !prev[columnId],\r\n      all_wrap: false,\r\n    }));\r\n  };\r\n  const handleUpdateSettings = (columnId: string) => {\r\n    onSaveSettings && onSaveSettings(columnId);\r\n  };\r\n\r\n  return (\r\n    <Popover\r\n      open={open}\r\n      anchorEl={anchorEl}\r\n      onClose={onClose}\r\n      anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n      container={fullscreenContainer}\r\n    >\r\n      <List dense>\r\n        <ListItemButton onClick={() => column.toggleSorting(false)}>\r\n          <ListItemIcon>\r\n            <UpArrow />\r\n          </ListItemIcon>\r\n          <ListItemText primary=\"Sort ascending\" />\r\n        </ListItemButton>\r\n        <ListItemButton onClick={() => column.toggleSorting(true)}>\r\n          <ListItemIcon>\r\n            <DownArrow />\r\n          </ListItemIcon>\r\n          <ListItemText primary=\"Sort descending\" />\r\n        </ListItemButton>\r\n        <ListItemButton onClick={() => handleUpdateSettings(column?.id)}>\r\n          <ListItemIcon>\r\n            <HideIcon />\r\n          </ListItemIcon>\r\n          <ListItemText primary=\"Hide in view\" />\r\n        </ListItemButton>\r\n        <ListItemButton\r\n          onClick={() => {\r\n            column.pin(isPinned ? false : \"left\");\r\n          }}\r\n        >\r\n          <ListItemIcon>\r\n            {isPinned ? <IconPinOffOutline /> : <IconPinOutline />}\r\n          </ListItemIcon>\r\n          <ListItemText\r\n            primary={isPinned ? \"Unfreeze column\" : \"Freeze column\"}\r\n          />\r\n        </ListItemButton>\r\n\r\n        <ListItemButton>\r\n          <ListItemText primary=\"Wrap Cell\" />\r\n          <Switch\r\n            checked={wrapColumns.all_wrap || wrapColumns[column.id]}\r\n            onChange={() => toggleWrapForColumn(column.id)}\r\n          />\r\n        </ListItemButton>\r\n      </List>\r\n    </Popover>\r\n  );\r\n}\r\n\r\nexport default TableHeadPopover;\r\n","import { Header } from \"@tanstack/react-table\";\r\nimport { ColumnResizeHandle } from \"./table-head.styles\";\r\n\r\ninterface Props<T> {\r\n  header: Header<T, unknown>;\r\n}\r\n\r\nfunction TableColumnResizeHandle<T>({ header }: Props<T>) {\r\n  return (\r\n    <ColumnResizeHandle\r\n      isResizing={header.column.getIsResizing()}\r\n      onDoubleClick={() => header.column.resetSize()}\r\n      onMouseDown={header.getResizeHandler()}\r\n      onTouchStart={header.getResizeHandler()}\r\n      className={`column__resize ${\r\n        header.column.getIsResizing() ? \"is__resizing\" : \"\"\r\n      }`}\r\n    />\r\n  );\r\n}\r\n\r\nexport default TableColumnResizeHandle;\r\n","import { flexRender } from \"@tanstack/react-table\";\r\nimport { useSortable } from \"@dnd-kit/sortable\";\r\nimport { useState } from \"react\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { DownArrow, DragHandleIcon, UpArrow } from \"../../../assets/svg\";\r\nimport { getColumnPinningStyles } from \"../../libs/utils/common\";\r\nimport { TableHeaderProps } from \"../../types/table\";\r\nimport TableHeadPin from \"./table-head-pin\";\r\nimport TableHeadPopover from \"./table-head-popover\";\r\nimport TableColumnResizeHandle from \"./table-head-resizer\";\r\nimport {\r\n  TableDndButton,\r\n  TableHeadCell,\r\n  TableHeadContent,\r\n  TableHeadSort,\r\n} from \"./table-head.styles\";\r\nimport { Box } from \"@mui/material\";\r\n\r\nfunction DraggableTableHeader<T>({\r\n  header,\r\n  activeTab,\r\n  featureOptions,\r\n  tableStates,\r\n  onSaveSettings,\r\n}: TableHeaderProps<T>) {\r\n  const { enableColumnPinning } = featureOptions;\r\n\r\n  // Popover\r\n  const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\r\n\r\n  const handleMenuToggle = (event: React.MouseEvent<HTMLElement>) => {\r\n    if (header.column.getIsResizing()) return;\r\n\r\n    setAnchorEl((prev) => (prev ? null : event.currentTarget));\r\n  };\r\n\r\n  const handleClose = () => {\r\n    setAnchorEl(null);\r\n  };\r\n\r\n  const { isDragging, transform, attributes, listeners } = useSortable({\r\n    id: header.column.id,\r\n  });\r\n\r\n  const isPinned = header.column.getIsPinned();\r\n\r\n  return (\r\n    <TableHeadCell\r\n      onMouseLeave={handleClose}\r\n      colSpan={header.colSpan}\r\n      compact={featureOptions?.compactTable}\r\n      isDragging={isDragging}\r\n      isPinned={Boolean(isPinned)}\r\n      style={{\r\n        width: `${header.column.getSize()}px`,\r\n        minWidth: `${header.column.columnDef.minSize ?? 180}px`,\r\n        maxWidth: `${header.column.columnDef.maxSize}px`,\r\n        transform: CSS.Translate.toString(transform),\r\n        transition: \"width transform 0.2s ease-in-out\",\r\n        ...getColumnPinningStyles(header.column),\r\n      }}\r\n    >\r\n      {header.isPlaceholder ? null : (\r\n        <TableHeadContent onClick={handleMenuToggle}>\r\n          <TableHeadSort sortable={header.column.getCanSort()}>\r\n            {flexRender(header.column.columnDef.header, header.getContext())}\r\n          </TableHeadSort>\r\n\r\n          <Box\r\n            display={\"flex\"}\r\n            alignItems={\"center\"}\r\n            justifyContent={\"center\"}\r\n            gap={0.5}\r\n          >\r\n            {{\r\n              asc: <UpArrow />,\r\n              desc: <DownArrow />,\r\n            }[header.column.getIsSorted() as \"asc\" | \"desc\"] ?? null}\r\n\r\n            {enableColumnPinning && (\r\n              <TableHeadPin\r\n                header={header}\r\n                featureOptions={featureOptions}\r\n                tableStates={tableStates}\r\n              />\r\n            )}\r\n\r\n            <TableDndButton {...attributes} {...listeners}>\r\n              <DragHandleIcon />\r\n            </TableDndButton>\r\n          </Box>\r\n        </TableHeadContent>\r\n      )}\r\n\r\n      {/* column resizing */}\r\n      {header.column.getCanResize() ? (\r\n        <TableColumnResizeHandle header={header} />\r\n      ) : null}\r\n\r\n      {/* Popover */}\r\n      <TableHeadPopover\r\n        anchorEl={anchorEl}\r\n        activeTab={activeTab}\r\n        onClose={handleClose}\r\n        header={header}\r\n        tableStates={tableStates}\r\n        onSaveSettings={onSaveSettings}\r\n      />\r\n    </TableHeadCell>\r\n  );\r\n}\r\n\r\nexport default DraggableTableHeader;\r\n","import {\r\n  ColumnOrderState,\r\n  flexRender,\r\n  Header,\r\n  Table,\r\n} from \"@tanstack/react-table\";\r\nimport {\r\n  CraftTableFeatureProps,\r\n  craftTableFilterSettingsOptionsProps,\r\n  CraftTableOptionsProps,\r\n} from \"../../types/table-options\";\r\nimport { DownArrow, UpArrow } from \"../../../assets/svg\";\r\nimport { useState } from \"react\";\r\nimport { getColumnPinningStyles } from \"../../libs/utils/common\";\r\nimport {\r\n  horizontalListSortingStrategy,\r\n  SortableContext,\r\n} from \"@dnd-kit/sortable\";\r\nimport DraggableTableHeader from \"./table-head-dnd-cell\";\r\nimport TableHeadPin from \"./table-head-pin\";\r\nimport Checkbox from \"../inputs/checkbox\";\r\nimport TableColumnResizeHandle from \"./table-head-resizer\";\r\nimport {\r\n  TableHeadCell,\r\n  TableHeadContent,\r\n  TableHeadRoot,\r\n  TableHeadRow,\r\n  TableHeadSort,\r\n} from \"./table-head.styles\";\r\n\r\ninterface TableHeadProps<T> {\r\n  table: Table<T>;\r\n  activeTab?: string;\r\n  featureOptions: CraftTableFeatureProps;\r\n  columnOrder: ColumnOrderState;\r\n  tableStates: CraftTableOptionsProps;\r\n  filterSettingStates: craftTableFilterSettingsOptionsProps;\r\n  onSaveSettings?: (columnId: string) => void;\r\n}\r\n\r\nfunction TableHead<T>({\r\n  table,\r\n  activeTab,\r\n  featureOptions,\r\n  columnOrder,\r\n  tableStates,\r\n  filterSettingStates,\r\n  onSaveSettings,\r\n}: TableHeadProps<T>) {\r\n  const {\r\n    stickyHeader,\r\n    enableColumnReordering,\r\n    enableColumnPinning,\r\n    enableRowSelection,\r\n  } = featureOptions;\r\n\r\n  // Popover\r\n  const [, setAnchorEl] = useState<HTMLElement | null>(null);\r\n\r\n  const handleMenuToggle = (\r\n    event: React.MouseEvent<HTMLElement>,\r\n    header: Header<T, unknown>\r\n  ) => {\r\n    if (header.column.getIsResizing()) return;\r\n\r\n    setAnchorEl((prev) => (prev ? null : event.currentTarget));\r\n  };\r\n\r\n  return (\r\n    <TableHeadRoot sticky={stickyHeader}>\r\n      {table.getHeaderGroups().map((headerGroup) => (\r\n        <TableHeadRow striped={featureOptions.striped} key={headerGroup?.id}>\r\n          {enableRowSelection && (\r\n            <TableHeadCell\r\n              sticky\r\n              compact={featureOptions.compactTable}\r\n              style={{ width: 50 }}\r\n            >\r\n              <TableHeadContent>\r\n                <Checkbox\r\n                  checked={table.getIsAllRowsSelected()}\r\n                  indeterminate={table.getIsSomeRowsSelected()}\r\n                  onChange={() => table.toggleAllRowsSelected()}\r\n                />\r\n              </TableHeadContent>\r\n            </TableHeadCell>\r\n          )}\r\n\r\n          {headerGroup.headers.map((header) => {\r\n            return enableColumnReordering ? (\r\n              <SortableContext\r\n                key={header?.id}\r\n                items={columnOrder}\r\n                strategy={horizontalListSortingStrategy}\r\n              >\r\n                <DraggableTableHeader\r\n                  header={header}\r\n                  activeTab={activeTab}\r\n                  featureOptions={featureOptions}\r\n                  tableStates={tableStates}\r\n                  filterSettingStates={filterSettingStates}\r\n                  onSaveSettings={onSaveSettings}\r\n                />\r\n              </SortableContext>\r\n            ) : (\r\n              <TableHeadCell\r\n                key={header?.id}\r\n                colSpan={header.colSpan}\r\n                compact={featureOptions.compactTable}\r\n                style={{\r\n                  ...getColumnPinningStyles(header.column),\r\n                  width: `${header.column.getSize()}px`,\r\n                  minWidth: `${header.column.columnDef.minSize}px`,\r\n                  maxWidth: `${header.column.columnDef.maxSize}px`,\r\n                }}\r\n              >\r\n                {header.isPlaceholder ? null : (\r\n                  <TableHeadContent\r\n                    onClick={(event) => handleMenuToggle(event, header)}\r\n                  >\r\n                    <TableHeadSort sortable={header.column.getCanSort()}>\r\n                      {flexRender(\r\n                        header.column.columnDef.header,\r\n                        header.getContext()\r\n                      )}\r\n\r\n                      {{ asc: <UpArrow />, desc: <DownArrow /> }[\r\n                        header.column.getIsSorted() as \"asc\" | \"desc\"\r\n                      ] ?? null}\r\n                    </TableHeadSort>\r\n\r\n                    {enableColumnPinning && (\r\n                      <TableHeadPin\r\n                        header={header}\r\n                        featureOptions={featureOptions}\r\n                        tableStates={tableStates}\r\n                      />\r\n                    )}\r\n                  </TableHeadContent>\r\n                )}\r\n\r\n                {/* column resizing */}\r\n                {header.column.getCanResize() ? (\r\n                  <TableColumnResizeHandle header={header} />\r\n                ) : null}\r\n\r\n                {/* Popover */}\r\n                {/* <TableHeadPopover\r\n                  anchorEl={anchorEl}\r\n                  onClose={handleClose}\r\n                  header={header}\r\n                  wrap={wrap}\r\n                  tableStates={tableStates}\r\n                /> */}\r\n              </TableHeadCell>\r\n            );\r\n          })}\r\n        </TableHeadRow>\r\n      ))}\r\n    </TableHeadRoot>\r\n  );\r\n}\r\n\r\nexport default TableHead;\r\n","import { formatClassName } from \"../libs/utils/common\";\r\nimport { CraftTableComponentProps } from \"../types/table\";\r\nimport TableBody from \"./table-body/table-body\";\r\nimport TableHead from \"./table-head/table-head\";\r\n\r\nfunction Table<T>({\r\n  table,\r\n  activeTab,\r\n  featureOptions,\r\n  NestedComponent,\r\n  columnOrder,\r\n  isCompactTable,\r\n  tableStates,\r\n  filterSettingStates,\r\n  onSaveSettings,\r\n}: CraftTableComponentProps<T>) {\r\n  const { striped } = featureOptions;\r\n\r\n  return (\r\n    <table\r\n      className={formatClassName(\r\n        `ts__table ${striped ? \"ts--striped\" : \"\"} ${\r\n          isCompactTable ? \"ts--compact\" : \"\"\r\n        }`\r\n      )}\r\n    >\r\n      <TableHead\r\n        table={table}\r\n        activeTab={activeTab}\r\n        featureOptions={featureOptions}\r\n        columnOrder={columnOrder}\r\n        tableStates={tableStates}\r\n        filterSettingStates={filterSettingStates}\r\n        onSaveSettings={onSaveSettings}\r\n      />\r\n      <TableBody\r\n        table={table}\r\n        featureOptions={featureOptions}\r\n        NestedComponent={NestedComponent}\r\n        columnOrder={columnOrder}\r\n        tableStates={tableStates}\r\n      />\r\n    </table>\r\n  );\r\n}\r\n\r\nexport default Table;\r\n","import {\r\n  closestCenter,\r\n  DndContext,\r\n  DragEndEvent,\r\n  KeyboardSensor,\r\n  MouseSensor,\r\n  SensorDescriptor,\r\n  SensorOptions,\r\n  TouchSensor,\r\n  useSensor,\r\n  useSensors,\r\n} from \"@dnd-kit/core\";\r\nimport { CraftTableComponentProps } from \"../types/table\";\r\nimport Table from \"./table\";\r\nimport { restrictToHorizontalAxis } from \"@dnd-kit/modifiers\";\r\nimport { arrayMove } from \"@dnd-kit/sortable\";\r\n\r\nfunction TableDND<T>({\r\n  table,\r\n  activeTab,\r\n  featureOptions,\r\n  NestedComponent,\r\n  columnOrder,\r\n  setColumnOrder,\r\n  isCompactTable,\r\n  tableStates,\r\n  filterSettingStates,\r\n  onSaveSettings,\r\n}: CraftTableComponentProps<T>) {\r\n  const sensors: SensorDescriptor<SensorOptions>[] = useSensors(\r\n    useSensor(MouseSensor, {}),\r\n    useSensor(TouchSensor, {}),\r\n    useSensor(KeyboardSensor, {})\r\n  );\r\n\r\n  const handleDragEnd = (event: DragEndEvent) => {\r\n    const { active, over } = event;\r\n    if (active && over && active.id !== over.id) {\r\n      setColumnOrder((columnOrder) => {\r\n        const oldIndex = columnOrder.indexOf(active.id as string);\r\n        const newIndex = columnOrder.indexOf(over.id as string);\r\n        return arrayMove(columnOrder, oldIndex, newIndex);\r\n      });\r\n    }\r\n  };\r\n\r\n  return (\r\n    <DndContext\r\n      collisionDetection={closestCenter}\r\n      modifiers={[restrictToHorizontalAxis]}\r\n      onDragEnd={handleDragEnd}\r\n      sensors={sensors}\r\n    >\r\n      <Table\r\n        table={table}\r\n        activeTab={activeTab}\r\n        featureOptions={featureOptions}\r\n        NestedComponent={NestedComponent}\r\n        columnOrder={columnOrder}\r\n        setColumnOrder={setColumnOrder}\r\n        isCompactTable={isCompactTable}\r\n        tableStates={tableStates}\r\n        filterSettingStates={filterSettingStates}\r\n        onSaveSettings={onSaveSettings}\r\n      />\r\n    </DndContext>\r\n  );\r\n}\r\n\r\nexport default TableDND;\r\n","import {\r\n  ColumnDef,\r\n  ColumnMeta,\r\n  getCoreRowModel,\r\n  getExpandedRowModel,\r\n  getPaginationRowModel,\r\n  getSortedRowModel,\r\n  useReactTable,\r\n} from \"@tanstack/react-table\";\r\nimport \"./index.scss\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport {\r\n  CraftTablePaginationProps,\r\n  CraftTableProps,\r\n  TopbarOptionsProps,\r\n} from \"../types/table\";\r\nimport { CraftTableFeatureProps } from \"../types/table-options\";\r\nimport { LoaderAnimation } from \"../../assets/svg\";\r\nimport Topbar from \"./topbar\";\r\nimport DefaultPagination from \"./pagination/default\";\r\nimport TableDND from \"./table-dnd\";\r\nimport Table from \"./table\";\r\nimport { useFullscreenPopoverContainer } from \"../libs/hooks/useFullScreen\";\r\n\r\ninterface CustomColumnMeta<T> extends ColumnMeta<T, unknown> {\r\n  defaultPinned?: \"left\" | \"right\" | undefined;\r\n}\r\n\r\nfunction TableWrapper<T>({\r\n  data = [],\r\n  columns = [],\r\n  tableStates,\r\n  filterSettingStates,\r\n  onSaveSettings,\r\n  paginationOptions,\r\n  featureOptions,\r\n  topbarOptions,\r\n  nestedComponent,\r\n  loadingOptions = { isLoading: false },\r\n  customRenderFn = {},\r\n  // styleOptions,\r\n  shouldHideColumn,\r\n  emptyListComponent,\r\n  filterOptions,\r\n  activeTab,\r\n}: CraftTableProps<T>) {\r\n  if (!Array.isArray(data)) {\r\n    throw new Error(\"data must be an array of objects.\");\r\n  }\r\n  const [metaColumns, setMetaColumns] = useState<ColumnDef<T>[]>([]);\r\n\r\n  useEffect(() => {\r\n    if (columns?.length > 0) {\r\n      const updatedColumns = columns\r\n        ?.filter((col) => {\r\n          const accessorKey =\r\n            \"accessorKey\" in col\r\n              ? (col as { accessorKey: string })?.accessorKey\r\n              : undefined;\r\n          return typeof shouldHideColumn === \"function\"\r\n            ? !shouldHideColumn(accessorKey)\r\n            : true;\r\n        })\r\n        ?.map((col, index) => {\r\n          const id =\r\n            \"accessorKey\" in col\r\n              ? (col as { accessorKey: string })?.accessorKey\r\n              : `col_${index}`;\r\n\r\n          const cell = (ctx: any) => {\r\n            if (col?.meta?.type === \"custom\" && col?.meta?.propName) {\r\n              const customFn = customRenderFn?.[col?.meta?.propName];\r\n              return typeof customFn === \"function\"\r\n                ? customFn({\r\n                    value: ctx?.getValue(),\r\n                    row: ctx?.row,\r\n                    table: ctx?.table?.getRowModel()?.rows,\r\n                  })\r\n                : ctx?.getValue();\r\n            }\r\n\r\n            if (typeof col?.cell === \"function\") {\r\n              return col?.cell(ctx);\r\n            }\r\n\r\n            return ctx?.getValue();\r\n          };\r\n\r\n          return { ...col, id, cell };\r\n        });\r\n\r\n      setMetaColumns(updatedColumns);\r\n    }\r\n  }, [columns]);\r\n\r\n  //For Default Column Pinning to work\r\n  useEffect(() => {\r\n    table.getAllLeafColumns().forEach((col) => {\r\n      const where = (col.columnDef.meta as CustomColumnMeta<T>)\r\n        ?.defaultPinned as \"left\" | \"right\" | undefined;\r\n      if (where && !col.getIsPinned()) {\r\n        col.pin(where);\r\n      }\r\n    });\r\n  }, [tableStates?.columnPinning?.left, metaColumns]);\r\n\r\n  const [columnOrder, setColumnOrder] = useState<string[]>(() =>\r\n    metaColumns.map((c) => c.id!)\r\n  );\r\n\r\n  useEffect(() => {\r\n    if (metaColumns.length > 0) {\r\n      setColumnOrder(metaColumns.map((c) => c.id!));\r\n    }\r\n  }, [metaColumns]);\r\n\r\n  const [isCompactTable, setIsCompactTable] = useState<boolean>(\r\n    featureOptions?.compactTable ?? false\r\n  );\r\n\r\n  const tableRef = useRef<HTMLDivElement>(null);\r\n\r\n  useEffect(() => {\r\n    setIsCompactTable(featureOptions?.compactTable ?? false);\r\n  }, [featureOptions?.compactTable]);\r\n\r\n  const craftPaginationOptions: CraftTablePaginationProps = {\r\n    showPagination: true,\r\n    paginationPosition: \"bottom\",\r\n    paginationView: \"full\",\r\n\r\n    ...paginationOptions,\r\n  };\r\n\r\n  const totalRows = craftPaginationOptions?.totalRows ?? data.length;\r\n  const rowsPerPageArray = craftPaginationOptions?.rowsPerPageArray ?? [\r\n    25, 50, 100, 150,\r\n  ];\r\n  const craftTopbarOptions: TopbarOptionsProps = {\r\n    showColumnToggle: true,\r\n    showCompactTableToggle: true,\r\n    showChangeLayoutToggle: true,\r\n    viewMoreToggle: true,\r\n    showSearch: true,\r\n    showSortingToggle: false,\r\n    showFilterToggle: true,\r\n    tableStates,\r\n\r\n    // Add other conditions above topbarOptions\r\n    ...topbarOptions,\r\n  };\r\n\r\n  const craftFeatureOptions: CraftTableFeatureProps = {\r\n    enableTopbar: true,\r\n    enableSorting: true,\r\n    enableServerSidePagination: false,\r\n    enableServerSideSorting: false,\r\n    enableRowSelection: false,\r\n    enableColumnResizing: true,\r\n    enableColumnReordering: true,\r\n    enableColumnPinning: true,\r\n    enableMultiColumnSorting: true,\r\n    compactTable: false,\r\n    stickyHeader: true,\r\n    enableWordBreakAll: false,\r\n    striped: false,\r\n\r\n    // Add other conditions above featureOptions\r\n    ...featureOptions,\r\n  };\r\n\r\n  const {\r\n    enableTopbar,\r\n    enableRowSelection,\r\n    enableServerSidePagination,\r\n    enableServerSideSorting,\r\n    enableSorting,\r\n    enableColumnResizing,\r\n    enableColumnReordering,\r\n    enableColumnPinning,\r\n    // enableMultiColumnSorting,\r\n  } = craftFeatureOptions;\r\n\r\n  const {\r\n    sorting,\r\n    setSorting,\r\n    pagination,\r\n    setPagination,\r\n    rowSelection,\r\n    setRowSelection,\r\n    expanded,\r\n    setExpanded,\r\n  } = tableStates;\r\n\r\n  const table = useReactTable({\r\n    data,\r\n    columns: metaColumns,\r\n    state: {\r\n      sorting,\r\n      pagination,\r\n      rowSelection,\r\n      columnOrder,\r\n      expanded,\r\n    },\r\n\r\n    getCoreRowModel: getCoreRowModel(),\r\n\r\n    /** Sorting options start here */\r\n    enableSorting: enableSorting,\r\n    onSortingChange: setSorting,\r\n    getSortedRowModel: getSortedRowModel(),\r\n    manualSorting: enableServerSideSorting,\r\n    // isMultiSortEvent: () => enableMultiColumnSorting || false,\r\n    /** Sorting options end here */\r\n\r\n    /** Pagination options start here */\r\n    getPaginationRowModel: getPaginationRowModel(),\r\n    onPaginationChange: setPagination,\r\n    rowCount: totalRows,\r\n    manualPagination: enableServerSidePagination,\r\n    /** Pagination options end here */\r\n\r\n    /** Row selection options start here */\r\n    enableRowSelection: enableRowSelection,\r\n    onRowSelectionChange: setRowSelection,\r\n    /** Row selection options end here */\r\n\r\n    /** Column Sizing options start here */\r\n    enableColumnResizing: enableColumnResizing,\r\n    columnResizeDirection: \"ltr\",\r\n    columnResizeMode: \"onChange\",\r\n    /** Column Sizing options end here */\r\n\r\n    /** Column Ordering options start here */\r\n    onColumnOrderChange: setColumnOrder,\r\n    /** Column Ordering options end here */\r\n\r\n    /** Column Pinning options end here */\r\n    enableColumnPinning: enableColumnPinning,\r\n    /** Column Pinning options end here */\r\n\r\n    /** Row expanding options start here */\r\n    getExpandedRowModel: getExpandedRowModel(),\r\n    onExpandedChange: setExpanded,\r\n    getSubRows: (row) => (row as { subRows?: T[] }).subRows ?? [],\r\n    /** Row expanding options end here */\r\n  });\r\n\r\n  const { isLoading, loadingComponent, loaderText } = loadingOptions;\r\n  const { isFullscreen } = useFullscreenPopoverContainer();\r\n\r\n  const handleFullscreenToggle = () => {\r\n    if (!document.fullscreenElement) {\r\n      tableRef.current?.requestFullscreen().catch((err) => {\r\n        console.error(\"Error attempting to enable fullscreen mode:\", err);\r\n      });\r\n    } else {\r\n      document.exitFullscreen();\r\n    }\r\n  };\r\n\r\n  // const tableWrapperProps = {\r\n  //   ...(styleOptions?.wrapperStyle && { style: styleOptions.wrapperStyle }),\r\n  //   className: \"ts__table__wrapper\",\r\n  // };\r\n  // const emptyListComponentCondition = () => {\r\n  //   if(isLoading) {}\r\n  // }\r\n\r\n  const showFilterCondition = filterOptions?.show;\r\n\r\n  return (\r\n    <div className=\"ts__table__container\">\r\n      <div\r\n        className={`ts__table__layout ${\r\n          showFilterCondition ? \"has-filter\" : \"\"\r\n        }`}\r\n      >\r\n        {/* Main Table Area */}\r\n        <div\r\n          className={`ts__table__main ${isFullscreen ? \"is-fullscreen\" : \"\"}`}\r\n          ref={tableRef}\r\n        >\r\n          {enableTopbar && (\r\n            <Topbar\r\n              table={table}\r\n              topbarOptions={craftTopbarOptions}\r\n              isCompactTable={isCompactTable}\r\n              setIsCompactTable={setIsCompactTable}\r\n              isFullscreen={isFullscreen}\r\n              fullscreenToggle={handleFullscreenToggle}\r\n              paginationComponent={\r\n                craftPaginationOptions?.showPagination === true &&\r\n                craftPaginationOptions?.paginationPosition === \"top\" ? (\r\n                  <DefaultPagination\r\n                    table={table}\r\n                    rowsPerPageArray={rowsPerPageArray}\r\n                    paginationOptions={craftPaginationOptions}\r\n                  />\r\n                ) : null\r\n              }\r\n              searchValue={craftTopbarOptions.searchValue}\r\n              onSearchChange={craftTopbarOptions.onSearchChange}\r\n              tableStates={tableStates}\r\n              onFilterButtonClick={topbarOptions?.onFilterButtonClick}\r\n            />\r\n          )}\r\n\r\n          {isLoading ? (\r\n            loadingComponent ?? (\r\n              <div className=\"ts__loader\">\r\n                <LoaderAnimation />\r\n                {loaderText && <p>{loaderText}</p>}\r\n              </div>\r\n            )\r\n          ) : !isLoading && data.length === 0 && emptyListComponent ? (\r\n            emptyListComponent\r\n          ) : (\r\n            <div\r\n              // {...tableWrapperProps}\r\n              className={`ts__table__wrapper ${\r\n                isFullscreen ? \"is-fullscreen\" : \"\"\r\n              }`}\r\n            >\r\n              {enableColumnReordering ? (\r\n                <TableDND\r\n                  table={table}\r\n                  activeTab={activeTab}\r\n                  columnOrder={columnOrder}\r\n                  featureOptions={craftFeatureOptions}\r\n                  NestedComponent={nestedComponent}\r\n                  setColumnOrder={setColumnOrder}\r\n                  isCompactTable={isCompactTable}\r\n                  tableStates={tableStates}\r\n                  filterSettingStates={filterSettingStates}\r\n                  onSaveSettings={onSaveSettings}\r\n                />\r\n              ) : (\r\n                <Table\r\n                  table={table}\r\n                  activeTab={activeTab}\r\n                  featureOptions={craftFeatureOptions}\r\n                  NestedComponent={nestedComponent}\r\n                  columnOrder={columnOrder}\r\n                  setColumnOrder={setColumnOrder}\r\n                  isCompactTable={isCompactTable}\r\n                  tableStates={tableStates}\r\n                  filterSettingStates={filterSettingStates}\r\n                  onSaveSettings={onSaveSettings}\r\n                />\r\n              )}\r\n            </div>\r\n          )}\r\n\r\n          {craftPaginationOptions?.showPagination === true &&\r\n          craftPaginationOptions?.paginationPosition === \"bottom\" ? (\r\n            <DefaultPagination\r\n              table={table}\r\n              rowsPerPageArray={rowsPerPageArray}\r\n              paginationOptions={craftPaginationOptions}\r\n            />\r\n          ) : null}\r\n        </div>\r\n\r\n        <div\r\n          className={`ts__table__filter ${\r\n            showFilterCondition ? \"show\" : \"\"\r\n          }`.trim()}\r\n        >\r\n          {filterOptions?.component && filterOptions?.component}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default TableWrapper;\r\n","import {\r\n  ColumnPinningState,\r\n  ExpandedState,\r\n  PaginationState,\r\n  RowSelectionState,\r\n  SortingState,\r\n} from \"@tanstack/react-table\";\r\nimport { useState } from \"react\";\r\nimport { CraftTableOptionsProps } from \"../../types/table-options\";\r\nimport {\r\n  FilterDataMainFilterEntityListProps,\r\n  FilterDataProps,\r\n  FilterMasterStateProps,\r\n  FilterOperationListProps,\r\n  FilterStateProps,\r\n} from \"../../types/filter\";\r\n\r\nexport function useCraftTable(paginationPageSize: number = 25) {\r\n  const [pagination, setPagination] = useState<PaginationState>({\r\n    pageIndex: 0,\r\n    pageSize: paginationPageSize,\r\n  });\r\n  const [sorting, setSorting] = useState<SortingState>([]);\r\n  const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\r\n  const [expanded, setExpanded] = useState<ExpandedState>({});\r\n  const [wrapColumns, setWrapColumns] = useState<Record<string, boolean>>({\r\n    all_wrap: true,\r\n  });\r\n\r\n  // Filters to be rendered in form\r\n  const [filters, setFilters] = useState<FilterStateProps[]>([]);\r\n  // Saved filter Component - savedFilterEditValue is set on list click\r\n  const [savedFilterEditValue, setSavedFilterEditValue] = useState<\r\n    string | number\r\n  >(\"\");\r\n  const [filterToDelete, setFilterToDelete] =\r\n    useState<FilterOperationListProps | null>(null);\r\n  const [filterSelectedAttributeValue, setFilterSelectedAttributeValue] =\r\n    useState<string>(\"\");\r\n\r\n  const [filterMaster, setFilterMaster] =\r\n    useState<FilterMasterStateProps | null>(null);\r\n\r\n  const [showTableFilter, setShowTableFilter] = useState<boolean>(false);\r\n\r\n  //For filter criteria paper\r\n  const [showFilterOptions, setShowFilterOption] = useState<boolean>(false);\r\n  const [filterData, setFilterData] = useState<FilterDataProps | null>(null);\r\n  const [selectedFilterEntity, setSelectedFilterEntity] =\r\n    useState<FilterDataMainFilterEntityListProps>();\r\n\r\n  if (pagination.pageIndex < 0 || pagination.pageSize <= 0) {\r\n    throw new Error(\r\n      \"Invalid pagination values: pageIndex and pageSize must be positive.\"\r\n    );\r\n  }\r\n\r\n  // For Default Column Pinning\r\n  const [columnPinning, setColumnPinning] = useState<ColumnPinningState>({\r\n    left: [],\r\n    right: [],\r\n  });\r\n\r\n  const craftTableOptions: CraftTableOptionsProps = {\r\n    sorting: sorting,\r\n    setSorting: setSorting,\r\n    pagination: pagination,\r\n    setPagination: setPagination,\r\n    rowSelection: rowSelection,\r\n    setRowSelection: setRowSelection,\r\n    expanded: expanded,\r\n    setExpanded: setExpanded,\r\n    wrapColumns: wrapColumns,\r\n    setWrapColumns: setWrapColumns,\r\n    filters: filters,\r\n    setFilters: setFilters,\r\n    savedFilterEditValue: savedFilterEditValue,\r\n    setSavedFilterEditValue: setSavedFilterEditValue,\r\n    filterToDelete: filterToDelete,\r\n    setFilterToDelete: setFilterToDelete,\r\n    filterSelectedAttributeValue: filterSelectedAttributeValue,\r\n    setFilterSelectedAttributeValue: setFilterSelectedAttributeValue,\r\n    filterMaster: filterMaster,\r\n    setFilterMaster: setFilterMaster,\r\n    showTableFilter: showTableFilter,\r\n    setShowTableFilter: setShowTableFilter,\r\n    showFilterOptions: showFilterOptions,\r\n    setShowFilterOption: setShowFilterOption,\r\n    columnPinning: columnPinning,\r\n    setColumnPinning: setColumnPinning,\r\n    filterData: filterData,\r\n    setFilterData: setFilterData,\r\n    selectedFilterEntity: selectedFilterEntity,\r\n    setSelectedFilterEntity: setSelectedFilterEntity,\r\n  };\r\n\r\n  return craftTableOptions;\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { craftTableFilterSettingsOptionsProps } from \"../../types/table-options\";\r\nimport {\r\n  ColumnTabConfigProps,\r\n  KanbanSettingsDataProps,\r\n  QuickTabConfigProps,\r\n  SavedButtonErrorProps,\r\n  SettingsDataProps,\r\n  SortingConfigProps,\r\n} from \"../../types/filter-settings\";\r\n\r\nexport function useCraftTableFilterSettings() {\r\n  //states for the quick filter layout\r\n  const [showListViewSettings, setShowListViewSettings] =\r\n    useState<boolean>(false);\r\n\r\n  const [settingsData, setSettingsData] = useState<SettingsDataProps>({});\r\n  const [kanbanSettingsData, setKanbanSettingsData] =\r\n    useState<KanbanSettingsDataProps>({});\r\n\r\n  // Quick FIlter settings local states\r\n\r\n  const [quickTabStates, setQuickTabStates] = useState<QuickTabConfigProps>({});\r\n  const [columnTabState, setColumnTabState] = useState<ColumnTabConfigProps>(\r\n    {}\r\n  );\r\n  const [sortingTabState, setSortingTabState] = useState<SortingConfigProps>(\r\n    {}\r\n  );\r\n\r\n  // This state will be used for settings validation\r\n  const [saveButtonError, setSaveButtonError] = useState<SavedButtonErrorProps>(\r\n    { hasError: false, messages: [] }\r\n  );\r\n\r\n  useEffect(() => {\r\n    if (settingsData?.quick_tab) {\r\n      setQuickTabStates(settingsData?.quick_tab);\r\n    }\r\n    if (settingsData?.column) {\r\n      setColumnTabState(settingsData?.column);\r\n    }\r\n    if (settingsData?.sorting) {\r\n      setSortingTabState(settingsData?.sorting);\r\n    }\r\n  }, [settingsData]);\r\n\r\n  const craftTableFilterSettingsOptions: craftTableFilterSettingsOptionsProps =\r\n    {\r\n      settingsData: settingsData,\r\n      setSettingsData: setSettingsData,\r\n      kanbanSettingsData: kanbanSettingsData,\r\n      setKanbanSettingsData: setKanbanSettingsData,\r\n      showListViewSettings: showListViewSettings,\r\n      setShowListViewSettings: setShowListViewSettings,\r\n      quickTabStates: quickTabStates,\r\n      setQuickTabStates: setQuickTabStates,\r\n      columnTabState: columnTabState,\r\n      setColumnTabState: setColumnTabState,\r\n      sortingTabState: sortingTabState,\r\n      setSortingTabState: setSortingTabState,\r\n      saveButtonError: saveButtonError,\r\n      setSaveButtonError: setSaveButtonError,\r\n    };\r\n\r\n  return craftTableFilterSettingsOptions;\r\n}\r\n","// tableTabs.styles.ts\r\nimport { styled } from \"@mui/material/styles\";\r\nimport Tabs, { tabsClasses } from \"@mui/material/Tabs\";\r\nimport Tab, { tabClasses } from \"@mui/material/Tab\";\r\nimport Box from \"@mui/material/Box\";\r\n\r\nexport const TableTabsRoot = styled(Tabs)(({ theme }) => ({\r\n  minHeight: theme.spacing(3.5),\r\n\r\n  [`& .${tabsClasses.flexContainer}`]: {\r\n    minHeight: theme.spacing(3.5),\r\n  },\r\n\r\n  // hide indicator (instead of slotProps every time)\r\n  [`& .${tabsClasses.indicator}`]: {\r\n    display: \"none\",\r\n  },\r\n}));\r\n\r\nexport const TableTab = styled(Tab)(({ theme }) => ({\r\n  color: theme.palette.grey[600],\r\n  padding: theme.spacing(1, 1.5),\r\n  minHeight: theme.spacing(3.5),\r\n  maxHeight: theme.spacing(3.5),\r\n  textTransform: \"none\",\r\n  minWidth: \"unset\",\r\n  whiteSpace: \"nowrap\",\r\n\r\n  [`&.${tabClasses.selected}`]: {\r\n    color: theme.palette.text.primary,\r\n    fontWeight: 700,\r\n  },\r\n}));\r\n\r\nexport const TableTabCount = styled(Box, {\r\n  shouldForwardProp: (prop) => prop !== \"selected\",\r\n})<{ selected?: boolean }>(({ theme, selected }) => ({\r\n  padding: theme.spacing(0.25),\r\n  borderRadius: theme.shape.borderRadius,\r\n  border: `1px solid ${\r\n    selected ? theme.palette.text.primary : theme.palette.grey[700]\r\n  }`,\r\n  color: selected ? theme.palette.common.white : theme.palette.text.primary,\r\n  backgroundColor: selected ? theme.palette.text.primary : \"transparent\",\r\n  fontWeight: selected ? 500 : 400,\r\n  lineHeight: 1,\r\n  minWidth: 20,\r\n  textAlign: \"center\",\r\n}));\r\n","import { Box, CircularProgress, IconButton } from \"@mui/material\";\r\nimport { CraftTableOptionsProps } from \"../../types/table-options\";\r\nimport { settingsOptionsProps } from \"../../types/table\";\r\nimport { useMemo } from \"react\";\r\nimport { TableTab, TableTabCount, TableTabsRoot } from \"./tabs.styles\";\r\nimport { SettingsOutlined } from \"@mui/icons-material\";\r\n\r\ninterface TabDataProps {\r\n  tab_name: string | null;\r\n  count?: string | number;\r\n}\r\n\r\ninterface TableTabsProps {\r\n  loading?: boolean;\r\n  tabsData?: TabDataProps[];\r\n  activeTab?: TabDataProps;\r\n  tableStates: CraftTableOptionsProps;\r\n  onClick: (state: string) => void;\r\n  settingsOptions?: settingsOptionsProps;\r\n}\r\n\r\nexport function TableTabs({\r\n  loading = false,\r\n  tabsData = [],\r\n  activeTab = { tab_name: \"All\", count: 0 },\r\n  onClick,\r\n  tableStates,\r\n  settingsOptions,\r\n}: TableTabsProps) {\r\n  if (loading) return <CircularProgress size={24} />;\r\n\r\n  const handleTabClick = (tab: string) => {\r\n    onClick(tab);\r\n    tableStates.setPagination((prev) => ({\r\n      ...prev,\r\n      pageIndex: 0,\r\n    }));\r\n  };\r\n\r\n  const normalizedTabs = useMemo(() => {\r\n    return tabsData\r\n      ?.filter((tab) => tab.tab_name !== null)\r\n      ?.map((tab) => ({\r\n        ...tab,\r\n        tab_name: tab.tab_name,\r\n      }));\r\n  }, [tabsData]);\r\n\r\n  const defaultTab = useMemo(() => {\r\n    return (\r\n      normalizedTabs.find((t) => t.tab_name === \"All\")?.tab_name ||\r\n      normalizedTabs[0]?.tab_name ||\r\n      \"\"\r\n    );\r\n  }, [normalizedTabs]);\r\n\r\n  const selectedTab = activeTab?.tab_name || defaultTab;\r\n\r\n  return (\r\n    <Box display=\"flex\" alignItems=\"center\" justifyContent=\"flex-start\">\r\n      {/* Settings icon */}\r\n      {settingsOptions?.showIcon && (\r\n        <IconButton size=\"small\" onClick={settingsOptions?.onClick}>\r\n          <SettingsOutlined fontSize=\"small\" />\r\n        </IconButton>\r\n      )}\r\n\r\n      {/* Tabs */}\r\n      <TableTabsRoot\r\n        value={selectedTab}\r\n        onChange={(_, newValue) => handleTabClick(newValue)}\r\n        variant=\"scrollable\"\r\n        scrollButtons=\"auto\"\r\n      >\r\n        {normalizedTabs.map((tab) => {\r\n          const isSelected = activeTab?.tab_name === tab?.tab_name;\r\n\r\n          return (\r\n            <TableTab\r\n              key={tab?.tab_name}\r\n              value={tab}\r\n              label={\r\n                <Box display=\"flex\" alignItems=\"center\" gap={1}>\r\n                  <Box sx={{ color: isSelected ? \"#000\" : \"\" }}>\r\n                    {tab?.tab_name}\r\n                  </Box>\r\n                  <TableTabCount selected={isSelected}>\r\n                    {tab?.count == 0\r\n                      ? \"0\"\r\n                      : String(tab?.count).padStart(2, \"0\")}\r\n                  </TableTabCount>\r\n                </Box>\r\n              }\r\n            />\r\n          );\r\n        })}\r\n      </TableTabsRoot>\r\n    </Box>\r\n  );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport {\r\n  Dialog,\r\n  DialogTitle,\r\n  DialogContent,\r\n  DialogActions,\r\n  Typography,\r\n  TextField,\r\n  Button,\r\n  IconButton,\r\n  Box,\r\n  SxProps,\r\n} from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport { Theme } from \"@emotion/react\";\r\n\r\n// Types for the component props\r\nexport interface ModalButton {\r\n  label: string;\r\n  onClick: (inputValue?: string, error?: string, setError?: any) => void;\r\n  variant?: \"text\" | \"outlined\" | \"contained\";\r\n  color?: \"primary\" | \"secondary\" | \"error\" | \"info\" | \"success\" | \"warning\";\r\n  disabled?: boolean;\r\n  sx?: SxProps<Theme>;\r\n}\r\n\r\nexport interface InputField {\r\n  label: string;\r\n  placeholder?: string;\r\n  required?: boolean;\r\n  type?: \"text\" | \"email\" | \"password\" | \"number\";\r\n  multiline?: boolean;\r\n  rows?: number;\r\n  defaultValue?: string;\r\n  labelClassName?: string;\r\n}\r\n\r\nexport interface ConfirmModalProps {\r\n  open: boolean;\r\n  onClose: () => void;\r\n  title: string;\r\n  description?: string;\r\n  buttons: ModalButton[];\r\n  input?: InputField;\r\n  maxWidth?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n  fullWidth?: boolean;\r\n  className?: string;\r\n}\r\n\r\nconst ConfirmModal: React.FC<ConfirmModalProps> = ({\r\n  open,\r\n  onClose,\r\n  title,\r\n  description,\r\n  buttons,\r\n  input,\r\n  maxWidth = \"sm\",\r\n  fullWidth = true,\r\n}) => {\r\n  const [inputValue, setInputValue] = useState(input?.defaultValue || \"\");\r\n  const [error, setError] = useState(\"\");\r\n  const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n    setInputValue(event.target.value);\r\n  };\r\n\r\n  const handleButtonClick = (button: ModalButton) => {\r\n    if (input) {\r\n      button.onClick(inputValue, error, setError);\r\n    } else {\r\n      button.onClick();\r\n    }\r\n    setInputValue(\"\");\r\n  };\r\n\r\n  const handleClose = () => {\r\n    setInputValue(input?.defaultValue || \"\");\r\n    onClose();\r\n  };\r\n\r\n  return (\r\n    <Dialog\r\n      open={open}\r\n      onClose={(event, reason) => {\r\n        if (reason !== \"backdropClick\" && reason !== \"escapeKeyDown\") {\r\n          handleClose();\r\n        }\r\n      }}\r\n      maxWidth={maxWidth}\r\n      fullWidth={fullWidth}\r\n      PaperProps={{\r\n        sx: {\r\n          borderRadius: 2,\r\n          padding: 1,\r\n        },\r\n      }}\r\n    >\r\n      <DialogTitle\r\n        sx={{\r\n          display: \"flex\",\r\n          justifyContent: \"space-between\",\r\n          alignItems: \"center\",\r\n          // padding: \"16px 0px\",\r\n          px: \"0px\",\r\n          marginX: \"24px\",\r\n          paddingBottom: description ? \"18px\" : \"20px\",\r\n          borderBottom: \"1px solid #eeeeee\",\r\n        }}\r\n      >\r\n        <Typography variant=\"h6\" component=\"h2\" fontWeight=\"bold\">\r\n          {title}\r\n        </Typography>\r\n        <IconButton\r\n          onClick={handleClose}\r\n          size=\"small\"\r\n          sx={{\r\n            color: \"text.secondary\",\r\n          }}\r\n        >\r\n          <CloseIcon />\r\n        </IconButton>\r\n      </DialogTitle>\r\n\r\n      <DialogContent sx={{ padding: \"0 24px 16px 24px\", mt: 2 }}>\r\n        {description && (\r\n          <Typography\r\n            variant=\"body2\"\r\n            color=\"text.secondary\"\r\n            sx={{ marginBottom: input ? 3 : 0 }}\r\n          >\r\n            {description}\r\n          </Typography>\r\n        )}\r\n\r\n        {input && (\r\n          <Box sx={{ marginTop: description ? 0 : 2 }}>\r\n            <Typography\r\n              variant=\"body2\"\r\n              component=\"label\"\r\n              className={input.labelClassName}\r\n              sx={{\r\n                display: \"block\",\r\n                marginBottom: 1,\r\n                fontWeight: 500,\r\n                color: \"text.primary\",\r\n              }}\r\n            >\r\n              {input.label}\r\n              {input.required && (\r\n                <Typography component=\"span\" color=\"error.main\">\r\n                  {\" \"}\r\n                  *\r\n                </Typography>\r\n              )}\r\n            </Typography>\r\n            <TextField\r\n              fullWidth\r\n              value={inputValue}\r\n              onChange={handleInputChange}\r\n              placeholder={input.placeholder}\r\n              type={input.type || \"text\"}\r\n              multiline={input.multiline}\r\n              rows={input.rows}\r\n              variant=\"outlined\"\r\n              size=\"small\"\r\n              sx={{\r\n                \"& .MuiOutlinedInput-root\": {\r\n                  maxWidth: 280,\r\n                  borderRadius: 1,\r\n                  \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\r\n                    border: \"2px solid #7A5AF8\",\r\n                  },\r\n                },\r\n              }}\r\n            />\r\n            {error && (\r\n              <Typography variant=\"body2\" color=\"error.main\">\r\n                {error}\r\n              </Typography>\r\n            )}\r\n          </Box>\r\n        )}\r\n      </DialogContent>\r\n\r\n      <DialogActions\r\n        sx={{\r\n          padding: \"16px 24px 24px 24px\",\r\n          gap: 1,\r\n        }}\r\n      >\r\n        {buttons.map((button, index) => (\r\n          <Button\r\n            key={index}\r\n            variant={button.variant || \"outlined\"}\r\n            color={button.color || \"primary\"}\r\n            className=\"confirm-modal-button\"\r\n            sx={button.sx}\r\n            onClick={() => handleButtonClick(button)}\r\n            disabled={\r\n              button.disabled ||\r\n              (input?.required &&\r\n                !inputValue.trim() &&\r\n                button.variant === \"contained\")\r\n            }\r\n          >\r\n            {button.label}\r\n          </Button>\r\n        ))}\r\n      </DialogActions>\r\n    </Dialog>\r\n  );\r\n};\r\n\r\nexport default ConfirmModal;\r\n","import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface TabPanelProps {\r\n  children?: React.ReactNode;\r\n  index: number;\r\n  value: number;\r\n  sx?: SxProps<Theme>;\r\n}\r\n\r\nconst CustomTabPanel = ({\r\n  children,\r\n  value,\r\n  index,\r\n  sx,\r\n  ...props\r\n}: TabPanelProps) => {\r\n  return (\r\n    <div\r\n      role=\"tabpanel\"\r\n      hidden={value !== index}\r\n      id={`simple-tabpanel-${index}`}\r\n      aria-labelledby={`simple-tab-${index}`}\r\n      style={{ height: \"100%\" }}\r\n      {...props}\r\n    >\r\n      {value === index && <Box sx={{ height: \"100%\", ...sx }}>{children}</Box>}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default CustomTabPanel;\r\n","import { useState } from \"react\";\r\nimport { Tabs, Tab, TabsProps, Box } from \"@mui/material\";\r\nimport { CheckBox, CrossBox } from \"../../../../../assets/svg\";\r\n\r\nexport interface TabItem {\r\n  label: string;\r\n}\r\n\r\ninterface StyledTabsProps extends TabsProps {\r\n  tabItems: TabItem[];\r\n  activeFilterIndex: number;\r\n  handleCrossClick: (index: number) => void;\r\n}\r\n\r\nconst CustomTabs = ({\r\n  tabItems,\r\n  activeFilterIndex = -1,\r\n  handleCrossClick,\r\n  value,\r\n  onChange,\r\n  ...tabsProps\r\n}: StyledTabsProps) => {\r\n  const [hoveredTab, setHoveredTab] = useState<number | null>(null);\r\n\r\n  return (\r\n    <Tabs\r\n      value={value}\r\n      onChange={onChange}\r\n      variant=\"fullWidth\"\r\n      sx={{\r\n        px: \"12px\",\r\n        borderBottom: `1px solid #ccc`,\r\n        \"& .MuiTabs-indicator\": {\r\n          backgroundColor: \"black\",\r\n        },\r\n      }}\r\n      {...tabsProps}\r\n    >\r\n      {tabItems.map((tab, idx) => {\r\n        const isActive = activeFilterIndex === idx;\r\n        const isHovered = hoveredTab === idx;\r\n\r\n        return (\r\n          <Tab\r\n            key={idx}\r\n            label={\r\n              <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n                <span>{tab.label}</span>\r\n                {isActive && (\r\n                  <Box\r\n                    onMouseEnter={() => setHoveredTab(idx)}\r\n                    onMouseLeave={() => setHoveredTab(null)}\r\n                    sx={{\r\n                      display: \"flex\",\r\n                      alignItems: \"center\",\r\n                      cursor: isHovered ? \"pointer\" : \"default\",\r\n                    }}\r\n                    onClick={\r\n                      isHovered ? () => handleCrossClick(idx) : undefined\r\n                    }\r\n                  >\r\n                    {isHovered ? <CrossBox /> : <CheckBox />}\r\n                  </Box>\r\n                )}\r\n              </Box>\r\n            }\r\n            sx={{\r\n              fontSize: \"14px\",\r\n              textTransform: \"capitalize\",\r\n              color: \"#888888\",\r\n              fontWeight: \"normal\",\r\n              whiteSpace: \"nowrap\",\r\n              \"&.Mui-selected\": {\r\n                color: \"black\",\r\n                fontWeight: \"bold\",\r\n              },\r\n            }}\r\n          />\r\n        );\r\n      })}\r\n    </Tabs>\r\n  );\r\n};\r\n\r\nexport default CustomTabs;\r\n","// !! DON'T DELETE THIS OLD CODE !! //\r\n\r\nimport { FormControl, MenuItem, Select, SxProps, Theme } from \"@mui/material\";\r\nimport { Controller, UseFormSetValue } from \"react-hook-form\";\r\nimport { FilterStateProps } from \"../../../../../types/filter\";\r\nimport moment from \"moment\";\r\n\r\ninterface FormDropdownProps {\r\n  filter: FilterStateProps;\r\n  control: any;\r\n  setValue: UseFormSetValue<any>;\r\n  dropdownList: {\r\n    label?: string;\r\n    value?: string;\r\n  }[];\r\n  isLoading?: boolean;\r\n  sx?: SxProps<Theme>;\r\n  onValueChange?: () => void;\r\n}\r\n\r\nconst FormDropdown = ({\r\n  filter,\r\n  control,\r\n  setValue,\r\n  dropdownList,\r\n  isLoading = false,\r\n  sx,\r\n  onValueChange,\r\n}: FormDropdownProps) => {\r\n  return (\r\n    <Controller\r\n      name={`${filter?.filter_attribute_name}.operator`}\r\n      control={control}\r\n      defaultValue={filter?.filter_operator || dropdownList?.[0]?.value || \"\"}\r\n      render={({ field }) => (\r\n        <FormControl sx={sx} size=\"small\">\r\n          <Select\r\n            {...field}\r\n            variant=\"standard\"\r\n            sx={{\r\n              fontSize: \"0.875rem\",\r\n              minWidth: 50,\r\n              border: \"none\",\r\n              boxShadow: \"none\",\r\n              \"& .MuiSelect-icon\": {\r\n                top: \"45%\",\r\n                transform: \"translateY(-50%)\",\r\n                \"& .MuiOutlinedInput-input\": {\r\n                  padding: \"12px 20px\",\r\n                },\r\n              },\r\n            }}\r\n            disabled={isLoading}\r\n            disableUnderline\r\n            onChange={(e) => {\r\n              const newOperator = e.target.value;\r\n              const oldOperator = field.value;\r\n\r\n              field.onChange(e);\r\n\r\n              if (\r\n                (filter?.filter_attribute_data_type === \"date\" ||\r\n                  filter?.filter_attribute_data_type === \"year\") &&\r\n                newOperator !== oldOperator\r\n              ) {\r\n                if (newOperator === \"today\") {\r\n                  setValue(\r\n                    `${filter?.filter_attribute_name}.value`,\r\n                    moment().format(\"YYYY-MM-DD\"),\r\n                    {\r\n                      shouldDirty: true,\r\n                    }\r\n                  );\r\n                } else if (newOperator === \"between\") {\r\n                  setValue(`${filter?.filter_attribute_name}.value`, [\"\", \"\"], {\r\n                    shouldDirty: true,\r\n                  });\r\n                } else if (\r\n                  oldOperator === \"between\" ||\r\n                  oldOperator === \"today\"\r\n                ) {\r\n                  setValue(`${filter?.filter_attribute_name}.value`, \"\", {\r\n                    shouldDirty: true,\r\n                  });\r\n                }\r\n              }\r\n\r\n              onValueChange?.();\r\n            }}\r\n          >\r\n            {dropdownList?.map((item, idx) => (\r\n              <MenuItem key={idx} value={item.value}>\r\n                {item.label}\r\n              </MenuItem>\r\n            ))}\r\n          </Select>\r\n        </FormControl>\r\n      )}\r\n    />\r\n  );\r\n};\r\n\r\nexport default FormDropdown;\r\n","import { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface StyleProps {\r\n  filterContainer: SxProps<Theme>;\r\n  filterMainHeader: SxProps<Theme>;\r\n  filterMainComponentWrapper: SxProps<Theme>;\r\n  filterAttributeMainSelect: SxProps<Theme>;\r\n  scrollbarCustom: SxProps<Theme>;\r\n}\r\n\r\ninterface filterFormStyleType {\r\n  formEditModeStyle: SxProps<Theme>;\r\n  formFlexContainer: SxProps<Theme>;\r\n  formListItem: SxProps<Theme>;\r\n  formListSectionHeader: SxProps<Theme>;\r\n  formListItemHeader: SxProps<Theme>;\r\n  formListItemHeaderName: SxProps<Theme>;\r\n  formListItemHeaderDropdown: SxProps<Theme>;\r\n}\r\n\r\nexport const filterStyles: StyleProps = {\r\n  scrollbarCustom: {\r\n    overflowY: \"auto\",\r\n    pr: 1,\r\n\r\n    \"&::-webkit-scrollbar\": {\r\n      width: \"4px\",\r\n    },\r\n    \"&::-webkit-scrollbar-thumb\": {\r\n      backgroundColor: \"#999\",\r\n      borderRadius: \"4px\",\r\n    },\r\n    \"&::-webkit-scrollbar-track\": {\r\n      backgroundColor: \"#f0f0f0\",\r\n    },\r\n  },\r\n\r\n  filterContainer: {\r\n    backgroundColor: \"#fff\",\r\n    height: \"100%\",\r\n    overflowY: \"hidden\",\r\n    boxShadow: \"0px 3px 8px 0px rgba(34, 48, 62, 0.10)\",\r\n    borderRadius: \"0.5rem\",\r\n  },\r\n\r\n  filterMainHeader: {\r\n    display: \"flex\",\r\n    alignItems: \"center\",\r\n    justifyContent: \"space-between\",\r\n    bgcolor: \"#EEEEEE\",\r\n    height: \"50px\",\r\n    px: 2,\r\n    borderBottom: \"1px solid #ccc\",\r\n    mx: \"auto\",\r\n  },\r\n\r\n  filterMainComponentWrapper: {\r\n    height: \"calc(100% - 90px)\",\r\n    overflowY: \"auto\",\r\n  },\r\n\r\n  filterAttributeMainSelect: {\r\n    \"& .MuiOutlinedInput-root\": {\r\n      borderRadius: \"6px\",\r\n      fontSize: \"14px\",\r\n      bgcolor: \"#fafafa\",\r\n      \"& fieldset\": {\r\n        borderColor: \"#7a5af8 !important\",\r\n      },\r\n      \"&:hover fieldset\": {\r\n        borderColor: \"#7a5af8 !important\",\r\n      },\r\n      \"&.Mui-focused fieldset\": {\r\n        borderColor: \"#7a5af8 !important\",\r\n        boxShadow: \"none\",\r\n      },\r\n    },\r\n    \"& .MuiSelect-select\": {\r\n      padding: \"8px 14px\",\r\n    },\r\n  },\r\n};\r\n\r\nexport const filterFormStyles: filterFormStyleType = {\r\n  formEditModeStyle: {\r\n    border: \"1px solid #c5c5c5\",\r\n    borderRadius: \"6px\",\r\n    padding: \"5px 10px 10px 10px\",\r\n  },\r\n\r\n  formFlexContainer: {\r\n    display: \"flex\",\r\n    flexDirection: \"column\",\r\n    gap: \"0.75rem\",\r\n  },\r\n\r\n  formListItem: {\r\n    p: 1,\r\n    backgroundColor: \"#FFFFFF\",\r\n    display: \"flex\",\r\n    flexDirection: \"column\",\r\n    gap: 0.5,\r\n  },\r\n\r\n  formListSectionHeader: {\r\n    display: \"flex\",\r\n    alignItems: \"center\",\r\n    justifyContent: \"space-between\",\r\n    gap: 1,\r\n    p: 1,\r\n    backgroundColor: \"#FAFAF9\",\r\n  },\r\n\r\n  formListItemHeader: {\r\n    display: \"flex\",\r\n    justifyContent: \"flex-start\",\r\n    alignItems: \"center\",\r\n    gap: 2,\r\n  },\r\n\r\n  formListItemHeaderName: {\r\n    fontWeight: 500,\r\n    fontSize: \"13px\",\r\n    color: \"#797877\",\r\n  },\r\n\r\n  formListItemHeaderDropdown: {\r\n    fontSize: \"12px\",\r\n    minWidth: 50,\r\n    border: \"none\",\r\n    boxShadow: \"none\",\r\n\r\n    \"& .MuiSelect-root\": {\r\n      fontSize: \"0.75rem\",\r\n\r\n      \"& .MuiSelect-select\": {\r\n        paddingBottom: \"0rem\",\r\n      },\r\n    },\r\n  },\r\n};\r\n","import React, { useState } from \"react\";\r\nimport { TextField, InputAdornment, IconButton } from \"@mui/material\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport { CloseIcon } from \"../../../../../assets/svg\";\r\n\r\ninterface SearchInputProps {\r\n  value: string;\r\n  onChange: (value: string) => void;\r\n  placeholder?: string;\r\n  className?: string;\r\n}\r\n\r\nconst CustomSearch = ({\r\n  value = \"\",\r\n  onChange,\r\n  placeholder = \"Search...\",\r\n}: SearchInputProps) => {\r\n  const [search, setSearch] = useState(value);\r\n\r\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n    const val = e.target.value;\r\n    setSearch(val);\r\n    onChange?.(val);\r\n  };\r\n\r\n  const handleClear = () => {\r\n    setSearch(\"\"); // Clear the search value\r\n    onChange?.(\"\"); // Propagate the cleared value\r\n  };\r\n\r\n  return (\r\n    <TextField\r\n      fullWidth\r\n      size=\"small\"\r\n      value={search}\r\n      onChange={handleChange}\r\n      placeholder={placeholder}\r\n      className={\"search-input\"}\r\n      InputProps={{\r\n        startAdornment: (\r\n          <InputAdornment position=\"start\">\r\n            <SearchIcon\r\n              sx={{ color: \"#888888\", fontSize: \"20px\" }}\r\n              className=\"search-icon-svg\"\r\n            />\r\n          </InputAdornment>\r\n        ),\r\n        endAdornment: search && ( // Show the clear icon only when there's a value\r\n          <InputAdornment position=\"end\">\r\n            <IconButton\r\n              edge=\"end\"\r\n              onClick={handleClear}\r\n              sx={{ color: \"#888888\", fontSize: \"20px\" }}\r\n              className=\"cross-icon\"\r\n            >\r\n              <CloseIcon />\r\n            </IconButton>\r\n          </InputAdornment>\r\n        ),\r\n      }}\r\n      sx={{\r\n        \"& .MuiOutlinedInput-root\": {\r\n          borderRadius: \"6px\",\r\n          fontSize: \"14px\",\r\n          bgcolor: \"#fafafa\",\r\n          \"& fieldset\": {\r\n            borderColor: \"#c1c1c1\",\r\n          },\r\n          \"&.Mui-focused fieldset\": {\r\n            borderColor: \"#7A5AF8\",\r\n          },\r\n        },\r\n      }}\r\n    />\r\n  );\r\n};\r\n\r\nexport default CustomSearch;\r\n","import { Typography } from \"@mui/material\";\r\n\r\nconst EmptyList = ({ label }: { label?: string }) => {\r\n  return (\r\n    <Typography\r\n      variant=\"body2\"\r\n      align=\"center\"\r\n      fontSize={14}\r\n      fontStyle={\"italic\"}\r\n      color=\"text.secondary\"\r\n    >\r\n      {label ? label : \"No results found\"}\r\n    </Typography>\r\n  );\r\n};\r\n\r\nexport default EmptyList;\r\n","import { Box, List, ListItem, ListItemText } from \"@mui/material\";\r\nimport React from \"react\";\r\nimport CustomSearch from \"../../search\";\r\nimport { CraftTableOptionsProps } from \"../../../../../types/table-options\";\r\nimport {\r\n  FilterComponentOptions,\r\n  FilterDataMainFilterEntityListProps,\r\n} from \"../../../../../types/filter\";\r\nimport EmptyList from \"./empty-list\";\r\n\r\ninterface Props {\r\n  tableStates: CraftTableOptionsProps;\r\n  filterComponentOptions?: FilterComponentOptions;\r\n}\r\n\r\nconst FilterCriteriaEntityList = ({\r\n  tableStates,\r\n  filterComponentOptions,\r\n}: Props) => {\r\n  const [searchTerm, setSearchTerm] = React.useState<string>(\"\");\r\n\r\n  const { filters, filterData, setSelectedFilterEntity } = tableStates;\r\n\r\n  const handleSelectEntity = (entity: FilterDataMainFilterEntityListProps) => {\r\n    setSelectedFilterEntity(entity);\r\n  };\r\n\r\n  const isSingleEntity = filterComponentOptions?.tabOptions?.isSingleEntity;\r\n\r\n  // 🔍 get all entities from main filter data\r\n  const allEntities = filterData?.mainFilter?.entityList?.data || [];\r\n\r\n  // ✅ determine which entities should be displayed\r\n  const entitiesToShow = React.useMemo(() => {\r\n    // Case 1: isSingleEntity is true and filters already has entities\r\n    if (isSingleEntity && filters?.length > 0) {\r\n      const filterEntityTypes = filters.map((f) => f?.filter_entity_type);\r\n      return allEntities.filter((entity) =>\r\n        filterEntityTypes.includes(entity.value)\r\n      );\r\n    }\r\n\r\n    // Case 2: default behavior (apply search filter)\r\n    return allEntities.filter((entity) =>\r\n      entity.label?.toLowerCase().includes(searchTerm?.toLowerCase())\r\n    );\r\n  }, [isSingleEntity, filters, allEntities, searchTerm]);\r\n\r\n  return (\r\n    <List>\r\n      <CustomSearch\r\n        placeholder=\"Filter by...\"\r\n        value={searchTerm}\r\n        onChange={setSearchTerm}\r\n      />\r\n\r\n      <Box\r\n        sx={{\r\n          my: 2,\r\n          overflowY: \"auto\",\r\n          transition: \"all 0.4s ease-in-out\",\r\n        }}\r\n      >\r\n        {entitiesToShow.length === 0 ? (\r\n          <EmptyList />\r\n        ) : (\r\n          entitiesToShow.map((entity, index) => (\r\n            <ListItem\r\n              key={index}\r\n              onClick={() => handleSelectEntity(entity)}\r\n              sx={{\r\n                cursor: \"pointer\",\r\n                \"&:hover\": { backgroundColor: \"#f4f4f4\" },\r\n              }}\r\n            >\r\n              <ListItemText primary={entity.label} />\r\n            </ListItem>\r\n          ))\r\n        )}\r\n      </Box>\r\n    </List>\r\n  );\r\n};\r\n\r\nexport default FilterCriteriaEntityList;\r\n","import { Box, CircularProgress, Typography } from \"@mui/material\";\r\n\r\nconst Loader = ({ loaderText }: { loaderText?: string }) => {\r\n  return (\r\n    <Box\r\n      display={\"flex\"}\r\n      justifyContent=\"center\"\r\n      alignItems={\"center\"}\r\n      flexDirection={\"column\"}\r\n      gap={2}\r\n      paddingBlock={2}\r\n      height={\"100%\"}\r\n      width={\"100%\"}\r\n    >\r\n      <CircularProgress />\r\n      {loaderText && <Typography variant=\"h6\">{loaderText}</Typography>}\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default Loader;\r\n","import {\r\n  Box,\r\n  IconButton,\r\n  List,\r\n  ListItem,\r\n  ListItemText,\r\n  Typography,\r\n} from \"@mui/material\";\r\nimport CustomSearch from \"../../search\";\r\nimport React, { useMemo } from \"react\";\r\nimport { CraftTableOptionsProps } from \"../../../../../types/table-options\";\r\nimport { filterFormStyles } from \"../../../style\";\r\nimport { CloseIcon } from \"../../../../../../assets/svg\";\r\nimport EmptyList from \"./empty-list\";\r\nimport Loader from \"../../../../common/loader/loader\";\r\nimport {\r\n  FilterComponentOptions,\r\n  FilterDataMainFilterEntityWiseCriteriaProps,\r\n} from \"../../../../../types/filter\";\r\n\r\ninterface Props {\r\n  tableStates: CraftTableOptionsProps;\r\n  handleAddFilter: (\r\n    column: FilterDataMainFilterEntityWiseCriteriaProps\r\n  ) => void;\r\n  filterComponentOptions?: FilterComponentOptions;\r\n}\r\n\r\nconst FilterCriteriaList = ({\r\n  tableStates,\r\n  handleAddFilter,\r\n  filterComponentOptions,\r\n}: Props) => {\r\n  const [searchTerm, setSearchTerm] = React.useState<string>(\"\");\r\n\r\n  const { filterData, filters, selectedFilterEntity, setSelectedFilterEntity } =\r\n    tableStates;\r\n\r\n  const isSingleEntity = filterComponentOptions?.tabOptions?.isSingleEntity;\r\n\r\n  // Show Close button if:\r\n  // - isSingleEntity is false → always show\r\n  // - isSingleEntity is true → only show if filters is empty OR\r\n  //   no filter exists with same filter_entity_type as selectedFilterEntity.value\r\n  const shouldShowCloseButton = useMemo(() => {\r\n    return isSingleEntity\r\n      ? filters?.length === 0 ||\r\n          !filters?.some(\r\n            (filter) =>\r\n              filter?.filter_entity_type === selectedFilterEntity?.value\r\n          )\r\n      : true;\r\n  }, [filters, isSingleEntity, selectedFilterEntity?.value]);\r\n\r\n  return (\r\n    <>\r\n      <Box\r\n        className=\"group-header\"\r\n        sx={{\r\n          ...filterFormStyles.formListSectionHeader,\r\n          position: \"sticky\",\r\n          top: 0,\r\n          zIndex: 1,\r\n        }}\r\n      >\r\n        <Typography fontSize={14}>{selectedFilterEntity?.label}</Typography>\r\n        {shouldShowCloseButton && (\r\n          <IconButton\r\n            size=\"small\"\r\n            onClick={() =>\r\n              !isSingleEntity && setSelectedFilterEntity(undefined)\r\n            }\r\n            className=\"cross-icon\"\r\n          >\r\n            <CloseIcon />\r\n          </IconButton>\r\n        )}\r\n      </Box>\r\n      {filterData?.mainFilter?.entityWiseCriteria?.isPending ? (\r\n        <Loader />\r\n      ) : (\r\n        <List>\r\n          <CustomSearch\r\n            placeholder=\"Filter by...\"\r\n            value={searchTerm}\r\n            onChange={setSearchTerm}\r\n          />\r\n\r\n          <Box\r\n            sx={{\r\n              my: 2,\r\n              overflowY: \"auto\",\r\n              transition: \"all 0.4s ease-in-out\",\r\n            }}\r\n          >\r\n            {(() => {\r\n              const filteredEntities =\r\n                filterData?.mainFilter?.entityWiseCriteria?.data?.filter(\r\n                  (entity) =>\r\n                    entity.name.toLowerCase().includes(searchTerm.toLowerCase())\r\n                ) ?? [];\r\n\r\n              if (filteredEntities.length === 0) {\r\n                return <EmptyList />;\r\n              }\r\n\r\n              return filteredEntities.map((entity, index) => {\r\n                const isAlreadySelected = filters?.some(\r\n                  (filter) => filter.filter_attribute === entity.attribute_key\r\n                );\r\n\r\n                return (\r\n                  <ListItem\r\n                    key={index}\r\n                    sx={{\r\n                      opacity: isAlreadySelected ? 0.5 : 1,\r\n                      cursor: isAlreadySelected ? \"not-allowed\" : \"pointer\",\r\n                      \"&:hover\": {\r\n                        backgroundColor: isAlreadySelected\r\n                          ? \"inherit\"\r\n                          : \"#f4f4f4\",\r\n                      },\r\n                    }}\r\n                    onClick={() =>\r\n                      !isAlreadySelected && handleAddFilter(entity)\r\n                    }\r\n                  >\r\n                    <ListItemText primary={entity.name} />\r\n                  </ListItem>\r\n                );\r\n              });\r\n            })()}\r\n          </Box>\r\n        </List>\r\n      )}\r\n    </>\r\n  );\r\n};\r\n\r\nexport default FilterCriteriaList;\r\n","export const TextFieldStyles = {\r\n  \"& .MuiOutlinedInput-root\": {\r\n    borderRadius: \"6px\",\r\n    fontSize: \"14px\",\r\n    bgcolor: \"#fff\",\r\n\r\n    \"& fieldset\": { borderColor: \"#c1c1c1\" },\r\n    \"&.Mui-focused fieldset\": {\r\n      borderColor: \"#7A5AF8\",\r\n    },\r\n  },\r\n};\r\n","import { TextField } from \"@mui/material\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport { TextFieldStyles } from \"./styles\";\r\nimport { FilterStateProps } from \"../../../../../types/filter\";\r\n\r\ninterface FormTextfieldProps {\r\n  filter: FilterStateProps;\r\n  control: any;\r\n  isLoading?: boolean;\r\n  onValueChange?: () => void;\r\n}\r\n\r\nconst FormTextfield = ({\r\n  filter,\r\n  control,\r\n  isLoading = false,\r\n  onValueChange,\r\n}: FormTextfieldProps) => {\r\n  return (\r\n    <Controller\r\n      name={`${filter?.filter_attribute_name}.value`}\r\n      control={control}\r\n      defaultValue={filter.filter_value || \"\"}\r\n      render={({ field }) => (\r\n        <TextField\r\n          {...field}\r\n          fullWidth\r\n          variant=\"outlined\"\r\n          size=\"small\"\r\n          sx={{\r\n            ...TextFieldStyles,\r\n            \"& .MuiOutlinedInput-input\": {\r\n              padding: \"12px 20px\",\r\n            },\r\n          }}\r\n          // type={filter?.filter_attribute_data_type || \"text\" || \"number\"}\r\n          type={\r\n            filter?.filter_attribute_data_type === \"number\" ? \"number\" : \"text\"\r\n          }\r\n          placeholder={\"Enter value\"}\r\n          disabled={isLoading}\r\n          onChange={(e) => {\r\n            field.onChange(e);\r\n            onValueChange?.();\r\n          }}\r\n        />\r\n      )}\r\n    />\r\n  );\r\n};\r\n\r\nexport default FormTextfield;\r\n","import { Controller } from \"react-hook-form\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { DatePicker } from \"@mui/x-date-pickers/DatePicker\";\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport moment from \"moment\";\r\nimport { FilterStateProps } from \"../../../../../types/filter\";\r\nimport { SxProps, Theme, Box, TextField } from \"@mui/material\";\r\n\r\ntype FormDatePickerProps = {\r\n  filter: FilterStateProps;\r\n  control: any;\r\n  sx?: SxProps<Theme>;\r\n  views?: Array<\"year\" | \"month\" | \"day\">;\r\n  onValueChange?: () => void;\r\n};\r\n\r\nconst FormDatePicker = ({\r\n  filter,\r\n  control,\r\n  sx,\r\n  views = [\"day\"],\r\n  onValueChange,\r\n}: FormDatePickerProps) => {\r\n  const isRange = filter.filter_operator === \"between\";\r\n  const isRelativeToToday = filter.filter_operator === \"today\";\r\n  const isEmptyOperator =\r\n    filter.filter_operator === \"empty\" ||\r\n    filter.filter_operator === \"not_empty\";\r\n\r\n  if (isEmptyOperator) {\r\n    return <TextField fullWidth disabled value=\"\" size=\"small\" />;\r\n  }\r\n\r\n  return (\r\n    <LocalizationProvider dateAdapter={AdapterDateFns}>\r\n      <Box display=\"flex\" gap={1}>\r\n        <Controller\r\n          name={`${filter?.filter_attribute_name}.value`}\r\n          control={control}\r\n          // defaultValue={\r\n          //   isRange\r\n          //     ? [\"\", \"\"]\r\n          //     : isRelativeToToday\r\n          //     ? moment().format(\"YYYY-MM-DD\")\r\n          //     : filter.filter_value\r\n          //     ? moment(filter.filter_value, \"YYYY-MM-DD\").toDate()\r\n          //     : null\r\n          // }\r\n          defaultValue={\r\n            isRange\r\n              ? [\"\", \"\"]\r\n              : isRelativeToToday\r\n              ? moment().format(\"YYYY-MM-DD\")\r\n              : isEmptyOperator\r\n              ? null\r\n              : filter.filter_value\r\n              ? moment(filter.filter_value, \"YYYY-MM-DD\").toDate()\r\n              : null\r\n          }\r\n          render={({ field }) => {\r\n            const value = field.value;\r\n            const todayDate = moment().toDate();\r\n            if (isRange) {\r\n              const fromDate = Array.isArray(value) ? value[0] : \"\";\r\n              const toDate = Array.isArray(value) ? value[1] : \"\";\r\n\r\n              return (\r\n                <>\r\n                  <DatePicker\r\n                    views={views}\r\n                    value={\r\n                      isRelativeToToday\r\n                        ? todayDate\r\n                        : fromDate\r\n                        ? moment(fromDate, \"YYYY-MM-DD\").toDate()\r\n                        : null\r\n                    }\r\n                    onChange={(date) => {\r\n                      if (isRelativeToToday) return;\r\n                      let formatted = \"\";\r\n                      if (date) {\r\n                        formatted =\r\n                          views?.length === 1 && views[0] === \"year\"\r\n                            ? moment(date).format(\"YYYY\")\r\n                            : moment(date).format(\"YYYY-MM-DD\");\r\n                      }\r\n                      const updated: [string, string] = [\r\n                        formatted,\r\n                        toDate || \"\",\r\n                      ];\r\n                      field.onChange(updated);\r\n                      onValueChange?.();\r\n                    }}\r\n                    // disabled={isRelativeToToday}\r\n                    disabled={isRelativeToToday || isEmptyOperator}\r\n                    format={\r\n                      views?.length === 1 && views[0] === \"year\"\r\n                        ? \"yyyy\"\r\n                        : \"dd-MM-yyyy\"\r\n                    }\r\n                    sx={{\r\n                      \"& .MuiOutlinedInput-input\": {\r\n                        padding: \"12px 20px\",\r\n                      },\r\n                      ...sx,\r\n                    }}\r\n                    slotProps={{\r\n                      textField: {\r\n                        size: \"small\",\r\n                        fullWidth: true,\r\n                        placeholder:\r\n                          views?.length === 1 && views[0] === \"year\"\r\n                            ? \"YYYY\"\r\n                            : \"From Date\",\r\n                      },\r\n                    }}\r\n                  />\r\n\r\n                  <DatePicker\r\n                    views={views}\r\n                    value={\r\n                      isRelativeToToday\r\n                        ? todayDate\r\n                        : toDate\r\n                        ? moment(toDate, \"YYYY-MM-DD\").toDate()\r\n                        : null\r\n                    }\r\n                    onChange={(date) => {\r\n                      if (isRelativeToToday) return;\r\n                      let formatted = \"\";\r\n                      if (date) {\r\n                        formatted =\r\n                          views?.length === 1 && views[0] === \"year\"\r\n                            ? moment(date).format(\"YYYY\")\r\n                            : moment(date).format(\"YYYY-MM-DD\");\r\n                      }\r\n                      const updated: [string, string] = [\r\n                        fromDate || \"\",\r\n                        formatted,\r\n                      ];\r\n                      field.onChange(updated);\r\n                      onValueChange?.();\r\n                    }}\r\n                    // disabled={isRelativeToToday}\r\n                    disabled={isRelativeToToday || isEmptyOperator}\r\n                    format={\r\n                      views?.length === 1 && views[0] === \"year\"\r\n                        ? \"yyyy\"\r\n                        : \"dd-MM-yyyy\"\r\n                    }\r\n                    sx={{\r\n                      \"& .MuiOutlinedInput-input\": {\r\n                        padding: \"12px 20px\",\r\n                      },\r\n                      ...sx,\r\n                    }}\r\n                    slotProps={{\r\n                      textField: {\r\n                        size: \"small\",\r\n                        fullWidth: true,\r\n                        placeholder:\r\n                          views?.length === 1 && views[0] === \"year\"\r\n                            ? \"YYYY\"\r\n                            : \"To Date\",\r\n                      },\r\n                    }}\r\n                  />\r\n                </>\r\n              );\r\n            }\r\n\r\n            // Single DatePicker\r\n            return (\r\n              <DatePicker\r\n                {...field}\r\n                views={views}\r\n                value={\r\n                  isRelativeToToday\r\n                    ? todayDate\r\n                    : field.value\r\n                    ? moment(field.value, \"YYYY-MM-DD\").toDate()\r\n                    : null\r\n                }\r\n                onChange={(date) => {\r\n                  if (isRelativeToToday) return;\r\n                  let formatted = \"\";\r\n                  if (date) {\r\n                    formatted =\r\n                      views?.length === 1 && views[0] === \"year\"\r\n                        ? moment(date).format(\"YYYY\")\r\n                        : moment(date).format(\"YYYY-MM-DD\");\r\n                  }\r\n                  field.onChange(formatted);\r\n                  onValueChange?.();\r\n                }}\r\n                // disabled={isRelativeToToday}\r\n                disabled={isRelativeToToday || isEmptyOperator}\r\n                format={\r\n                  views?.length === 1 && views[0] === \"year\"\r\n                    ? \"yyyy\"\r\n                    : \"dd-MM-yyyy\"\r\n                }\r\n                sx={{\r\n                  \"& .MuiOutlinedInput-input\": {\r\n                    padding: \"12px 20px\",\r\n                  },\r\n                  ...sx,\r\n                }}\r\n                slotProps={{\r\n                  textField: {\r\n                    size: \"small\",\r\n                    fullWidth: true,\r\n                    placeholder:\r\n                      views?.length === 1 && views[0] === \"year\"\r\n                        ? \"YYYY\"\r\n                        : \"DD-MM-YYYY\",\r\n                  },\r\n                }}\r\n              />\r\n            );\r\n          }}\r\n        />\r\n      </Box>\r\n    </LocalizationProvider>\r\n  );\r\n};\r\n\r\nexport default FormDatePicker;\r\n","import { Controller } from \"react-hook-form\";\r\nimport {\r\n  FormControl,\r\n  Select,\r\n  MenuItem,\r\n  Theme,\r\n  SxProps,\r\n  Checkbox,\r\n} from \"@mui/material\";\r\nimport { FilterStateProps } from \"../../../../../types/filter\";\r\nimport { DropdownOption } from \"../../../../../types/common\";\r\n\r\nconst FormMultiSelect = ({\r\n  filter,\r\n  control,\r\n  dropdownData,\r\n  sx,\r\n  onValueChange,\r\n  isFlatJson,\r\n}: {\r\n  filter: FilterStateProps;\r\n  control: any;\r\n  dropdownData: Record<string, DropdownOption[]>;\r\n  sx?: SxProps<Theme>;\r\n  onValueChange?: () => void;\r\n  isFlatJson: boolean;\r\n}) => {\r\n  const options = dropdownData[filter.filter_attribute] || [];\r\n\r\n  // 🔑 single source of truth\r\n  const getOptionValue = (item: DropdownOption) =>\r\n    isFlatJson ? item.label : item.value;\r\n\r\n  return (\r\n    <Controller\r\n      name={`${filter?.filter_attribute_name}.value`}\r\n      control={control}\r\n      defaultValue={\r\n        Array.isArray(filter.filter_value)\r\n          ? filter.filter_value.filter(Boolean)\r\n          : []\r\n      }\r\n      render={({ field }) => {\r\n        const cleanedValue = Array.isArray(field.value)\r\n          ? field.value.filter(Boolean)\r\n          : [];\r\n\r\n        return (\r\n          <FormControl sx={sx} fullWidth size=\"small\">\r\n            <Select\r\n              {...field}\r\n              sx={{\r\n                \"& .MuiOutlinedInput-input\": {\r\n                  padding: \"10px 20px\",\r\n                  height: \"21px\",\r\n                },\r\n              }}\r\n              multiple\r\n              value={cleanedValue}\r\n              onChange={(e) => {\r\n                const value = e.target.value;\r\n                const filtered = Array.isArray(value)\r\n                  ? value.filter(Boolean)\r\n                  : [];\r\n                field.onChange(filtered);\r\n                onValueChange?.();\r\n              }}\r\n              renderValue={(selected) => {\r\n                const filtered = Array.isArray(selected)\r\n                  ? selected.filter(Boolean)\r\n                  : [];\r\n\r\n                return filtered\r\n                  .map((val) => {\r\n                    const match = options.find(\r\n                      (item) => getOptionValue(item) === val\r\n                    );\r\n                    return match?.label || val;\r\n                  })\r\n                  .join(\", \");\r\n              }}\r\n            >\r\n              {options.map((item, idx) => {\r\n                const optionValue = getOptionValue(item);\r\n\r\n                return (\r\n                  <MenuItem key={idx} value={optionValue}>\r\n                    <Checkbox\r\n                      checked={cleanedValue.includes(optionValue)}\r\n                      sx={{ marginRight: 1 }}\r\n                    />\r\n                    {item.label}\r\n                  </MenuItem>\r\n                );\r\n              })}\r\n            </Select>\r\n          </FormControl>\r\n        );\r\n      }}\r\n    />\r\n  );\r\n};\r\n\r\nexport default FormMultiSelect;\r\n","import { FormControl } from \"@mui/material\";\r\nimport { FilterStateProps } from \"../../../../../types/filter\";\r\nimport FormTextfield from \"../components/Textfield\";\r\nimport FormDatePicker from \"../components/Date\";\r\nimport FormMultiSelect from \"../components/Multi-Select\";\r\n\r\n// Operators that should show a Date Picker\r\nconst dateAllowedOperators = [\r\n  \"equal\",\r\n  \"before\",\r\n  \"after\",\r\n  \"between\",\r\n  \"is\",\r\n  \"today\",\r\n  \"is_before\",\r\n  \"is_after\",\r\n  \"is_on_or_before\",\r\n  \"is_on_or_after\",\r\n  \"empty\",\r\n  \"not_empty\",\r\n];\r\n\r\nexport const resolveFilterInput = ({\r\n  filter,\r\n  operator,\r\n  control,\r\n  dropdownData,\r\n  updateFiltersFromForm,\r\n  isFlatJson,\r\n}: {\r\n  filter: FilterStateProps;\r\n  operator: string | undefined;\r\n  control: any;\r\n  dropdownData: any;\r\n  updateFiltersFromForm: () => void;\r\n  isFlatJson: boolean;\r\n}) => {\r\n  const dataType = filter?.filter_attribute_data_type;\r\n\r\n  // TEXT / NUMBER → always textfield\r\n  if (dataType === \"text\" || dataType === \"number\" || dataType === \"label\") {\r\n    return (\r\n      <FormTextfield\r\n        filter={filter}\r\n        control={control}\r\n        onValueChange={updateFiltersFromForm}\r\n      />\r\n    );\r\n  }\r\n\r\n  // YEAR → DatePicker (Year mode)\r\n  if (dataType === \"year\") {\r\n    return (\r\n      <FormDatePicker\r\n        filter={filter}\r\n        control={control}\r\n        views={[\"year\"]}\r\n        onValueChange={updateFiltersFromForm}\r\n      />\r\n    );\r\n  }\r\n\r\n  // DATE FIELD\r\n  if (dataType === \"date\") {\r\n    const showDatePicker = operator && dateAllowedOperators.includes(operator);\r\n\r\n    if (showDatePicker) {\r\n      // Date Picker\r\n      return (\r\n        <FormDatePicker\r\n          filter={filter}\r\n          control={control}\r\n          onValueChange={updateFiltersFromForm}\r\n        />\r\n      );\r\n    }\r\n\r\n    return (\r\n      <FormTextfield\r\n        filter={filter}\r\n        control={control}\r\n        onValueChange={updateFiltersFromForm}\r\n      />\r\n    );\r\n  }\r\n\r\n  // SELECT / MULTISELECT / RADIO / CHECKBOX\r\n  if (\r\n    filter?.filter_attribute_data_type !== undefined &&\r\n    [\"select\", \"multiselect\", \"radio\", \"checkbox\"].includes(\r\n      filter?.filter_attribute_data_type\r\n    )\r\n  ) {\r\n    return (\r\n      <FormMultiSelect\r\n        filter={filter}\r\n        control={control}\r\n        dropdownData={dropdownData}\r\n        onValueChange={updateFiltersFromForm}\r\n        isFlatJson={isFlatJson}\r\n      />\r\n    );\r\n  }\r\n\r\n  return <FormControl fullWidth size=\"small\" />;\r\n};\r\n\r\nexport const getOperationKeyByElementType = (elementType: string) => {\r\n  switch (elementType) {\r\n    case \"text\":\r\n    case \"textarea\":\r\n    case \"email\":\r\n    case \"phone\":\r\n    case \"password\":\r\n    case \"url\":\r\n    case \"label\":\r\n      return \"text\";\r\n\r\n    case \"number\":\r\n    case \"decimal\":\r\n    case \"file-upload\":\r\n      return \"number\";\r\n\r\n    case \"date\":\r\n    case \"datetime\":\r\n      return \"date\";\r\n\r\n    case \"select\":\r\n    case \"radio\":\r\n    case \"multiselect\":\r\n    case \"multicheckbox\":\r\n    case \"checkbox\":\r\n      return \"select\";\r\n\r\n    case \"year\":\r\n      return \"year\";\r\n\r\n    default:\r\n      return \"text\";\r\n  }\r\n};\r\n","import { Box, Button, styled, Paper, ClickAwayListener } from \"@mui/material\";\r\nimport { useMemo, useRef } from \"react\";\r\nimport { AddIcon } from \"../../../../../../assets/svg\";\r\nimport {\r\n  FilterColumnsDataProps,\r\n  FilterComponentOptions,\r\n  FilterDataMainFilterEntityWiseCriteriaProps,\r\n} from \"../../../../../types/filter\";\r\nimport { CraftTableOptionsProps } from \"../../../../../types/table-options\";\r\nimport { filterStyles } from \"../../../style\";\r\nimport useElementWidth from \"../../../../../libs/hooks/useElementWidth\";\r\nimport { onFilterChangeFunctionProps } from \"../../../../../types/common\";\r\nimport FilterCriteriaEntityList from \"./filter-criteria-entity-list\";\r\nimport FilterCriteriaList from \"./filter-criteria-list\";\r\nimport { getOperationKeyByElementType } from \"../utils/filter-date-input-resolver\";\r\n\r\nconst FilterCriteria = ({\r\n  columnsData,\r\n  tableStates,\r\n  onChangeFunction,\r\n  filterComponentOptions,\r\n}: {\r\n  columnsData: FilterColumnsDataProps;\r\n  tableStates: CraftTableOptionsProps;\r\n  onChangeFunction: ({\r\n    updatedFilters,\r\n    filterMaster,\r\n  }: onFilterChangeFunctionProps) => void;\r\n  filterComponentOptions?: FilterComponentOptions;\r\n}) => {\r\n  const FilterButton = styled(Button)(({ theme }) => ({\r\n    borderRadius: 20,\r\n    borderColor: theme.palette.primary.main,\r\n    color: theme.palette.primary.main,\r\n    textTransform: \"none\",\r\n    padding: \"8px 16px\",\r\n    \"&:hover\": {\r\n      borderColor: theme.palette.primary.dark,\r\n    },\r\n  }));\r\n\r\n  const {\r\n    filters,\r\n    setFilters,\r\n    showFilterOptions,\r\n    setShowFilterOption,\r\n    filterMaster,\r\n    selectedFilterEntity,\r\n    setSelectedFilterEntity,\r\n  } = tableStates;\r\n\r\n  const filterButtonRef = useRef<HTMLButtonElement>(null);\r\n  const filterButtonWidth = useElementWidth(filterButtonRef);\r\n\r\n  const isSingleEntity = filterComponentOptions?.tabOptions?.isSingleEntity;\r\n  // Disable button if only one filter is allowed\r\n  const isSingleFilter =\r\n    filterComponentOptions?.tabOptions?.isSingleFilter || false;\r\n  const disableButton = useMemo(() => {\r\n    return isSingleFilter && filters?.length > 0;\r\n  }, [filters?.length, isSingleFilter]);\r\n\r\n  const handleAddFilter = (\r\n    attribute: FilterDataMainFilterEntityWiseCriteriaProps\r\n  ) => {\r\n    const dropdownOptions =\r\n      columnsData?.operation_list[attribute?.element_type];\r\n\r\n    const defaultValue = attribute.element_type === \"multiselect\" ? [] : \"\";\r\n\r\n    const operationKey = getOperationKeyByElementType(attribute?.element_type);\r\n\r\n    const matchingDropdownList =\r\n      columnsData?.operation_list?.[operationKey] || [];\r\n    const defaultOperator = matchingDropdownList[0]?.value || \"\";\r\n\r\n    const newFilter = {\r\n      filter_attribute: attribute.attribute_key,\r\n      filter_operator: defaultOperator,\r\n      filter_value: defaultValue,\r\n      filter_entity_type: selectedFilterEntity?.value,\r\n    };\r\n\r\n    const newSelectedFilter = {\r\n      ...newFilter,\r\n      // id: attribute?.id,\r\n      filter_attribute_name: attribute?.name,\r\n      filter_attribute_data_type:\r\n        attribute?.element_type || attribute?.element_type,\r\n      datasource_list: attribute?.datasource_list,\r\n      dropdown_list: matchingDropdownList,\r\n      filter_entity_name: selectedFilterEntity?.label,\r\n      attribute_key: attribute?.attribute_key,\r\n    };\r\n\r\n    setFilters((prev) => [...prev, newSelectedFilter]);\r\n\r\n    const newFilterState = [...filters, newSelectedFilter];\r\n    const newState = {\r\n      filterMaster: filterMaster,\r\n      filters: newFilterState,\r\n    };\r\n\r\n    onChangeFunction && onChangeFunction(newState);\r\n\r\n    setShowFilterOption(false);\r\n\r\n    if (!isSingleEntity) {\r\n      setSelectedFilterEntity(undefined);\r\n    }\r\n  };\r\n\r\n  const toggleFilterOptions = () => {\r\n    setShowFilterOption((prev) => !prev);\r\n  };\r\n\r\n  return (\r\n    <Box>\r\n      <FilterButton\r\n        fullWidth\r\n        startIcon={<AddIcon />}\r\n        onClick={toggleFilterOptions}\r\n        disabled={disableButton}\r\n        sx={{\r\n          bgcolor: \"#eae4fe\",\r\n          borderRadius: \"6px\",\r\n          color: \"#7a5af8\",\r\n          fontSize: \"13px\",\r\n          fontWeight: 500,\r\n        }}\r\n        ref={filterButtonRef}\r\n      >\r\n        Filter Criteria\r\n      </FilterButton>\r\n\r\n      {showFilterOptions && (\r\n        <ClickAwayListener onClickAway={() => setShowFilterOption(false)}>\r\n          <Paper\r\n            sx={{\r\n              width: filterButtonWidth || 360, // Dynamic width based on button\r\n              p: 1,\r\n              mt: 1.5,\r\n              cursor: \"pointer\",\r\n              position: \"absolute\",\r\n              zIndex: 1300,\r\n            }}\r\n          >\r\n            <Box\r\n              sx={{\r\n                maxHeight: filterMaster?.saved_filters?.selectedId\r\n                  ? `calc(100vh - 601px)`\r\n                  : `calc(100vh - 440px)`,\r\n                overflowY: \"auto\",\r\n                width: \"100%\",\r\n                ...filterStyles.scrollbarCustom,\r\n              }}\r\n              className=\"filter-criteria-list-box\"\r\n            >\r\n              {selectedFilterEntity ? (\r\n                <FilterCriteriaList\r\n                  tableStates={tableStates}\r\n                  handleAddFilter={handleAddFilter}\r\n                  filterComponentOptions={filterComponentOptions}\r\n                />\r\n              ) : (\r\n                <FilterCriteriaEntityList\r\n                  tableStates={tableStates}\r\n                  filterComponentOptions={filterComponentOptions}\r\n                />\r\n              )}\r\n            </Box>\r\n          </Paper>\r\n        </ClickAwayListener>\r\n      )}\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default FilterCriteria;\r\n","import { useState, useEffect } from \"react\";\r\n\r\n// Custom hook to track the width of an element\r\nconst useElementWidth = (ref: React.RefObject<HTMLElement>) => {\r\n  const [width, setWidth] = useState<number>(0);\r\n\r\n  useEffect(() => {\r\n    // If there's no element to observe, just return early\r\n    if (!ref.current) return;\r\n\r\n    // ResizeObserver callback function\r\n    const resizeObserver = new ResizeObserver(() => {\r\n      if (ref.current) {\r\n        setWidth(ref.current.clientWidth); // Update width state\r\n      }\r\n    });\r\n\r\n    // Start observing the element's size changes\r\n    resizeObserver.observe(ref.current);\r\n\r\n    // Clean up observer on component unmount\r\n    return () => resizeObserver.disconnect();\r\n  }, [ref, ref.current?.clientWidth]);\r\n\r\n  return width; // Return the current width\r\n};\r\n\r\nexport default useElementWidth;\r\n","import { Box, Button, IconButton, TextField, Typography } from \"@mui/material\";\r\nimport { CloseIcon, DeleteIcon } from \"../../../../../assets/svg\";\r\nimport {\r\n  FilterColumnsDataProps,\r\n  FilterComponentOptions,\r\n  FilterDropdownDataProps,\r\n  FilterMasterStateProps,\r\n  FilterStateProps,\r\n} from \"../../../../types/filter\";\r\nimport { Controller, useForm } from \"react-hook-form\";\r\nimport React, { useEffect, useMemo, useCallback } from \"react\";\r\nimport FormDropdown from \"./components/Dropdown\";\r\nimport { CraftTableOptionsProps } from \"../../../../types/table-options\";\r\nimport FilterCriteria from \"./components/Filter-criteria\";\r\nimport CustomSearch from \"../search\";\r\nimport { customDebounce } from \"../../../../libs/utils/debounce\";\r\nimport { filterFormStyles } from \"../../style\";\r\nimport { onFilterChangeFunctionProps } from \"../../../../types/common\";\r\nimport { resolveFilterInput } from \"./utils/filter-date-input-resolver\";\r\n\r\ninterface FormValues {\r\n  filterName: string;\r\n  [key: string]:\r\n    | {\r\n        value: string | string[];\r\n        operator: string;\r\n      }\r\n    | string;\r\n}\r\n\r\nconst FilterForm = ({\r\n  columnsData,\r\n  dropdownData,\r\n  searchTerm = \"\",\r\n  setSearchTerm,\r\n  handleRemoveFilter,\r\n  editMode = false,\r\n  tableStates,\r\n  onSaveFilterButtonClick,\r\n  setDeleteFilterModalOpen,\r\n  onChangeFunction,\r\n  filterComponentOptions,\r\n  isFlatJson,\r\n}: {\r\n  columnsData: FilterColumnsDataProps;\r\n  dropdownData: FilterDropdownDataProps;\r\n  searchTerm?: string;\r\n  setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n  handleRemoveFilter: (filter_attribute: string) => void;\r\n  editMode?: boolean;\r\n  tableStates: CraftTableOptionsProps;\r\n  onSaveFilterButtonClick?: () => void;\r\n  setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;\r\n  onChangeFunction: ({\r\n    updatedFilters,\r\n    filterMaster,\r\n  }: onFilterChangeFunctionProps) => void;\r\n  filterComponentOptions?: FilterComponentOptions;\r\n  isFlatJson: boolean;\r\n}) => {\r\n  const { filterMaster, filters, setFilters, setFilterMaster, setPagination } =\r\n    tableStates;\r\n\r\n  const showSaveButton =\r\n    filterComponentOptions?.tabOptions?.mainFilter?.showSaveButton;\r\n  const showClearAllButton =\r\n    filterComponentOptions?.tabOptions?.mainFilter?.showClearAllButton;\r\n  const customButtons =\r\n    filterComponentOptions?.tabOptions?.mainFilter?.customButtons;\r\n\r\n  const filterName = filterMaster?.saved_filters?.selectedName || \"\";\r\n  const isOwner = filterMaster?.saved_filters?.is_owner || false;\r\n\r\n  const defaultValues = useMemo(() => {\r\n    const filterValues = filters?.reduce((acc, curr) => {\r\n      if (curr?.filter_attribute_name) {\r\n        acc[curr?.filter_attribute_name] = {\r\n          value: curr?.filter_value ?? \"\",\r\n          operator:\r\n            curr?.filter_operator ?? curr?.dropdown_list?.[0]?.value ?? \"\",\r\n        };\r\n      }\r\n      return acc;\r\n    }, {} as Record<string, { value: string | string[]; operator: string }>);\r\n\r\n    return {\r\n      filterName: filterName ?? \"\",\r\n      dummyChange: \"\",\r\n      ...filterValues,\r\n    };\r\n  }, [filters, filterName]);\r\n\r\n  const { control, watch, reset, setValue, unregister } = useForm<\r\n    FormValues & { dummyChange: string }\r\n  >({\r\n    mode: \"onChange\",\r\n    defaultValues,\r\n    resetOptions: {\r\n      keepDirtyValues: false,\r\n      keepErrors: false,\r\n    },\r\n  });\r\n\r\n  const formValues = watch();\r\n\r\n  useEffect(() => {\r\n    reset(defaultValues);\r\n  }, [filters]);\r\n\r\n  const debouncedUpdateFilters = useCallback(\r\n    customDebounce((updatedFilters: FilterStateProps[]) => {\r\n      setFilters(updatedFilters);\r\n\r\n      const newState = {\r\n        filterMaster: filterMaster,\r\n        filters: updatedFilters,\r\n      };\r\n\r\n      onChangeFunction && onChangeFunction(newState);\r\n    }, 1000),\r\n    [setFilters]\r\n  );\r\n\r\n  const updateFiltersFromForm = useCallback(() => {\r\n    const updatedFilters = filters?.map((filter) => {\r\n      if (\r\n        filter?.filter_attribute_name &&\r\n        typeof formValues[filter?.filter_attribute_name] === \"object\"\r\n      ) {\r\n        const filterValue = formValues[filter?.filter_attribute_name] as {\r\n          value: string | string[];\r\n          operator: string;\r\n        };\r\n\r\n        return {\r\n          ...filter,\r\n          filter_value: filterValue.value,\r\n          filter_operator: filterValue.operator,\r\n        };\r\n      }\r\n      return filter;\r\n    });\r\n\r\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }));\r\n    debouncedUpdateFilters(updatedFilters);\r\n  }, [formValues, filters, debouncedUpdateFilters]);\r\n\r\n  useEffect(() => {\r\n    return () => {\r\n      reset();\r\n      filters?.forEach((filter) => {\r\n        if (filter?.filter_attribute_name) {\r\n          unregister(filter?.filter_attribute_name);\r\n        }\r\n      });\r\n    };\r\n  }, []);\r\n\r\n  const groupedFilters = useMemo(() => {\r\n    return filters?.reduce((acc, filter) => {\r\n      const key = filter?.filter_entity_name || \"\";\r\n      if (!acc[key]) {\r\n        acc[key] = [];\r\n      }\r\n      acc[key].push(filter);\r\n      return acc;\r\n    }, {} as Record<string, FilterStateProps[]>);\r\n  }, [filters]);\r\n\r\n  const handleRemoveEntityType = (entityType: string) => {\r\n    const remainingFilters = filters?.filter(\r\n      (f) => f.filter_entity_name !== entityType\r\n    );\r\n\r\n    // unregister all fields belonging to this entity type\r\n    filters?.forEach((f) => {\r\n      if (f?.filter_entity_name === entityType && f?.filter_attribute_name) {\r\n        unregister(`${f?.filter_attribute_name}.value`);\r\n        unregister(`${f?.filter_attribute_name}.operator`);\r\n      }\r\n    });\r\n\r\n    setFilters(remainingFilters);\r\n\r\n    const newState = {\r\n      filterMaster,\r\n      filters: remainingFilters,\r\n    };\r\n\r\n    onChangeFunction && onChangeFunction(newState);\r\n  };\r\n\r\n  return (\r\n    <form\r\n      onSubmit={(e) => {\r\n        e.preventDefault(); //  This prevents the page from reloading\r\n      }}\r\n    >\r\n      <Box sx={editMode ? filterFormStyles.formEditModeStyle : {}}>\r\n        {editMode && (\r\n          <Box\r\n            sx={{\r\n              \"& .MuiOutlinedInput-root\": {\r\n                borderRadius: \"6px\",\r\n                fontSize: \"14px\",\r\n                bgcolor: \"#fafafa\",\r\n                \"& fieldset\": { borderColor: \"#c1c1c1\" },\r\n                \"&.Mui-focused fieldset\": { borderColor: \"#7A5AF8\" },\r\n              },\r\n              display: \"flex\",\r\n              alignItems: \"center\",\r\n              justifyContent: \"center\",\r\n              padding: \"0.5rem 0 1rem 0\",\r\n              gap: 1,\r\n            }}\r\n          >\r\n            <Controller\r\n              name=\"filterName\"\r\n              control={control}\r\n              render={({ field }) => (\r\n                <TextField\r\n                  fullWidth\r\n                  size=\"small\"\r\n                  placeholder=\"Filter Name\"\r\n                  value={filterName || field.value}\r\n                  onChange={(e) => {\r\n                    field.onChange(e);\r\n                    if (editMode) {\r\n                      setFilterMaster(\r\n                        (prev) =>\r\n                          ({\r\n                            ...prev,\r\n                            saved_filters: {\r\n                              ...prev?.saved_filters,\r\n                              selectedName: e.target.value,\r\n                            },\r\n                          } as FilterMasterStateProps)\r\n                      );\r\n                    }\r\n                  }}\r\n                  inputRef={field.ref}\r\n                  sx={{\r\n                    maxWidth: 400,\r\n\r\n                    \"& .MuiOutlinedInput-root\": {\r\n                      bgcolor: \"white\",\r\n                      borderRadius: \"0px\",\r\n                      fontSize: \"14px\",\r\n                      color: \"#272524\",\r\n                      fontWeight: \"500\",\r\n                      \"& fieldset\": { borderColor: \"#c5c5c5\" },\r\n                      \"&.Mui-focused fieldset\": { borderColor: \"#7A5AF8\" },\r\n                    },\r\n                  }}\r\n                />\r\n              )}\r\n            />\r\n            {isOwner && (\r\n              <Box onClick={(e) => e.stopPropagation()}>\r\n                <IconButton\r\n                  size=\"small\"\r\n                  onClick={() =>\r\n                    setDeleteFilterModalOpen && setDeleteFilterModalOpen(true)\r\n                  }\r\n                >\r\n                  <DeleteIcon />\r\n                </IconButton>\r\n              </Box>\r\n            )}\r\n          </Box>\r\n        )}\r\n\r\n        <Box\r\n          className=\"filter-criteria-form\"\r\n          sx={{\r\n            ...filterFormStyles.formFlexContainer,\r\n            ...(editMode && {\r\n              maxHeight: \"calc(100vh - 570px)\",\r\n              overflowY: \"auto\",\r\n            }),\r\n          }}\r\n        >\r\n          <FilterCriteria\r\n            columnsData={columnsData}\r\n            tableStates={tableStates}\r\n            onChangeFunction={onChangeFunction}\r\n            filterComponentOptions={filterComponentOptions}\r\n          />\r\n\r\n          {!editMode && (\r\n            <CustomSearch value={searchTerm} onChange={setSearchTerm} />\r\n          )}\r\n\r\n          <Box\r\n            className=\"filter-form-inputs\"\r\n            sx={filterFormStyles.formFlexContainer}\r\n          >\r\n            {Object.entries(groupedFilters).map(([entityType, filters]) => (\r\n              <Box\r\n                key={entityType}\r\n                sx={{\r\n                  border: \"1px solid #c5c5c5\",\r\n                  borderRadius: 2,\r\n                  overflow: \"hidden\",\r\n                }}\r\n              >\r\n                {/* Group Header */}\r\n                <Box\r\n                  className=\"group-header\"\r\n                  sx={filterFormStyles.formListSectionHeader}\r\n                >\r\n                  <Typography fontSize={14}>{entityType}</Typography>\r\n                  <IconButton\r\n                    size=\"small\"\r\n                    onClick={() => handleRemoveEntityType(entityType)}\r\n                  >\r\n                    <CloseIcon />\r\n                  </IconButton>\r\n                </Box>\r\n\r\n                {filters\r\n                  .filter(\r\n                    (filter) =>\r\n                      filter?.filter_attribute_name\r\n                        ?.toLowerCase()\r\n                        .includes(searchTerm.toLowerCase()) ||\r\n                      filter.filter_value\r\n                        ?.toString()\r\n                        .toLowerCase()\r\n                        .includes(searchTerm.toLowerCase())\r\n                  )\r\n                  .reverse()\r\n                  .map((filter) => {\r\n                    const dropdown_list = filter.dropdown_list || [];\r\n                    return (\r\n                      <Box\r\n                        key={filter.filter_attribute}\r\n                        sx={filterFormStyles.formListItem}\r\n                      >\r\n                        <Box sx={filterFormStyles.formListItemHeader}>\r\n                          <Typography\r\n                            sx={filterFormStyles.formListItemHeaderName}\r\n                          >\r\n                            {filter?.filter_attribute_name}\r\n                          </Typography>\r\n                          <FormDropdown\r\n                            filter={filter}\r\n                            control={control}\r\n                            setValue={setValue}\r\n                            dropdownList={dropdown_list}\r\n                            sx={filterFormStyles.formListItemHeaderDropdown}\r\n                            onValueChange={updateFiltersFromForm}\r\n                          />\r\n                          <IconButton\r\n                            sx={{ marginLeft: \"auto\" }}\r\n                            onClick={() => {\r\n                              unregister(\r\n                                `${filter?.filter_attribute_name}.value`\r\n                              );\r\n                              unregister(\r\n                                `${filter?.filter_attribute_name}.operator`\r\n                              );\r\n\r\n                              // Toggle dummy field to force form dirty\r\n                              const dummy = watch(\"dummyChange\");\r\n                              setValue(\r\n                                \"dummyChange\",\r\n                                dummy === \"changed\" ? \"reset\" : \"changed\",\r\n                                {\r\n                                  shouldDirty: true,\r\n                                }\r\n                              );\r\n\r\n                              handleRemoveFilter(filter.filter_attribute);\r\n                            }}\r\n                            size=\"small\"\r\n                          >\r\n                            <CloseIcon />\r\n                          </IconButton>\r\n                        </Box>\r\n\r\n                        <Box>\r\n                          {(() => {\r\n                            const fieldValue = formValues[\r\n                              filter?.filter_attribute_name as keyof FormValues\r\n                            ] as\r\n                              | { value: string | string[]; operator: string }\r\n                              | undefined;\r\n\r\n                            const operator = fieldValue?.operator;\r\n\r\n                            return resolveFilterInput({\r\n                              filter,\r\n                              operator,\r\n                              control,\r\n                              dropdownData,\r\n                              updateFiltersFromForm,\r\n                              isFlatJson,\r\n                            });\r\n                          })()}\r\n                        </Box>\r\n                      </Box>\r\n                    );\r\n                  })}\r\n              </Box>\r\n            ))}\r\n          </Box>\r\n        </Box>\r\n      </Box>\r\n\r\n      {filters?.length > 0 && (showClearAllButton || showSaveButton) && (\r\n        <Box sx={{ display: \"flex\", justifyContent: \"center\", gap: 1, mt: 3 }}>\r\n          {showClearAllButton && (\r\n            <Button\r\n              variant=\"outlined\"\r\n              sx={{\r\n                color: \"#7A5AF8\",\r\n                border: `1px solid #7A5AF8`,\r\n                borderRadius: \"6px\",\r\n                textTransform: \"none\",\r\n                fontSize: \"14px\",\r\n              }}\r\n              fullWidth\r\n              onClick={() => {\r\n                setFilters([]);\r\n\r\n                const filterMaster = {\r\n                  ...tableStates.filterMaster,\r\n                  activeFilterTabIndex: -1,\r\n                };\r\n\r\n                const newState = {\r\n                  filterMaster: filterMaster,\r\n                  filters: [],\r\n                };\r\n\r\n                onChangeFunction && onChangeFunction(newState);\r\n              }}\r\n            >\r\n              Clear All\r\n            </Button>\r\n          )}\r\n\r\n          {showSaveButton && (\r\n            <Button\r\n              variant=\"contained\"\r\n              fullWidth\r\n              sx={{\r\n                color: \"white\",\r\n                backgroundColor: \"#7A5AF8\",\r\n                \"&.Mui-disabled\": {\r\n                  backgroundColor: \"#d7cefd\",\r\n                  color: \"rgba(255, 255, 255, 0.7)\",\r\n                },\r\n              }}\r\n              onClick={() => {\r\n                onSaveFilterButtonClick && onSaveFilterButtonClick();\r\n              }}\r\n            >\r\n              Save Filter\r\n            </Button>\r\n          )}\r\n\r\n          {/* Custom buttons from props */}\r\n          {customButtons?.map((btn, idx) => (\r\n            <Button\r\n              key={idx}\r\n              fullWidth\r\n              variant={btn?.variant ?? \"outlined\"}\r\n              sx={btn?.sx}\r\n              {...btn}\r\n            >\r\n              {btn?.label}\r\n            </Button>\r\n          ))}\r\n        </Box>\r\n      )}\r\n    </form>\r\n  );\r\n};\r\n\r\nexport default FilterForm;\r\n","import { Box } from \"@mui/material\";\r\nimport { useEffect, useState } from \"react\";\r\nimport FilterForm from \"./forms\";\r\nimport {\r\n  FilterFormComponentProps,\r\n  FilterMasterStateProps,\r\n} from \"../../../types/filter\";\r\nimport { filterStyles } from \"../style\";\r\n\r\nconst MainFilter = ({\r\n  columnsData,\r\n  dropdownData,\r\n  tableStates,\r\n  onSaveFilterButtonClick,\r\n  onChangeFunction,\r\n  filterComponentOptions,\r\n  isFlatJson,\r\n}: FilterFormComponentProps) => {\r\n  const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n\r\n  const { setFilters, setFilterMaster, filterMaster } = tableStates;\r\n\r\n  useEffect(() => {\r\n    setFilterMaster(\r\n      (prev) =>\r\n        ({\r\n          ...prev,\r\n          activeFilterTabIndex: 0,\r\n        } as FilterMasterStateProps)\r\n    );\r\n  }, []);\r\n\r\n  const handleRemoveFilter = (filter_attribute: string) => {\r\n    setFilters((prev) =>\r\n      prev.filter((filter) => filter.filter_attribute !== filter_attribute)\r\n    );\r\n    setFilters((prev) => {\r\n      const newFilters = prev.filter(\r\n        (f) => f.filter_attribute !== filter_attribute\r\n      );\r\n\r\n      onChangeFunction &&\r\n        onChangeFunction({\r\n          filterMaster: filterMaster,\r\n          filters: newFilters,\r\n        });\r\n      return newFilters;\r\n    });\r\n  };\r\n\r\n  const mainBoxStyles = {\r\n    ...filterStyles.filterMainComponentWrapper,\r\n    ...filterStyles.scrollbarCustom,\r\n  };\r\n\r\n  return (\r\n    <Box sx={mainBoxStyles} className=\"main-filter-component-wrapper\">\r\n      {/* Render selectedFilters state */}\r\n      <FilterForm\r\n        columnsData={columnsData}\r\n        searchTerm={searchTerm}\r\n        setSearchTerm={setSearchTerm}\r\n        handleRemoveFilter={handleRemoveFilter}\r\n        tableStates={tableStates}\r\n        onSaveFilterButtonClick={onSaveFilterButtonClick}\r\n        dropdownData={dropdownData}\r\n        onChangeFunction={onChangeFunction}\r\n        filterComponentOptions={filterComponentOptions}\r\n        isFlatJson={isFlatJson}\r\n      />\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default MainFilter;\r\n","import { Box, Typography } from \"@mui/material\";\r\nimport FilterForm from \"./forms\";\r\nimport BackArrow from \"@mui/icons-material/ArrowBackIosNew\";\r\nimport {\r\n  FilterColumnsDataProps,\r\n  FilterComponentOptions,\r\n  FilterDropdownDataProps,\r\n  FilterMasterStateProps,\r\n} from \"../../../types/filter\";\r\nimport { CraftTableOptionsProps } from \"../../../types/table-options\";\r\nimport { onFilterChangeFunctionProps } from \"../../../types/common\";\r\n\r\nconst SavedFilterEditComponent = ({\r\n  columnsData,\r\n  dropdownData,\r\n  tableStates,\r\n  editMode,\r\n  setEditMode,\r\n  searchTerm,\r\n  setSearchTerm,\r\n  onSaveFilterButtonClick,\r\n  setDeleteFilterModalOpen,\r\n  onChangeFunction,\r\n  filterComponentOptions,\r\n}: {\r\n  columnsData: FilterColumnsDataProps;\r\n  dropdownData: FilterDropdownDataProps;\r\n  tableStates: CraftTableOptionsProps;\r\n  editMode?: boolean;\r\n  setEditMode?: React.Dispatch<React.SetStateAction<boolean>>;\r\n  searchTerm?: string;\r\n  setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n  onSaveFilterButtonClick?: () => void;\r\n  setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;\r\n  onChangeFunction: ({\r\n    updatedFilters,\r\n    filterMaster,\r\n  }: onFilterChangeFunctionProps) => void;\r\n  filterComponentOptions?: FilterComponentOptions;\r\n}) => {\r\n  const { setFilters, setFilterMaster } = tableStates;\r\n\r\n  const showBackButton =\r\n    filterComponentOptions?.tabOptions?.savedFilter?.showBackButton;\r\n\r\n  const handleRemoveFilter = (filter_attribute: string) => {\r\n    setFilters((prev) =>\r\n      prev.filter((filter) => filter?.filter_attribute !== filter_attribute)\r\n    );\r\n  };\r\n\r\n  const handleBackButtonClick = () => {\r\n    setEditMode && setEditMode(false);\r\n    setFilters([]);\r\n\r\n    setFilterMaster(\r\n      (prev) =>\r\n        ({\r\n          ...prev,\r\n          saved_filters: {\r\n            ...prev?.saved_filters,\r\n            selectedId: \"\",\r\n            selectedName: \"\",\r\n            selectedCode: \"\",\r\n            shareWithTeam: false,\r\n            allowTeamEdit: false,\r\n          },\r\n          activeFilterTabIndex: -1,\r\n        } as FilterMasterStateProps)\r\n    );\r\n  };\r\n\r\n  return (\r\n    <>\r\n      {showBackButton && (\r\n        <Box>\r\n          <Box\r\n            sx={{\r\n              display: \"flex\",\r\n              alignItems: \"center\",\r\n              gap: 1,\r\n              cursor: \"pointer\",\r\n              mb: 2,\r\n            }}\r\n            onClick={handleBackButtonClick}\r\n          >\r\n            <BackArrow sx={{ width: \"13px\", height: \"13px\" }} />\r\n            <Typography variant=\"body2\" sx={{ color: \"#8592A3\" }}>\r\n              Back To Saved Filters\r\n            </Typography>\r\n          </Box>\r\n        </Box>\r\n      )}\r\n\r\n      {/* Render selectedFilters state */}\r\n      <FilterForm\r\n        handleRemoveFilter={handleRemoveFilter}\r\n        editMode={editMode}\r\n        tableStates={tableStates}\r\n        columnsData={columnsData}\r\n        dropdownData={dropdownData}\r\n        searchTerm={searchTerm}\r\n        setSearchTerm={setSearchTerm}\r\n        onSaveFilterButtonClick={onSaveFilterButtonClick}\r\n        setDeleteFilterModalOpen={setDeleteFilterModalOpen}\r\n        onChangeFunction={onChangeFunction}\r\n        filterComponentOptions={filterComponentOptions}\r\n      />\r\n    </>\r\n  );\r\n};\r\n\r\nexport default SavedFilterEditComponent;\r\n","import { useEffect, useState } from \"react\";\r\nimport {\r\n  FilterFormComponentProps,\r\n  FilterMasterStateProps,\r\n  FilterOperationListProps,\r\n} from \"../../../types/filter\";\r\nimport {\r\n  Accordion,\r\n  AccordionDetails,\r\n  AccordionSummary,\r\n  Box,\r\n  Divider,\r\n  IconButton,\r\n  List,\r\n  ListItem,\r\n  ListItemText,\r\n  Typography,\r\n} from \"@mui/material\";\r\nimport CustomSearch from \"./search\";\r\nimport { DeleteIcon, EditIcon } from \"../../../../assets/svg\";\r\nimport SavedFilterEditComponent from \"./saved-edit-filter\";\r\nimport { CheckBox } from \"../../../../assets/svg\";\r\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\n\r\nconst SavedFilter = ({\r\n  columnsData,\r\n  dropdownData,\r\n  tableStates,\r\n  editMode,\r\n  setEditMode,\r\n  setDeleteFilterModalOpen,\r\n  onSaveFilterButtonClick,\r\n  tabValue,\r\n  onChangeFunction,\r\n  filterComponentOptions,\r\n  isFlatJson,\r\n}: FilterFormComponentProps) => {\r\n  const { filters, filterMaster, setFilterMaster, setFilterToDelete } =\r\n    tableStates;\r\n\r\n  const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n\r\n  const MyFilter = (f: any): FilterOperationListProps => {\r\n    return {\r\n      label: f.name || f.label || \"Unnamed Filter\",\r\n      value: f.id || f.value,\r\n      code: f.code ?? \"\",\r\n      is_shared: false,\r\n      created_by: f.created_by || \"\",\r\n      description: f.description || \"\",\r\n      is_owner: true, // My filter = always owner\r\n      is_editable: f.is_editable === true || f.is_editable === \"true\",\r\n    };\r\n  };\r\n\r\n  const SharedFilter = (f: any): FilterOperationListProps => {\r\n    const prefs =\r\n      f.sharedPreferences || f.preferences || f.meta || f.shared_meta || {};\r\n\r\n    return {\r\n      label: f.name || f.label || \"Unnamed Filter\",\r\n      value: f.id || f.value,\r\n      code: f.code ?? \"\",\r\n      is_shared: f.is_shared ?? prefs.is_shared ?? true,\r\n      created_by: f.created_by || \"shared_filter\",\r\n      description: f.description || \"\",\r\n      is_owner: f.is_owner === true || prefs.is_owner === \"true\",\r\n      is_editable:\r\n        f.is_editable === true ||\r\n        f.is_editable === \"true\" ||\r\n        prefs.is_editable === true ||\r\n        prefs.is_editable === \"true\",\r\n    };\r\n  };\r\n\r\n  //  SEPARATE DATA MAPPINGS\r\n\r\n  const myFilters: FilterOperationListProps[] =\r\n    columnsData?.saved_filter?.map(MyFilter) ?? [];\r\n\r\n  const sharedFilters: FilterOperationListProps[] =\r\n    columnsData?.shared_filter?.map(SharedFilter) ?? [];\r\n\r\n  // Reset on unmount\r\n  useEffect(() => {\r\n    return () => {\r\n      const editModeFromTab =\r\n        filterComponentOptions?.tabOptions?.savedFilter?.editMode;\r\n\r\n      if (!editModeFromTab) {\r\n        setEditMode && setEditMode(false);\r\n        setFilterMaster(\r\n          (prev) =>\r\n            ({\r\n              ...prev,\r\n              saved_filters: {\r\n                ...(prev?.saved_filters ?? {}),\r\n                selectedId: \"\",\r\n                selectedName: \"\",\r\n                description: \"\",\r\n                selectedCode: \"\",\r\n                shareWithTeam: undefined,\r\n                allowTeamEdit: undefined,\r\n              },\r\n            } as FilterMasterStateProps)\r\n        );\r\n      }\r\n    };\r\n  }, []);\r\n\r\n  // APPLY FILTER\r\n\r\n  const applyFilterStates = (filter: FilterOperationListProps) => {\r\n    const newFilterMaster = {\r\n      ...filterMaster,\r\n      saved_filters: {\r\n        ...(filterMaster?.saved_filters ?? {}),\r\n        selectedId: filter.value,\r\n        selectedName: filter.label,\r\n        description: filter.description,\r\n        selectedCode: filter.code,\r\n        shareWithTeam: filter.is_shared,\r\n        allowTeamEdit: filter.is_editable,\r\n        is_owner: filter.is_owner,\r\n      },\r\n      attributes: {\r\n        ...filterMaster?.attributes,\r\n        radio: [],\r\n      },\r\n      activeFilterTabIndex: tabValue,\r\n    } as FilterMasterStateProps;\r\n\r\n    setFilterMaster(newFilterMaster);\r\n\r\n    onChangeFunction &&\r\n      onChangeFunction({\r\n        filterMaster: newFilterMaster,\r\n        filters,\r\n      });\r\n  };\r\n\r\n  const handleListItemClick = (filter: FilterOperationListProps) => {\r\n    applyFilterStates(filter);\r\n    setEditMode && setEditMode(true);\r\n    setFilterToDelete(filter);\r\n  };\r\n\r\n  const handleApplyFilter = (filter: FilterOperationListProps) => {\r\n    applyFilterStates(filter);\r\n  };\r\n\r\n  const [openAccordion, setOpenAccordion] = useState<\"my\" | \"shared\" | null>(\r\n    \"my\"\r\n  );\r\n\r\n  const toggleAccodion = (accordion: \"my\" | \"shared\" | null) => {\r\n    setOpenAccordion((prev) => (prev === accordion ? null : accordion));\r\n  };\r\n\r\n  //  RENDER: MY FILTERS\r\n\r\n  const renderMyFilters = (source: FilterOperationListProps[]) =>\r\n    source.length === 0 ? (\r\n      <Typography>No My Filters</Typography>\r\n    ) : (\r\n      <List sx={{ display: \"flex\", flexDirection: \"column\", gap: 1 }}>\r\n        {source\r\n          .filter((f) =>\r\n            f.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n          )\r\n          .map((filter) => (\r\n            <ListItem\r\n              key={filter.value}\r\n              sx={{\r\n                cursor: \"pointer\",\r\n                borderRadius: \"8px\",\r\n                bgcolor: \"#f2f6f8ff\",\r\n                display: \"flex\",\r\n                justifyContent: \"space-between\",\r\n                gap: 1,\r\n                alignItems: \"center\",\r\n                \"&:hover .action-icons\": {\r\n                  opacity: 1,\r\n                  visibility: \"visible\",\r\n                },\r\n              }}\r\n              onClick={() => handleApplyFilter(filter)}\r\n            >\r\n              {filter.value === filterMaster?.saved_filters?.selectedId && (\r\n                <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\r\n                  <CheckBox />\r\n                </Box>\r\n              )}\r\n\r\n              <ListItemText primary={filter.label} />\r\n\r\n              <Box\r\n                onClick={(e) => e.stopPropagation()}\r\n                className=\"action-icons\"\r\n                sx={{\r\n                  display: \"flex\",\r\n                  gap: 1,\r\n                  opacity: 0,\r\n                  visibility: \"hidden\",\r\n                  transition: \"opacity 0.2s ease, visibility 0.2s ease\",\r\n                }}\r\n              >\r\n                <IconButton\r\n                  size=\"large\"\r\n                  onClick={() => handleListItemClick(filter)}\r\n                >\r\n                  <EditIcon />\r\n                </IconButton>\r\n\r\n                <IconButton\r\n                  size=\"small\"\r\n                  onClick={() => {\r\n                    setFilterToDelete(filter);\r\n                    setDeleteFilterModalOpen?.(true);\r\n                  }}\r\n                >\r\n                  <DeleteIcon />\r\n                </IconButton>\r\n              </Box>\r\n            </ListItem>\r\n          ))}\r\n      </List>\r\n    );\r\n\r\n  // ----------------------------------------\r\n  //  RENDER: SHARED FILTERS\r\n  // ----------------------------------------\r\n  const renderSharedFilters = (source: FilterOperationListProps[]) =>\r\n    source.length === 0 ? (\r\n      <Typography>No Shared Filters</Typography>\r\n    ) : (\r\n      <List sx={{ display: \"flex\", flexDirection: \"column\", gap: 1 }}>\r\n        {source\r\n          .filter((f) =>\r\n            f.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n          )\r\n          .map((filter) => (\r\n            <ListItem\r\n              key={filter.value}\r\n              sx={{\r\n                cursor: \"pointer\",\r\n                borderRadius: \"8px\",\r\n                bgcolor: \"#f2f6f8ff\",\r\n                display: \"flex\",\r\n                justifyContent: \"space-between\",\r\n                gap: 1,\r\n                alignItems: \"center\",\r\n                \"&:hover .action-icons\": {\r\n                  opacity: 1,\r\n                  visibility: \"visible\",\r\n                },\r\n              }}\r\n              onClick={() => handleApplyFilter(filter)}\r\n            >\r\n              {filter.value === filterMaster?.saved_filters?.selectedId && (\r\n                <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\r\n                  <CheckBox />\r\n                </Box>\r\n              )}\r\n\r\n              <ListItemText primary={filter.label} />\r\n\r\n              <Box\r\n                onClick={(e) => e.stopPropagation()}\r\n                className=\"action-icons\"\r\n                sx={{\r\n                  display: \"flex\",\r\n                  gap: 1,\r\n                  opacity: 0,\r\n                  visibility: \"hidden\",\r\n                  transition: \"opacity 0.2s ease, visibility 0.2s ease\",\r\n                }}\r\n              >\r\n                {(filter.is_editable || filter.is_owner) && (\r\n                  <IconButton\r\n                    size=\"large\"\r\n                    onClick={() => handleListItemClick(filter)}\r\n                  >\r\n                    <EditIcon />\r\n                  </IconButton>\r\n                )}\r\n                {filter.is_owner && (\r\n                  <IconButton\r\n                    size=\"small\"\r\n                    onClick={() => {\r\n                      setFilterToDelete(filter);\r\n                      setDeleteFilterModalOpen?.(true);\r\n                    }}\r\n                  >\r\n                    <DeleteIcon />\r\n                  </IconButton>\r\n                )}\r\n              </Box>\r\n            </ListItem>\r\n          ))}\r\n      </List>\r\n    );\r\n\r\n  // ----------------------------------------\r\n  //  RENDER MAIN COMPONENT\r\n  // ----------------------------------------\r\n  return (\r\n    <Box className=\"saved-filter-component-wrapper\">\r\n      {!editMode && (\r\n        <>\r\n          {/* Search */}\r\n          <Box sx={{ mb: 2 }}>\r\n            <CustomSearch\r\n              value={searchTerm}\r\n              onChange={setSearchTerm}\r\n              className=\"search-input\"\r\n            />\r\n          </Box>\r\n\r\n          {/* ---- My Filters ---- */}\r\n          <Box\r\n            sx={{\r\n              background: \"#fff\",\r\n              borderRadius: \"12px\",\r\n              border: \"1px solid #eee\",\r\n              mb: 2,\r\n              overflow: \"hidden\",\r\n            }}\r\n          >\r\n            <Accordion\r\n              disableGutters\r\n              elevation={0}\r\n              expanded={openAccordion === \"my\"}\r\n              onChange={() =>\r\n                // setOpenAccordion(openAccordion === \"my\" ? \"shared\" : \"my\")\r\n                toggleAccodion(\"my\")\r\n              }\r\n            >\r\n              <AccordionSummary\r\n                expandIcon={<ExpandMoreIcon fontSize=\"small\" />}\r\n              >\r\n                <Typography fontWeight={600}>My Filters</Typography>\r\n              </AccordionSummary>\r\n              <Divider sx={{ width: \"100%\" }} />\r\n              <AccordionDetails\r\n                sx={{\r\n                  p: \"9px\",\r\n                  maxHeight: \"230px\",\r\n                  overflowY: \"auto\",\r\n                  scrollbarWidth: \"thin\",\r\n                }}\r\n              >\r\n                {renderMyFilters(myFilters)}\r\n              </AccordionDetails>\r\n            </Accordion>\r\n          </Box>\r\n\r\n          {/* ---- Shared Filters ---- */}\r\n          <Box\r\n            sx={{\r\n              background: \"#fff\",\r\n              borderRadius: \"12px\",\r\n              border: \"1px solid #eee\",\r\n              mb: 2,\r\n              overflow: \"hidden\",\r\n            }}\r\n          >\r\n            <Accordion\r\n              disableGutters\r\n              elevation={0}\r\n              expanded={openAccordion === \"shared\"}\r\n              onChange={() =>\r\n                // setOpenAccordion(openAccordion === \"shared\" ? \"my\" : \"shared\")\r\n                toggleAccodion(\"shared\")\r\n              }\r\n            >\r\n              <AccordionSummary\r\n                expandIcon={<ExpandMoreIcon fontSize=\"small\" />}\r\n              >\r\n                <Typography fontWeight={600}>Shared Filters</Typography>\r\n              </AccordionSummary>\r\n              <Divider sx={{ width: \"100%\" }} />\r\n              <AccordionDetails\r\n                sx={{\r\n                  p: \"9px\",\r\n                  maxHeight: \"230px\",\r\n                  overflowY: \"auto\",\r\n                  scrollbarWidth: \"thin\",\r\n                }}\r\n              >\r\n                {renderSharedFilters(sharedFilters)}\r\n              </AccordionDetails>\r\n            </Accordion>\r\n          </Box>\r\n        </>\r\n      )}\r\n\r\n      {/* Edit Component */}\r\n      {editMode && (\r\n        <SavedFilterEditComponent\r\n          columnsData={columnsData}\r\n          dropdownData={dropdownData}\r\n          tableStates={tableStates}\r\n          editMode={editMode}\r\n          setEditMode={setEditMode}\r\n          searchTerm={searchTerm}\r\n          setSearchTerm={setSearchTerm}\r\n          onSaveFilterButtonClick={onSaveFilterButtonClick}\r\n          setDeleteFilterModalOpen={setDeleteFilterModalOpen}\r\n          onChangeFunction={onChangeFunction}\r\n          filterComponentOptions={filterComponentOptions}\r\n        />\r\n      )}\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default SavedFilter;\r\n","import {\r\n  Box,\r\n  FormControl,\r\n  FormControlLabel,\r\n  MenuItem,\r\n  Radio,\r\n  Select,\r\n  SelectChangeEvent,\r\n} from \"@mui/material\";\r\nimport {\r\n  AttributesFilterProps,\r\n  FilterMasterStateProps,\r\n  FilterStateProps,\r\n} from \"../../../types/filter\";\r\nimport CustomSearch from \"./search\";\r\nimport { useMemo } from \"react\";\r\n\r\nconst AttributesFilter = ({\r\n  columnsData,\r\n  tableStates,\r\n  dropdownData,\r\n  searchTerm,\r\n  setSearchTerm,\r\n  tabValue,\r\n  onChangeFunction,\r\n  isFlatJson,\r\n}: AttributesFilterProps) => {\r\n  const { filterMaster, setFilterMaster, filters, setFilters } = tableStates;\r\n\r\n  const selectedAttribute = filterMaster?.attributes?.selected;\r\n\r\n  const currentRadio = useMemo(() => {\r\n    return Array.isArray(filterMaster?.attributes?.radio)\r\n      ? (filterMaster!.attributes!.radio as string[])\r\n      : [];\r\n  }, [filterMaster?.attributes?.radio]);\r\n\r\n  const handleSelectChange = (event: SelectChangeEvent) => {\r\n    const attributeKey = event.target.value as string;\r\n\r\n    const newFilterMasterState = {\r\n      ...filterMaster,\r\n      attributes: {\r\n        ...filterMaster?.attributes,\r\n        selected: attributeKey,\r\n        radio: [],\r\n      },\r\n    };\r\n\r\n    setFilterMaster(newFilterMasterState as FilterMasterStateProps);\r\n\r\n    const newState = {\r\n      filterMaster: newFilterMasterState,\r\n      filters: filters,\r\n    };\r\n\r\n    onChangeFunction && onChangeFunction(newState);\r\n  };\r\n\r\n  const handleSingleRadioSelect = (value: string) => {\r\n    const selectedAttr = filterMaster?.attributes.selected;\r\n    if (!selectedAttr) return;\r\n\r\n    const matchingColumn = columnsData?.column_list?.find(\r\n      (column) => column.datasource_list === selectedAttr\r\n    );\r\n    if (!matchingColumn) return;\r\n\r\n    let updatedFilters: FilterStateProps[] = [...filters];\r\n    let updatedRadio: string[] = [];\r\n\r\n    if (value === \"\") {\r\n      // If deselecting, remove the filter\r\n      updatedFilters = filters?.filter(\r\n        (f) => f.filter_attribute !== matchingColumn.attribute_key\r\n      );\r\n    } else {\r\n      // Else, replace with new single selection\r\n      const defaultOperator =\r\n        columnsData?.operation_list[matchingColumn.element_type]?.[0]?.value ||\r\n        \"in\";\r\n\r\n      const newFilter = {\r\n        ...matchingColumn,\r\n        filter_attribute: matchingColumn.attribute_key,\r\n        filter_operator: defaultOperator,\r\n        filter_value: [value],\r\n      };\r\n\r\n      const exists = filters?.some(\r\n        (f) => f?.filter_attribute === matchingColumn?.attribute_key\r\n      );\r\n      if (exists) {\r\n        updatedFilters = filters?.map((f) =>\r\n          f?.filter_attribute === matchingColumn?.attribute_key ? newFilter : f\r\n        ) as FilterStateProps[];\r\n      } else {\r\n        updatedFilters = [...filters, newFilter] as FilterStateProps[];\r\n      }\r\n\r\n      updatedRadio = [value];\r\n    }\r\n\r\n    setFilters(updatedFilters);\r\n\r\n    const updatedFilterMaster = {\r\n      ...filterMaster,\r\n      attributes: {\r\n        ...filterMaster.attributes,\r\n        radio: updatedRadio,\r\n      },\r\n      activeFilterTabIndex: tabValue as number,\r\n    };\r\n\r\n    setFilterMaster(updatedFilterMaster);\r\n\r\n    onChangeFunction &&\r\n      onChangeFunction({\r\n        filters: updatedFilters,\r\n        filterMaster: updatedFilterMaster,\r\n      });\r\n  };\r\n\r\n  const selectedAttributeOptions = useMemo(() => {\r\n    const selected = columnsData?.column_list?.find(\r\n      (col) => col.datasource_list === selectedAttribute\r\n    )?.attribute_key;\r\n\r\n    return selected ? dropdownData[selected] : [];\r\n  }, [selectedAttribute, dropdownData]);\r\n\r\n  return (\r\n    <Box\r\n      sx={{\r\n        display: \"flex\",\r\n        flexDirection: \"column\",\r\n        gap: \"1.25rem\",\r\n      }}\r\n      className=\"attributes-filter-component-wrapper\"\r\n    >\r\n      {/* Attribute Select Dropdown */}\r\n      <FormControl fullWidth size=\"small\">\r\n        <Select\r\n          value={selectedAttribute || \"\"}\r\n          onChange={handleSelectChange}\r\n          displayEmpty\r\n          renderValue={(selected) => {\r\n            if (!selected) {\r\n              return <span>Select Attribute</span>;\r\n            }\r\n            return columnsData?.column_list?.find(\r\n              (col) => col.datasource_list === selected\r\n            )?.name;\r\n          }}\r\n          sx={{\r\n            \"& .MuiOutlinedInput-root\": {\r\n              borderRadius: \"6px\",\r\n              fontSize: \"14px\",\r\n              bgcolor: \"#fafafa\",\r\n              \"& fieldset\": {\r\n                borderColor: \"#7a5af8 !important\",\r\n              },\r\n              \"&:hover fieldset\": {\r\n                borderColor: \"#7a5af8 !important\",\r\n              },\r\n              \"&.Mui-focused fieldset\": {\r\n                borderColor: \"#7a5af8 !important\",\r\n                boxShadow: \"none\",\r\n              },\r\n            },\r\n            \"& .MuiSelect-select\": {\r\n              padding: \"8px 14px\",\r\n            },\r\n          }}\r\n        >\r\n          {columnsData?.column_list\r\n            ?.filter((column) => column?.element_type?.includes(\"select\"))\r\n            .map((column, index) => (\r\n              <MenuItem\r\n                key={index}\r\n                value={column.datasource_list}\r\n                disabled={column.datasource_list === selectedAttribute}\r\n              >\r\n                {column.name}\r\n              </MenuItem>\r\n            ))}\r\n        </Select>\r\n      </FormControl>\r\n\r\n      {/* Search and Single Radio Options */}\r\n      <Box>\r\n        {selectedAttribute && (\r\n          <CustomSearch value={searchTerm} onChange={setSearchTerm} />\r\n        )}\r\n\r\n        {dropdownData && (\r\n          <Box\r\n            className=\"attributes-filter-list\"\r\n            sx={{ mt: 2, overflow: \"auto\", maxHeight: \"calc(100dvh - 300px)\" }}\r\n          >\r\n            <FormControl>\r\n              {selectedAttributeOptions\r\n                ?.filter((option) => {\r\n                  if (!searchTerm) return true;\r\n                  return option.label\r\n                    .toLowerCase()\r\n                    .includes(searchTerm.toLowerCase());\r\n                })\r\n                .map((option) => {\r\n                  const isSelected = currentRadio.includes(option.value);\r\n                  // const isSelected = currentFilterValue.includes(option.value);\r\n\r\n                  return (\r\n                    <FormControlLabel\r\n                      key={option.value}\r\n                      control={\r\n                        <Radio\r\n                          checked={isSelected}\r\n                          onClick={() =>\r\n                            isSelected\r\n                              ? handleSingleRadioSelect(\"\")\r\n                              : handleSingleRadioSelect(option.value)\r\n                          }\r\n                        />\r\n                      }\r\n                      label={option.label}\r\n                    />\r\n                  );\r\n                })}\r\n            </FormControl>\r\n          </Box>\r\n        )}\r\n      </Box>\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default AttributesFilter;\r\n","export function deepMergeObjects<T>(target: T, source: Partial<T>): T {\r\n  const output = { ...target };\r\n  for (const key in source) {\r\n    if (\r\n      source[key] &&\r\n      typeof source[key] === \"object\" &&\r\n      !Array.isArray(source[key])\r\n    ) {\r\n      output[key] = deepMergeObjects(\r\n        (target as any)[key] || {},\r\n        (source as any)[key]\r\n      );\r\n    } else {\r\n      (output as any)[key] = source[key];\r\n    }\r\n  }\r\n  return output;\r\n}\r\n","import { Box } from \"@mui/material\";\r\nimport { FilterFormComponentProps } from \"../../../types/filter\";\r\nimport MainFilter from \"./main-filter\";\r\nimport SavedFilter from \"./saved-filter\";\r\nimport AttributesFilter from \"./attributes-filter\";\r\n\r\ninterface Props extends FilterFormComponentProps {\r\n  searchTerm: string;\r\n  setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\r\n}\r\n\r\nconst SingleFilterRendering = ({\r\n  columnsData,\r\n  dropdownData,\r\n  tableStates,\r\n  onSaveFilterButtonClick,\r\n  onChangeFunction,\r\n  filterComponentOptions,\r\n  editMode,\r\n  setEditMode,\r\n  setDeleteFilterModalOpen,\r\n  tabValue,\r\n  searchTerm,\r\n  setSearchTerm,\r\n}: Props) => {\r\n  const showFilter = filterComponentOptions?.tabOptions?.showFilter;\r\n\r\n  const commonProps = {\r\n    columnsData,\r\n    dropdownData,\r\n    tableStates,\r\n    onChangeFunction,\r\n  };\r\n\r\n  const editProps = {\r\n    editMode,\r\n    setEditMode,\r\n    setDeleteFilterModalOpen,\r\n    tabValue,\r\n  };\r\n\r\n  const attributesProps = {\r\n    searchTerm,\r\n    setSearchTerm,\r\n    tabValue,\r\n  };\r\n\r\n  return (\r\n    <Box sx={{ padding: \"1.5rem 0.75rem\", height: \"100%\" }}>\r\n      {showFilter === \"main\" && (\r\n        <MainFilter\r\n          {...commonProps}\r\n          onSaveFilterButtonClick={onSaveFilterButtonClick}\r\n          filterComponentOptions={filterComponentOptions}\r\n        />\r\n      )}\r\n\r\n      {showFilter === \"saved\" && (\r\n        <SavedFilter\r\n          {...commonProps}\r\n          {...editProps}\r\n          onSaveFilterButtonClick={onSaveFilterButtonClick}\r\n          filterComponentOptions={filterComponentOptions}\r\n        />\r\n      )}\r\n\r\n      {showFilter === \"attributes\" && (\r\n        <AttributesFilter {...commonProps} {...attributesProps} />\r\n      )}\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default SingleFilterRendering;\r\n","import {\r\n  ChangeEvent,\r\n  Dispatch,\r\n  SetStateAction,\r\n  useEffect,\r\n  useState,\r\n} from \"react\";\r\nimport {\r\n  Box,\r\n  Button,\r\n  Checkbox,\r\n  Dialog,\r\n  DialogContent,\r\n  DialogTitle,\r\n  Divider,\r\n  FormControlLabel,\r\n  IconButton,\r\n  TextField,\r\n  Typography,\r\n} from \"@mui/material\";\r\nimport { CloseIcon } from \"../../../../assets/svg\";\r\nimport {\r\n  FilterFormComponentProps,\r\n  FilterMasterStateProps,\r\n} from \"../../../types/filter\";\r\nimport CalendarTodayIcon from \"@mui/icons-material/CalendarToday\";\r\nimport { USER_ID } from \"../../../libs/utils/common\";\r\n// import { set } from \"react-hook-form\";\r\n\r\nconst primary = \"#7A5AF8\";\r\n\r\ninterface SavedFilterModalViewProps {\r\n  open: boolean;\r\n  onClose: () => void;\r\n  onSave: () => void;\r\n  filterMaster: FilterMasterStateProps | null;\r\n  setFilterMaster: Dispatch<SetStateAction<FilterMasterStateProps | null>>;\r\n  columnsData: FilterFormComponentProps | undefined;\r\n  hasSavedFilters?: boolean;\r\n  forceShowSharingControls?: boolean;\r\n  disableShareFilter?: boolean;\r\n}\r\n\r\nconst SavedFilterModalView = ({\r\n  open,\r\n  onClose,\r\n  onSave,\r\n  filterMaster,\r\n  setFilterMaster,\r\n  columnsData,\r\n  disableShareFilter = false,\r\n  forceShowSharingControls = false,\r\n}: SavedFilterModalViewProps) => {\r\n  const [shareWithTeam, setShareWithTeam] = useState<boolean>(false);\r\n  const [allowTeamEdit, setAllowTeamEdit] = useState<boolean>(false);\r\n  const filterNameValue = filterMaster?.saved_filters?.selectedName ?? \"\";\r\n  const discriptionValue = filterMaster?.saved_filters?.description ?? \"\";\r\n\r\n  const isSaveDisabled =\r\n    !filterNameValue.trim() || (allowTeamEdit && !shareWithTeam);\r\n\r\n  const selectedFilterId = filterMaster?.saved_filters?.selectedId || \"\";\r\n\r\n  // Reset modal state when modal opens for a new filter\r\n  useEffect(() => {\r\n    if (!open) return;\r\n\r\n    const filterId = filterMaster?.saved_filters?.selectedId;\r\n    const filterObj1 = columnsData?.shared_filter?.find(\r\n      (f: any) => f.id === filterId\r\n    );\r\n    // NEW FILTER → RESET everything\r\n    if (!filterId && !filterObj1) {\r\n      setFilterMaster((prev: any) => {\r\n        if (!prev) return prev;\r\n        return {\r\n          ...prev,\r\n          saved_filters: {\r\n            ...(prev.saved_filters ?? {}),\r\n            selectedId: null,\r\n            selectedName: \"\",\r\n            description: \"\",\r\n            is_shared: false,\r\n            is_editable: false,\r\n          },\r\n        };\r\n      });\r\n      setShareWithTeam(false);\r\n      setAllowTeamEdit(false);\r\n      return;\r\n    }\r\n\r\n    // EXISTING FILTER → Load from columnsData.saved_filter\r\n    const filterObj = columnsData?.shared_filter?.find(\r\n      (f: any) => f.id === filterId\r\n    );\r\n    if (filterObj) {\r\n      setFilterMaster((prev) => {\r\n        if (!prev) return prev;\r\n        return {\r\n          ...prev,\r\n          saved_filters: {\r\n            ...(prev.saved_filters ?? {}),\r\n            selectedId: filterId,\r\n            selectedName: filterObj.name || \"\",\r\n            description: filterObj.description || \"\",\r\n            is_shared: filterObj.is_shared || false,\r\n            is_editable: filterObj.is_editable === \"true\",\r\n          },\r\n        };\r\n      });\r\n      // const initialShare = filterObj.is_shared ?? false;\r\n      // const initialAllow = initialShare\r\n      //   ? filterObj.is_editable === \"true\"\r\n      //   : false;\r\n      // setShareWithTeam(initialShare);\r\n      // setAllowTeamEdit(initialAllow);\r\n      const initialShare =\r\n        filterObj.is_shared === true || filterObj.is_shared === \"true\";\r\n      const initialAllow =\r\n        initialShare &&\r\n        (filterObj.is_editable === true || filterObj.is_editable === \"true\");\r\n\r\n      setShareWithTeam(initialShare);\r\n      setAllowTeamEdit(initialAllow);\r\n\r\n      persistPreferences(initialShare, initialAllow);\r\n    }\r\n  }, [\r\n    open,\r\n    columnsData,\r\n    filterMaster?.saved_filters?.selectedId,\r\n    setFilterMaster,\r\n  ]); // Added dependencies for loading\r\n\r\n  // Persist toggle state to filterMaster\r\n  const persistPreferences = (sharedValue: boolean, editableValue: boolean) => {\r\n    setFilterMaster((prev) => {\r\n      if (!prev) return prev;\r\n\r\n      return {\r\n        ...prev,\r\n        saved_filters: {\r\n          ...(prev.saved_filters ?? {}),\r\n          is_shared: sharedValue,\r\n          is_editable: editableValue,\r\n        },\r\n      };\r\n    });\r\n  };\r\n\r\n  // Handle Share Toggle\r\n\r\n  const handleShareToggle = (\r\n    _: ChangeEvent<HTMLInputElement>,\r\n    checked: boolean\r\n  ) => {\r\n    setShareWithTeam(checked);\r\n\r\n    const nextAllow = checked ? allowTeamEdit : false;\r\n    setAllowTeamEdit(nextAllow);\r\n\r\n    persistPreferences(checked, nextAllow);\r\n  };\r\n\r\n  // Handle Allow Edit Toggle\r\n\r\n  const handleAllowEditToggle = (\r\n    _: ChangeEvent<HTMLInputElement>,\r\n    checked: boolean\r\n  ) => {\r\n    if (!shareWithTeam) return; // Cannot enable edit without sharing\r\n\r\n    setAllowTeamEdit(checked);\r\n    persistPreferences(shareWithTeam, checked);\r\n  };\r\n\r\n  const shouldShowSharingControls = forceShowSharingControls || true; // always show\r\n\r\n  const getModalTitle = () => {\r\n    const selectedId = filterMaster?.saved_filters?.selectedId;\r\n\r\n    if (!selectedId) return \"Save Filter\"; // new filter\r\n\r\n    const filterObj = columnsData?.shared_filter?.find(\r\n      (f: any) => f.id === selectedId\r\n    );\r\n    if (filterObj?.is_shared) {\r\n      return \"Shared Filter\";\r\n    }\r\n    return \"My Filter\";\r\n  };\r\n\r\n  const handleSave = () => {\r\n    persistPreferences(shareWithTeam, allowTeamEdit);\r\n    onSave(); // call original save handler\r\n  };\r\n\r\n  // Get the selected filter object from columnsData.saved_filter\r\n  const selectedFilter = columnsData?.shared_filter?.find(\r\n    (f: any) => f.id === selectedFilterId\r\n  );\r\n\r\n  const selectedSavedFilter = columnsData?.shared_filter?.find(\r\n    (f: any) => f.id === selectedFilterId\r\n  );\r\n\r\n  const isOwner = String(selectedSavedFilter?.is_owner) === \"true\";\r\n\r\n  // Check if we should show prefields\r\n  const showPrefields =\r\n    (selectedSavedFilter && selectedSavedFilter.is_editable === \"true\") ||\r\n    selectedSavedFilter;\r\n\r\n  // Disable checkboxes if prefields are shown\r\n  const showCheckboxes = !showPrefields;\r\n\r\n  const isNewFilter = !selectedSavedFilter;\r\n\r\n  const isshow = isOwner;\r\n\r\n  return (\r\n    <Dialog open={open} onClose={onClose} maxWidth=\"sm\" fullWidth>\r\n      <DialogTitle sx={{ display: \"flex\", justifyContent: \"space-between\" }}>\r\n        <Typography fontSize={18} fontWeight={600} marginTop={1}>\r\n          {getModalTitle()}\r\n        </Typography>\r\n        <Box onClick={onClose} sx={{ cursor: \"pointer\" }}>\r\n          <CloseIcon />\r\n        </Box>\r\n      </DialogTitle>\r\n\r\n      <Divider sx={{ mx: \"25px\", my: \"2px\", bgcolor: \"#f9f7f727\" }} />\r\n\r\n      <DialogContent sx={{ pt: 0 }}>\r\n        <Typography my={1} fontSize={\"14px\"}>\r\n          Give a name to this filter so you can easily reuse it later.\r\n        </Typography>\r\n        {/* Filter Name */}\r\n        <Typography mt={2} fontSize={11}>\r\n          Filter Name\r\n        </Typography>\r\n        <TextField\r\n          fullWidth\r\n          size=\"small\"\r\n          value={filterNameValue}\r\n          onChange={(e) =>\r\n            setFilterMaster((prev) => {\r\n              if (!prev) return prev;\r\n              return {\r\n                ...prev,\r\n                saved_filters: {\r\n                  ...(prev.saved_filters ?? {}),\r\n                  selectedName: e.target.value,\r\n                },\r\n              };\r\n            })\r\n          }\r\n          sx={{\r\n            mb: 0,\r\n            \"& .MuiOutlinedInput-root\": {\r\n              width: \"50%\",\r\n              \"& fieldset\": { borderColor: \"#888\" },\r\n              \"&:hover fieldset\": { borderColor: \"black\" },\r\n              \"&.Mui-focused fieldset\": { borderColor: primary },\r\n              \"& .MuiInputBase-input\": { fontSize: \"12px\" },\r\n            },\r\n          }}\r\n        />\r\n        {/* Description */}\r\n        <Typography mt={2} fontSize={11}>\r\n          Description\r\n        </Typography>\r\n        <TextField\r\n          fullWidth\r\n          minRows={3}\r\n          value={discriptionValue}\r\n          size=\"small\"\r\n          sx={{\r\n            mb: 1,\r\n            \"& .MuiOutlinedInput-root\": {\r\n              \"& fieldset\": { borderColor: \"#888\" },\r\n              \"&:hover fieldset\": { borderColor: \"black\" },\r\n              \"&.Mui-focused fieldset\": { borderColor: primary },\r\n            },\r\n          }}\r\n          onChange={(e) => {\r\n            const val = e.target.value;\r\n\r\n            // block more than 200 chars\r\n            if (val.length > 200) return;\r\n\r\n            setFilterMaster((prev) => {\r\n              if (!prev) return prev;\r\n              return {\r\n                ...prev,\r\n                saved_filters: {\r\n                  ...(prev.saved_filters ?? {}),\r\n                  description: val,\r\n                },\r\n              };\r\n            });\r\n          }}\r\n        />\r\n\r\n        <Typography sx={{ mb: 1, fontSize: 12, color: \"#888\" }}>\r\n          (Max. 200 Characters)\r\n        </Typography>\r\n        {/* Sharing Controls */}\r\n        {shouldShowSharingControls &&\r\n          (showCheckboxes || isshow) &&\r\n          !disableShareFilter && (\r\n            <Box\r\n              sx={{\r\n                display: \"flex\",\r\n                flexDirection: \"column\",\r\n                gap: 0.5,\r\n                \"& .MuiFormControlLabel-label\": { fontSize: \"14px\" },\r\n              }}\r\n            >\r\n              <FormControlLabel\r\n                control={\r\n                  <Checkbox\r\n                    size=\"small\"\r\n                    checked={shareWithTeam}\r\n                    onChange={handleShareToggle}\r\n                    sx={{\r\n                      color: \"black\",\r\n                      \"&.Mui-checked\": { color: \"black\" },\r\n                    }}\r\n                  />\r\n                }\r\n                label=\"Share with team member.\"\r\n              />\r\n\r\n              {shareWithTeam && (\r\n                <FormControlLabel\r\n                  control={\r\n                    <Checkbox\r\n                      size=\"small\"\r\n                      checked={allowTeamEdit}\r\n                      onChange={handleAllowEditToggle}\r\n                      sx={{\r\n                        color: \"black\",\r\n                        \"&.Mui-checked\": { color: \"black\" },\r\n                      }}\r\n                    />\r\n                  }\r\n                  label=\"Allow editing to Team member\"\r\n                />\r\n              )}\r\n            </Box>\r\n          )}\r\n        {/* prefields */}\r\n        {showPrefields && !isshow && (\r\n          <Box\r\n            sx={{\r\n              display: \"grid\",\r\n              gridTemplateColumns: \"1fr 1fr\",\r\n              gap: 3,\r\n              mt: 2,\r\n            }}\r\n          >\r\n            <Box>\r\n              <Typography\r\n                sx={{\r\n                  fontSize: \"14px\",\r\n                  fontWeight: 500,\r\n                  color: \"#6b6b6b\",\r\n                  mb: 0.5,\r\n                }}\r\n              >\r\n                Created On*\r\n              </Typography>\r\n\r\n              <TextField\r\n                fullWidth\r\n                size=\"small\"\r\n                value={\r\n                  selectedFilter?.created_date\r\n                    ? new Date(selectedFilter.created_date).toLocaleString()\r\n                    : \"\"\r\n                } // format date\r\n                InputProps={{\r\n                  readOnly: true,\r\n                  endAdornment: (\r\n                    <IconButton size=\"small\">\r\n                      <CalendarTodayIcon fontSize=\"small\" />\r\n                    </IconButton>\r\n                  ),\r\n                  sx: {\r\n                    backgroundColor: \"#0E0C0B0F\",\r\n                    borderRadius: \"4px\",\r\n                  },\r\n                }}\r\n              />\r\n            </Box>\r\n\r\n            <Box>\r\n              <Typography\r\n                sx={{\r\n                  fontSize: \"14px\",\r\n                  fontWeight: 500,\r\n                  color: \"#6b6b6b\",\r\n                  mb: 0.5,\r\n                }}\r\n              >\r\n                Created By*\r\n              </Typography>\r\n              <TextField\r\n                fullWidth\r\n                size=\"small\"\r\n                value={selectedFilter?.created_by || \"\"}\r\n                InputProps={{\r\n                  readOnly: true,\r\n                  sx: {\r\n                    backgroundColor: \"#0E0C0B0F\",\r\n                    borderRadius: \"4px\",\r\n                  },\r\n                }}\r\n              />\r\n            </Box>\r\n\r\n            <Box>\r\n              <Typography\r\n                sx={{\r\n                  fontSize: \"14px\",\r\n                  fontWeight: 500,\r\n                  color: \"#6b6b6b\",\r\n                  mb: 0.5,\r\n                }}\r\n              >\r\n                Modified On*\r\n              </Typography>\r\n\r\n              <TextField\r\n                fullWidth\r\n                size=\"small\"\r\n                value={\r\n                  selectedFilter?.modified_date\r\n                    ? new Date(selectedFilter.modified_date).toLocaleString()\r\n                    : \"\"\r\n                }\r\n                InputProps={{\r\n                  readOnly: true,\r\n                  endAdornment: (\r\n                    <IconButton size=\"small\">\r\n                      <CalendarTodayIcon fontSize=\"small\" />\r\n                    </IconButton>\r\n                  ),\r\n\r\n                  sx: {\r\n                    backgroundColor: \"#0E0C0B0F\",\r\n                    borderRadius: \"4px\",\r\n                  },\r\n                }}\r\n              />\r\n            </Box>\r\n\r\n            <Box>\r\n              <Typography\r\n                sx={{\r\n                  fontSize: \"14px\",\r\n                  fontWeight: 500,\r\n                  color: \"#6b6b6b\",\r\n                  mb: 0.5,\r\n                }}\r\n              >\r\n                Modified By*\r\n              </Typography>\r\n              <TextField\r\n                fullWidth\r\n                size=\"small\"\r\n                value={selectedFilter?.modified_by || \"\"}\r\n                InputProps={{\r\n                  readOnly: true,\r\n                  sx: {\r\n                    backgroundColor: \"#0E0C0B0F\",\r\n                    borderRadius: \"4px\",\r\n                  },\r\n                }}\r\n              />\r\n            </Box>\r\n          </Box>\r\n        )}\r\n        {/* Buttons */}\r\n        <Box\r\n          sx={{ display: \"flex\", justifyContent: \"flex-end\", gap: 1, mt: 3 }}\r\n        >\r\n          <Button\r\n            variant=\"outlined\"\r\n            onClick={onClose}\r\n            sx={{\r\n              borderColor: primary,\r\n              color: primary,\r\n              \"&:hover\": {\r\n                borderColor: primary,\r\n                backgroundColor: \"rgba(122, 90, 248, 0.04)\",\r\n              },\r\n            }}\r\n          >\r\n            Cancel\r\n          </Button>\r\n\r\n          <Button\r\n            variant=\"contained\"\r\n            onClick={handleSave}\r\n            disabled={isSaveDisabled}\r\n            sx={{\r\n              backgroundColor: primary,\r\n              \"&:hover\": { backgroundColor: \"#6A4DE8\" },\r\n              \"&.Mui-disabled\": {\r\n                backgroundColor: \"#d7cefd\",\r\n                color: \"rgba(255, 255, 255, 0.7)\",\r\n              },\r\n            }}\r\n          >\r\n            Save\r\n          </Button>\r\n        </Box>\r\n      </DialogContent>\r\n    </Dialog>\r\n  );\r\n};\r\n\r\nexport default SavedFilterModalView;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Box, IconButton, Typography } from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport {\r\n  FilterComponentOptions,\r\n  FilterDrawerProps,\r\n  FilterMasterStateProps,\r\n} from \"../../types/filter\";\r\nimport ConfirmModal, { InputField } from \"../common/confirm-modal\";\r\nimport CustomTabPanel from \"./components/tabs/custom-tab-panel\";\r\nimport CustomTabs, { TabItem } from \"./components/tabs/index\";\r\nimport MainFilter from \"./components/main-filter\";\r\nimport SavedFilter from \"./components/saved-filter\";\r\nimport AttributesFilter from \"./components/attributes-filter\";\r\nimport { filterStyles } from \"./style\";\r\nimport { deepMergeObjects } from \"../../libs/utils/deep-merge-objects\";\r\nimport SingleFilterRendering from \"./components/single-filter-rendering\";\r\nimport SavedFilterModalView from \"../common/saved-filter-modal\";\r\n\r\nexport function TableFilter({\r\n  onClose,\r\n  columnsData,\r\n  tableStates,\r\n  onDeleteFilter,\r\n  onSaveFilter,\r\n  onUpdateFilter,\r\n  dropdownData,\r\n  onChangeFunction,\r\n  filterComponentOptions,\r\n  isFlatJson,\r\n}: FilterDrawerProps) {\r\n  const [tabValue, setTabValue] = useState(0);\r\n  const [editMode, setEditMode] = useState(false);\r\n\r\n  // remove this\r\n  const [saveFilterModalOpen, setSaveFilterModalOpen] = useState(false);\r\n  const [savedFilterModalOpen, setSavedFilterModalOpen] = useState(false);\r\n\r\n  const [deleteFilterModalOpen, setDeleteFilterModalOpen] = useState(false);\r\n\r\n  const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n\r\n  const {\r\n    filters,\r\n    setFilters,\r\n    filterToDelete,\r\n    filterMaster,\r\n    setFilterMaster,\r\n    setShowFilterOption,\r\n  } = tableStates;\r\n\r\n  const defaultOptions: FilterComponentOptions = {\r\n    showMainHeader: true,\r\n    mainHeaderTitle: \"Filter\",\r\n    showTabs: true,\r\n    tabOptions: {\r\n      isSingleFilter: false,\r\n      disableShareFilter: false,\r\n      isSingleEntity: false,\r\n      showFilter: \"main\",\r\n      mainFilter: {\r\n        showSaveButton: true,\r\n        showClearAllButton: true,\r\n      },\r\n      savedFilter: {\r\n        showBackButton: true,\r\n        editMode: false,\r\n      },\r\n    },\r\n    showMainFilter: true,\r\n    showSavedFilter: true,\r\n    showAttributesFilter: true,\r\n  };\r\n\r\n  const finalComponentOptions = deepMergeObjects<FilterComponentOptions>(\r\n    defaultOptions,\r\n    filterComponentOptions ?? {}\r\n  );\r\n\r\n  const showMainHeader = finalComponentOptions?.showMainHeader;\r\n  const mainHeaderTitle = finalComponentOptions?.mainHeaderTitle;\r\n  const showTabs = finalComponentOptions?.showTabs;\r\n  const showMainFilter = showTabs && finalComponentOptions?.showMainFilter;\r\n  const showSavedFilter = showTabs && finalComponentOptions?.showSavedFilter;\r\n  const showAttributesFilter =\r\n    showTabs && finalComponentOptions?.showAttributesFilter;\r\n  const editModeFromTabOptions =\r\n    finalComponentOptions?.tabOptions?.savedFilter?.editMode;\r\n\r\n  useEffect(() => {\r\n    if (editModeFromTabOptions) {\r\n      setEditMode(editModeFromTabOptions);\r\n    }\r\n  }, [editModeFromTabOptions]);\r\n\r\n  // Map tabs to type\r\n  const tabMapping: TabItem[] = [];\r\n  if (showMainFilter) tabMapping.push({ label: \"Filter\" });\r\n  if (showSavedFilter) tabMapping.push({ label: \"Saved Filter\" });\r\n  if (showAttributesFilter) tabMapping.push({ label: \"Attributes\" });\r\n\r\n  const clearAttributeRadio = () => {\r\n    const newFilterMaster = {\r\n      ...filterMaster,\r\n      attributes: {\r\n        ...filterMaster?.attributes,\r\n        radio: [],\r\n      },\r\n      activeFilterTabIndex: 0,\r\n    };\r\n\r\n    setFilterMaster(newFilterMaster as FilterMasterStateProps);\r\n  };\r\n\r\n  const filterNameInput: InputField = {\r\n    label: \"Filter Name\",\r\n    placeholder: 'e.g., \"Website Leads - This Week\"',\r\n    required: true,\r\n    type: \"text\",\r\n  };\r\n\r\n  const hasSavedFilterRecords = Boolean(columnsData?.saved_filter?.length);\r\n\r\n  // const handleSaveFilterButtonClick = () => {\r\n  //   if (editMode) {\r\n  //     setSavedFilterModalOpen(true);\r\n  //     return;\r\n  //   }\r\n\r\n  //   setSavedFilterModalOpen(true);\r\n  // };\r\n\r\n  // const handleSaveFilterButtonClick = () => {\r\n  //   // Reset filterMaster fields when creating a new filter\r\n  //   if (!editMode) {\r\n  //     setFilterMaster((prev) => ({\r\n  //       ...prev,\r\n  //       saved_filters: {\r\n  //         selectedId: \"\",\r\n  //         selectedName: \"\",\r\n  //         selectedCode: \"\",\r\n  //         description: \"\",\r\n  //         shareWithTeam: false,\r\n  //         allowTeamEdit: false,\r\n  //       },\r\n  //     }));\r\n  //   }\r\n\r\n  //   setSavedFilterModalOpen(true);\r\n  // };\r\n\r\n  const handleSaveFilterButtonClick = () => {\r\n    if (!editMode) {\r\n      setFilterMaster((prev) => {\r\n        if (!prev) return prev;\r\n\r\n        return {\r\n          ...prev,\r\n          saved_filters: {\r\n            ...prev.saved_filters,\r\n            shareWithTeam: false,\r\n            allowTeamEdit: false,\r\n          },\r\n        };\r\n      });\r\n    }\r\n\r\n    setSavedFilterModalOpen(true);\r\n  };\r\n\r\n  const handleSavedFilterModalSave = () => {\r\n    const selectedId = filterMaster?.saved_filters?.selectedId;\r\n    const selectedName = filterMaster?.saved_filters?.selectedName || \"\";\r\n    const description = filterMaster?.saved_filters?.description || \"\";\r\n\r\n    const selectedCode = filterMaster?.saved_filters?.selectedCode;\r\n\r\n    const newFilterMasterState = {\r\n      ...filterMaster,\r\n      saved_filters: {\r\n        ...(filterMaster?.saved_filters ?? {}),\r\n        selectedId,\r\n        selectedName,\r\n        selectedCode,\r\n        description,\r\n      },\r\n    } as FilterMasterStateProps;\r\n\r\n    setFilterMaster(newFilterMasterState);\r\n\r\n    const newState = {\r\n      filterMaster: newFilterMasterState,\r\n      filters,\r\n    };\r\n\r\n    onChangeFunction && onChangeFunction(newState);\r\n\r\n    if (editMode) {\r\n      onUpdateFilter && onUpdateFilter(selectedName);\r\n      const isSingleSavedFilterEditMode =\r\n        filterComponentOptions?.tabOptions?.savedFilter?.editMode;\r\n      if (!isSingleSavedFilterEditMode) {\r\n        setEditMode(false);\r\n      }\r\n    } else {\r\n      onSaveFilter && onSaveFilter(selectedName);\r\n      setTabValue(1);\r\n    }\r\n\r\n    setSavedFilterModalOpen(false);\r\n  };\r\n\r\n  const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {\r\n    const tabType = tabMapping[newValue]?.label;\r\n\r\n    if (tabType === \"Attributes\" && tabMapping[tabValue]?.label === \"Filter\") {\r\n      clearAttributeRadio();\r\n    }\r\n\r\n    setTabValue(newValue);\r\n    if (newValue === 0) {\r\n      setFilterMaster((prev) => {\r\n        if (!prev) return prev;\r\n        return {\r\n          ...prev,\r\n          saved_filters: {\r\n            ...(prev.saved_filters ?? {}),\r\n            selectedId: \"\",\r\n            selectedName: \"\",\r\n            description: \"\",\r\n            is_shared: false,\r\n            is_editable: false,\r\n          },\r\n        };\r\n      });\r\n    }\r\n\r\n    if (tabType === \"Filter\") {\r\n      setEditMode(false);\r\n\r\n      setFilterMaster(\r\n        (prev) =>\r\n          ({ ...prev, activeFilterTabIndex: 0 } as FilterMasterStateProps)\r\n      );\r\n    }\r\n  };\r\n\r\n  const handleTabCrossClick = (index: number) => {\r\n    const tabType = tabMapping[index];\r\n\r\n    setFilters([]);\r\n\r\n    if (tabType?.label === \"Saved Filter\") setEditMode(false);\r\n\r\n    const patches: Partial<FilterMasterStateProps> = {};\r\n\r\n    if (tabType?.label === \"Saved Filter\") {\r\n      patches.saved_filters = {\r\n        ...(filterMaster?.saved_filters ?? {}),\r\n        selectedId: \"\",\r\n        selectedName: \"\",\r\n        selectedCode: \"\",\r\n        is_shared: undefined,\r\n        is_editable: undefined,\r\n      };\r\n    } else if (tabType?.label === \"Attributes\") {\r\n      patches.attributes = { radio: [], selected: \"\" };\r\n    }\r\n\r\n    const newFilterMasterState = {\r\n      ...filterMaster,\r\n      activeFilterTabIndex: -1,\r\n      ...patches,\r\n    } as FilterMasterStateProps;\r\n\r\n    setFilterMaster(newFilterMasterState);\r\n\r\n    onChangeFunction &&\r\n      onChangeFunction({ filterMaster: newFilterMasterState, filters });\r\n  };\r\n\r\n  const commonProps = {\r\n    columnsData,\r\n    tableStates,\r\n    onChangeFunction,\r\n    dropdownData,\r\n  };\r\n\r\n  const savedFilterProps = {\r\n    editMode,\r\n    setEditMode,\r\n    setDeleteFilterModalOpen,\r\n    tabValue,\r\n  };\r\n\r\n  const attributesProps = {\r\n    searchTerm,\r\n    setSearchTerm,\r\n  };\r\n\r\n  return (\r\n    <Box sx={filterStyles.filterContainer}>\r\n      {showMainHeader && (\r\n        <Box sx={filterStyles.filterMainHeader}>\r\n          <Typography variant=\"h6\" fontWeight=\"bold\" fontSize=\"18px\">\r\n            {mainHeaderTitle}\r\n          </Typography>\r\n          <IconButton\r\n            onClick={(e) => {\r\n              e.stopPropagation();\r\n              onClose && onClose();\r\n              setShowFilterOption(false);\r\n            }}\r\n            aria-label=\"close\"\r\n          >\r\n            <CloseIcon fontSize=\"small\" />\r\n          </IconButton>\r\n        </Box>\r\n      )}\r\n\r\n      {showTabs && (\r\n        <CustomTabs\r\n          value={tabValue}\r\n          onChange={handleTabChange}\r\n          tabItems={tabMapping}\r\n          activeFilterIndex={filterMaster?.activeFilterTabIndex ?? 0}\r\n          handleCrossClick={handleTabCrossClick}\r\n        />\r\n      )}\r\n\r\n      {!showTabs && (\r\n        <SingleFilterRendering\r\n          {...commonProps}\r\n          {...savedFilterProps}\r\n          {...attributesProps}\r\n          onSaveFilterButtonClick={handleSaveFilterButtonClick}\r\n          filterComponentOptions={finalComponentOptions}\r\n        />\r\n      )}\r\n\r\n      {showMainFilter && (\r\n        <CustomTabPanel\r\n          value={tabValue}\r\n          index={tabMapping.findIndex((tab) => tab.label === \"Filter\")}\r\n          sx={{ p: \"1.5rem 0.75rem\" }}\r\n        >\r\n          <MainFilter\r\n            {...commonProps}\r\n            onSaveFilterButtonClick={handleSaveFilterButtonClick}\r\n            filterComponentOptions={finalComponentOptions}\r\n            isFlatJson={isFlatJson}\r\n          />\r\n        </CustomTabPanel>\r\n      )}\r\n\r\n      {showSavedFilter && (\r\n        <CustomTabPanel\r\n          value={tabValue}\r\n          index={tabMapping.findIndex((tab) => tab.label === \"Saved Filter\")}\r\n          sx={{ p: \"1.5rem 0.75rem\" }}\r\n        >\r\n          <SavedFilter\r\n            {...commonProps}\r\n            {...savedFilterProps}\r\n            onSaveFilterButtonClick={handleSaveFilterButtonClick}\r\n            filterComponentOptions={finalComponentOptions}\r\n            isFlatJson={isFlatJson}\r\n          />\r\n        </CustomTabPanel>\r\n      )}\r\n\r\n      {showAttributesFilter && (\r\n        <CustomTabPanel\r\n          value={tabValue}\r\n          index={tabMapping.findIndex((tab) => tab.label === \"Attributes\")}\r\n          sx={{ p: \"1.5rem 0.75rem\" }}\r\n        >\r\n          <AttributesFilter\r\n            {...commonProps}\r\n            {...attributesProps}\r\n            tabValue={tabValue}\r\n            isFlatJson={isFlatJson}\r\n          />\r\n        </CustomTabPanel>\r\n      )}\r\n\r\n      {!filterComponentOptions?.isRuleEngine && (\r\n        <ConfirmModal\r\n          open={saveFilterModalOpen}\r\n          onClose={() => setSaveFilterModalOpen(false)}\r\n          title={editMode ? \"Replace Existing Filter ?\" : \"Save Filter\"}\r\n          description={\r\n            editMode\r\n              ? \"You already have a filter applied. Applying a new filter will replace the current one. Do you want to continue?\"\r\n              : \"Give a name to this filter so you can easily reuse it later.\"\r\n          }\r\n          buttons={[\r\n            {\r\n              label: \"Cancel\",\r\n              onClick: () => {\r\n                setSaveFilterModalOpen(false);\r\n              },\r\n              variant: \"outlined\",\r\n              color: \"primary\",\r\n              sx: {\r\n                color: \"#7A5AF8\",\r\n                border: `1px solid #7A5AF8`,\r\n              },\r\n            },\r\n            {\r\n              label: editMode ? \"Replace Filter\" : \"Save\",\r\n              onClick: (inputValue) => {\r\n                if (editMode) {\r\n                  const selectedId = filterMaster?.saved_filters?.selectedId;\r\n                  const selectedName =\r\n                    inputValue || filterMaster?.saved_filters?.selectedName;\r\n                  const selectedCode =\r\n                    filterMaster?.saved_filters?.selectedCode;\r\n                  const description =\r\n                    inputValue || filterMaster?.saved_filters?.description;\r\n\r\n                  const newFilterMasterState = {\r\n                    ...filterMaster,\r\n                    saved_filters: {\r\n                      ...(filterMaster?.saved_filters ?? {}),\r\n                      selectedId,\r\n                      selectedName,\r\n                      selectedCode,\r\n                      description,\r\n                    },\r\n                  } as FilterMasterStateProps;\r\n\r\n                  setFilterMaster(newFilterMasterState);\r\n\r\n                  const newState = {\r\n                    filterMaster: newFilterMasterState,\r\n                    filters: filters,\r\n                  };\r\n\r\n                  onChangeFunction && onChangeFunction(newState);\r\n\r\n                  onUpdateFilter && onUpdateFilter(inputValue || \"\");\r\n                  setSaveFilterModalOpen(false);\r\n                  setEditMode(false);\r\n                  return;\r\n                }\r\n\r\n                onSaveFilter && onSaveFilter(inputValue || \"\");\r\n                setSaveFilterModalOpen(false);\r\n                setTabValue(1);\r\n              },\r\n              variant: \"contained\",\r\n              color: \"primary\",\r\n              sx: {\r\n                color: \"white\",\r\n                backgroundColor: editMode ? \"#7A5AF8\" : \"#7A5AF8\",\r\n              },\r\n            },\r\n          ]}\r\n          input={editMode ? undefined : filterNameInput}\r\n        />\r\n      )}\r\n\r\n      {!filterComponentOptions?.isRuleEngine && (\r\n        <ConfirmModal\r\n          open={deleteFilterModalOpen}\r\n          onClose={() => setDeleteFilterModalOpen(false)}\r\n          title=\"Delete Saved Filter?\"\r\n          description={`You're about to delete the saved filter: \"${\r\n            filterToDelete?.label || \"[Filter Name]\"\r\n          }\". This action cannot be undone. Are you sure you want to continue?`}\r\n          buttons={[\r\n            {\r\n              label: \"Cancel\",\r\n              onClick: () => {\r\n                setDeleteFilterModalOpen(false);\r\n              },\r\n              variant: \"outlined\",\r\n              color: \"primary\",\r\n              sx: { color: \"#7A5AF8\", border: `1px solid #7A5AF8` },\r\n            },\r\n            {\r\n              label: \"Delete\",\r\n              onClick: () => {\r\n                onDeleteFilter && onDeleteFilter();\r\n                setDeleteFilterModalOpen(false);\r\n                setEditMode && setEditMode(false);\r\n              },\r\n              variant: \"contained\",\r\n              sx: {\r\n                color: \"white\",\r\n                backgroundColor: \"#f63d68\",\r\n                \"&:hover\": { backgroundColor: \"#f63d68\" },\r\n              },\r\n            },\r\n          ]}\r\n          maxWidth=\"xs\"\r\n        />\r\n      )}\r\n\r\n      {filterComponentOptions?.isRuleEngine && (\r\n        <ConfirmModal\r\n          open={saveFilterModalOpen}\r\n          onClose={() => setSaveFilterModalOpen(false)}\r\n          title={\r\n            editMode\r\n              ? filterComponentOptions?.recordFilterComponentProps?.edit\r\n                  ?.title || \"Replace Existing Filter ?\"\r\n              : filterComponentOptions?.recordFilterComponentProps?.save\r\n                  ?.title || \"Save Filter\"\r\n          }\r\n          description={\r\n            editMode\r\n              ? filterComponentOptions?.recordFilterComponentProps?.edit\r\n                  ?.description ||\r\n                \"You already have a filter applied. Applying a new filter will replace the current one. Do you want to continue?\"\r\n              : filterComponentOptions?.recordFilterComponentProps?.save\r\n                  ?.description ||\r\n                \"Give a name to this filter so you can easily reuse it later.\"\r\n          }\r\n          buttons={[\r\n            {\r\n              label:\r\n                filterComponentOptions?.recordFilterComponentProps?.save.button\r\n                  ?.primary || \"Cancel\",\r\n              onClick: () => {\r\n                setSaveFilterModalOpen(false);\r\n              },\r\n              variant: \"outlined\",\r\n              color: \"primary\",\r\n              sx: {\r\n                color: \"#7A5AF8\",\r\n                border: `1px solid #7A5AF8`,\r\n              },\r\n            },\r\n            {\r\n              label: editMode\r\n                ? filterComponentOptions?.recordFilterComponentProps?.edit\r\n                    .button?.secondary || \"Replace Filter\"\r\n                : filterComponentOptions?.recordFilterComponentProps?.save\r\n                    .button?.secondary || \"Save\",\r\n              onClick: (inputValue) => {\r\n                if (editMode) {\r\n                  const selectedId = filterMaster?.saved_filters?.selectedId;\r\n                  const selectedName =\r\n                    inputValue || filterMaster?.saved_filters?.selectedName;\r\n                  const selectedCode =\r\n                    filterMaster?.saved_filters?.selectedCode;\r\n\r\n                  const newFilterMasterState = {\r\n                    ...filterMaster,\r\n                    saved_filters: {\r\n                      ...(filterMaster?.saved_filters ?? {}),\r\n                      selectedId,\r\n                      selectedName,\r\n                      selectedCode,\r\n                    },\r\n                  } as FilterMasterStateProps;\r\n\r\n                  setFilterMaster(newFilterMasterState);\r\n\r\n                  const newState = {\r\n                    filterMaster: newFilterMasterState,\r\n                    filters: filters,\r\n                  };\r\n\r\n                  onChangeFunction && onChangeFunction(newState);\r\n\r\n                  onUpdateFilter && onUpdateFilter(inputValue || \"\");\r\n                  setSaveFilterModalOpen(false);\r\n                  let isSingleSavedFilterEditMode =\r\n                    filterComponentOptions?.tabOptions?.savedFilter?.editMode;\r\n                  if (!isSingleSavedFilterEditMode) setEditMode(false);\r\n                  return;\r\n                }\r\n\r\n                onSaveFilter && onSaveFilter(inputValue || \"\");\r\n                setSaveFilterModalOpen(false);\r\n                setTabValue(1);\r\n              },\r\n              variant: \"contained\",\r\n              color: \"primary\",\r\n              sx: {\r\n                color: \"white\",\r\n                backgroundColor: editMode ? \"#7A5AF8\" : \"#7A5AF8\",\r\n              },\r\n            },\r\n          ]}\r\n          input={editMode ? undefined : filterNameInput}\r\n        />\r\n      )}\r\n\r\n      {filterComponentOptions?.isRuleEngine && (\r\n        <ConfirmModal\r\n          open={deleteFilterModalOpen}\r\n          onClose={() => setDeleteFilterModalOpen(false)}\r\n          title={\r\n            filterComponentOptions?.recordFilterComponentProps?.delete.title ||\r\n            \"Delete Saved Filter?\"\r\n          }\r\n          description={\r\n            filterComponentOptions?.recordFilterComponentProps?.delete\r\n              .description ||\r\n            `You're about to delete the saved filter: \"${\r\n              filterToDelete?.label || \"[Filter Name]\"\r\n            }\". This action cannot be undone. Are you sure you want to continue?`\r\n          }\r\n          buttons={[\r\n            {\r\n              label:\r\n                filterComponentOptions?.recordFilterComponentProps?.delete\r\n                  .button?.primary || \"Cancel\",\r\n              onClick: () => {\r\n                setDeleteFilterModalOpen(false);\r\n              },\r\n              variant: \"outlined\",\r\n              color: \"primary\",\r\n              sx: { color: \"#7A5AF8\", border: `1px solid #7A5AF8` },\r\n            },\r\n            {\r\n              label:\r\n                filterComponentOptions?.recordFilterComponentProps?.delete\r\n                  .button?.secondary || \"Delete\",\r\n              onClick: () => {\r\n                onDeleteFilter && onDeleteFilter();\r\n                setDeleteFilterModalOpen(false);\r\n                let isSingleSavedFilterEditMode =\r\n                  filterComponentOptions?.tabOptions?.savedFilter?.editMode;\r\n                if (!isSingleSavedFilterEditMode) {\r\n                  setEditMode && setEditMode(false);\r\n                }\r\n              },\r\n              variant: \"contained\",\r\n              sx: {\r\n                color: \"white\",\r\n                backgroundColor: \"#f63d68\",\r\n                \"&:hover\": { backgroundColor: \"#f63d68\" },\r\n              },\r\n            },\r\n          ]}\r\n          maxWidth=\"xs\"\r\n        />\r\n      )}\r\n      <SavedFilterModalView\r\n        open={savedFilterModalOpen}\r\n        onClose={() => setSavedFilterModalOpen(false)}\r\n        onSave={handleSavedFilterModalSave}\r\n        filterMaster={tableStates.filterMaster}\r\n        setFilterMaster={tableStates.setFilterMaster}\r\n        hasSavedFilters={hasSavedFilterRecords}\r\n        columnsData={columnsData}\r\n        disableShareFilter={\r\n          filterComponentOptions?.tabOptions?.disableShareFilter\r\n        }\r\n      />\r\n    </Box>\r\n  );\r\n}\r\n","import { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface VerticalTabStyleProps {\r\n  mainTabsContainer: SxProps<Theme>;\r\n  mainTabContainer: SxProps<Theme>;\r\n  mainTabLabel: SxProps<Theme>;\r\n}\r\n\r\nexport const verticalTabStyles: VerticalTabStyleProps = {\r\n  mainTabsContainer: {\r\n    backgroundColor: \"#FAFAF9\",\r\n    height: \"100%\",\r\n    minWidth: \"6.75rem\",\r\n    position: \"sticky\",\r\n    top: \"0\",\r\n    left: \"0\",\r\n\r\n    \"& .MuiTabs-indicator\": {\r\n      display: \"none\",\r\n    },\r\n  },\r\n\r\n  mainTabContainer: {\r\n    borderRadius: \"0.375rem\",\r\n    padding: \"0.5rem 1.25rem\",\r\n    alignItems: \"flex-start\",\r\n    color: \"rgba(14, 12, 11, 0.9)\",\r\n    textTransform: \"initial\",\r\n    minHeight: \"38px\",\r\n\r\n    \"&.Mui-selected\": {\r\n      backgroundColor: \"rgba(122, 90, 248, 0.16)\",\r\n      color: \"#7A5AF8\",\r\n      borderRadius: \"0.375rem\",\r\n    },\r\n  },\r\n\r\n  mainTabLabel: {},\r\n};\r\n\r\ninterface HorizontalTabStyleProps {\r\n  mainTabsContainer: SxProps<Theme>;\r\n  mainTabContainer: SxProps<Theme>;\r\n  mainTabLabel: SxProps<Theme>;\r\n}\r\n\r\nexport const horizontalTabStyles: HorizontalTabStyleProps = {\r\n  mainTabsContainer: {\r\n    mb: 2,\r\n    \"& .MuiTab-root\": {\r\n      color: \"#0E0C0BE5\",\r\n      textTransform: \"none\",\r\n      fontWeight: 500,\r\n    },\r\n    \"& .Mui-selected\": {\r\n      color: \"#7A5AF8\",\r\n    },\r\n    \"& .MuiTabs-indicator\": {\r\n      backgroundColor: \"#7A5AF8\",\r\n      height: 3,\r\n    },\r\n  },\r\n\r\n  mainTabContainer: {},\r\n\r\n  mainTabLabel: {},\r\n};\r\n","import { Tabs, Tab, TabsProps, Box } from \"@mui/material\";\r\nimport { verticalTabStyles } from \"../styles\";\r\n\r\ninterface StyledTabsProps extends TabsProps {\r\n  tabItems: { label: string }[];\r\n}\r\n\r\nconst CustomVerticalTabs = ({ tabItems, ...props }: StyledTabsProps) => {\r\n  const { value, onChange } = props;\r\n\r\n  return (\r\n    <Tabs\r\n      value={value}\r\n      onChange={onChange}\r\n      aria-label=\"vertical-tabs\"\r\n      orientation=\"vertical\"\r\n      variant=\"scrollable\"\r\n      sx={verticalTabStyles.mainTabsContainer}\r\n      {...props}\r\n    >\r\n      {tabItems.map((tab, idx) => {\r\n        return (\r\n          <Tab\r\n            key={idx}\r\n            sx={verticalTabStyles.mainTabContainer}\r\n            label={\r\n              <Box sx={verticalTabStyles.mainTabLabel}>\r\n                <span>{tab.label}</span>\r\n              </Box>\r\n            }\r\n          />\r\n        );\r\n      })}\r\n    </Tabs>\r\n  );\r\n};\r\n\r\nexport default CustomVerticalTabs;\r\n","import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\n\r\ninterface TabPanelProps {\r\n  children?: React.ReactNode;\r\n  index: number;\r\n  value: number;\r\n}\r\n\r\nconst CustomTabPanel = ({\r\n  children,\r\n  value,\r\n  index,\r\n  ...props\r\n}: TabPanelProps) => {\r\n  return (\r\n    <Box\r\n      role=\"tabpanel\"\r\n      hidden={value !== index}\r\n      id={`simple-tabpanel-${index}`}\r\n      aria-labelledby={`simple-tab-${index}`}\r\n      {...props}\r\n      sx={{ height: \"100%\" }}\r\n    >\r\n      {value === index && children}\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default CustomTabPanel;\r\n","import React from \"react\";\r\nimport { useSortable } from \"@dnd-kit/sortable\";\r\nimport { CSS } from \"@dnd-kit/utilities\";\r\nimport { Box } from \"@mui/material\";\r\nimport { DragIndicator } from \"@mui/icons-material\";\r\n\r\nexport interface SortableFilterItemProps {\r\n  id: string;\r\n  containerId: string;\r\n  children: React.ReactNode;\r\n}\r\n\r\nconst DraggableListItem = ({\r\n  id,\r\n  containerId,\r\n  children,\r\n}: SortableFilterItemProps) => {\r\n  const {\r\n    attributes,\r\n    listeners,\r\n    setNodeRef,\r\n    transform,\r\n    transition,\r\n    isDragging,\r\n  } = useSortable({\r\n    id,\r\n    data: {\r\n      type: \"filter-item\",\r\n      containerId,\r\n      id,\r\n    },\r\n  });\r\n\r\n  const style = {\r\n    transform: CSS.Transform.toString(transform),\r\n    transition,\r\n    opacity: isDragging ? 0.8 : 1,\r\n  };\r\n\r\n  return (\r\n    <Box\r\n      ref={setNodeRef}\r\n      style={style}\r\n      {...attributes}\r\n      sx={{\r\n        display: \"flex\",\r\n        alignItems: \"center\",\r\n        justifyContent: \"space-between\",\r\n        \"&:hover\": { bgcolor: \"#f5f5f5\" },\r\n        borderRadius: 1,\r\n        marginBottom: 1,\r\n        cursor: isDragging ? \"grabbing\" : \"default\",\r\n        boxShadow: isDragging ? \"0 2px 8px rgba(0,0,0,0.1)\" : \"none\",\r\n      }}\r\n    >\r\n      <Box\r\n        {...listeners}\r\n        sx={{ cursor: \"grab\", display: \"flex\", alignItems: \"center\" }}\r\n      >\r\n        <DragIndicator sx={{ mr: 1, color: \"#ccc\" }} />\r\n      </Box>\r\n      {children}\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default DraggableListItem;\r\n","import { SxProps, Theme } from \"@mui/material\";\r\n\r\ninterface DialogStyleProps {\r\n  dialogTitle: SxProps<Theme>;\r\n  dialogContent: SxProps<Theme>;\r\n  dialogActionsButton: SxProps<Theme>;\r\n}\r\n\r\ninterface ListingValuesStyleProps {\r\n  wrapper: SxProps<Theme>;\r\n  heading: SxProps<Theme>;\r\n  button: SxProps<Theme>;\r\n  draggableContainer: SxProps<Theme>;\r\n  draggableCover: SxProps<Theme>;\r\n  itemLabel: SxProps<Theme>;\r\n  headerContainer: SxProps<Theme>;\r\n}\r\ninterface TabStyleProps {\r\n  mainTabsHeader: SxProps<Theme>;\r\n  mainTabSelect: SxProps<Theme>;\r\n  mainTabDropdown: SxProps<Theme>;\r\n  selectDropdownSeparator: SxProps<Theme>;\r\n  checkboxStyle: SxProps<Theme>;\r\n}\r\n\r\nexport const dialogStyles: DialogStyleProps = {\r\n  dialogTitle: {\r\n    backgroundColor: \"#FBFBFC\",\r\n    display: \"flex\",\r\n    justifyContent: \"space-between\",\r\n    alignItems: \"center\",\r\n    padding: \"0.75rem\",\r\n  },\r\n\r\n  dialogContent: {\r\n    display: \"flex\",\r\n    gap: \"1rem\",\r\n    paddingTop: \"1rem !important\",\r\n  },\r\n\r\n  dialogActionsButton: {\r\n    backgroundColor: \"#7A5AF8\",\r\n    color: \"#fff\",\r\n  },\r\n};\r\n\r\nexport const listingValuesStyles: ListingValuesStyleProps = {\r\n  wrapper: {\r\n    border: \"0.5px solid #0E0C0B1F\",\r\n    borderRadius: \"8px\",\r\n    // minHeight: \"10rem\",\r\n    backgroundColor: \"#fdfdfc\",\r\n    zIndex: 10,\r\n    overflow: \"hidden\",\r\n  },\r\n  heading: { fontWeight: 400, color: \"#0E0C0BB2\", fontSize: \"16px\" },\r\n  button: { fontSize: \"13px\", textTransform: \"none\", color: \"#0E0C0BB2\" },\r\n  draggableContainer: {\r\n    maxHeight: 200,\r\n    borderRadius: 1,\r\n    mt: 2,\r\n    transition: \"background-color 0.2s ease\",\r\n  },\r\n  draggableCover: {\r\n    minHeight: \"200px\",\r\n    maxHeight: \"200px\",\r\n    overflowY: \"auto\",\r\n  },\r\n  itemLabel: { display: \"flex\", alignItems: \"center\", flex: 1 },\r\n  headerContainer: {\r\n    display: \"flex\",\r\n    justifyContent: \"space-between\",\r\n    alignItems: \"center\",\r\n    mb: 2,\r\n  },\r\n};\r\n\r\nexport const TabsStyles: TabStyleProps = {\r\n  mainTabsHeader: {\r\n    fontStyle: \"italic\",\r\n    fontWeight: 400,\r\n    fontSize: \"12px\",\r\n    color: \"#0E0C0BB2\",\r\n  },\r\n  mainTabDropdown: {\r\n    display: \"flex\",\r\n    alignItems: \"center\",\r\n    justifyContent: \"space-between\",\r\n    width: \"50%\",\r\n    paddingRight: 1,\r\n  },\r\n  mainTabSelect: {\r\n    width: \"65%\",\r\n    \"& .MuiOutlinedInput-root\": {\r\n      borderRadius: \"6px\",\r\n      \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\r\n        borderColor: \"#7A5AF8\",\r\n      },\r\n    },\r\n  },\r\n\r\n  selectDropdownSeparator: {\r\n    width: \"30%\",\r\n    \"& .MuiOutlinedInput-root\": {\r\n      borderRadius: \"6px\",\r\n      \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\r\n        borderColor: \"#7A5AF8\",\r\n      },\r\n    },\r\n  },\r\n\r\n  checkboxStyle: {\r\n    display: \"flex\",\r\n    flexDirection: \"column\",\r\n  },\r\n};\r\n","import {\r\n  Alert,\r\n  Box,\r\n  Button,\r\n  Grid,\r\n  IconButton,\r\n  Typography,\r\n} from \"@mui/material\";\r\nimport CustomSearch from \"../../filter/components/search/index.tsx\";\r\nimport {\r\n  SortableContext,\r\n  verticalListSortingStrategy,\r\n} from \"@dnd-kit/sortable\";\r\nimport { useDroppable } from \"@dnd-kit/core\";\r\nimport DraggableListItem from \"./draggable-listitem.tsx\";\r\nimport { listingValuesStyles } from \"../style.ts\";\r\nimport Loader from \"../../common/loader/loader.tsx\";\r\nimport { ClosedEyeIcon, EyeIcon } from \"../../../../assets/svg.tsx\";\r\nimport React from \"react\";\r\n``;\r\n\r\ninterface FilterValue {\r\n  label: string;\r\n  value: string;\r\n}\r\n\r\ninterface ListingValuesProps {\r\n  filteredValues: FilterValue[];\r\n  buttonText: string;\r\n  onClick: () => void;\r\n  headerText: string;\r\n  searchTerm?: string;\r\n  setSearchTerm?: React.Dispatch<React.SetStateAction<string>>;\r\n  containerId: string;\r\n  tabsApiDataLoading?: boolean;\r\n  onItemToggle: (\r\n    item: { label: string; value: string },\r\n    fromContainerId: string\r\n  ) => void;\r\n  enableDragAndDrop?: boolean;\r\n  isQuickTabActive?: boolean;\r\n  AlertComponenet?: React.ReactNode;\r\n}\r\n\r\nconst ListingValuesContent = ({\r\n  item,\r\n  containerId,\r\n  onItemToggle,\r\n}: {\r\n  item: FilterValue;\r\n  containerId: string;\r\n  onItemToggle: (\r\n    item: { label: string; value: string },\r\n    fromContainerId: string\r\n  ) => void;\r\n}) => {\r\n  return (\r\n    <Box\r\n      sx={{\r\n        display: \"flex\",\r\n        alignItems: \"center\",\r\n        justifyContent: \"space-between\",\r\n        gap: 1,\r\n        flex: 1,\r\n        color: containerId === \"tabs\" ? \"black\" : \"#9e9d9b\",\r\n      }}\r\n    >\r\n      <Typography>{item.label}</Typography>\r\n      <IconButton size=\"small\" onClick={() => onItemToggle(item, containerId)}>\r\n        {containerId === \"tabs\" ? <EyeIcon /> : <ClosedEyeIcon />}\r\n      </IconButton>\r\n    </Box>\r\n  );\r\n};\r\n\r\nconst ListingValues = ({\r\n  filteredValues,\r\n  buttonText,\r\n  onClick,\r\n  headerText,\r\n  searchTerm,\r\n  setSearchTerm,\r\n  containerId,\r\n  tabsApiDataLoading,\r\n  onItemToggle,\r\n  enableDragAndDrop = true,\r\n  AlertComponenet,\r\n}: ListingValuesProps) => {\r\n  const { setNodeRef } = useDroppable({\r\n    id: containerId,\r\n    data: {\r\n      type: \"container\",\r\n      containerId: containerId,\r\n    },\r\n  });\r\n\r\n  return (\r\n    <Grid size={6} sx={listingValuesStyles.wrapper}>\r\n      {tabsApiDataLoading ? (\r\n        <Loader />\r\n      ) : (\r\n        <>\r\n          <Box\r\n            sx={{\r\n              p: 2,\r\n              // border: \"1px solid #1a191934\",\r\n              backgroundColor: \"#fdfdfc\",\r\n              borderRadius: \"12px\",\r\n              top: 2,\r\n              // height: \"100%\",\r\n            }}\r\n          >\r\n            <Box sx={listingValuesStyles.headerContainer}>\r\n              <Typography variant=\"h6\" sx={listingValuesStyles.heading}>\r\n                {headerText}\r\n              </Typography>\r\n              <Button\r\n                onClick={onClick}\r\n                variant=\"text\"\r\n                size=\"small\"\r\n                sx={listingValuesStyles.button}\r\n                disabled={filteredValues.length === 0}\r\n              >\r\n                {buttonText}\r\n              </Button>\r\n            </Box>\r\n\r\n            {searchTerm !== undefined && setSearchTerm !== undefined && (\r\n              <CustomSearch value={searchTerm} onChange={setSearchTerm} />\r\n            )}\r\n\r\n            <Box ref={setNodeRef} sx={listingValuesStyles.draggableContainer}>\r\n              {enableDragAndDrop ? (\r\n                <SortableContext\r\n                  items={filteredValues.map((item) => item.value)}\r\n                  strategy={verticalListSortingStrategy}\r\n                >\r\n                  <Box sx={listingValuesStyles.draggableCover}>\r\n                    {filteredValues.map((item) => (\r\n                      <DraggableListItem\r\n                        key={item.value}\r\n                        id={item.value}\r\n                        containerId={containerId}\r\n                      >\r\n                        <ListingValuesContent\r\n                          item={item}\r\n                          containerId={containerId}\r\n                          onItemToggle={onItemToggle}\r\n                        />\r\n                      </DraggableListItem>\r\n                    ))}\r\n                  </Box>\r\n                </SortableContext>\r\n              ) : (\r\n                <Box sx={listingValuesStyles.draggableCover}>\r\n                  {filteredValues?.length > 0 &&\r\n                    filteredValues.map((item) => (\r\n                      <ListingValuesContent\r\n                        key={item.value}\r\n                        item={item}\r\n                        containerId={containerId}\r\n                        onItemToggle={onItemToggle}\r\n                      />\r\n                    ))}\r\n                </Box>\r\n              )}\r\n            </Box>\r\n          </Box>\r\n          {AlertComponenet && AlertComponenet}\r\n        </>\r\n      )}\r\n    </Grid>\r\n  );\r\n};\r\n\r\nexport default ListingValues;\r\n","import { Alert, Box } from \"@mui/material\";\r\n\r\ninterface InfoAlertProps {\r\n  message: string;\r\n  width?: string | number;\r\n  top?: number | string;\r\n  color?: string;\r\n  zIndex?: number;\r\n  position?: \"absolute\" | \"relative\" | \"fixed\" | \"sticky\";\r\n}\r\n\r\nconst InfoAlert = ({\r\n  message,\r\n  width = \"100%\",\r\n  top = 10,\r\n  color = \"#088AB2\",\r\n  zIndex = -1,\r\n  position = \"absolute\",\r\n}: InfoAlertProps) => {\r\n  return (\r\n    <Box\r\n      sx={{\r\n        fontSize: \"12px\",\r\n        color,\r\n        width,\r\n        height: \"fit-content\",\r\n        position,\r\n        zIndex,\r\n        top,\r\n      }}\r\n    >\r\n      <Alert sx={{ borderRadius: \"12px 12px 0 0 !important\" }} severity=\"info\">\r\n        {message}\r\n      </Alert>\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default InfoAlert;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n  Box,\r\n  Select,\r\n  MenuItem,\r\n  FormControl,\r\n  Typography,\r\n  Checkbox,\r\n  FormControlLabel,\r\n  Grid,\r\n  Alert,\r\n} from \"@mui/material\";\r\n\r\nimport ListingValues from \"../common/listing-values\";\r\nimport {\r\n  DndContext,\r\n  closestCenter,\r\n  KeyboardSensor,\r\n  MouseSensor,\r\n  TouchSensor,\r\n  useSensor,\r\n  useSensors,\r\n  DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport {\r\n  QuickTabConfigProps,\r\n  SettingsQuickTabProps,\r\n} from \"../../../types/filter-settings\";\r\nimport { TabsStyles } from \"../style\";\r\nimport InfoAlert from \"../common/info-alert\";\r\nimport { useFullscreenPopoverContainer } from \"../../../libs/hooks/useFullScreen\";\r\nimport { ColumnItem } from \"./column\";\r\n\r\nconst QuickTab = ({\r\n  filterSettingStates,\r\n  columnsData,\r\n  tabsApiData,\r\n  tabsApiDataLoading,\r\n  activeTab,\r\n  columnTabAttributes,\r\n  isFlatJson,\r\n}: SettingsQuickTabProps) => {\r\n  const {\r\n    settingsData,\r\n    setSettingsData,\r\n    saveButtonError,\r\n    setSaveButtonError,\r\n    columnTabState,\r\n    sortingTabState,\r\n  } = filterSettingStates;\r\n  const { container: fullscreenContainer } = useFullscreenPopoverContainer();\r\n\r\n  const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n  const [currentQuickAttribute, setCurrentQuickAttribute] = useState<string>(\r\n    settingsData?.quick_tab?.attribute || \"\"\r\n  );\r\n\r\n  const quickTabStates = settingsData?.quick_tab as QuickTabConfigProps;\r\n  const mappedColumns: ColumnItem[] =\r\n    columnTabAttributes?.map((column) => ({\r\n      label: column?.name,\r\n      value: column?.attribute_key,\r\n    })) || [];\r\n  // const activeTabIndex = filterSettingStates?.columnTabState?.tabs?.findIndex(\r\n  //   (tab) => tab?.tab_name?.value == activeTab\r\n  //   // tab?.tab_name?.label?.toLowerCase() == activeTab?.toLowerCase()\r\n  // );\r\n  // In case there is no quick tab state from API\r\n  const normalizeTabItem = (item: any) => ({\r\n    label: item.label,\r\n    value: isFlatJson ? item.label : item.value,\r\n  });\r\n  useEffect(() => {\r\n    const stateToArray =\r\n      (quickTabStates && Object.entries(quickTabStates)) || [];\r\n    const isEmptyState = stateToArray.length ? false : true;\r\n\r\n    if (isEmptyState) {\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        quick_tab: {\r\n          ...prev?.quick_tab,\r\n          attribute: columnsData[0]?.value,\r\n          sorting: \"asc\",\r\n        },\r\n      }));\r\n    }\r\n  }, [columnsData]);\r\n\r\n  // When user changes attribute\r\n  useEffect(() => {\r\n    const normalizedTabs = tabsApiData?.map(normalizeTabItem) || [];\r\n    if (\r\n      tabsApiData?.length &&\r\n      !settingsData?.quick_tab?.show_list?.length &&\r\n      !settingsData?.quick_tab?.hide_list?.length\r\n    ) {\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        quick_tab: {\r\n          ...prev?.quick_tab,\r\n          hide_list: normalizedTabs,\r\n          show_list: [],\r\n        },\r\n      }));\r\n\r\n      setCurrentQuickAttribute(settingsData?.quick_tab?.attribute || \"\");\r\n      return;\r\n    }\r\n    if (currentQuickAttribute === settingsData?.quick_tab?.attribute) return;\r\n\r\n    if (tabsApiData?.length) {\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        quick_tab: {\r\n          ...prev?.quick_tab,\r\n          hide_list: normalizedTabs,\r\n          show_list: [],\r\n        },\r\n      }));\r\n\r\n      setCurrentQuickAttribute(settingsData?.quick_tab?.attribute || \"\");\r\n    } else {\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        quick_tab: {\r\n          ...prev?.quick_tab,\r\n          hide_list: [],\r\n          show_list: [],\r\n        },\r\n      }));\r\n\r\n      setCurrentQuickAttribute(\"\");\r\n    }\r\n  }, [tabsApiData]);\r\n\r\n  // Validation when user changes show list or hide list\r\n  useEffect(() => {\r\n    const showList = quickTabStates?.show_list || [];\r\n    const hideList = quickTabStates?.hide_list || [];\r\n\r\n    if (showList || hideList) {\r\n      // Check if showList is valid (between 1 and 5 items)\r\n      const isValidShowList = showList.length > 0 && showList.length <= 5;\r\n      const ERROR_CODE = \"quick_tab_error\";\r\n\r\n      if (!isValidShowList) {\r\n        const errorMessage = {\r\n          type: ERROR_CODE,\r\n          message:\r\n            showList.length === 0\r\n              ? \"Quick Tab: Please select at least one item\"\r\n              : \"Quick Tab: Please select no more than 5 items\",\r\n        };\r\n\r\n        // Check if the error is already present in the messages array\r\n        const hasQuickTabError = saveButtonError?.messages?.some(\r\n          (message) => message.type === ERROR_CODE\r\n        );\r\n\r\n        // Update the error state\r\n\r\n        // Later we can use this to show error message when we will make error logic more simple\r\n        // setSaveButtonError((prev) => {\r\n        //   const otherMessages =\r\n        //     prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n        //     [];\r\n\r\n        //   return {\r\n        //     ...prev,\r\n        //     hasError: true,\r\n        //     messages: hasQuickTabError\r\n        //       ? [...prev?.messages]\r\n        //       : [...otherMessages, errorMessage],\r\n        //   };\r\n        // });\r\n      } else {\r\n        const hasOtherMessages = saveButtonError?.messages?.some(\r\n          (message) => message.type !== ERROR_CODE\r\n        );\r\n        // Reset error state if the list is valid\r\n        // setSaveButtonError((prev) => ({\r\n        //   ...prev,\r\n        //   hasError: hasOtherMessages,\r\n        //   messages:\r\n        //     prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n        //     [],\r\n        // }));\r\n      }\r\n    }\r\n  }, [quickTabStates?.hide_list, quickTabStates?.show_list]);\r\n\r\n  const sortingOptions = [\r\n    { label: \"A-Z\", value: \"asc\" },\r\n    { label: \"Z-A\", value: \"dsc\" },\r\n    { label: \"Count (Ascending)\", value: \"count_asc\" },\r\n    { label: \"Count (Descending)\", value: \"count_dsc\" },\r\n    { label: \"Custom\", value: \"custom\" },\r\n  ];\r\n\r\n  // Convert show_list/hide_list to FilterValue[] for rendering only\r\n\r\n  const constructHideList = () => {\r\n    const normalizedTabs = tabsApiData?.map(normalizeTabItem) || [];\r\n\r\n    // remove items already in show_list (value-safe comparison)\r\n    return normalizedTabs?.filter(\r\n      (tab) => !showListValues?.some((i) => i?.value === tab?.value)\r\n    );\r\n  };\r\n\r\n  const showListValues = quickTabStates?.show_list || [];\r\n  const hideListValues = constructHideList() || [];\r\n\r\n  const sensors = useSensors(\r\n    useSensor(MouseSensor),\r\n    useSensor(TouchSensor),\r\n    useSensor(KeyboardSensor)\r\n  );\r\n\r\n  // Drag and drop logic, update only local state\r\n  const handleDragEnd = (event: DragEndEvent) => {\r\n    const { active, over } = event;\r\n    if (!over) return;\r\n\r\n    const currentContainer = active.data.current?.containerId;\r\n    const overContainer = over.data.current?.containerId;\r\n\r\n    if (!currentContainer || !overContainer) return;\r\n\r\n    let newShowList = [...(quickTabStates.show_list ?? [])];\r\n    let newHideList = [...(quickTabStates.hide_list ?? [])];\r\n\r\n    // -------------------------------------\r\n    // CASE 1: REORDER INSIDE SAME LIST\r\n    // -------------------------------------\r\n    if (currentContainer === overContainer) {\r\n      if (currentContainer === \"list\") {\r\n        const oldIndex = newHideList.findIndex((i) => i.value === active.id);\r\n        const newIndex = newHideList.findIndex((i) => i.value === over.id);\r\n\r\n        if (oldIndex !== -1 && newIndex !== -1) {\r\n          const [removed] = newHideList.splice(oldIndex, 1);\r\n          newHideList.splice(newIndex, 0, removed);\r\n        }\r\n      } else {\r\n        const oldIndex = newShowList.findIndex((i) => i.value === active.id);\r\n        const newIndex = newShowList.findIndex((i) => i.value === over.id);\r\n\r\n        if (oldIndex !== -1 && newIndex !== -1) {\r\n          const [removed] = newShowList.splice(oldIndex, 1);\r\n          newShowList.splice(newIndex, 0, removed);\r\n        }\r\n      }\r\n    }\r\n\r\n    // -------------------------------------\r\n    // CASE 2: MOVE BETWEEN LISTS\r\n    // -------------------------------------\r\n    if (currentContainer !== overContainer) {\r\n      if (currentContainer === \"list\" && overContainer === \"tabs\") {\r\n        if (newShowList.length < 5) {\r\n          const idx = newHideList.findIndex(\r\n            (i) => i.value === String(active.id)\r\n          );\r\n          if (idx !== -1) {\r\n            const item = newHideList.splice(idx, 1)[0];\r\n            newShowList.push(item);\r\n\r\n            // 🌟 ALSO create sorting tab entry if missing\r\n            // if (!settingsData?.sorting?.isDefault) {\r\n            //   const exists = settingsData.sorting?.tabs?.some(\r\n            //     (t) => t.tab_name.value === item.value\r\n            //   );\r\n\r\n            //   if (!exists) {\r\n            //     settingsData?.sorting.tabs.push({\r\n            //       tab_name: item,\r\n            //       sortby: [{ column: \"\", order: \"asc\" }],\r\n            //     });\r\n            //   }\r\n            // }\r\n\r\n            setSettingsData((prev) => {\r\n              let updatedSorting = prev.sorting;\r\n              let updatedColumn = prev.column;\r\n\r\n              // ---------------------------------------------------\r\n              // ⭐ Add to sorting.tabs (if not default and not exist)\r\n              // ---------------------------------------------------\r\n              if (!prev?.sorting?.isDefault) {\r\n                const sortingExists = prev.sorting?.tabs?.some(\r\n                  (t) => t.tab_name.value === item.value\r\n                );\r\n\r\n                if (!sortingExists) {\r\n                  updatedSorting = {\r\n                    ...prev.sorting,\r\n                    tabs: [\r\n                      ...prev.sorting.tabs,\r\n                      {\r\n                        tab_name: item,\r\n                        sortby: [],\r\n                      },\r\n                    ],\r\n                  };\r\n                }\r\n              }\r\n\r\n              // ---------------------------------------------------\r\n              // ⭐ Add to column.tabs (if not default and not exist)\r\n              // ---------------------------------------------------\r\n              if (!prev?.column?.isDefault) {\r\n                const columnExists = prev.column?.tabs?.some(\r\n                  (t) => t.tab_name.value === item.value\r\n                );\r\n\r\n                if (!columnExists) {\r\n                  updatedColumn = {\r\n                    ...prev.column,\r\n                    tabs: [\r\n                      ...prev.column.tabs,\r\n                      {\r\n                        tab_name: item,\r\n                        show_list: mappedColumns,\r\n                        hide_list: [],\r\n                      },\r\n                    ],\r\n                  };\r\n                }\r\n              }\r\n\r\n              // ---------------------------------------------------\r\n              // ⭐ FINAL RETURN\r\n              // ---------------------------------------------------\r\n              return {\r\n                ...prev,\r\n                sorting: updatedSorting,\r\n                column: updatedColumn,\r\n              };\r\n            });\r\n          }\r\n        }\r\n      } else if (currentContainer === \"tabs\" && overContainer === \"list\") {\r\n        const idx = newShowList.findIndex((i) => i.value === String(active.id));\r\n        if (idx !== -1) {\r\n          const item = newShowList.splice(idx, 1)[0];\r\n          newHideList.push(item);\r\n          setSettingsData((prev) => {\r\n            let updatedSorting = prev.sorting;\r\n            let updatedColumn = prev.column;\r\n\r\n            // ---------------------------------------------------\r\n            // Remove from sorting.tabs (if not default)\r\n            // ---------------------------------------------------\r\n            if (!prev?.sorting?.isDefault) {\r\n              updatedSorting = {\r\n                ...prev.sorting,\r\n                tabs: prev?.sorting?.tabs?.filter(\r\n                  (t) => t.tab_name?.value !== item?.value\r\n                ),\r\n              };\r\n            }\r\n\r\n            // ---------------------------------------------------\r\n            // Remove from column.tabs (if not default)\r\n            // ---------------------------------------------------\r\n            if (!prev?.column?.isDefault) {\r\n              updatedColumn = {\r\n                ...prev.column,\r\n                tabs: prev?.column?.tabs?.filter(\r\n                  (t) => t.tab_name?.value !== item?.value\r\n                ),\r\n              };\r\n            }\r\n\r\n            // ---------------------------------------------------\r\n            // ⭐ FINAL RETURN\r\n            // ---------------------------------------------------\r\n            return {\r\n              ...prev,\r\n              sorting: updatedSorting,\r\n              column: updatedColumn,\r\n            };\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    // ----------------------------------------------------------\r\n    // ⭐ APPLY MASTER UPDATE (with isDefault CHECK for columns)\r\n    // ----------------------------------------------------------\r\n    setSettingsData((prev) => {\r\n      let updatedColumn = prev.column;\r\n\r\n      // -----------------------------------------\r\n      // ⭐ COLUMN REORDER (only if NOT default)\r\n      // -----------------------------------------\r\n      if (!prev?.column?.isDefault) {\r\n        updatedColumn = {\r\n          ...prev.column,\r\n          tabs: prev.column?.tabs\r\n            ? [...prev.column.tabs].sort((a, b) => {\r\n                const i1 = newShowList.findIndex(\r\n                  (t) => t.value === a.tab_name.value\r\n                );\r\n                const i2 = newShowList.findIndex(\r\n                  (t) => t.value === b.tab_name.value\r\n                );\r\n                return i1 - i2;\r\n              })\r\n            : [],\r\n        };\r\n      }\r\n\r\n      // -----------------------------------------\r\n      // ⭐ SORTING REORDER (same pattern as column)\r\n      // -----------------------------------------\r\n      const updatedSorting = (() => {\r\n        // If default → clear tabs\r\n        if (prev.sorting?.isDefault) {\r\n          return {\r\n            isDefault: true,\r\n            sort_by: prev.sorting?.sort_by || \"asc\",\r\n          };\r\n        }\r\n\r\n        // If custom → reorder tabs based on newShowList\r\n        const sorted = {\r\n          ...prev.sorting,\r\n          tabs: prev.sorting?.tabs\r\n            ? [...prev.sorting.tabs].sort((a, b) => {\r\n                const i1 = newShowList.findIndex(\r\n                  (t) => t.value === a.tab_name.value\r\n                );\r\n                const i2 = newShowList.findIndex(\r\n                  (t) => t.value === b.tab_name.value\r\n                );\r\n                return i1 - i2;\r\n              })\r\n            : [],\r\n        };\r\n        return sorted;\r\n      })();\r\n\r\n      // FINAL RETURN\r\n      return {\r\n        ...prev,\r\n        quick_tab: {\r\n          ...prev.quick_tab,\r\n          show_list: newShowList,\r\n          hide_list: newHideList,\r\n        },\r\n        column: updatedColumn,\r\n        sorting: updatedSorting,\r\n      };\r\n    });\r\n  };\r\n\r\n  const filteredListValues = hideListValues.filter((value) =>\r\n    value?.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n  );\r\n\r\n  // Show All/Hide All logic (local only)\r\n  const handleShowAll = () => {\r\n    setSettingsData((prev) => {\r\n      const currentShowList = prev?.quick_tab?.show_list || [];\r\n      const currentHideList = prev?.quick_tab?.hide_list || [];\r\n\r\n      const availableSlots = 5 - currentShowList.length;\r\n\r\n      if (availableSlots <= 0) return prev;\r\n\r\n      const limitedHideList = currentHideList.slice(0, availableSlots);\r\n\r\n      return {\r\n        ...prev,\r\n        quick_tab: {\r\n          ...prev?.quick_tab,\r\n          show_list: [...currentShowList, ...limitedHideList],\r\n          hide_list: currentHideList.filter(\r\n            (item) => !limitedHideList.some((i) => i.value === item.value)\r\n          ),\r\n        },\r\n      };\r\n    });\r\n  };\r\n\r\n  const handleHideAll = () => {\r\n    setSettingsData((prev) => {\r\n      const updatedQuickTab = {\r\n        ...prev?.quick_tab,\r\n        hide_list: [\r\n          ...(prev?.quick_tab?.hide_list || []),\r\n          ...(prev?.quick_tab?.show_list || []),\r\n        ],\r\n        show_list: [],\r\n      };\r\n\r\n      // Reset only the lists, not the whole structure\r\n      const updatedColumn = (() => {\r\n        if (prev?.column?.isDefault) {\r\n          return {\r\n            ...prev.column,\r\n            show_list: [],\r\n            hide_list: [\r\n              ...(prev.column?.hide_list || []),\r\n              ...(prev.column?.show_list || []),\r\n            ],\r\n          };\r\n        }\r\n\r\n        // Tab mode → reset each tab's field lists\r\n        const updatedTabs = prev?.column?.tabs?.map((t) => ({\r\n          ...t,\r\n          show_list: [],\r\n          hide_list: [...(t.hide_list || []), ...(t.show_list || [])],\r\n        }));\r\n\r\n        return {\r\n          ...prev.column,\r\n          tabs: updatedTabs,\r\n        };\r\n      })();\r\n\r\n      const updatedSorting = (() => {\r\n        // DEFAULT MODE: sorting applies globally\r\n        if (prev.sorting?.isDefault) {\r\n          return {\r\n            ...prev.sorting,\r\n            sortby: [], // reset sort\r\n          };\r\n        }\r\n\r\n        // TAB MODE: need to clear sorting per tab\r\n        return {\r\n          ...prev.sorting,\r\n          tabs: prev.quick_tab?.show_list?.map(() => ({\r\n            sortby: [],\r\n          })),\r\n        };\r\n      })();\r\n\r\n      return {\r\n        ...prev,\r\n        quick_tab: updatedQuickTab,\r\n        column: updatedColumn,\r\n        sorting: updatedSorting,\r\n      };\r\n    });\r\n  };\r\n\r\n  // Checkbox logic (local only)\r\n  const handleShowAllTabChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n    setSettingsData((prev) => ({\r\n      ...prev,\r\n      quick_tab: {\r\n        ...prev?.quick_tab,\r\n        isAllSelected: e.target.checked,\r\n      },\r\n    }));\r\n  };\r\n  const handleCombineOtherTabChange = (\r\n    e: React.ChangeEvent<HTMLInputElement>\r\n  ) => {\r\n    setSettingsData((prev) => ({\r\n      ...prev,\r\n      quick_tab: {\r\n        ...prev?.quick_tab,\r\n        isCombineOther: e.target.checked,\r\n      },\r\n    }));\r\n  };\r\n\r\n  const handleItemToggle = (\r\n    item: { label: string; value: string },\r\n    fromContainerId: string\r\n  ) => {\r\n    setSettingsData((prev) => {\r\n      const toShowList = [...(prev?.quick_tab?.show_list ?? [])];\r\n      const toHideList = [...(prev?.quick_tab?.hide_list ?? [])];\r\n\r\n      let updatedColumn = prev.column; // default (unchanged)\r\n      let updatedSorting = prev.sorting;\r\n\r\n      if (fromContainerId === \"list\") {\r\n        if (toShowList.length >= 5) return prev;\r\n\r\n        const index = toHideList.findIndex((i) => i?.value == item?.value);\r\n        if (index > -1) {\r\n          toHideList.splice(index, 1);\r\n          toShowList.push(item);\r\n          // 🌟 ALSO create sorting tab entry if missing\r\n          if (!sortingTabState?.isDefault) {\r\n            const exists = prev.sorting?.tabs?.some(\r\n              (t) => t.tab_name?.value === item?.value\r\n            );\r\n            if (!exists) {\r\n              updatedSorting = {\r\n                ...prev.sorting,\r\n                tabs: [\r\n                  ...(prev?.sorting?.tabs || []),\r\n                  {\r\n                    tab_name: {\r\n                      label: item?.label,\r\n                      value: item?.value,\r\n                    },\r\n                    sortby: [],\r\n                  },\r\n                ],\r\n              };\r\n            }\r\n          }\r\n          if (!columnTabState?.isDefault) {\r\n            const exists = prev?.column?.tabs?.some(\r\n              (t) => t?.tab_name?.value === item?.value\r\n            );\r\n            if (!exists) {\r\n              updatedColumn = {\r\n                ...prev?.column,\r\n                tabs: [\r\n                  ...(prev?.column?.tabs || []),\r\n                  {\r\n                    tab_name: {\r\n                      label: item?.label,\r\n                      value: item?.value,\r\n                    },\r\n                    show_list: mappedColumns,\r\n                    hide_list: [],\r\n                  },\r\n                ],\r\n              };\r\n            }\r\n          }\r\n        }\r\n      } else if (fromContainerId === \"tabs\") {\r\n        const index = toShowList.findIndex((i) => i?.value == item?.value);\r\n        if (index > -1) {\r\n          toShowList.splice(index, 1);\r\n          toHideList.push(item);\r\n          // let itemIndex =\r\n          //   filterSettingStates?.quickTabStates?.show_list?.findIndex(\r\n          //     (i) => i.value == item.value\r\n          //   );\r\n          // 🔥 REMOVE COLUMN WHEN TAB REMOVED (if not default)\r\n          if (!columnTabState?.isDefault) {\r\n            const updatedTabs = prev?.column?.tabs?.filter(\r\n              (tab) => tab?.tab_name?.value !== item?.value\r\n            );\r\n\r\n            updatedColumn = {\r\n              ...prev?.column,\r\n              tabs: updatedTabs,\r\n            };\r\n          }\r\n\r\n          if (!sortingTabState.isDefault) {\r\n            const updatedSortingTabs = prev?.sorting?.tabs?.filter(\r\n              (tab) => tab?.tab_name?.value != item?.value\r\n            );\r\n            updatedSorting = {\r\n              ...prev?.sorting,\r\n              tabs: updatedSortingTabs,\r\n            };\r\n          }\r\n        }\r\n      }\r\n\r\n      return {\r\n        ...prev,\r\n        quick_tab: {\r\n          ...prev?.quick_tab,\r\n          show_list: toShowList,\r\n          hide_list: toHideList,\r\n        },\r\n        column: updatedColumn,\r\n        sorting: updatedSorting,\r\n      };\r\n    });\r\n  };\r\n\r\n  const enableDND = quickTabStates?.sorting === \"custom\" ? true : false;\r\n\r\n  return (\r\n    <Box\r\n      sx={{\r\n        display: \"flex\",\r\n        flexDirection: \"column\",\r\n        // gap: \"0.5rem\",\r\n        height: \"100%\",\r\n      }}\r\n    >\r\n      <Typography variant=\"caption\" sx={TabsStyles.mainTabsHeader}>\r\n        *Quick filter settings will be reflected in horizontal tabs\r\n      </Typography>\r\n      <Box>\r\n        <Grid sx={{ position: \"relative\" }} container>\r\n          <Grid size={12}>\r\n            <Box>\r\n              <Grid sx={TabsStyles.mainTabDropdown} size={6}>\r\n                <FormControl sx={TabsStyles.mainTabSelect} size=\"small\">\r\n                  <Select\r\n                    value={quickTabStates?.attribute || \"\"}\r\n                    onChange={(e) =>\r\n                      setSettingsData((prev) => ({\r\n                        ...prev,\r\n                        quick_tab: {\r\n                          ...prev?.quick_tab,\r\n                          attribute: e.target.value,\r\n                        },\r\n                        column: prev?.column?.isDefault\r\n                          ? {\r\n                              ...prev?.column,\r\n                              show_list: mappedColumns,\r\n                              hide_list: [],\r\n                            }\r\n                          : {\r\n                              ...prev?.column,\r\n                              tabs: [],\r\n                            },\r\n\r\n                        sorting: prev?.sorting?.isDefault\r\n                          ? {\r\n                              ...prev?.sorting,\r\n                              sortby: [],\r\n                            }\r\n                          : {\r\n                              ...prev?.sorting,\r\n                              tabs: [],\r\n                            },\r\n                      }))\r\n                    }\r\n                    MenuProps={{ container: fullscreenContainer }}\r\n                  >\r\n                    {columnsData?.map((column: any) => (\r\n                      <MenuItem key={column?.value} value={column?.value}>\r\n                        {column?.label}\r\n                      </MenuItem>\r\n                    ))}\r\n                  </Select>\r\n                </FormControl>\r\n                <FormControl\r\n                  sx={TabsStyles.selectDropdownSeparator}\r\n                  size=\"small\"\r\n                >\r\n                  <Select\r\n                    value={quickTabStates?.sorting || \"asc\"}\r\n                    onChange={(e) =>\r\n                      setSettingsData((prev) => ({\r\n                        ...prev,\r\n                        quick_tab: {\r\n                          ...prev?.quick_tab,\r\n                          sorting: e.target.value,\r\n                        },\r\n                      }))\r\n                    }\r\n                    MenuProps={{ container: fullscreenContainer }}\r\n                  >\r\n                    {sortingOptions.map((option) => (\r\n                      <MenuItem key={option?.value} value={option?.value}>\r\n                        {option?.label}\r\n                      </MenuItem>\r\n                    ))}\r\n                  </Select>\r\n                </FormControl>\r\n              </Grid>\r\n            </Box>\r\n          </Grid>\r\n          <Grid>\r\n            {/* <Alert\r\n              severity=\"info\"\r\n              sx={{\r\n                fontSize: \"12px\",\r\n                color: \"#088AB2\",\r\n              }}\r\n            >\r\n              Please select at least 1 and at most 5 values to display as tabs.\r\n            </Alert> */}\r\n          </Grid>\r\n          <DndContext\r\n            sensors={sensors}\r\n            collisionDetection={closestCenter}\r\n            onDragEnd={handleDragEnd}\r\n          >\r\n            <Grid sx={{ mt: 1 }} container spacing={2} size={12}>\r\n              <ListingValues\r\n                buttonText=\"Show All\"\r\n                onClick={handleShowAll}\r\n                headerText=\"List of Values\"\r\n                filteredValues={filteredListValues}\r\n                searchTerm={searchTerm}\r\n                setSearchTerm={setSearchTerm}\r\n                containerId=\"list\"\r\n                tabsApiDataLoading={tabsApiDataLoading}\r\n                onItemToggle={handleItemToggle}\r\n                enableDragAndDrop={enableDND}\r\n              />\r\n              <ListingValues\r\n                buttonText=\"Hide All\"\r\n                onClick={handleHideAll}\r\n                headerText=\"View as Tabs\"\r\n                filteredValues={showListValues}\r\n                containerId=\"tabs\"\r\n                // tabsApiDataLoading={tabsApiDataLoading}\r\n                onItemToggle={handleItemToggle}\r\n                enableDragAndDrop={enableDND}\r\n                AlertComponenet={\r\n                  <InfoAlert\r\n                    message=\"Please select at least 1 and at most 5 values to display as\r\n                                tabs.\"\r\n                    width={\"49.2%\"}\r\n                    // position=\"absolute\"\r\n                    // color=\"#088AB2\"\r\n                    // top={10}\r\n                    zIndex={-1}\r\n                  />\r\n                }\r\n              />\r\n            </Grid>\r\n          </DndContext>\r\n          <Grid size={12}>\r\n            <Box sx={TabsStyles.checkboxStyle}>\r\n              <FormControlLabel\r\n                control={\r\n                  <Checkbox\r\n                    checked={quickTabStates?.isAllSelected || false}\r\n                    onChange={handleShowAllTabChange}\r\n                    size=\"small\"\r\n                    sx={{\r\n                      \"&.Mui-checked\": {\r\n                        color: \"#7A5AF8\",\r\n                      },\r\n                    }}\r\n                  />\r\n                }\r\n                label='Show \"All\" tab'\r\n              />\r\n              <FormControlLabel\r\n                control={\r\n                  <Checkbox\r\n                    checked={quickTabStates?.isCombineOther || false}\r\n                    onChange={handleCombineOtherTabChange}\r\n                    size=\"small\"\r\n                    sx={{\r\n                      \"&.Mui-checked\": {\r\n                        color: \"#7A5AF8\",\r\n                      },\r\n                    }}\r\n                  />\r\n                }\r\n                label='Combine remaining values under \"Other\" tab'\r\n              />\r\n            </Box>\r\n          </Grid>\r\n        </Grid>\r\n      </Box>\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default QuickTab;\r\n","import {\r\n  SxProps,\r\n  ToggleButton,\r\n  ToggleButtonGroup,\r\n  ToggleButtonGroupProps,\r\n} from \"@mui/material\";\r\nimport { ToggleButtonTabsProps } from \"../../../types/filter-settings\";\r\n\r\nconst selectedTabStyle: SxProps = {\r\n  textTransform: \"initial\",\r\n  minWidth: \"5rem\",\r\n  minHeight: \"1.875rem\",\r\n  color: \"#7A5AF8\",\r\n  fontWeight: 500,\r\n  fontSize: \"0.813rem\",\r\n  borderColor: \"#7A5AF8\",\r\n\r\n  \"&.Mui-selected\": {\r\n    backgroundColor: \"#7A5AF8\",\r\n    color: \"#fff\",\r\n    fontWeight: 600,\r\n    \"&:hover\": {\r\n      backgroundColor: \"#6346e2\",\r\n    },\r\n  },\r\n};\r\n\r\nexport default function CustomToggleSwitchButton({\r\n  buttons,\r\n  ...props\r\n}: { buttons: ToggleButtonTabsProps[] } & ToggleButtonGroupProps) {\r\n  return (\r\n    <ToggleButtonGroup\r\n      exclusive\r\n      size=\"small\"\r\n      color=\"primary\"\r\n      sx={{ marginTop: \"-4px\", marginBottom: \"6px\" }}\r\n      {...props}\r\n    >\r\n      {buttons.map((button) => (\r\n        <ToggleButton\r\n          key={button?.label}\r\n          value={button?.value}\r\n          disabled={button?.isDisabled}\r\n          sx={selectedTabStyle}\r\n        >\r\n          {button?.label}\r\n        </ToggleButton>\r\n      ))}\r\n    </ToggleButtonGroup>\r\n  );\r\n}\r\n","import { ToggleButtonTabsProps } from \"../../types/filter-settings\";\r\n\r\nexport const SETTINGS_TABS: { label: string }[] = [\r\n  { label: \"Quick Tab\" },\r\n  { label: \"Column\" },\r\n  { label: \"Sorting\" },\r\n];\r\n\r\nexport const KANBAN_SETTINGS_TABS: { label: string }[] = [\r\n  { label: \"Lane\" },\r\n  { label: \"Swim Lane\" },\r\n];\r\n\r\nexport const LANE_SELECTS = [\r\n  { key: \"stage_group\", value: \"Stage Group\" },\r\n  { key: \"stage\", value: \"Stage\" },\r\n  { key: \"source\", value: \"Source\" },\r\n  { key: \"status\", value: \"Status\" },\r\n];\r\n\r\nexport const TOGGLE_BUTTON_TABS: ToggleButtonTabsProps[] = [\r\n  { label: \"Default\", value: true, isDisabled: false },\r\n  { label: \"Tab Wise\", value: false, isDisabled: false },\r\n];\r\n\r\n","import { Tabs, TabsProps } from \"@mui/material\";\r\nimport { horizontalTabStyles } from \"../styles\";\r\n\r\nconst CustomTabs = ({ children, ...props }: TabsProps) => {\r\n  const { value, onChange } = props;\r\n\r\n  return (\r\n    <Tabs\r\n      value={value}\r\n      onChange={onChange}\r\n      aria-label=\"horizontal-tabs\"\r\n      variant=\"scrollable\"\r\n      sx={horizontalTabStyles.mainTabsContainer}\r\n      {...props}\r\n    >\r\n      {children}\r\n    </Tabs>\r\n  );\r\n};\r\n\r\nexport default CustomTabs;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Box, Typography, Tab, Grid } from \"@mui/material\";\r\n\r\nimport ListingValues from \"../common/listing-values\";\r\nimport {\r\n  DndContext,\r\n  closestCenter,\r\n  KeyboardSensor,\r\n  MouseSensor,\r\n  TouchSensor,\r\n  useSensor,\r\n  useSensors,\r\n  DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport { craftTableFilterSettingsOptionsProps } from \"../../../types/table-options\";\r\nimport CustomToggleSwitchButton from \"./toggle-button-switch\";\r\nimport { FilterColumnsDataProps } from \"../../../types/filter\";\r\nimport { TOGGLE_BUTTON_TABS } from \"../constants\";\r\nimport CustomTabs from \"../tabs/horizontal\";\r\nimport { ColumnTabConfigProps } from \"../../../types/filter-settings\";\r\nimport InfoAlert from \"../common/info-alert\";\r\n\r\nexport interface ColumnItem {\r\n  label: string;\r\n  value: string;\r\n}\r\n\r\nexport interface TabData {\r\n  tab_name: string;\r\n  show_list: ColumnItem[];\r\n  hide_list: ColumnItem[];\r\n}\r\n\r\ninterface ColumnTabProps {\r\n  filterSettingStates: craftTableFilterSettingsOptionsProps;\r\n  columnsData: FilterColumnsDataProps;\r\n  columnTabAttributes?: any[];\r\n  columnTabAttributesLoading?: boolean;\r\n}\r\n\r\nconst ColumnTab = ({\r\n  filterSettingStates,\r\n  columnsData,\r\n  columnTabAttributes,\r\n  columnTabAttributesLoading,\r\n}: ColumnTabProps) => {\r\n  const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n  const [selectedTabIndex, setSelectedTabIndex] = useState<number>(0);\r\n\r\n  const {\r\n    quickTabStates,\r\n    settingsData,\r\n    setSettingsData,\r\n    saveButtonError,\r\n    setSaveButtonError,\r\n  } = filterSettingStates;\r\n  const settingsColumnState = (settingsData?.column ||\r\n    {}) as ColumnTabConfigProps;\r\n  const isColumnDefault = settingsColumnState?.isDefault || false;\r\n  const ERROR_CODE = \"column_error\";\r\n\r\n  /**\r\n   * ? What is this for?\r\n   *\r\n   * Three main conditions are checked here:\r\n   * - If the state is empty, then set the state to default and add all columns in show_list\r\n   * - if Default is selected and Default is empty, then add all columns in show_list\r\n   * - If Default is not selected and tabs is empty, then add all columns in show_list\r\n   *      of their respective tabs\r\n   */\r\n  useEffect(() => {\r\n    const stateToArray = Object.entries(settingsColumnState) || [];\r\n    const isStateEmpty = stateToArray.length ? false : true;\r\n    const isDefaultEmpty =\r\n      settingsColumnState?.show_list?.length ||\r\n      settingsColumnState?.hide_list?.length\r\n        ? false\r\n        : true;\r\n    const isTabWiseEmpty = settingsColumnState?.tabs?.length ? false : true;\r\n\r\n    const mappedColumns: ColumnItem[] =\r\n      columnTabAttributes?.map((column) => ({\r\n        ...column,\r\n        label: column?.name,\r\n        value: column?.attribute_key,\r\n      })) || [];\r\n\r\n    if (isStateEmpty) {\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        column: {\r\n          isDefault: true,\r\n          show_list: mappedColumns,\r\n          hide_list: [],\r\n        },\r\n      }));\r\n    } else if (isColumnDefault && isDefaultEmpty) {\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        column: {\r\n          ...prev.column,\r\n          show_list: mappedColumns,\r\n          hide_list: [],\r\n        },\r\n      }));\r\n    } else if (!isColumnDefault) {\r\n      const mappedTabs: TabData[] = isTabWiseEmpty\r\n        ? quickTabStates?.show_list?.map((tab) => ({\r\n            tab_name: tab,\r\n            show_list: mappedColumns,\r\n            hide_list: [],\r\n          })) || []\r\n        : quickTabStates?.show_list?.map((tab, index) => ({\r\n            tab_name: tab,\r\n            show_list:\r\n              settingsColumnState?.tabs[index]?.show_list || mappedColumns,\r\n            hide_list: settingsColumnState?.tabs[index]?.hide_list || [],\r\n          })) || [];\r\n\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        column: {\r\n          ...prev.column, // ✅ required to satisfy SettingsDataProps\r\n          tabs: mappedTabs, // updating only tabs\r\n        },\r\n      }));\r\n    }\r\n  }, [isColumnDefault]);\r\n\r\n  useEffect(() => {\r\n    const showList = settingsColumnState?.show_list || [];\r\n    const hideList = constructHideList(showList) || [];\r\n\r\n    if (showList || hideList) {\r\n      const isValidShowList = showList?.length > 0;\r\n\r\n      if (!isValidShowList) {\r\n        const hasColumnError = saveButtonError.messages.some(\r\n          (message) => message.type === ERROR_CODE\r\n        );\r\n\r\n        if (!hasColumnError) {\r\n          setSaveButtonError((prev) => ({\r\n            ...prev,\r\n            hasError: true,\r\n            messages: [\r\n              ...prev.messages,\r\n              {\r\n                type: ERROR_CODE,\r\n                message: \"Column: Please select at least one column\",\r\n              },\r\n            ],\r\n          }));\r\n        }\r\n      } else {\r\n        const hasOtherMessages = saveButtonError?.messages?.some(\r\n          (message) => message.type !== ERROR_CODE\r\n        );\r\n\r\n        // Reset error state if the list is valid\r\n        setSaveButtonError((prev) => ({\r\n          ...prev,\r\n          hasError: hasOtherMessages,\r\n          messages:\r\n            prev?.messages?.filter((message) => message.type !== ERROR_CODE) ||\r\n            [],\r\n        }));\r\n      }\r\n    }\r\n  }, [settingsColumnState?.show_list, settingsColumnState?.hide_list]);\r\n\r\n  const sensors = useSensors(\r\n    useSensor(MouseSensor),\r\n    useSensor(TouchSensor),\r\n    useSensor(KeyboardSensor)\r\n  );\r\n\r\n  const handleToggleChange = (\r\n    _: React.MouseEvent<HTMLElement>,\r\n    newValue: boolean\r\n  ) => {\r\n    if (newValue !== null) {\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        column: {\r\n          ...prev.column,\r\n          isDefault: newValue,\r\n        },\r\n      }));\r\n    }\r\n  };\r\n\r\n  const constructHideList = (showList: ColumnItem[] = []): ColumnItem[] => {\r\n    return (\r\n      columnTabAttributes\r\n        ?.map((column) => ({\r\n          label: column?.name,\r\n          value: column?.attribute_key,\r\n          ...column,\r\n        }))\r\n        ?.filter((item) => !showList.some((s) => s.value === item.value)) || []\r\n    );\r\n  };\r\n  const getCurrentLists = () => {\r\n    if (settingsColumnState?.isDefault) {\r\n      return {\r\n        showList: settingsColumnState.show_list || [],\r\n        hideList: constructHideList(settingsColumnState.show_list) || [],\r\n      };\r\n    } else {\r\n      const currentTab = settingsColumnState?.tabs?.[selectedTabIndex];\r\n      return {\r\n        showList: currentTab?.show_list || [],\r\n        hideList:\r\n          constructHideList(currentTab?.show_list) ||\r\n          columnTabAttributes?.map((column) => ({\r\n            label: column?.name,\r\n            value: column?.attribute_key,\r\n          })) ||\r\n          [],\r\n      };\r\n    }\r\n  };\r\n\r\n  const { showList, hideList } = getCurrentLists();\r\n\r\n  const showListValues = showList.map((item) => ({\r\n    value: item.value,\r\n    label: item.label,\r\n    visible: true,\r\n  }));\r\n\r\n  const hideListValues = hideList.map((item) => ({\r\n    value: item.value,\r\n    label: item.label,\r\n    visible: false,\r\n  }));\r\n\r\n  const filteredListValues = hideListValues.filter((value) =>\r\n    value.label.toLowerCase().includes(searchTerm.toLowerCase())\r\n  );\r\n\r\n  const handleItemToggle = (\r\n    item: { label: string; value: string },\r\n    fromContainerId: string\r\n  ) => {\r\n    setSettingsData((prev) => {\r\n      const columnState = prev?.column;\r\n      const isDefault = columnState?.isDefault;\r\n\r\n      // ✅ Get fresh lists\r\n      const current = isDefault\r\n        ? {\r\n            showList: columnState?.show_list || [],\r\n            hideList: constructHideList(columnState?.show_list) || [],\r\n          }\r\n        : {\r\n            showList: columnState?.tabs?.[selectedTabIndex]?.show_list || [],\r\n            hideList:\r\n              constructHideList(\r\n                columnState?.tabs?.[selectedTabIndex]?.hide_list\r\n              ) || [],\r\n          };\r\n\r\n      let newShowList = [...current?.showList];\r\n      let newHideList = [...current?.hideList];\r\n\r\n      if (fromContainerId === \"tabs\") {\r\n        const idx = newShowList.findIndex((i) => i.value === item.value);\r\n        if (idx !== -1) {\r\n          const [moved] = newShowList.splice(idx, 1);\r\n          newHideList.push(moved);\r\n        }\r\n      } else {\r\n        const idx = newHideList.findIndex((i) => i.value === item.value);\r\n        if (idx !== -1) {\r\n          const [moved] = newHideList.splice(idx, 1);\r\n          newShowList.push(moved);\r\n        }\r\n      }\r\n\r\n      if (isDefault) {\r\n        return {\r\n          ...prev,\r\n          column: {\r\n            ...prev.column,\r\n            show_list: newShowList,\r\n            hide_list: newHideList,\r\n          },\r\n        };\r\n      }\r\n\r\n      const updatedTabs = [...(columnState?.tabs || [])];\r\n      updatedTabs[selectedTabIndex] = {\r\n        ...updatedTabs[selectedTabIndex],\r\n        show_list: newShowList,\r\n        hide_list: newHideList,\r\n      };\r\n\r\n      return {\r\n        ...prev,\r\n        column: {\r\n          ...prev.column,\r\n          tabs: updatedTabs,\r\n        },\r\n      };\r\n    });\r\n  };\r\n\r\n  const handleDragEnd = (event: DragEndEvent) => {\r\n    const { active, over } = event;\r\n    if (!over) return;\r\n\r\n    const currentContainer = active.data.current?.containerId;\r\n    const overContainer = over.data.current?.containerId;\r\n    if (!currentContainer || !overContainer) return;\r\n\r\n    const activeItem = [...showList, ...hideList].find(\r\n      (item) => item.value === String(active.id)\r\n    );\r\n    if (!activeItem) return;\r\n\r\n    let newShowList = [...showList];\r\n    let newHideList = [...hideList];\r\n\r\n    if (currentContainer === overContainer) {\r\n      const list = currentContainer === \"list\" ? newHideList : newShowList;\r\n      const oldIndex = list.findIndex(\r\n        (item) => item.value === String(active.id)\r\n      );\r\n      const newIndex = list.findIndex((item) => item.value === String(over.id));\r\n      if (oldIndex !== -1 && newIndex !== -1) {\r\n        const [removed] = list.splice(oldIndex, 1);\r\n        list.splice(newIndex, 0, removed);\r\n      }\r\n    } else {\r\n      if (currentContainer === \"list\" && overContainer === \"tabs\") {\r\n        const idx = newHideList.findIndex(\r\n          (item) => item.value === String(active.id)\r\n        );\r\n        if (idx !== -1) {\r\n          newHideList.splice(idx, 1);\r\n          newShowList.push(activeItem);\r\n        }\r\n      } else if (currentContainer === \"tabs\" && overContainer === \"list\") {\r\n        const idx = newShowList.findIndex(\r\n          (item) => item.value === String(active.id)\r\n        );\r\n        if (idx !== -1) {\r\n          newShowList.splice(idx, 1);\r\n          newHideList.push(activeItem);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (isColumnDefault) {\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        column: {\r\n          ...prev.column,\r\n          show_list: newShowList,\r\n          hide_list: newHideList,\r\n        },\r\n      }));\r\n    } else {\r\n      const updatedTabs = [...(settingsColumnState?.tabs || [])];\r\n      updatedTabs[selectedTabIndex] = {\r\n        ...updatedTabs[selectedTabIndex],\r\n        show_list: newShowList,\r\n        hide_list: newHideList,\r\n      };\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        column: {\r\n          ...prev.column,\r\n          tabs: updatedTabs,\r\n        },\r\n      }));\r\n    }\r\n  };\r\n\r\n  const handleShowAll = () => {\r\n    if (isColumnDefault) {\r\n      // Default mode → update global lists\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        column: {\r\n          ...prev.column,\r\n          show_list: [...showList, ...hideList],\r\n          hide_list: [],\r\n        },\r\n      }));\r\n    } else {\r\n      // Tab mode → update only selected tab\r\n      const updatedTabs = [...(settingsColumnState.tabs || [])];\r\n\r\n      updatedTabs[selectedTabIndex] = {\r\n        ...updatedTabs[selectedTabIndex],\r\n        show_list: [...showList, ...hideList],\r\n        hide_list: [],\r\n      };\r\n\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        column: {\r\n          ...prev.column,\r\n          tabs: updatedTabs,\r\n        },\r\n      }));\r\n    }\r\n  };\r\n\r\n  const handleHideAll = () => {\r\n    if (isColumnDefault) {\r\n      // Default mode → update global lists\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        column: {\r\n          ...prev.column,\r\n          show_list: [],\r\n          hide_list: [...hideList, ...showList],\r\n        },\r\n      }));\r\n    } else {\r\n      // Tab mode → update only selected tab\r\n      const updatedTabs = [...(settingsColumnState.tabs || [])];\r\n\r\n      updatedTabs[selectedTabIndex] = {\r\n        ...updatedTabs[selectedTabIndex],\r\n        show_list: [],\r\n        hide_list: [...hideList, ...showList],\r\n      };\r\n\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        column: {\r\n          ...prev.column,\r\n          tabs: updatedTabs,\r\n        },\r\n      }));\r\n    }\r\n  };\r\n\r\n  const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {\r\n    setSelectedTabIndex(newValue);\r\n  };\r\n\r\n  const hasShowListQuickTabs =\r\n    quickTabStates?.show_list?.length !== 0 || isColumnDefault;\r\n\r\n  return (\r\n    <Box\r\n      sx={{\r\n        display: \"flex\",\r\n        flexDirection: \"column\",\r\n        // gap: \"0.75rem\",\r\n        height: \"100%\",\r\n        position: \"relative\",\r\n      }}\r\n    >\r\n      <Box>\r\n        <Typography variant=\"subtitle2\" sx={{ mb: 1 }}>\r\n          Customize column by\r\n        </Typography>\r\n        <CustomToggleSwitchButton\r\n          buttons={TOGGLE_BUTTON_TABS}\r\n          value={isColumnDefault}\r\n          onChange={handleToggleChange}\r\n        />\r\n      </Box>\r\n\r\n      <Box sx={{ flex: 1 }}>\r\n        {!isColumnDefault && hasShowListQuickTabs && (\r\n          <CustomTabs value={selectedTabIndex} onChange={handleTabChange}>\r\n            {quickTabStates?.show_list?.map(\r\n              (tab: { label: string; value: string }) => (\r\n                <Tab key={tab?.value} label={tab?.label} />\r\n              )\r\n            )}\r\n          </CustomTabs>\r\n        )}\r\n\r\n        {hasShowListQuickTabs ? (\r\n          <DndContext\r\n            sensors={sensors}\r\n            collisionDetection={closestCenter}\r\n            onDragEnd={handleDragEnd}\r\n          >\r\n            <Grid container spacing={2}>\r\n              <ListingValues\r\n                containerId=\"list\"\r\n                headerText=\"Hidden In List\"\r\n                filteredValues={filteredListValues}\r\n                buttonText=\"Show All\"\r\n                onClick={handleShowAll}\r\n                searchTerm={searchTerm}\r\n                setSearchTerm={setSearchTerm}\r\n                onItemToggle={handleItemToggle}\r\n              />\r\n              <ListingValues\r\n                containerId=\"tabs\"\r\n                headerText=\"Show In List\"\r\n                filteredValues={showListValues}\r\n                buttonText=\"Hide All\"\r\n                onClick={handleHideAll}\r\n                onItemToggle={handleItemToggle}\r\n                AlertComponenet={\r\n                  <InfoAlert\r\n                    message={\r\n                      \"Please select at least 1 value to display as tabs.\"\r\n                    }\r\n                    width={\"49.2%\"}\r\n                    // position=\"absolute\"\r\n                    // color=\"#088AB2\"\r\n                    top={93}\r\n                    // zIndex={1}\r\n                  />\r\n                }\r\n              />\r\n            </Grid>\r\n          </DndContext>\r\n        ) : (\r\n          <Typography>View as Tabs empty in Quick Tab</Typography>\r\n        )}\r\n      </Box>\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default ColumnTab;\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport {\r\n  Box,\r\n  Button,\r\n  IconButton,\r\n  MenuItem,\r\n  Select,\r\n  Tab,\r\n  Typography,\r\n} from \"@mui/material\";\r\nimport {\r\n  ColumnTabConfigProps,\r\n  SettingsSortingProps,\r\n  SortingConfigProps,\r\n  SortingConfigSortByProps,\r\n} from \"../../../types/filter-settings\";\r\nimport CustomTabs from \"../tabs/horizontal\";\r\nimport {\r\n  closestCenter,\r\n  DndContext,\r\n  PointerSensor,\r\n  useSensor,\r\n  useSensors,\r\n} from \"@dnd-kit/core\";\r\nimport SortableItem from \"../../sorting-modal.tsx/sorting-item\";\r\nimport {\r\n  arrayMove,\r\n  SortableContext,\r\n  verticalListSortingStrategy,\r\n} from \"@dnd-kit/sortable\";\r\nimport { AddIcon, CloseIcon } from \"../../../../assets/svg\";\r\nimport CustomToggleSwitchButton from \"./toggle-button-switch\";\r\nimport { TOGGLE_BUTTON_TABS } from \"../constants\";\r\n\r\nconst Sorting = ({\r\n  filterSettingStates,\r\n  columnsData,\r\n}: SettingsSortingProps) => {\r\n  const { quickTabStates, saveButtonError, settingsData, setSettingsData } =\r\n    filterSettingStates;\r\n\r\n  const [activeTab, setActiveTab] = useState<string | undefined>(\r\n    quickTabStates?.show_list?.[0]?.value\r\n  );\r\n\r\n  const columnTabState = settingsData?.column as ColumnTabConfigProps;\r\n  const sortingTabState = settingsData?.sorting as SortingConfigProps;\r\n  const isSortingDefault = sortingTabState?.isDefault;\r\n\r\n  const isStateEmpty = useMemo(() => {\r\n    return !sortingTabState || Object.entries(sortingTabState).length === 0;\r\n  }, [sortingTabState]);\r\n\r\n  const isEmptyDefault = useMemo(() => {\r\n    return !isStateEmpty && !sortingTabState?.sortby?.length;\r\n  }, [isStateEmpty, sortingTabState]);\r\n\r\n  const ERROR_CODE = \"sorting_error\";\r\n\r\n  // useEffect(() => {\r\n  //   const emptySortBy: SortingConfigSortByProps[] = [\r\n  //     { column: \"\", order: \"asc\" },\r\n  //   ];\r\n\r\n  //   if (isStateEmpty) {\r\n  //     setSettingsData((prev) => ({\r\n  //       ...prev,\r\n  //       sorting: {\r\n  //         isDefault: true,\r\n  //         sortby: emptySortBy,\r\n  //       },\r\n  //     }));\r\n  //   } else if (isEmptyDefault) {\r\n  //     setSettingsData((prev) => ({\r\n  //       ...prev,\r\n  //       sorting: {\r\n  //         ...prev.sorting,\r\n  //         isDefault: true,\r\n  //       },\r\n  //     }));\r\n\r\n  //     if (!sortingTabState?.isDefault) {\r\n  //       setSettingsData((prev) => ({\r\n  //         ...prev,\r\n  //         sorting: {\r\n  //           ...prev.sorting,\r\n  //           sortby: emptySortBy,\r\n  //         },\r\n  //       }));\r\n  //     }\r\n  //   }\r\n  // }, [\r\n  //   isStateEmpty,\r\n  //   isEmptyDefault,\r\n  //   sortingTabState,\r\n  //   quickTabStates,\r\n  //   setSettingsData,\r\n  // ]);\r\n\r\n  useEffect(() => {\r\n    const emptySortBy: SortingConfigSortByProps[] = [\r\n      { column: \"\", order: \"asc\" },\r\n    ];\r\n\r\n    // CASE 1: Initialize sorting if completely empty\r\n    if (!sortingTabState || Object.keys(sortingTabState).length === 0) {\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        sorting: {\r\n          isDefault: true,\r\n          sortby: [],\r\n        },\r\n      }));\r\n      return;\r\n    }\r\n\r\n    // CASE 2: sorting is default BUT missing sortby\r\n    // if (\r\n    //   (!sortingTabState?.sortby || sortingTabState?.sortby.length === 0) &&\r\n    //   sortingTabState?.isDefault\r\n    // ) {\r\n    //   setSettingsData((prev) => ({\r\n    //     ...prev,\r\n    //     sorting: {\r\n    //       ...prev.sorting,\r\n    //       sortby: emptySortBy,\r\n    //       isDefault: true,\r\n    //     },\r\n    //   }));\r\n    //   return;\r\n    // }\r\n\r\n    //  CASE 3: CUSTOM MODE → Populate tabs automatically\r\n    if (\r\n      sortingTabState?.isDefault === false &&\r\n      (!sortingTabState?.tabs || sortingTabState?.tabs.length === 0)\r\n    ) {\r\n      setSettingsData((prev) => {\r\n        const quickTabs = prev.quick_tab?.show_list || [];\r\n\r\n        const generatedTabs = quickTabs.map((t) => ({\r\n          tab_name: { value: t.value, label: t.label },\r\n          sortby: emptySortBy,\r\n        }));\r\n\r\n        return {\r\n          ...prev,\r\n          sorting: {\r\n            ...prev.sorting,\r\n            tabs: generatedTabs,\r\n          },\r\n        };\r\n      });\r\n    }\r\n  }, []);\r\n\r\n  // sortingTabState.sortby is filtered based on columnTabState.show_list\r\n  // useEffect(() => {\r\n  //   // filter sorting sortby based on column show list\r\n  //   if (columnTabState?.isDefault) {\r\n  //     setSettingsData((prev) => ({\r\n  //       ...prev,\r\n  //       sorting: {\r\n  //         ...prev.sorting,\r\n  //         // remove sortby items that are not in column show list\r\n  //         sortby: prev.sorting?.sortby?.filter((item) =>\r\n  //           columnTabState?.show_list?.some(\r\n  //             (columnItem) => columnItem.value === item.column\r\n  //           )\r\n  //         ),\r\n  //       },\r\n  //     }));\r\n  //   }\r\n  // }, [columnTabState?.show_list]);\r\n\r\n  const sensors = useSensors(useSensor(PointerSensor));\r\n\r\n  const activeTabIndex = columnTabState?.isDefault\r\n    ? quickTabStates?.show_list?.findIndex(\r\n        (tab) =>\r\n          tab?.value === activeTab ||\r\n          tab?.label?.toLowerCase() === activeTab?.toLowerCase()\r\n      )\r\n    : columnTabState?.tabs?.findIndex(\r\n        (tab) =>\r\n          tab?.tab_name?.value == activeTab ||\r\n          tab?.tab_name?.label?.toLowerCase() == activeTab?.toLowerCase()\r\n      );\r\n  /**\r\n   * * What is happening here?\r\n   *\r\n   * * If isDefault is true\r\n   * * - Return the sortby array from the state\r\n   *\r\n   * * If isDefault is false\r\n   * * - Filter tabs array from sortingTabState according to activeTab index\r\n   *\r\n   * * If activeTab is undefined\r\n   * * - Return an empty array\r\n   */\r\n\r\n  const tabSortedList = useMemo(() => {\r\n    return isSortingDefault\r\n      ? sortingTabState?.sortby || [{ column: \"\", order: \"asc\" }]\r\n      : activeTab !== undefined\r\n      ? sortingTabState?.tabs?.[activeTabIndex || 0]?.sortby\r\n        ? sortingTabState?.tabs?.[activeTabIndex || 0]?.sortby\r\n        : []\r\n      : [];\r\n  }, [sortingTabState, activeTab]);\r\n\r\n  const updateSortList = (updated: SortingConfigSortByProps[]) => {\r\n    setSettingsData((prev) => {\r\n      if (prev?.sorting?.isDefault) {\r\n        return { ...prev, sorting: { ...prev?.sorting, sortby: updated } };\r\n      } else {\r\n        const tabs = [...(prev?.sorting?.tabs || [])];\r\n        tabs[activeTabIndex || 0] = {\r\n          ...tabs[activeTabIndex || 0],\r\n          tab_name: settingsData?.column?.tabs?.[activeTabIndex || 0]\r\n            ?.tab_name || {\r\n            label: \"\",\r\n            value: \"\",\r\n          },\r\n          sortby: updated,\r\n        };\r\n        return { ...prev, sorting: { ...prev?.sorting, tabs } };\r\n      }\r\n    });\r\n  };\r\n\r\n  const handleDNDDropdownChange = (\r\n    key: \"column\" | \"order\",\r\n    value: string,\r\n    index: number\r\n  ) => {\r\n    if (!tabSortedList) return;\r\n\r\n    const updated = [...tabSortedList];\r\n    updated[index] = { ...updated[index], [key]: value };\r\n    updateSortList(updated);\r\n  };\r\n\r\n  const handleAddSort = () => {\r\n    if (!tabSortedList) return;\r\n\r\n    const newItem: SortingConfigSortByProps = {\r\n      column: \"\",\r\n      order: \"asc\",\r\n    };\r\n\r\n    updateSortList([...tabSortedList, newItem]);\r\n  };\r\n\r\n  const handleRemove = (columnKey: string) => {\r\n    if (!tabSortedList) return;\r\n\r\n    const updated = tabSortedList.filter((item) => item.column !== columnKey);\r\n    updateSortList(updated);\r\n  };\r\n\r\n  const handleModeChange = (\r\n    _: React.MouseEvent<HTMLElement>,\r\n    value: boolean\r\n  ) => {\r\n    if (value !== null) {\r\n      setSettingsData((prev) => ({\r\n        ...prev,\r\n        sorting: {\r\n          ...prev.sorting,\r\n          isDefault: value,\r\n        },\r\n      }));\r\n    }\r\n  };\r\n\r\n  const handleDragEnd = (event: any) => {\r\n    if (!tabSortedList) return;\r\n\r\n    const { active, over } = event;\r\n    if (!over || active.id === over.id) return;\r\n\r\n    const oldIndex = tabSortedList.findIndex((i) => i.column === active.id);\r\n    const newIndex = tabSortedList.findIndex((i) => i.column === over.id);\r\n\r\n    if (oldIndex !== -1 && newIndex !== -1) {\r\n      const reordered = arrayMove(tabSortedList, oldIndex, newIndex);\r\n      updateSortList(reordered);\r\n    }\r\n  };\r\n\r\n  const hasShowListQuickTabs =\r\n    quickTabStates?.show_list?.length !== 0 || isSortingDefault ? true : false;\r\n\r\n  /**\r\n   * ? What is happening here?\r\n   *\r\n   * If column show list is present then takes it's length\r\n   * else it takes columnsData.column_list length\r\n   *\r\n   * compare it with sortingTabState.sortby.length\r\n   *\r\n   * if both are equal then showAddSortButton is false\r\n   */\r\n  const showAddSortButton = useMemo(() => {\r\n    const stateLength = columnsData?.length ?? 0;\r\n    const sortLength = sortingTabState?.sortby?.length ?? 0;\r\n\r\n    return sortLength !== stateLength;\r\n  }, [columnsData, sortingTabState]);\r\n\r\n  /**\r\n   * ? What is happening here?\r\n   *\r\n   * Check if sorting_error exists in saveButtonError state\r\n   * Check if sortingTabState sortby column is empty\r\n   */\r\n  const isAddSortDisabled = useMemo(() => {\r\n    const hasEmptyColumn = sortingTabState?.sortby?.some(\r\n      (item) => item.column === \"\"\r\n    );\r\n\r\n    return hasEmptyColumn;\r\n  }, [saveButtonError, sortingTabState]);\r\n\r\n  const getCurrentLists = () => {\r\n    if (sortingTabState?.isDefault) {\r\n      return {\r\n        showList:\r\n          columnsData?.map((column: any) => ({\r\n            label: column?.name,\r\n            value: column?.attribute_key,\r\n          })) || [],\r\n        hideList: columnTabState?.hide_list || [],\r\n      };\r\n    } else {\r\n      const currentTab = sortingTabState?.tabs?.[activeTabIndex || 0];\r\n      return {\r\n        showList:\r\n          columnsData?.map((column: any) => ({\r\n            label: column?.name,\r\n            value: column?.attribute_key,\r\n          })) || [],\r\n        // hideList: currentTab?.hide_list || [],\r\n      };\r\n    }\r\n  };\r\n\r\n  const { showList } = getCurrentLists();\r\n\r\n  return (\r\n    <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: \"0.75rem\" }}>\r\n      <Typography>Select attribute(s) you want to sort by</Typography>\r\n\r\n      <CustomToggleSwitchButton\r\n        buttons={TOGGLE_BUTTON_TABS}\r\n        value={isSortingDefault}\r\n        onChange={handleModeChange}\r\n      />\r\n\r\n      {hasShowListQuickTabs ? (\r\n        <>\r\n          <Box>\r\n            {!isSortingDefault && (\r\n              <CustomTabs\r\n                value={activeTab}\r\n                onChange={(_, tab) => setActiveTab(tab)}\r\n              >\r\n                {quickTabStates?.show_list?.map((tab) => (\r\n                  <Tab key={tab?.value} label={tab?.label} value={tab?.value} />\r\n                ))}\r\n              </CustomTabs>\r\n            )}\r\n\r\n            <DndContext\r\n              sensors={sensors}\r\n              collisionDetection={closestCenter}\r\n              onDragEnd={handleDragEnd}\r\n            >\r\n              <SortableContext\r\n                items={tabSortedList?.map((s) => s.column) || []}\r\n                strategy={verticalListSortingStrategy}\r\n              >\r\n                {tabSortedList?.map((sort, index) => (\r\n                  <SortableItem key={sort.column} id={sort.column}>\r\n                    <Box display=\"flex\" gap={1} alignItems=\"center\" mb={1}>\r\n                      <Select\r\n                        value={sort.column}\r\n                        onChange={(e) =>\r\n                          handleDNDDropdownChange(\r\n                            \"column\",\r\n                            e.target.value,\r\n                            index\r\n                          )\r\n                        }\r\n                        size=\"small\"\r\n                        fullWidth\r\n                      >\r\n                        {showList\r\n                          // ?.filter((column) => column.value != \"action\")\r\n                          .map(\r\n                            (\r\n                              column: { label: string; value: string },\r\n                              index: number\r\n                            ) => (\r\n                              <MenuItem\r\n                                key={index}\r\n                                value={column.value}\r\n                                disabled={tabSortedList.some(\r\n                                  (s) => s.column === column?.value\r\n                                )}\r\n                              >\r\n                                {column?.label}\r\n                              </MenuItem>\r\n                            )\r\n                          )}\r\n                      </Select>\r\n                      <Select\r\n                        value={sort.order}\r\n                        onChange={(e) =>\r\n                          handleDNDDropdownChange(\r\n                            \"order\",\r\n                            e.target.value,\r\n                            index\r\n                          )\r\n                        }\r\n                        size=\"small\"\r\n                        fullWidth\r\n                      >\r\n                        <MenuItem value=\"asc\">Ascending</MenuItem>\r\n                        <MenuItem value=\"dsc\">Descending</MenuItem>\r\n                      </Select>\r\n                      <IconButton\r\n                        size=\"small\"\r\n                        onClick={() => handleRemove(sort.column)}\r\n                      >\r\n                        <CloseIcon />\r\n                      </IconButton>\r\n                    </Box>\r\n                  </SortableItem>\r\n                ))}\r\n              </SortableContext>\r\n            </DndContext>\r\n\r\n            {showAddSortButton && (\r\n              <Box>\r\n                <Button\r\n                  onClick={handleAddSort}\r\n                  startIcon={<AddIcon />}\r\n                  variant=\"text\"\r\n                  sx={{\r\n                    fontSize: 13,\r\n                    color: \"#7A5AF8\",\r\n                  }}\r\n                  disabled={isAddSortDisabled}\r\n                >\r\n                  Add Sort\r\n                </Button>\r\n              </Box>\r\n            )}\r\n          </Box>\r\n        </>\r\n      ) : (\r\n        <Typography>View as Tabs empty in Quick Tab</Typography>\r\n      )}\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default Sorting;\r\n","import { Dialog, Slide, styled } from \"@mui/material\";\r\nimport { dialogStyles } from \"../style\";\r\nimport React from \"react\";\r\nimport { TransitionProps } from \"@mui/material/transitions\";\r\n\r\nexport const CustomDialog = styled(Dialog)(({ theme }) => ({\r\n  \"& .MuiPaper-root\": {\r\n    borderRadius: 0,\r\n    height: \"100%\",\r\n  },\r\n  \"& .MuiDialogContent-root\": {\r\n    ...dialogStyles.dialogContent,\r\n    padding: theme.spacing(2),\r\n  },\r\n  \"& .MuiDialogActions-root\": {\r\n    padding: theme.spacing(2),\r\n  },\r\n}));\r\n\r\nexport const DialogTransition = React.forwardRef(function Transition(\r\n  props: TransitionProps & {\r\n    children: React.ReactElement<any, any>;\r\n  },\r\n  ref: React.Ref<unknown>\r\n) {\r\n  return <Slide direction=\"down\" ref={ref} {...props} />;\r\n});\r\n","import { Button, ButtonProps } from \"@mui/material\";\r\nimport { dialogStyles } from \"../style\";\r\ninterface CustomButtonProps extends ButtonProps {}\r\n\r\nconst CustomButton = ({ ...props }: CustomButtonProps) => {\r\n  const customSx = { ...dialogStyles.dialogActionsButton, ...props.sx };\r\n\r\n  return (\r\n    <Button variant=\"contained\" {...props} sx={customSx}>\r\n      {props.children}\r\n    </Button>\r\n  );\r\n};\r\n\r\nexport default CustomButton;\r\n","import { useEffect, useState } from \"react\";\r\nimport {\r\n  Box,\r\n  Select,\r\n  MenuItem,\r\n  FormControl,\r\n  Typography,\r\n  Checkbox,\r\n  FormControlLabel,\r\n  Grid,\r\n} from \"@mui/material\";\r\n\r\nimport ListingValues from \"../common/listing-values\";\r\nimport {\r\n  DndContext,\r\n  closestCenter,\r\n  KeyboardSensor,\r\n  MouseSensor,\r\n  TouchSensor,\r\n  useSensor,\r\n  useSensors,\r\n  DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport { TabsStyles } from \"../style\";\r\nimport { craftTableFilterSettingsOptionsProps } from \"../../../types/table-options\";\r\nimport {\r\n  LEAD_SOURCE,\r\n  STAGE,\r\n  STAGE_GROUP,\r\n} from \"../../../../kanban/constants/kanban-constants\";\r\n\r\nconst Lane = ({\r\n  filterSettingStates,\r\n  tabsApiDataLoading,\r\n  selectAttributeData,\r\n  laneHideListData,\r\n}: {\r\n  filterSettingStates: craftTableFilterSettingsOptionsProps;\r\n  columnsData: any;\r\n  tabsApiData?: { label: string; value: string }[];\r\n  tabsApiDataLoading?: boolean;\r\n  selectAttributeData?: { label: string; value: string }[];\r\n  laneHideListData?: { label: string; value: string }[];\r\n}) => {\r\n  const { kanbanSettingsData, setKanbanSettingsData } = filterSettingStates;\r\n\r\n  const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n  const [currentLaneAttribute, setCurrentLaneAttribute] = useState<string>(\r\n    kanbanSettingsData?.lane?.attribute || \"\"\r\n  );\r\n\r\n  console.log(\"selectAttributeData\", selectAttributeData);\r\n\r\n  useEffect(() => {\r\n    const stateToArray =\r\n      (kanbanSettingsData?.lane && Object.entries(kanbanSettingsData?.lane)) ||\r\n      [];\r\n    const isEmptyState = stateToArray.length ? false : true;\r\n\r\n    if (isEmptyState) {\r\n      setKanbanSettingsData((prev) => ({\r\n        ...prev,\r\n        lane: {\r\n          ...prev?.lane,\r\n          attribute:\r\n            selectAttributeData\r\n              ?.filter(\r\n                (i) => i?.value !== kanbanSettingsData?.swim_lane?.attribute\r\n              )\r\n              ?.find((i) => i?.value == STAGE_GROUP)?.value || \"\",\r\n        },\r\n      }));\r\n    } else {\r\n      if (\r\n        kanbanSettingsData?.swim_lane?.attribute ==\r\n        kanbanSettingsData?.lane?.attribute\r\n      ) {\r\n        setKanbanSettingsData((prev) => ({\r\n          ...prev,\r\n          swim_lane: {\r\n            ...prev?.swim_lane,\r\n            attribute:\r\n              selectAttributeData\r\n                ?.filter(\r\n                  (i) => i?.value !== kanbanSettingsData?.swim_lane?.attribute\r\n                )\r\n                ?.find((i) => i?.value == STAGE_GROUP)?.value || \"\",\r\n            // sorting: \"asc\",\r\n          },\r\n        }));\r\n      }\r\n    }\r\n  }, [selectAttributeData]);\r\n\r\n  useEffect(() => {\r\n    if (currentLaneAttribute === kanbanSettingsData?.lane?.attribute) return;\r\n\r\n    if (laneHideListData?.length) {\r\n      setKanbanSettingsData((prev) => ({\r\n        ...prev,\r\n        lane: {\r\n          ...prev?.lane,\r\n          hide_list: laneHideListData,\r\n          show_list: [],\r\n        },\r\n      }));\r\n\r\n      setCurrentLaneAttribute(kanbanSettingsData?.lane?.attribute || \"\");\r\n    } else {\r\n      setKanbanSettingsData((prev) => ({\r\n        ...prev,\r\n        lane: {\r\n          ...prev?.lane,\r\n          hide_list: [],\r\n          show_list: [],\r\n        },\r\n      }));\r\n\r\n      setCurrentLaneAttribute(\"\");\r\n    }\r\n  }, [laneHideListData]);\r\n\r\n  const sortingOptions = [\r\n    { label: \"A-Z\", value: \"asc\" },\r\n    { label: \"Z-A\", value: \"dsc\" },\r\n    { label: \"Count (Ascending)\", value: \"count_asc\" },\r\n    { label: \"Count (Descending)\", value: \"count_dsc\" },\r\n    { label: \"Custom\", value: \"custom\" },\r\n  ];\r\n\r\n  const isWorkflowAttribute =\r\n    kanbanSettingsData?.lane?.attribute === STAGE_GROUP ||\r\n    kanbanSettingsData?.lane?.attribute === STAGE;\r\n\r\n  const isSourceAttribute = kanbanSettingsData?.lane?.attribute === LEAD_SOURCE;\r\n\r\n  useEffect(() => {\r\n    const attr = kanbanSettingsData?.lane?.attribute;\r\n\r\n    if (attr === STAGE || attr === STAGE_GROUP) {\r\n      // clear sorting\r\n      setKanbanSettingsData((prev: any) => ({\r\n        ...prev,\r\n        lane: {\r\n          ...prev.lane,\r\n          sorting: \"\",\r\n        },\r\n      }));\r\n    } else if (attr === LEAD_SOURCE) {\r\n      setKanbanSettingsData((prev) => ({\r\n        ...prev,\r\n        lane: {\r\n          ...prev.lane,\r\n          sorting: prev.lane?.sorting || \"asc\",\r\n        },\r\n      }));\r\n    }\r\n  }, [kanbanSettingsData?.lane?.attribute]);\r\n\r\n  useEffect(() => {\r\n    if (isSourceAttribute) {\r\n      setKanbanSettingsData((prev) => ({\r\n        ...prev,\r\n        lane: {\r\n          ...prev.lane,\r\n          sorting: prev.lane?.sorting || \"asc\",\r\n        },\r\n      }));\r\n    }\r\n  }, [kanbanSettingsData?.lane?.attribute]);\r\n\r\n  const displaySortingValue = isWorkflowAttribute\r\n    ? \"workflow_sequence\"\r\n    : kanbanSettingsData?.lane?.sorting;\r\n\r\n  const enableDND =\r\n    isSourceAttribute && kanbanSettingsData?.lane?.sorting === \"custom\";\r\n\r\n  const normalizeTabItem = (item: any) => ({\r\n    label: item.label,\r\n    value: item?.value,\r\n  });\r\n\r\n  const constructHideList = () => {\r\n    const normalizedTabs = laneHideListData?.map(normalizeTabItem) || [];\r\n    return normalizedTabs?.filter(\r\n      (tab) => !showListValues?.some((i) => i?.value === tab?.value)\r\n    );\r\n  };\r\n\r\n  const showListValues = kanbanSettingsData?.lane?.show_list || [];\r\n  const hideListValues = constructHideList() || [];\r\n\r\n  const filteredListValues = hideListValues.filter((value: any) =>\r\n    value?.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n  );\r\n\r\n  const sensors = useSensors(\r\n    useSensor(MouseSensor),\r\n    useSensor(TouchSensor),\r\n    useSensor(KeyboardSensor)\r\n  );\r\n\r\n  const handleDragEnd = (event: DragEndEvent) => {\r\n    if (!enableDND) return; // protect reorder when drag is disabled\r\n\r\n    const { active, over } = event;\r\n    if (!over) return;\r\n\r\n    const currentContainer = active.data.current?.containerId;\r\n    const overContainer = over.data.current?.containerId;\r\n\r\n    if (!currentContainer || !overContainer) return;\r\n\r\n    let newShowList = [...(kanbanSettingsData?.lane?.show_list ?? [])];\r\n    let newHideList = [...(kanbanSettingsData?.lane?.hide_list ?? [])];\r\n\r\n    if (currentContainer === overContainer) {\r\n      if (currentContainer === \"list\") {\r\n        const oldIndex = newHideList.findIndex((i) => i.value === active.id);\r\n        const newIndex = newHideList.findIndex((i) => i.value === over.id);\r\n\r\n        if (oldIndex !== -1 && newIndex !== -1) {\r\n          const [removed] = newHideList.splice(oldIndex, 1);\r\n          newHideList.splice(newIndex, 0, removed);\r\n        }\r\n      } else {\r\n        const oldIndex = newShowList.findIndex((i) => i.value === active.id);\r\n        const newIndex = newShowList.findIndex((i) => i.value === over.id);\r\n\r\n        if (oldIndex !== -1 && newIndex !== -1) {\r\n          const [removed] = newShowList.splice(oldIndex, 1);\r\n          newShowList.splice(newIndex, 0, removed);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (currentContainer !== overContainer) {\r\n      if (currentContainer === \"list\" && overContainer === \"tabs\") {\r\n        const idx = newHideList.findIndex((i) => i.value === String(active.id));\r\n        if (idx !== -1) {\r\n          const item = newHideList.splice(idx, 1)[0];\r\n          newShowList.push(item);\r\n        }\r\n      } else if (currentContainer === \"tabs\" && overContainer === \"list\") {\r\n        const idx = newShowList.findIndex((i) => i.value === String(active.id));\r\n        if (idx !== -1) {\r\n          const item = newShowList.splice(idx, 1)[0];\r\n          newHideList.push(item);\r\n        }\r\n      }\r\n    }\r\n\r\n    setKanbanSettingsData((prev) => ({\r\n      ...prev,\r\n      lane: {\r\n        ...prev.lane,\r\n        show_list: newShowList,\r\n        hide_list: newHideList,\r\n      },\r\n    }));\r\n  };\r\n\r\n  const handleShowAll = () => {\r\n    setKanbanSettingsData((prev) => ({\r\n      ...prev,\r\n      lane: {\r\n        ...prev?.lane,\r\n        show_list: [\r\n          ...(prev?.lane?.show_list || []),\r\n          ...(prev?.lane?.hide_list || []),\r\n        ],\r\n        hide_list: [],\r\n      },\r\n    }));\r\n  };\r\n\r\n  const handleHideAll = () => {\r\n    setKanbanSettingsData((prev) => ({\r\n      ...prev,\r\n      lane: {\r\n        ...prev?.lane,\r\n        hide_list: [\r\n          ...(prev?.lane?.hide_list || []),\r\n          ...(prev?.lane?.show_list || []),\r\n        ],\r\n        show_list: [],\r\n      },\r\n    }));\r\n  };\r\n\r\n  const handleItemToggle = (\r\n    item: { label: string; value: string },\r\n    fromContainerId: string\r\n  ) => {\r\n    setKanbanSettingsData((prev) => {\r\n      const toShowList = [...(kanbanSettingsData?.lane?.show_list ?? [])];\r\n      const toHideList = [...(kanbanSettingsData?.lane?.hide_list ?? [])];\r\n\r\n      if (fromContainerId === \"list\") {\r\n        const index = toHideList.findIndex((i) => i.value == item.value);\r\n        if (index > -1) {\r\n          toHideList.splice(index, 1);\r\n          toShowList.push(item);\r\n        }\r\n      } else if (fromContainerId === \"tabs\") {\r\n        const index = toShowList.findIndex((i) => i.value == item.value);\r\n        if (index > -1) {\r\n          toShowList.splice(index, 1);\r\n          toHideList.push(item);\r\n        }\r\n      }\r\n      return {\r\n        ...prev,\r\n        lane: {\r\n          ...prev?.lane,\r\n          show_list: toShowList,\r\n          hide_list: toHideList,\r\n        },\r\n      };\r\n    });\r\n  };\r\n\r\n  return (\r\n    <Box sx={{ display: \"flex\", flexDirection: \"column\", height: \"100%\" }}>\r\n      <Typography variant=\"caption\" sx={TabsStyles.mainTabsHeader}>\r\n        **Quick filter settings will be reflected in vertical lanes\r\n      </Typography>\r\n\r\n      <Grid sx={{ position: \"relative\" }} container>\r\n        {/* Attribute + Sort */}\r\n        <Grid size={12}>\r\n          <Grid sx={TabsStyles.mainTabDropdown} size={6}>\r\n            <FormControl sx={TabsStyles.mainTabSelect} size=\"small\">\r\n              <Select\r\n                value={kanbanSettingsData?.lane?.attribute || \"\"}\r\n                onChange={(e) =>\r\n                  setKanbanSettingsData((prev) => ({\r\n                    ...prev,\r\n                    lane: {\r\n                      ...prev?.lane,\r\n                      attribute: e.target.value,\r\n                    },\r\n                  }))\r\n                }\r\n              >\r\n                {selectAttributeData\r\n                  ?.filter(\r\n                    (i) => i?.value !== kanbanSettingsData?.swim_lane?.attribute\r\n                  )\r\n                  ?.map((lane: any) => (\r\n                    <MenuItem key={lane?.key} value={lane?.value}>\r\n                      {lane?.label}\r\n                    </MenuItem>\r\n                  ))}\r\n              </Select>\r\n            </FormControl>\r\n\r\n            <FormControl sx={TabsStyles.selectDropdownSeparator} size=\"small\">\r\n              <Select\r\n                value={displaySortingValue || \"\"}\r\n                disabled={isWorkflowAttribute}\r\n                onChange={(e) => {\r\n                  if (!isWorkflowAttribute) {\r\n                    const value = e.target.value as\r\n                      | \"asc\"\r\n                      | \"dsc\"\r\n                      | \"count_asc\"\r\n                      | \"count_dsc\"\r\n                      | \"custom\";\r\n\r\n                    setKanbanSettingsData((prev) => ({\r\n                      ...prev,\r\n                      lane: {\r\n                        ...prev?.lane,\r\n                        sorting: value,\r\n                      },\r\n                    }));\r\n                  }\r\n                }}\r\n              >\r\n                {isWorkflowAttribute && (\r\n                  <MenuItem value=\"workflow_sequence\">\r\n                    Workflow Sequence\r\n                  </MenuItem>\r\n                )}\r\n\r\n                {!isWorkflowAttribute &&\r\n                  sortingOptions.map((option) => (\r\n                    <MenuItem key={option.value} value={option.value}>\r\n                      {option.label}\r\n                    </MenuItem>\r\n                  ))}\r\n              </Select>\r\n            </FormControl>\r\n          </Grid>\r\n        </Grid>\r\n\r\n        {/* LISTING + DRAG */}\r\n        <DndContext\r\n          sensors={sensors}\r\n          collisionDetection={closestCenter}\r\n          onDragEnd={handleDragEnd}\r\n        >\r\n          <Grid sx={{ mt: 2 }} container spacing={2} size={12}>\r\n            <ListingValues\r\n              buttonText=\"Show All\"\r\n              onClick={handleShowAll}\r\n              headerText=\"List of Values\"\r\n              filteredValues={filteredListValues}\r\n              searchTerm={searchTerm}\r\n              setSearchTerm={setSearchTerm}\r\n              containerId=\"list\"\r\n              tabsApiDataLoading={tabsApiDataLoading}\r\n              onItemToggle={handleItemToggle}\r\n              enableDragAndDrop={enableDND}\r\n            />\r\n\r\n            <ListingValues\r\n              buttonText=\"Hide All\"\r\n              onClick={handleHideAll}\r\n              headerText=\"View as Lanes\"\r\n              filteredValues={showListValues}\r\n              containerId=\"tabs\"\r\n              onItemToggle={handleItemToggle}\r\n              enableDragAndDrop={enableDND}\r\n            />\r\n          </Grid>\r\n        </DndContext>\r\n\r\n        {/* SUBLANE CHECKBOX */}\r\n        {kanbanSettingsData?.lane?.attribute === STAGE_GROUP && (\r\n          <Grid size={12}>\r\n            <Box sx={TabsStyles.checkboxStyle}>\r\n              <FormControlLabel\r\n                control={\r\n                  <Checkbox\r\n                    checked={kanbanSettingsData?.lane?.isSubLane || false}\r\n                    onChange={(e) =>\r\n                      setKanbanSettingsData((prev) => ({\r\n                        ...prev,\r\n                        lane: {\r\n                          ...prev?.lane,\r\n                          isSubLane: e.target.checked,\r\n                        },\r\n                      }))\r\n                    }\r\n                    size=\"small\"\r\n                  />\r\n                }\r\n                label=\"Show Sublane\"\r\n              />\r\n            </Box>\r\n          </Grid>\r\n        )}\r\n\r\n        {kanbanSettingsData?.lane?.attribute === STAGE_GROUP &&\r\n          kanbanSettingsData?.lane?.isSubLane && (\r\n            <Grid size={12}>\r\n              <Grid sx={TabsStyles.mainTabDropdown} size={6}>\r\n                <FormControl sx={TabsStyles.mainTabSelect} size=\"small\">\r\n                  <Select value=\"Stage\">\r\n                    <MenuItem value=\"Stage\">Stage</MenuItem>\r\n                  </Select>\r\n                </FormControl>\r\n              </Grid>\r\n            </Grid>\r\n          )}\r\n      </Grid>\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default Lane;\r\n","import { useEffect, useState } from \"react\";\r\nimport {\r\n  Box,\r\n  Select,\r\n  MenuItem,\r\n  FormControl,\r\n  Typography,\r\n  Grid,\r\n} from \"@mui/material\";\r\n\r\nimport ListingValues from \"../common/listing-values\";\r\nimport {\r\n  DndContext,\r\n  closestCenter,\r\n  KeyboardSensor,\r\n  MouseSensor,\r\n  TouchSensor,\r\n  useSensor,\r\n  useSensors,\r\n  DragEndEvent,\r\n} from \"@dnd-kit/core\";\r\nimport { TabsStyles } from \"../style\";\r\nimport { craftTableFilterSettingsOptionsProps } from \"../../../types/table-options\";\r\nimport {\r\n  LEAD_SOURCE,\r\n  LEAD_STATUS,\r\n} from \"../../../../kanban/constants/kanban-constants\";\r\n\r\nconst SwimLane = ({\r\n  filterSettingStates,\r\n  tabsApiDataLoading,\r\n  selectSwinLandData,\r\n  swimLaneHideListData,\r\n}: {\r\n  filterSettingStates: craftTableFilterSettingsOptionsProps;\r\n  columnsData: any;\r\n  tabsApiData?: { label: string; value: string }[];\r\n  tabsApiDataLoading?: boolean;\r\n  selectSwinLandData?: { label: string; value: string }[];\r\n  swimLaneHideListData?: { label: string; value: string }[];\r\n}) => {\r\n  const { kanbanSettingsData, setKanbanSettingsData } = filterSettingStates;\r\n\r\n  const [searchTerm, setSearchTerm] = useState<string>(\"\");\r\n  const [currentSwimLaneAttribute, setCurrentSwimLaneAttribute] =\r\n    useState<string>(kanbanSettingsData?.swim_lane?.attribute || \"\");\r\n\r\n  const isStatusAttribute =\r\n    kanbanSettingsData?.swim_lane?.attribute === LEAD_STATUS ||\r\n    kanbanSettingsData?.swim_lane?.attribute === \"status\";\r\n  const isSourceAttribute =\r\n    kanbanSettingsData?.swim_lane?.attribute === LEAD_SOURCE;\r\n\r\n  useEffect(() => {\r\n    if (isStatusAttribute) {\r\n      setKanbanSettingsData((prev) => ({\r\n        ...prev,\r\n        swim_lane: {\r\n          ...prev.swim_lane,\r\n          sorting: \"sort_by\",\r\n        },\r\n      }));\r\n    }\r\n  }, [kanbanSettingsData?.swim_lane?.attribute]);\r\n\r\n  useEffect(() => {\r\n    if (!isSourceAttribute) return;\r\n\r\n    setKanbanSettingsData((prev) => ({\r\n      ...prev,\r\n      swim_lane: {\r\n        ...prev.swim_lane,\r\n        sorting: \"count_dsc\",\r\n      },\r\n    }));\r\n  }, [isSourceAttribute]);\r\n\r\n  useEffect(() => {\r\n    const stateToArray =\r\n      (kanbanSettingsData?.swim_lane &&\r\n        Object.entries(kanbanSettingsData?.swim_lane)) ||\r\n      [];\r\n    const isEmptyState = stateToArray.length ? false : true;\r\n\r\n    if (isEmptyState) {\r\n      setKanbanSettingsData((prev) => ({\r\n        ...prev,\r\n        swim_lane: {\r\n          ...prev?.swim_lane,\r\n          attribute: selectSwinLandData\r\n            ?.filter((i) => i?.value !== kanbanSettingsData?.lane?.attribute)\r\n            ?.find((i) => i?.value == LEAD_STATUS || i?.value == \"status\")\r\n            ?.value,\r\n          // sorting: \"asc\",\r\n        },\r\n      }));\r\n    } else {\r\n      if (\r\n        kanbanSettingsData?.swim_lane?.attribute ==\r\n        kanbanSettingsData?.lane?.attribute\r\n      ) {\r\n        setKanbanSettingsData((prev) => ({\r\n          ...prev,\r\n          swim_lane: {\r\n            ...prev?.swim_lane,\r\n            attribute: selectSwinLandData\r\n              ?.filter((i) => i?.value !== kanbanSettingsData?.lane?.attribute)\r\n              ?.find((i) => i?.value == LEAD_STATUS || i?.value == \"status\")\r\n              ?.value,\r\n            // sorting: \"asc\",\r\n          },\r\n        }));\r\n      }\r\n    }\r\n  }, [selectSwinLandData]);\r\n\r\n  useEffect(() => {\r\n    if (currentSwimLaneAttribute === kanbanSettingsData?.swim_lane?.attribute)\r\n      return;\r\n\r\n    if (swimLaneHideListData?.length) {\r\n      setKanbanSettingsData((prev) => ({\r\n        ...prev,\r\n        swim_lane: {\r\n          ...prev?.swim_lane,\r\n          hide_list: swimLaneHideListData,\r\n          show_list: [],\r\n        },\r\n      }));\r\n\r\n      setCurrentSwimLaneAttribute(\r\n        kanbanSettingsData?.swim_lane?.attribute || \"\"\r\n      );\r\n    } else {\r\n      setKanbanSettingsData((prev) => ({\r\n        ...prev,\r\n        swim_lane: {\r\n          ...prev?.swim_lane,\r\n          hide_list: [],\r\n          show_list: [],\r\n        },\r\n      }));\r\n\r\n      setCurrentSwimLaneAttribute(\"\");\r\n    }\r\n  }, [swimLaneHideListData]);\r\n\r\n  const sortingOptions = [\r\n    { label: \"Sort By\", value: \"sort_by\" },\r\n    { label: \"A-Z\", value: \"asc\" },\r\n    { label: \"Z-A\", value: \"dsc\" },\r\n    { label: \"Count (Ascending)\", value: \"count_asc\" },\r\n    { label: \"Count (Descending)\", value: \"count_dsc\" },\r\n    { label: \"Custom\", value: \"custom\" },\r\n  ];\r\n\r\n  const normalizeTabItem = (item: any) => ({\r\n    label: item.label,\r\n    value: item?.value,\r\n  });\r\n\r\n  const constructHideList = () => {\r\n    const normalizedTabs = swimLaneHideListData?.map(normalizeTabItem) || [];\r\n\r\n    // remove items already in show_list (value-safe comparison)\r\n    return normalizedTabs?.filter(\r\n      (tab) => !showListValues?.some((i) => i?.value === tab?.value)\r\n    );\r\n  };\r\n\r\n  const showListValues = kanbanSettingsData?.swim_lane?.show_list || [];\r\n  const hideListValues = constructHideList() || [];\r\n\r\n  const filteredListValues = hideListValues.filter((value: any) =>\r\n    value?.label?.toLowerCase().includes(searchTerm.toLowerCase())\r\n  );\r\n\r\n  const sensors = useSensors(\r\n    useSensor(MouseSensor),\r\n    useSensor(TouchSensor),\r\n    useSensor(KeyboardSensor)\r\n  );\r\n\r\n  const handleDragEnd = (event: DragEndEvent) => {\r\n    const { active, over } = event;\r\n    if (!over) return;\r\n\r\n    const currentContainer = active.data.current?.containerId;\r\n    const overContainer = over.data.current?.containerId;\r\n\r\n    if (!currentContainer || !overContainer) return;\r\n\r\n    let newShowList = [...(kanbanSettingsData?.swim_lane?.show_list ?? [])];\r\n    let newHideList = [...(kanbanSettingsData?.swim_lane?.hide_list ?? [])];\r\n\r\n    if (currentContainer === overContainer) {\r\n      if (currentContainer === \"list\") {\r\n        const oldIndex = newHideList.findIndex((i) => i.value === active.id);\r\n        const newIndex = newHideList.findIndex((i) => i.value === over.id);\r\n\r\n        if (oldIndex !== -1 && newIndex !== -1) {\r\n          const [removed] = newHideList.splice(oldIndex, 1);\r\n          newHideList.splice(newIndex, 0, removed);\r\n        }\r\n      } else {\r\n        const oldIndex = newShowList.findIndex((i) => i.value === active.id);\r\n        const newIndex = newShowList.findIndex((i) => i.value === over.id);\r\n\r\n        if (oldIndex !== -1 && newIndex !== -1) {\r\n          const [removed] = newShowList.splice(oldIndex, 1);\r\n          newShowList.splice(newIndex, 0, removed);\r\n        }\r\n      }\r\n    }\r\n\r\n    // -------------------------------------\r\n    // CASE 2: MOVE BETWEEN LISTS\r\n    // -------------------------------------\r\n    if (currentContainer !== overContainer) {\r\n      if (currentContainer === \"list\" && overContainer === \"tabs\") {\r\n        // if (newShowList.length < 5) {\r\n        const idx = newHideList.findIndex((i) => i.value === String(active.id));\r\n        if (idx !== -1) {\r\n          const item = newHideList.splice(idx, 1)[0];\r\n          newShowList.push(item);\r\n        }\r\n        // }\r\n      } else if (currentContainer === \"tabs\" && overContainer === \"list\") {\r\n        const idx = newShowList.findIndex((i) => i.value === String(active.id));\r\n        if (idx !== -1) {\r\n          const item = newShowList.splice(idx, 1)[0];\r\n          newHideList.push(item);\r\n        }\r\n      }\r\n    }\r\n\r\n    // ----------------------------------------------------------\r\n    // ⭐ APPLY MASTER UPDATE (with isDefault CHECK for columns)\r\n    // ----------------------------------------------------------\r\n    setKanbanSettingsData((prev) => {\r\n      // FINAL RETURN\r\n      return {\r\n        ...prev,\r\n        swim_lane: {\r\n          ...prev.swim_lane,\r\n          show_list: newShowList,\r\n          hide_list: newHideList,\r\n        },\r\n      };\r\n    });\r\n  };\r\n\r\n  const handleShowAll = () => {\r\n    setKanbanSettingsData((prev) => ({\r\n      ...prev,\r\n      swim_lane: {\r\n        ...prev?.swim_lane,\r\n        show_list: [\r\n          ...(prev?.swim_lane?.show_list || []),\r\n          ...(prev?.swim_lane?.hide_list || []),\r\n        ],\r\n        hide_list: [],\r\n      },\r\n    }));\r\n  };\r\n\r\n  const handleHideAll = () => {\r\n    setKanbanSettingsData((prev) => ({\r\n      ...prev,\r\n      swim_lane: {\r\n        ...prev?.swim_lane,\r\n        hide_list: [\r\n          ...(prev?.swim_lane?.hide_list || []),\r\n          ...(prev?.swim_lane?.show_list || []),\r\n        ],\r\n        show_list: [],\r\n      },\r\n    }));\r\n  };\r\n\r\n  const handleItemToggle = (\r\n    item: { label: string; value: string },\r\n    fromContainerId: string\r\n  ) => {\r\n    setKanbanSettingsData((prev) => {\r\n      const toShowList = [...(kanbanSettingsData?.swim_lane?.show_list ?? [])];\r\n      const toHideList = [...(kanbanSettingsData?.swim_lane?.hide_list ?? [])];\r\n\r\n      if (fromContainerId === \"list\") {\r\n        const index = toHideList.findIndex((i) => i.value == item.value);\r\n        if (index > -1) {\r\n          toHideList.splice(index, 1);\r\n          toShowList.push(item);\r\n          // 🌟 ALSO create sorting tab entry if missing\r\n        }\r\n      } else if (fromContainerId === \"tabs\") {\r\n        const index = toShowList.findIndex((i) => i.value == item.value);\r\n        if (index > -1) {\r\n          toShowList.splice(index, 1);\r\n          toHideList.push(item);\r\n          // let itemIndex =\r\n          //   filterSettingStates?.quickTabStates?.show_list?.findIndex(\r\n          //     (i) => i.value == item.value\r\n          //   );\r\n          // 🔥 REMOVE COLUMN WHEN TAB REMOVED (if not default)\r\n        }\r\n      }\r\n      return {\r\n        ...prev,\r\n        swim_lane: {\r\n          ...prev?.swim_lane,\r\n          show_list: toShowList,\r\n          hide_list: toHideList,\r\n        },\r\n      };\r\n    });\r\n  };\r\n\r\n  const enableDND =\r\n    isSourceAttribute && kanbanSettingsData?.swim_lane?.sorting === \"custom\";\r\n\r\n  return (\r\n    <Box sx={{ display: \"flex\", flexDirection: \"column\", height: \"100%\" }}>\r\n      <Typography variant=\"caption\" sx={TabsStyles.mainTabsHeader}>\r\n        **Swim Lane settings will be reflected in horizontal groups\r\n      </Typography>\r\n\r\n      <Grid sx={{ position: \"relative\" }} container>\r\n        {/* Attribute + Sort */}\r\n        <Grid size={12}>\r\n          <Grid sx={TabsStyles.mainTabDropdown} size={6}>\r\n            <FormControl sx={TabsStyles.mainTabSelect} size=\"small\">\r\n              <Select\r\n                value={kanbanSettingsData?.swim_lane?.attribute || \"\"}\r\n                onChange={(e) =>\r\n                  setKanbanSettingsData((prev) => ({\r\n                    ...prev,\r\n                    swim_lane: {\r\n                      ...prev?.swim_lane,\r\n                      attribute: e.target.value,\r\n                    },\r\n                  }))\r\n                }\r\n              >\r\n                {selectSwinLandData\r\n                  ?.filter(\r\n                    (i) => i?.value !== kanbanSettingsData?.lane?.attribute\r\n                  )\r\n                  ?.map((lane: any) => (\r\n                    <MenuItem key={lane?.key} value={lane?.value}>\r\n                      {lane?.label}\r\n                    </MenuItem>\r\n                  ))}\r\n              </Select>\r\n            </FormControl>\r\n\r\n            <FormControl sx={TabsStyles.selectDropdownSeparator} size=\"small\">\r\n              <Select\r\n                value={kanbanSettingsData?.swim_lane?.sorting || \"asc\"}\r\n                disabled={isStatusAttribute}\r\n                onChange={(e) =>\r\n                  setKanbanSettingsData((prev) => ({\r\n                    ...prev,\r\n                    swim_lane: {\r\n                      ...prev?.swim_lane,\r\n                      sorting: e.target.value,\r\n                    },\r\n                  }))\r\n                }\r\n              >\r\n                {isStatusAttribute && (\r\n                  <MenuItem value=\"sort_by\" disabled>\r\n                    Sort By\r\n                  </MenuItem>\r\n                )}\r\n\r\n                {!isStatusAttribute &&\r\n                  sortingOptions\r\n                    .filter((option) => option.value !== \"sort_by\")\r\n                    .map((option) => (\r\n                      <MenuItem key={option.value} value={option.value}>\r\n                        {option.label}\r\n                      </MenuItem>\r\n                    ))}\r\n              </Select>\r\n            </FormControl>\r\n          </Grid>\r\n        </Grid>\r\n\r\n        {/* Lists */}\r\n        <DndContext\r\n          sensors={sensors}\r\n          collisionDetection={closestCenter}\r\n          onDragEnd={handleDragEnd}\r\n        >\r\n          <Grid sx={{ mt: 2 }} container spacing={2} size={12}>\r\n            <ListingValues\r\n              buttonText=\"Show All\"\r\n              onClick={handleShowAll}\r\n              headerText=\"List of Values\"\r\n              filteredValues={filteredListValues}\r\n              searchTerm={searchTerm}\r\n              setSearchTerm={setSearchTerm}\r\n              containerId=\"list\"\r\n              tabsApiDataLoading={tabsApiDataLoading}\r\n              onItemToggle={handleItemToggle}\r\n              enableDragAndDrop={enableDND}\r\n            />\r\n\r\n            <ListingValues\r\n              buttonText=\"Hide All\"\r\n              onClick={handleHideAll}\r\n              headerText=\"View as Lanes\"\r\n              filteredValues={showListValues}\r\n              containerId=\"tabs\"\r\n              onItemToggle={handleItemToggle}\r\n              enableDragAndDrop={enableDND}\r\n            />\r\n          </Grid>\r\n        </DndContext>\r\n      </Grid>\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default SwimLane;\r\n","import React, { useState } from \"react\";\r\nimport {\r\n  DialogTitle,\r\n  IconButton,\r\n  Box,\r\n  Typography,\r\n  DialogContent,\r\n  DialogActions,\r\n} from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport CustomVerticalTabs from \"./tabs/vertical\";\r\nimport CustomTabPanel from \"./tabs/vertical/custom-tab-panel\";\r\nimport QuickTab from \"./components/quick-tab\";\r\nimport Column from \"./components/column\";\r\nimport Sorting from \"./components/sorting\";\r\nimport { QuickFilterModalProps } from \"../../types/filter-settings\";\r\nimport { CustomDialog, DialogTransition } from \"./components/custom-dialog\";\r\nimport { dialogStyles } from \"./style\";\r\nimport CustomButton from \"./components/custom-button\";\r\nimport { KANBAN_SETTINGS_TABS, SETTINGS_TABS } from \"./constants\";\r\nimport Loader from \"../common/loader/loader\";\r\nimport Lane from \"./components/lane\";\r\nimport GroupBy from \"./components/swim-lane\";\r\nimport { useFullscreenPopoverContainer } from \"../../libs/hooks/useFullScreen\";\r\nimport { STAGE_GROUP } from \"../../../kanban/constants/kanban-constants\";\r\n\r\nexport function QuickFilterSettings({\r\n  view = \"listing\",\r\n  isFlatJson,\r\n  show,\r\n  filterSettingStates,\r\n  onClose,\r\n  columnsData,\r\n  columnsDataLoading,\r\n  quickTabAttributes,\r\n  quickTabAttributesLoading,\r\n  columnTabAttributes,\r\n  columnTabAttributesLoading,\r\n  sortingTabAttributes,\r\n  sortingTabAttributesLoading,\r\n  tabsApiData,\r\n  tabsApiDataLoading,\r\n  onSaveSettingsData,\r\n  activeTab,\r\n  selectAttributeData,\r\n  selectSwinLandData,\r\n  laneHideListData,\r\n  swimLaneHideListData,\r\n  onSaveKanbanSettingsData,\r\n}: QuickFilterModalProps) {\r\n  const [tabValue, setTabValue] = useState(0);\r\n  const { container: fullscreenContainer } = useFullscreenPopoverContainer();\r\n\r\n  const {\r\n    showListViewSettings,\r\n    quickTabStates,\r\n    columnTabState,\r\n    sortingTabState,\r\n    saveButtonError,\r\n    kanbanSettingsData,\r\n  } = filterSettingStates;\r\n\r\n  const hasAPIData = Boolean(Object.entries(columnsData).length);\r\n  let disbaledCondition =\r\n    // quickTabStates?.show_list?.length === 0 ||      --> commented as per the requirement\r\n    columnTabState?.isDefault\r\n      ? columnTabState?.show_list?.length === 0\r\n      : columnTabState?.tabs?.find((tab) => tab?.show_list?.length === 0)\r\n          ?.show_list?.length === 0;\r\n\r\n  const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {\r\n    setTabValue(newValue);\r\n  };\r\n\r\n  const handleSaveSetSettingsData = () => {\r\n    const copyColumnTabState = {\r\n      isDefault: columnTabState?.isDefault,\r\n      show_list: columnTabState?.show_list || [],\r\n      hide_list: columnTabState?.hide_list || [],\r\n      tabs: columnTabState?.tabs || [],\r\n    };\r\n    // : {\r\n    //     isDefault: false,\r\n    //     tabs: columnTabState?.tabs || [],\r\n    //   };\r\n    // commented as per the requirement\r\n    const copySortingTabState = {\r\n      isDefault: sortingTabState?.isDefault,\r\n      sortby:\r\n        sortingTabState?.sortby?.filter((item) => item.column !== \"\") || [],\r\n      tabs: sortingTabState?.tabs || [],\r\n    };\r\n    // : {\r\n    //     isDefault: false,\r\n    //     tabs: sortingTabState?.tabs || [],\r\n    //   };\r\n\r\n    const copyQuickTabStates = {\r\n      ...quickTabStates,\r\n      isAllSelected: quickTabStates?.isAllSelected ?? false,\r\n    };\r\n\r\n    const modifiedSettingsData = {\r\n      quick_tab: copyQuickTabStates,\r\n      column: copyColumnTabState,\r\n      sorting: copySortingTabState,\r\n    };\r\n\r\n    onSaveSettingsData && onSaveSettingsData(modifiedSettingsData);\r\n    onClose && onClose();\r\n  };\r\n\r\n  const handleSaveKanbanSetSettingsData = () => {\r\n    const updatedLane = {\r\n      ...kanbanSettingsData?.lane,\r\n      isSubLane:\r\n        kanbanSettingsData?.lane?.attribute === STAGE_GROUP\r\n          ? kanbanSettingsData?.lane?.isSubLane ?? false\r\n          : false,\r\n    };\r\n    const modifiedKanbanSettingsData = {\r\n      lane: updatedLane,\r\n      swim_lane: kanbanSettingsData?.swim_lane,\r\n    };\r\n    onSaveKanbanSettingsData &&\r\n      onSaveKanbanSettingsData(modifiedKanbanSettingsData);\r\n    onClose && onClose();\r\n  };\r\n\r\n  return (\r\n    <CustomDialog\r\n      open={show || showListViewSettings}\r\n      fullWidth\r\n      maxWidth=\"lg\"\r\n      slots={{\r\n        transition: DialogTransition,\r\n      }}\r\n      container={fullscreenContainer}\r\n    >\r\n      <DialogTitle sx={dialogStyles.dialogTitle}>\r\n        <Typography sx={{ fontSize: \"1.125rem\" }}>\r\n          {view === \"listing\"\r\n            ? \"Quick Filter Settings\"\r\n            : \"Kanban View Settings\"}\r\n        </Typography>\r\n\r\n        <IconButton\r\n          size=\"small\"\r\n          color=\"inherit\"\r\n          onClick={() => {\r\n            onClose && onClose();\r\n          }}\r\n        >\r\n          <CloseIcon />\r\n        </IconButton>\r\n      </DialogTitle>\r\n\r\n      <DialogContent>\r\n        {columnsDataLoading ? (\r\n          <Loader loaderText=\"Loading settings...\" />\r\n        ) : !hasAPIData ? ( // check if columns data is available\r\n          <Typography>Please pass meta data in component</Typography>\r\n        ) : (\r\n          <>\r\n            <CustomVerticalTabs\r\n              value={tabValue}\r\n              onChange={handleTabChange}\r\n              tabItems={\r\n                view === \"listing\" ? SETTINGS_TABS : KANBAN_SETTINGS_TABS\r\n              }\r\n            />\r\n\r\n            <Box sx={{ flex: \"1\" }}>\r\n              {view.toLowerCase() === \"listing\" && (\r\n                <CustomTabPanel value={tabValue} index={0}>\r\n                  {tabValue === 0 && (\r\n                    <QuickTab\r\n                      filterSettingStates={filterSettingStates}\r\n                      columnsData={quickTabAttributes}\r\n                      tabsApiData={tabsApiData}\r\n                      tabsApiDataLoading={tabsApiDataLoading}\r\n                      activeTab={activeTab}\r\n                      columnTabAttributes={columnTabAttributes}\r\n                      isFlatJson={isFlatJson}\r\n                    />\r\n                  )}\r\n                </CustomTabPanel>\r\n              )}\r\n\r\n              {view.toLowerCase() === \"listing\" && (\r\n                <CustomTabPanel value={tabValue} index={1}>\r\n                  {tabValue === 1 && (\r\n                    <Column\r\n                      filterSettingStates={filterSettingStates}\r\n                      columnsData={columnsData}\r\n                      columnTabAttributes={columnTabAttributes}\r\n                      columnTabAttributesLoading={columnTabAttributesLoading}\r\n                    />\r\n                  )}\r\n                </CustomTabPanel>\r\n              )}\r\n\r\n              {view.toLowerCase() === \"listing\" && (\r\n                <CustomTabPanel value={tabValue} index={2}>\r\n                  {tabValue === 2 && (\r\n                    <Sorting\r\n                      filterSettingStates={filterSettingStates}\r\n                      columnsData={sortingTabAttributes}\r\n                    />\r\n                  )}\r\n                </CustomTabPanel>\r\n              )}\r\n              {view.toLowerCase() === \"kanban\" && (\r\n                <CustomTabPanel value={tabValue} index={0}>\r\n                  {tabValue === 0 && (\r\n                    <Lane\r\n                      filterSettingStates={filterSettingStates}\r\n                      columnsData={columnsData}\r\n                      selectAttributeData={selectAttributeData}\r\n                      laneHideListData={laneHideListData}\r\n                    />\r\n                  )}\r\n                </CustomTabPanel>\r\n              )}\r\n\r\n              {view.toLowerCase() === \"kanban\" && (\r\n                <CustomTabPanel value={tabValue} index={1}>\r\n                  {tabValue === 1 && (\r\n                    <GroupBy\r\n                      filterSettingStates={filterSettingStates}\r\n                      columnsData={columnsData}\r\n                      selectSwinLandData={selectSwinLandData}\r\n                      swimLaneHideListData={swimLaneHideListData}\r\n                    />\r\n                  )}\r\n                </CustomTabPanel>\r\n              )}\r\n            </Box>\r\n          </>\r\n        )}\r\n      </DialogContent>\r\n\r\n      {!columnsDataLoading && hasAPIData && (\r\n        // <DialogActions>\r\n        //   <CustomButton\r\n        //     // disabled={saveButtonError?.hasError}\r\n        //     // disabled={saveButtonError?.hasError}\r\n        //     disabled={disbaledCondition}\r\n        //     onClick={handleSaveSetSettingsData}\r\n        //   >\r\n        //     {view === \"listing\" ? \"Save Quick Filter\" : \"Save Kanban Layout\"}\r\n        //   </CustomButton>\r\n        // </DialogActions>\r\n        <DialogActions>\r\n          {view === \"kanban\" && tabValue === 0 && (\r\n            <>\r\n              <CustomButton onClick={handleSaveKanbanSetSettingsData}>\r\n                Save & Close\r\n              </CustomButton>\r\n              <CustomButton onClick={() => setTabValue(1)} variant=\"contained\">\r\n                Next\r\n              </CustomButton>\r\n            </>\r\n          )}\r\n\r\n          {view === \"kanban\" && tabValue === 1 && (\r\n            <CustomButton onClick={handleSaveKanbanSetSettingsData}>\r\n              Save\r\n            </CustomButton>\r\n          )}\r\n\r\n          {view === \"listing\" && (\r\n            <CustomButton\r\n              disabled={disbaledCondition}\r\n              onClick={handleSaveSetSettingsData}\r\n            >\r\n              Save\r\n            </CustomButton>\r\n          )}\r\n        </DialogActions>\r\n      )}\r\n    </CustomDialog>\r\n  );\r\n}\r\n","import { Theme } from \"@emotion/react\";\r\nimport { SxProps } from \"@mui/material\";\r\n\r\ninterface KanbanStyles {\r\n  syncingStyle: SxProps<Theme>;\r\n  topHeader: SxProps<Theme>;\r\n  laneHeader: SxProps<Theme>;\r\n  badge: SxProps<Theme>;\r\n  swimlaneWrapperStyle: SxProps<Theme>;\r\n  columnStyle: SxProps<Theme>;\r\n  stageStyle: SxProps<Theme>;\r\n  stageBadge: SxProps<Theme>;\r\n  cardContainer: SxProps<Theme>;\r\n  cardContent: SxProps<Theme>;\r\n  cardHeaderStyle: SxProps<Theme>;\r\n  cardAvatar: SxProps<Theme>;\r\n  statusStyle: SxProps<Theme>;\r\n  codeStyle: SxProps<Theme>;\r\n  nameIconContainer: SxProps<Theme>;\r\n  leadName: SxProps<Theme>;\r\n  iconStyle: SxProps<Theme>;\r\n  leadOwnerStyle: SxProps<Theme>;\r\n  calendarIcon: SxProps<Theme>;\r\n  dateStyle: SxProps<Theme>;\r\n  subSectionAccordion: SxProps<Theme>;\r\n  subSectionCountContainer: SxProps<Theme>;\r\n  cardsContainer: SxProps<Theme>;\r\n  settingStyle: SxProps<Theme>;\r\n  swimLaneAccordionStyle: SxProps<Theme>;\r\n  subSectionHeaderContainer: SxProps<Theme>;\r\n  showMoreStyle: SxProps<Theme>;\r\n}\r\n\r\nexport const kanbanStyles: KanbanStyles = {\r\n  syncingStyle: {\r\n    display: \"flex\",\r\n    flexDirection: \"row\",\r\n    gap: \"8px\",\r\n    width: \"100%\",\r\n  },\r\n  topHeader: {\r\n    display: \"flex\",\r\n    alignItems: \"center\",\r\n    gap: 1,\r\n    px: 1,\r\n    pt: 2,\r\n    bgcolor: \"white\",\r\n    width: \"fit-content\",\r\n    position: \"sticky\", // Add sticky positioning\r\n    top: 0, // Stick to the top of the viewport\r\n    right: 0,\r\n    zIndex: 1100, // Ensure it stays above other content\r\n  },\r\n  laneHeader: {\r\n    flex: 1, // Equal width distribution\r\n    minWidth: \"320px\",\r\n    maxWidth: \"320px\",\r\n    display: \"flex\",\r\n    fontWeight: 700,\r\n    fontSize: \"16px\",\r\n    borderRadius: \"6px\",\r\n    alignItems: \"center\",\r\n    justifyContent: \"center\",\r\n    py: \"8px\",\r\n    px: \"12px\",\r\n    position: \"relative\",\r\n  },\r\n  badge: {\r\n    position: \"absolute\",\r\n    top: \"-12px\",\r\n    left: \"8px\",\r\n    px: 1,\r\n    color: \"white\",\r\n    borderRadius: \"8px\",\r\n  },\r\n  swimlaneWrapperStyle: {\r\n    flexDirection: \"row-reverse\",\r\n    bgcolor: \"white\",\r\n    minHeight: 44, // overall height\r\n    px: 2,\r\n    py: 0, // remove vertical padding\r\n    \"&.Mui-expanded\": {\r\n      minHeight: 44,\r\n    },\r\n    \"& .MuiAccordionSummary-content\": {\r\n      margin: \"8px 0\", // reduced vertical spacing\r\n      display: \"flex\",\r\n      alignItems: \"center\",\r\n      justifyContent: \"flex-start\",\r\n      gap: 5,\r\n      \"&.Mui-expanded\": {\r\n        margin: \"8px 0\", // maintain same margin when expanded\r\n      },\r\n    },\r\n    \"& .MuiAccordionSummary-expandIconWrapper\": {\r\n      mr: 0, // reduce gap between icon and content\r\n    },\r\n  },\r\n  columnStyle: {\r\n    flex: 1, // Equal width distribution\r\n    p: \"12px\",\r\n    // px: \"2px\",\r\n    minHeight: \"500px\",\r\n    // borderRight: \"1px solid #e0e0e0\",\r\n\r\n    borderRadius: \"6px\",\r\n    minWidth: \"320px\",\r\n    maxWidth: \"320px\",\r\n  },\r\n  stageStyle: {\r\n    mb: 2,\r\n    bgcolor: \"#f9fafb\",\r\n    borderTopLeftRadius: \"8px !important\",\r\n    borderBottomLeftRadius: \"8px !important\",\r\n    borderTopRightRadius: \"8px !important\",\r\n    // borderRadius: 2,\r\n    overflow: \"hidden\",\r\n    boxShadow: \"none\",\r\n    \"&:before\": { display: \"none\" }, // remove default divider line\r\n  },\r\n  stageBadge: {\r\n    \"& .MuiBadge-badge\": {\r\n      color: \"black\",\r\n      fontWeight: \"bold\",\r\n      fontSize: \"0.75rem\",\r\n    },\r\n  },\r\n  cardContainer: {\r\n    borderRadius: 2,\r\n    bgcolor: \"#fff\",\r\n    position: \"relative\",\r\n\r\n    boxShadow:\r\n      \"0px 1.36px 2.72px rgba(23, 23, 23, 0.06), 0px 2.72px 5.44px rgba(23, 23, 23, 0.1)\",\r\n    border: \"none\", // explicitly remove border\r\n  },\r\n  cardContent: {\r\n    p: \"12px !important\",\r\n    display: \"flex\",\r\n    flexDirection: \"column\",\r\n    gap: \"4px\",\r\n  },\r\n  cardHeaderStyle: {\r\n    display: \"flex\",\r\n    justifyContent: \"space-between\",\r\n    alignItems: \"flex-start\",\r\n    // mb: 1,\r\n  },\r\n  cardAvatar: {\r\n    width: \"18px\",\r\n    height: \"18px\",\r\n    fontSize: \"12px\",\r\n    fontWeight: 600,\r\n    bgcolor: \"#e5e7eb\",\r\n    color: \"#374151\",\r\n    mr: 1,\r\n  },\r\n  statusStyle: {\r\n    height: 20,\r\n    fontSize: \"0.6875rem\",\r\n\r\n    fontWeight: 500,\r\n  },\r\n  codeStyle: {\r\n    fontSize: \"12px\",\r\n    color: \"#6b7280\",\r\n    fontWeight: 500,\r\n    mb: 0.5,\r\n    cursor: \"pointer\",\r\n  },\r\n  nameIconContainer: {\r\n    display: \"flex\",\r\n    justifyContent: \"space-between\",\r\n    alignItems: \"flex-start\",\r\n    borderBottom: \"1px solid #e5e7eb\",\r\n    pb: 2,\r\n  },\r\n  leadName: {\r\n    fontSize: \"15px\",\r\n    fontWeight: 500,\r\n    color: \"#1f2937\",\r\n    lineHeight: 1.3,\r\n  },\r\n  iconStyle: {\r\n    color: \"#6b7280\",\r\n    bgcolor: \"#f3f4f6\",\r\n    borderRadius: \"50%\",\r\n    width: \"20px\",\r\n    height: \"20px\",\r\n    p: 0.6,\r\n  },\r\n  leadOwnerStyle: {\r\n    fontSize: \"12px\",\r\n    color: \"#374151\",\r\n    fontWeight: 500,\r\n  },\r\n  calendarIcon: {\r\n    width: \"14px\",\r\n    height: \"14px\",\r\n    color: \"#7b7a79\",\r\n    mr: 0.5,\r\n  },\r\n  dateStyle: {\r\n    fontSize: \"12px\",\r\n    color: \"#7b7a79\",\r\n\r\n    fontWeight: 500,\r\n  },\r\n  subSectionAccordion: {\r\n    height: \"52px\", // fixed height\r\n    minHeight: \"52px\", // prevent auto-expansion\r\n    \"&.Mui-expanded\": {\r\n      minHeight: \"52px\", // fix expanded state height\r\n      height: \"52px\",\r\n    },\r\n    border: \"1px solid #e2e8f0\",\r\n    borderTopRightRadius: \"8px\",\r\n    px: 2,\r\n  },\r\n  subSectionCountContainer: {\r\n    // px: 1,\r\n    color: \"#574649\",\r\n    height: \"26px\",\r\n    width: \"26px !important\",\r\n    fontSize: \"10px\",\r\n    fontWeight: \"bold\",\r\n    display: \"flex\",\r\n    alignItems: \"center\",\r\n    justifyContent: \"center\",\r\n    borderRadius: \"50%\",\r\n  },\r\n  cardsContainer: {\r\n    px: 1,\r\n    gap: \"12px\",\r\n    display: \"flex\",\r\n    flexDirection: \"column\",\r\n    p: \"8px\",\r\n  },\r\n  settingStyle: {\r\n    bgcolor: \"#f8fafc\",\r\n    width: \"56px\",\r\n    height: \"41px\",\r\n    borderRadius: \"6px\",\r\n    border: \"1px solid #e2e8f0\",\r\n  },\r\n  swimLaneAccordionStyle: {\r\n    mb: 1,\r\n    \"&:before\": { display: \"none\" },\r\n    py: 0,\r\n    boxShadow: \"none\",\r\n  },\r\n  subSectionHeaderContainer: {\r\n    display: \"flex\",\r\n    alignItems: \"center\",\r\n    gap: \"8px\",\r\n  },\r\n  showMoreStyle: {\r\n    cursor: \"pointer\",\r\n    fontSize: \"12px\",\r\n    fontWeight: 600,\r\n    textAlign: \"center\",\r\n    color: \"#7a5af8\",\r\n    mt: 1,\r\n  },\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n  Box,\r\n  Typography,\r\n  Accordion,\r\n  AccordionSummary,\r\n  AccordionDetails,\r\n  IconButton,\r\n} from \"@mui/material\";\r\nimport SettingsOutlinedIcon from \"@mui/icons-material/SettingsOutlined\";\r\nimport {\r\n  ExpandMore as ExpandMoreIcon,\r\n  Settings as SettingsIcon,\r\n} from \"@mui/icons-material\";\r\nimport ArrowDropDownIcon from \"@mui/icons-material/ArrowDropDown\";\r\nimport { kanbanStyles } from \"./styles/styles\";\r\nimport { Lane, SubLane, SwimLane } from \"./types/types\";\r\nimport {\r\n  COLOR_CONSTANTS,\r\n  LEAD_STATUS,\r\n  STAGE,\r\n  STAGE_GROUP,\r\n} from \"./constants/kanban-constants\";\r\nimport Loader from \"../listing/components/common/loader/loader\";\r\nimport { KanbanSettingsDataProps } from \"../listing/types/filter-settings\";\r\n\r\nconst Kanban = ({\r\n  metaData,\r\n  data,\r\n  kanbanSettingsData,\r\n  isLoading,\r\n  KanbanCardComponent,\r\n  showSettings,\r\n  onOpenSettings,\r\n  isFlatJson = false,\r\n  entity,\r\n}: {\r\n  metaData: any;\r\n  data: any;\r\n  kanbanSettingsData: KanbanSettingsDataProps;\r\n  isLoading?: boolean;\r\n  KanbanCardComponent: React.ComponentType<{\r\n    key: string | number;\r\n    cardData: any;\r\n    color?: string;\r\n    darkColor?: string;\r\n    darkerColor?: string;\r\n  }>;\r\n  showSettings: boolean;\r\n  onOpenSettings?: () => void;\r\n  isFlatJson?: boolean;\r\n  entity?: string;\r\n}) => {\r\n  const [expandedPanels, setExpandedPanels] = useState<{\r\n    [key: string]: boolean;\r\n  }>({\r\n    Active: true,\r\n  });\r\n\r\n  const [subLaneExpanded, setSubLaneExpanded] = useState<{\r\n    [key: string]: boolean;\r\n  }>({});\r\n\r\n  const [showMoreMap, setShowMoreMap] = useState<Record<string, boolean>>({});\r\n\r\n  useEffect(() => {\r\n    if (metaData?.swim_lanes?.length) {\r\n      const initial: { [key: string]: boolean } = {};\r\n      metaData?.swim_lanes.forEach((swim_lane: SwimLane) => {\r\n        swim_lane?.sub_lanes?.forEach((sub_lane: SubLane) => {\r\n          const key = `${swim_lane.name}-${sub_lane.name}`;\r\n          initial[key] = sub_lane.expanded || false;\r\n        });\r\n      });\r\n      setSubLaneExpanded(initial);\r\n    }\r\n  }, [metaData]);\r\n\r\n  const toggleShowMore = (key: string) => {\r\n    setShowMoreMap((prev) => ({ ...prev, [key]: !prev[key] }));\r\n  };\r\n\r\n  const handleAccordionChange =\r\n    (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => {\r\n      setExpandedPanels((prev) => ({\r\n        ...prev,\r\n        [panel]: isExpanded,\r\n      }));\r\n    };\r\n\r\n  const toggleSubLane = (subLaneKey: string) => {\r\n    setSubLaneExpanded((prev) => ({\r\n      ...prev,\r\n      [subLaneKey]: !prev[subLaneKey],\r\n    }));\r\n  };\r\n\r\n  const getLeadValue = (lead: any, attribute?: string) => {\r\n    if (!attribute) return undefined;\r\n\r\n    return isFlatJson ? lead?.[`${entity}__${attribute}`] : lead?.[attribute];\r\n  };\r\n\r\n  // Count leads in a main lane (by stage_group name)\r\n  const getLeadCount = (laneName: string): number =>\r\n    getFilteredLeads({ laneName })?.length;\r\n\r\n  // Count leads in a swim lane (by lead_status name)\r\n  const getSwimLaneCount = (swimLaneName: string): number =>\r\n    getFilteredLeads({ swimLaneName })?.length;\r\n\r\n  // Count leads in a specific sub-lane within a swim-lane\r\n  const getSubLaneCount = ({\r\n    laneName,\r\n    swimLaneName,\r\n    subLaneName,\r\n  }: {\r\n    laneName?: string;\r\n    swimLaneName?: string;\r\n    subLaneName?: string;\r\n  }): number =>\r\n    getFilteredLeads({ laneName, swimLaneName, subLaneName })?.length;\r\n\r\n  const getFilteredLeads = ({\r\n    laneName,\r\n    swimLaneName,\r\n    subLaneName,\r\n  }: {\r\n    laneName?: string;\r\n    swimLaneName?: string;\r\n    subLaneName?: string;\r\n  }) => {\r\n    if (!data?.length) return [];\r\n\r\n    return data.filter((lead: any) => {\r\n      if (\r\n        laneName &&\r\n        getLeadValue(\r\n          lead,\r\n          kanbanSettingsData?.lane?.attribute || STAGE_GROUP\r\n        ) !== laneName\r\n      ) {\r\n        return false;\r\n      }\r\n\r\n      if (\r\n        swimLaneName &&\r\n        getLeadValue(\r\n          lead,\r\n          kanbanSettingsData?.swim_lane?.attribute || LEAD_STATUS\r\n        ) !== swimLaneName\r\n      ) {\r\n        return false;\r\n      }\r\n\r\n      if (subLaneName && getLeadValue(lead, STAGE) !== subLaneName) {\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    });\r\n  };\r\n\r\n  return (\r\n    <>\r\n      {isLoading ? (\r\n        <Loader />\r\n      ) : (\r\n        <Box>\r\n          <Box\r\n            className=\"kanban-container\"\r\n            sx={{ width: \"100%\", bgcolor: \"white\", overflowX: \"auto\" }}\r\n          >\r\n            {/* Header */}\r\n            <Box sx={kanbanStyles.topHeader}>\r\n              <IconButton\r\n                onClick={onOpenSettings}\r\n                sx={{\r\n                  ...kanbanStyles.settingStyle,\r\n                  visibility: showSettings ? \"visible\" : \"hidden\",\r\n                }}\r\n              >\r\n                <SettingsOutlinedIcon />\r\n              </IconButton>\r\n\r\n              {/* Lane Headers */}\r\n              <Box sx={{ ...kanbanStyles.syncingStyle, flex: 1 }}>\r\n                {metaData?.lanes?.map((lane: Lane, index: number) => (\r\n                  <Box\r\n                    className=\"lane-header\"\r\n                    sx={{\r\n                      ...kanbanStyles.laneHeader,\r\n                      bgcolor: lane.color || COLOR_CONSTANTS[index % 4].color,\r\n                    }}\r\n                    key={lane.id}\r\n                  >\r\n                    <Box\r\n                      sx={{\r\n                        ...kanbanStyles.badge,\r\n                        bgcolor:\r\n                          lane.darkColor ||\r\n                          COLOR_CONSTANTS[index % 4].darkerColor,\r\n                      }}\r\n                    >\r\n                      {getLeadCount(lane.name)}\r\n                    </Box>\r\n\r\n                    <Typography variant=\"h6\" fontWeight=\"bold\" sx={{ px: 2 }}>\r\n                      {lane?.name}\r\n                    </Typography>\r\n                  </Box>\r\n                ))}\r\n              </Box>\r\n            </Box>\r\n\r\n            {/* Content */}\r\n            <Box\r\n              className=\"kanban-content\"\r\n              id=\"kanban-content\"\r\n              sx={{\r\n                maxHeight: \"calc(100vh - 186px)\",\r\n                width: \"fit-content\",\r\n              }}\r\n            >\r\n              {/* Swim Lanes */}\r\n              {metaData?.swim_lanes?.length > 0 &&\r\n                metaData?.swim_lanes?.map((swim_lane: SwimLane) => (\r\n                  <Accordion\r\n                    key={swim_lane.id}\r\n                    expanded={!!expandedPanels[swim_lane.name]}\r\n                    onChange={handleAccordionChange(swim_lane.name)}\r\n                    sx={kanbanStyles.swimLaneAccordionStyle}\r\n                    // disabled={getSwimLaneCount(swim_lane.id) === 0 ? true : false}\r\n                  >\r\n                    <AccordionSummary\r\n                      // disabled={swim_lane?.sub_lanes?.length > 0 ? false : true}\r\n                      expandIcon={<ArrowDropDownIcon sx={{ color: \"black\" }} />}\r\n                      sx={kanbanStyles.swimlaneWrapperStyle}\r\n                    >\r\n                      <Typography\r\n                        variant=\"body1\"\r\n                        fontWeight=\"medium\"\r\n                        sx={{ ml: 1.5 }}\r\n                      >\r\n                        {swim_lane?.name} ({getSwimLaneCount(swim_lane.name)})\r\n                      </Typography>\r\n                    </AccordionSummary>\r\n\r\n                    <AccordionDetails\r\n                      sx={{\r\n                        pl: \"16px\",\r\n                        pr: \"8px\",\r\n                        width: \"fit-content\",\r\n                        py: 0,\r\n                      }}\r\n                    >\r\n                      <Box sx={{ ...kanbanStyles.syncingStyle, pl: 7 }}>\r\n                        {metaData?.lanes?.map((lane: Lane, index: number) => (\r\n                          <Box\r\n                            className=\"column\"\r\n                            sx={{\r\n                              ...kanbanStyles.columnStyle,\r\n                              bgcolor:\r\n                                lane?.color || COLOR_CONSTANTS[index % 4].color,\r\n                            }}\r\n                            key={lane.id}\r\n                          >\r\n                            {swim_lane?.sub_lanes?.length > 0 &&\r\n                              swim_lane?.sub_lanes\r\n                                ?.filter(\r\n                                  (sub_lane: SubLane) =>\r\n                                    sub_lane.lane_id.toString() ==\r\n                                    lane.id.toString()\r\n                                )\r\n                                ?.map((sub_section: SubLane) => {\r\n                                  const subLaneKey = `${swim_lane.name}-${sub_section.name}`;\r\n\r\n                                  const subLaneCount = getSubLaneCount({\r\n                                    laneName: lane?.name,\r\n                                    swimLaneName: swim_lane?.name,\r\n                                    subLaneName: sub_section?.name,\r\n                                  });\r\n                                  const hasLeads = subLaneCount > 0;\r\n\r\n                                  return (\r\n                                    <Accordion\r\n                                      key={sub_section.id}\r\n                                      expanded={\r\n                                        hasLeads\r\n                                          ? subLaneExpanded[subLaneKey] ?? true // auto-expand only if leads exist\r\n                                          : false // force collapse if no leads\r\n                                      }\r\n                                      onChange={() => toggleSubLane(subLaneKey)}\r\n                                      sx={{\r\n                                        ...kanbanStyles.stageStyle,\r\n                                        borderLeft: `4px solid ${\r\n                                          lane.darkColor ||\r\n                                          COLOR_CONSTANTS[index % 4].darkColor\r\n                                        }`,\r\n                                      }}\r\n                                    >\r\n                                      <AccordionSummary\r\n                                        expandIcon={\r\n                                          <ExpandMoreIcon\r\n                                            sx={{\r\n                                              display: hasLeads\r\n                                                ? \"block\"\r\n                                                : \"none\",\r\n                                            }}\r\n                                          />\r\n                                        }\r\n                                        sx={kanbanStyles.subSectionAccordion}\r\n                                      >\r\n                                        <Box\r\n                                          sx={\r\n                                            kanbanStyles.subSectionHeaderContainer\r\n                                          }\r\n                                        >\r\n                                          <Box\r\n                                            className=\"sub-section-count\"\r\n                                            sx={{\r\n                                              ...kanbanStyles.subSectionCountContainer,\r\n                                              bgcolor:\r\n                                                lane?.darkColor ||\r\n                                                COLOR_CONSTANTS[index % 4]\r\n                                                  .darkColor,\r\n                                            }}\r\n                                          >\r\n                                            {getSubLaneCount({\r\n                                              laneName: lane?.name,\r\n                                              swimLaneName: swim_lane?.name,\r\n                                              subLaneName: sub_section?.name,\r\n                                            })}\r\n                                          </Box>\r\n                                          <Typography\r\n                                            fontWeight=\"700\"\r\n                                            color=\"#555354\"\r\n                                            fontSize=\"12px\"\r\n                                          >\r\n                                            {sub_section?.name}\r\n                                          </Typography>\r\n                                        </Box>\r\n                                      </AccordionSummary>\r\n\r\n                                      <AccordionDetails\r\n                                        sx={kanbanStyles.cardsContainer}\r\n                                      >\r\n                                        {(() => {\r\n                                          const cards =\r\n                                            data?.filter(\r\n                                              (lead: any) =>\r\n                                                getLeadValue(\r\n                                                  lead,\r\n                                                  kanbanSettingsData?.swim_lane\r\n                                                    ?.attribute || LEAD_STATUS\r\n                                                ) === swim_lane.name &&\r\n                                                getLeadValue(lead, STAGE) ===\r\n                                                  sub_section.name &&\r\n                                                getLeadValue(\r\n                                                  lead,\r\n                                                  kanbanSettingsData?.lane\r\n                                                    ?.attribute || STAGE_GROUP\r\n                                                ) === lane.name\r\n                                            ) ?? [];\r\n\r\n                                          const key = `${lane.name}-${swim_lane.name}-${sub_section.name}`;\r\n                                          const isExpanded = showMoreMap[key];\r\n\r\n                                          const visibleCards = isExpanded\r\n                                            ? cards\r\n                                            : cards?.slice(0, 3);\r\n\r\n                                          return (\r\n                                            <>\r\n                                              {visibleCards.map((card: any) => (\r\n                                                <KanbanCardComponent\r\n                                                  key={card.id}\r\n                                                  cardData={card}\r\n                                                  color={\r\n                                                    lane?.color ||\r\n                                                    COLOR_CONSTANTS[index % 4]\r\n                                                      .color\r\n                                                  }\r\n                                                  darkColor={\r\n                                                    lane?.darkColor ||\r\n                                                    COLOR_CONSTANTS[index % 4]\r\n                                                      .darkColor\r\n                                                  }\r\n                                                  darkerColor={\r\n                                                    lane?.darkerColor ||\r\n                                                    COLOR_CONSTANTS[index % 4]\r\n                                                      .darkerColor\r\n                                                  }\r\n                                                />\r\n                                              ))}\r\n\r\n                                              {cards?.length > 3 && (\r\n                                                <Typography\r\n                                                  onClick={() =>\r\n                                                    toggleShowMore(key)\r\n                                                  }\r\n                                                  sx={\r\n                                                    kanbanStyles.showMoreStyle\r\n                                                  }\r\n                                                >\r\n                                                  {isExpanded\r\n                                                    ? \"Show Less\"\r\n                                                    : \"Show More\"}\r\n                                                </Typography>\r\n                                              )}\r\n                                            </>\r\n                                          );\r\n                                        })()}\r\n                                      </AccordionDetails>\r\n                                    </Accordion>\r\n                                  );\r\n                                })}\r\n\r\n                            {!(swim_lane?.sub_lanes?.length > 0) && (\r\n                              <Box\r\n                                sx={{\r\n                                  display: \"flex\",\r\n                                  flexDirection: \"column\",\r\n                                  gap: \"12px\",\r\n                                }}\r\n                              >\r\n                                {(() => {\r\n                                  const cards =\r\n                                    data?.filter(\r\n                                      (lead: any) =>\r\n                                        getLeadValue(\r\n                                          lead,\r\n                                          kanbanSettingsData?.swim_lane\r\n                                            ?.attribute || LEAD_STATUS\r\n                                        ) === swim_lane.name &&\r\n                                        getLeadValue(\r\n                                          lead,\r\n                                          kanbanSettingsData?.lane?.attribute ||\r\n                                            STAGE_GROUP\r\n                                        ) === lane.name\r\n                                    ) ?? [];\r\n\r\n                                  const key = `${lane.name}-${swim_lane.name}`;\r\n                                  const isExpanded = showMoreMap[key];\r\n\r\n                                  const visibleCards = isExpanded\r\n                                    ? cards\r\n                                    : cards?.slice(0, 3);\r\n\r\n                                  return (\r\n                                    <>\r\n                                      {visibleCards.map((card: any) => (\r\n                                        <KanbanCardComponent\r\n                                          key={card.id}\r\n                                          cardData={card}\r\n                                          color={\r\n                                            lane?.color ||\r\n                                            COLOR_CONSTANTS[index % 4].color\r\n                                          }\r\n                                          darkColor={\r\n                                            lane?.darkColor ||\r\n                                            COLOR_CONSTANTS[index % 4].darkColor\r\n                                          }\r\n                                          darkerColor={\r\n                                            lane?.darkerColor ||\r\n                                            COLOR_CONSTANTS[index % 4]\r\n                                              .darkerColor\r\n                                          }\r\n                                        />\r\n                                      ))}\r\n\r\n                                      {cards?.length > 3 && (\r\n                                        <Typography\r\n                                          onClick={() => toggleShowMore(key)}\r\n                                          sx={kanbanStyles.showMoreStyle}\r\n                                        >\r\n                                          {isExpanded\r\n                                            ? \"Show Less\"\r\n                                            : \"Show More\"}\r\n                                        </Typography>\r\n                                      )}\r\n                                    </>\r\n                                  );\r\n                                })()}\r\n                              </Box>\r\n                            )}\r\n                          </Box>\r\n                        ))}\r\n                      </Box>\r\n                    </AccordionDetails>\r\n                  </Accordion>\r\n                ))}\r\n              {!(metaData?.swim_lanes?.length > 0) &&\r\n                !(metaData?.sub_lanes?.length > 0) && (\r\n                  <Box sx={{ ...kanbanStyles.syncingStyle, pl: \"72px\" }}>\r\n                    {metaData?.lanes?.map((lane: Lane, index: number) => (\r\n                      <Box\r\n                        className=\"column\"\r\n                        sx={{\r\n                          ...kanbanStyles.columnStyle,\r\n                          bgcolor:\r\n                            lane?.color || COLOR_CONSTANTS[index % 4].color,\r\n                        }}\r\n                        key={lane.id}\r\n                      >\r\n                        {!(metaData?.swim_lanes?.length > 0) && (\r\n                          <Box\r\n                            sx={{\r\n                              display: \"flex\",\r\n                              flexDirection: \"column\",\r\n                              gap: \"12px\",\r\n                            }}\r\n                          >\r\n                            {(() => {\r\n                              const cards =\r\n                                data?.filter(\r\n                                  (lead: any) =>\r\n                                    getLeadValue(\r\n                                      lead,\r\n                                      kanbanSettingsData?.lane?.attribute ||\r\n                                        STAGE_GROUP\r\n                                    ) === lane.name\r\n                                ) ?? [];\r\n\r\n                              const key = `${lane.name}`;\r\n                              const isExpanded = showMoreMap[key];\r\n\r\n                              const visibleCards = isExpanded\r\n                                ? cards\r\n                                : cards?.slice(0, 3);\r\n\r\n                              return (\r\n                                <>\r\n                                  {visibleCards.map((card: any) => (\r\n                                    <KanbanCardComponent\r\n                                      key={card.id}\r\n                                      cardData={card}\r\n                                      color={\r\n                                        lane?.color ||\r\n                                        COLOR_CONSTANTS[index % 4].color\r\n                                      }\r\n                                      darkColor={\r\n                                        lane?.darkColor ||\r\n                                        COLOR_CONSTANTS[index % 4].darkColor\r\n                                      }\r\n                                      darkerColor={\r\n                                        lane?.darkerColor ||\r\n                                        COLOR_CONSTANTS[index % 4].darkerColor\r\n                                      }\r\n                                    />\r\n                                  ))}\r\n\r\n                                  {cards?.length > 3 && (\r\n                                    <Typography\r\n                                      onClick={() => toggleShowMore(key)}\r\n                                      sx={kanbanStyles.showMoreStyle}\r\n                                    >\r\n                                      {isExpanded ? \"Show Less\" : \"Show More\"}\r\n                                    </Typography>\r\n                                  )}\r\n                                </>\r\n                              );\r\n                            })()}\r\n                          </Box>\r\n                        )}\r\n                      </Box>\r\n                    ))}\r\n                  </Box>\r\n                )}\r\n              {!(metaData?.swim_lanes?.length > 0) &&\r\n                metaData?.sub_lanes?.length > 0 && (\r\n                  <Box sx={{ ...kanbanStyles.syncingStyle, pl: \"72px\" }}>\r\n                    {metaData?.lanes?.map((lane: Lane, index: number) => (\r\n                      <Box\r\n                        className=\"column\"\r\n                        sx={{\r\n                          ...kanbanStyles.columnStyle,\r\n                          bgcolor:\r\n                            lane?.color || COLOR_CONSTANTS[index % 4].color,\r\n                        }}\r\n                        key={lane.id}\r\n                      >\r\n                        {metaData?.sub_lanes?.length > 0 &&\r\n                          metaData?.sub_lanes\r\n                            ?.filter(\r\n                              (sub_lane: SubLane) =>\r\n                                sub_lane.lane_id.toString() ==\r\n                                lane.id.toString()\r\n                            )\r\n                            ?.map((sub_section: SubLane) => {\r\n                              const subLaneKey = `${lane.name}-${sub_section.name}`;\r\n\r\n                              const subLaneCount = getSubLaneCount({\r\n                                laneName: lane?.name,\r\n                                subLaneName: sub_section?.name,\r\n                              });\r\n                              const hasLeads = subLaneCount > 0;\r\n                              console.log(\"hasLeads\", hasLeads);\r\n\r\n                              return (\r\n                                <Accordion\r\n                                  key={sub_section.id}\r\n                                  expanded={\r\n                                    hasLeads\r\n                                      ? subLaneExpanded[subLaneKey] ?? true // auto-expand only if leads exist\r\n                                      : false // force collapse if no leads\r\n                                  }\r\n                                  onChange={() => toggleSubLane(subLaneKey)}\r\n                                  sx={{\r\n                                    ...kanbanStyles.stageStyle,\r\n                                    borderLeft: `4px solid ${\r\n                                      lane.darkColor ||\r\n                                      COLOR_CONSTANTS[index % 4].darkColor\r\n                                    }`,\r\n                                  }}\r\n                                >\r\n                                  <AccordionSummary\r\n                                    expandIcon={\r\n                                      <ExpandMoreIcon\r\n                                        sx={{\r\n                                          display: hasLeads ? \"block\" : \"none\",\r\n                                        }}\r\n                                      />\r\n                                    }\r\n                                    sx={kanbanStyles.subSectionAccordion}\r\n                                  >\r\n                                    <Box\r\n                                      sx={\r\n                                        kanbanStyles.subSectionHeaderContainer\r\n                                      }\r\n                                    >\r\n                                      <Box\r\n                                        className=\"sub-section-count\"\r\n                                        sx={{\r\n                                          ...kanbanStyles.subSectionCountContainer,\r\n                                          bgcolor:\r\n                                            lane?.darkColor ||\r\n                                            COLOR_CONSTANTS[index % 4]\r\n                                              .darkColor,\r\n                                        }}\r\n                                      >\r\n                                        {getSubLaneCount({\r\n                                          laneName: lane?.name,\r\n                                          subLaneName: sub_section?.name,\r\n                                        })}\r\n                                      </Box>\r\n                                      <Typography\r\n                                        fontWeight=\"700\"\r\n                                        color=\"#555354\"\r\n                                        fontSize=\"12px\"\r\n                                      >\r\n                                        {sub_section?.name}\r\n                                      </Typography>\r\n                                    </Box>\r\n                                  </AccordionSummary>\r\n\r\n                                  <AccordionDetails\r\n                                    sx={kanbanStyles.cardsContainer}\r\n                                  >\r\n                                    {(() => {\r\n                                      const cards =\r\n                                        data?.filter(\r\n                                          (lead: any) =>\r\n                                            getLeadValue(lead, STAGE) ===\r\n                                              sub_section.name &&\r\n                                            getLeadValue(\r\n                                              lead,\r\n                                              kanbanSettingsData?.lane\r\n                                                ?.attribute || STAGE_GROUP\r\n                                            ) === lane.name\r\n                                        ) ?? [];\r\n\r\n                                      const key = `${lane.name}-${sub_section.name}`;\r\n                                      const isExpanded = showMoreMap[key];\r\n\r\n                                      const visibleCards = isExpanded\r\n                                        ? cards\r\n                                        : cards?.slice(0, 3);\r\n\r\n                                      return (\r\n                                        <>\r\n                                          {visibleCards.map((card: any) => (\r\n                                            <KanbanCardComponent\r\n                                              key={card.id}\r\n                                              cardData={card}\r\n                                              color={\r\n                                                lane?.color ||\r\n                                                COLOR_CONSTANTS[index % 4].color\r\n                                              }\r\n                                              darkColor={\r\n                                                lane?.darkColor ||\r\n                                                COLOR_CONSTANTS[index % 4]\r\n                                                  .darkColor\r\n                                              }\r\n                                              darkerColor={\r\n                                                lane?.darkerColor ||\r\n                                                COLOR_CONSTANTS[index % 4]\r\n                                                  .darkerColor\r\n                                              }\r\n                                            />\r\n                                          ))}\r\n\r\n                                          {cards?.length > 3 && (\r\n                                            <Typography\r\n                                              onClick={() =>\r\n                                                toggleShowMore(key)\r\n                                              }\r\n                                              sx={kanbanStyles.showMoreStyle}\r\n                                            >\r\n                                              {isExpanded\r\n                                                ? \"Show Less\"\r\n                                                : \"Show More\"}\r\n                                            </Typography>\r\n                                          )}\r\n                                        </>\r\n                                      );\r\n                                    })()}\r\n                                  </AccordionDetails>\r\n                                </Accordion>\r\n                              );\r\n                            })}\r\n                      </Box>\r\n                    ))}\r\n                  </Box>\r\n                )}\r\n            </Box>\r\n          </Box>\r\n        </Box>\r\n      )}\r\n    </>\r\n  );\r\n};\r\n\r\nexport default Kanban;\r\n"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","UpArrow","_jsxs","xmlns","viewBox","width","height","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","children","_jsx","x1","y1","x2","y2","points","DownArrow","TableFirstPageIcon","role","d","TableLastPageIcon","EditIcon","fillOpacity","DeleteIcon","HideColumnIcon","DragHandleIcon","className","transform","IconPinOutline","props","IconPinOffOutline","LoaderAnimation","cx","cy","r","attributeName","dur","values","repeatCount","begin","ChangeLayoutIcon","id","maskType","maskUnits","x","y","mask","CloseIcon","SearchIcon","SortingIcon","FilterationIcon","color","HideIcon","VisibilityIcon","VisibilityOffIcon","DragandDrogIcon","AddIcon","CheckBox","CrossBox","EyeIcon","ClosedEyeIcon","layoutIcons","Board","Table","Timeline","List","Calendar","Gallery","Charts","LayoutSelector","onSelect","selectedLayout","Box","sx","maxWidth","display","justifyContent","alignItems","px","py","backgroundColor","Typography","variant","fontWeight","fontSize","IconButton","onClick","Grid","container","spacing","p","Object","keys","map","layout","isSelected","size","ButtonBase","border","borderRadius","flexDirection","transition","boxShadow","mb","opacity","useFullscreenPopoverContainer","isFullscreen","setIsFullscreen","useState","fullscreenElement","setContainer","undefined","useEffect","handleFullscreenChange","el","addEventListener","removeEventListener","ViewMore","compactMode","onCompactToggle","onFullscreenToggle","tableStates","onClose","wrapColumns","setWrapColumns","MUISwitch","checked","all_wrap","onChange","prev","SortableItem","attributes","listeners","setNodeRef","useSortable","CSS","Transform","toString","gap","cursor","flexGrow","SortPopover","anchorEl","columns","sorts","setSorts","sensors","useSensors","useSensor","MouseSensor","TouchSensor","KeyboardSensor","handleChange","field","value","updated","item","triggerTableSortUpdate","sortItems","sortingPayload","desc","direction","Popover","open","Boolean","anchorOrigin","vertical","horizontal","minWidth","margin","length","DndContext","collisionDetection","closestCenter","onDragEnd","event","active","over","oldIndex","findIndex","newIndex","arrayMove","SortableContext","items","s","strategy","verticalListSortingStrategy","sort","Select","e","target","fullWidth","col","MenuItem","label","filter","handleRemove","Button","newSort","Date","now","startIcon","DraggableColumn","column","onToggle","isVisible","getIsVisible","columnDef","header","str","replace","char","toUpperCase","trim","ColumnToggle","table","columnOrder","setColumnOrder","allColumns","getAllLeafColumns","shownColumns","find","hiddenColumns","toggleVisibility","columnId","getColumn","activeCol","overCol","indexOf","forEach","fontStyle","customDebounce","func","delay","timerId","args","context","this","clearTimeout","setTimeout","apply","searchStyles","showSearchInput","marginRight","paddingRight","paddingLeft","TableSearch","setShowSearchInput","localValue","setLocalValue","searchContainerRef","useRef","debouncedOnChange","useCallback","newValue","handler","handleClickOutside","current","contains","useOutsideClick","position","TextField","placeholder","onKeyDown","key","InputProps","startAdornment","InputAdornment","querySelector","focus","edge","endAdornment","CloseRoundedIcon","Topbar","isCompactTable","fullscreenToggle","setIsCompactTable","paginationComponent","topbarOptions","onFilterButtonClick","sortAnchorEl","setSortAnchorEl","groupBy","setGroupBy","layoutAnchorEl","setLayoutAnchorEl","setSelectedLayout","columnAnchorEl","setColumnAnchorEl","setViewMoreAnchorEl","leftSideComponent","rightSideComponent","showColumnToggle","showChangeLayoutToggle","showSortingToggle","showFilterToggle","showSearch","searchValue","onSearchChange","fullscreenContainer","handleExternalLayoutTrigger","detail","handleExternalFilterTrigger","handleExternalViewMoreTrigger","handleExternalSearchTrigger","window","viewMoreAnchorEl","isViewMoreOpen","overflowX","whiteSpace","title","customEvent","CustomEvent","dispatchEvent","_Fragment","currentTarget","mt","meta","sortingRules","setSorting","showTableFilter","filters","top","right","transformOrigin","onGroupByChange","PaginationContainer","styled","theme","padding","typography","pxToRem","palette","common","white","breakpoints","down","GoToPageContainer","RowsPerPageContainer","RecordsRangeContainer","PageRangeContainer","PaginationButtons","PaginationButton","grey","action","disabled","RowsPerPageSelect","shape","GoToPageInput","InputBase","textAlign","divider","DefaultPagination","rowsPerPageArray","paginationOptions","pageIndex","getState","pagination","pageCount","getPageCount","pageSize","rowCount","getRowCount","recordsRangeFirst","recordsRangeLast","Math","min","isFullView","paginationView","mr","defaultValue","inputProps","name","max","page","Number","setPageIndex","setPageSize","getCanPreviousPage","previousPage","NavigateBeforeRounded","getCanNextPage","nextPage","NavigateNextRounded","COLOR_CONSTANTS","darkColor","darkerColor","STAGE_GROUP","LEAD_STATUS","STAGE","LEAD_SOURCE","getColumnPinningStyles","isPinned","getIsPinned","isLastLeftPinnedColumn","getIsLastColumn","isFirstRightPinnedColumn","getIsFirstColumn","background","left","getStart","getAfter","getSize","getColumnPinningStylesBody","environments","adm_dev","crm_dev","uat","axios","create","baseURL","timeout","headers","interceptors","request","use","config","token","localStorage","getItem","Authorization","error","Promise","reject","TableBodyRow","shouldForwardProp","prop","hoverable","selected","striped","paper","mode","hover","TableBodyCell","compact","isDragging","wrap","borderBottom","wordBreak","DragAlongCell","cell","align","Translate","zIndex","getIsPlaceholder","flexRender","getContext","Checkbox","indeterminate","uuidv4","check","setCheck","React","isChecked","TableBody","featureOptions","NestedComponent","enableColumnReordering","enableRowSelection","getRowModel","rows","row","renderedRow","getIsSelected","expanded","getIsExpanded","getIsSomeSelected","getToggleSelectedHandler","getVisibleCells","horizontalListSortingStrategy","Fragment","renderRow","ColumnResizeHandle","isResizing","userSelect","touchAction","TableHeadButton","TableHeadSort","sortable","marginLeft","TableDndButton","TableHeadContent","TableHeadRoot","sticky","TableHeadRow","TableHeadCell","TableHeadPin","stopPropagation","pin","TableHeadPopover","onSaveSettings","dense","ListItemButton","toggleSorting","ListItemIcon","ListItemText","primary","handleUpdateSettings","Switch","toggleWrapForColumn","TableColumnResizeHandle","getIsResizing","onDoubleClick","resetSize","onMouseDown","getResizeHandler","onTouchStart","DraggableTableHeader","activeTab","enableColumnPinning","setAnchorEl","handleClose","onMouseLeave","colSpan","compactTable","minSize","maxSize","isPlaceholder","getCanSort","asc","getIsSorted","getCanResize","TableHead","filterSettingStates","stickyHeader","getHeaderGroups","headerGroup","getIsAllRowsSelected","getIsSomeRowsSelected","toggleAllRowsSelected","handleMenuToggle","TableDND","modifiers","restrictToHorizontalAxis","TableWrapper","data","nestedComponent","loadingOptions","isLoading","customRenderFn","shouldHideColumn","emptyListComponent","filterOptions","Array","isArray","Error","metaColumns","setMetaColumns","updatedColumns","accessorKey","index","ctx","propName","customFn","getValue","where","defaultPinned","columnPinning","c","tableRef","craftPaginationOptions","showPagination","paginationPosition","totalRows","craftTopbarOptions","showCompactTableToggle","viewMoreToggle","craftFeatureOptions","enableTopbar","enableSorting","enableServerSidePagination","enableServerSideSorting","enableColumnResizing","enableMultiColumnSorting","enableWordBreakAll","sorting","setPagination","rowSelection","setRowSelection","setExpanded","useReactTable","state","getCoreRowModel","onSortingChange","getSortedRowModel","manualSorting","getPaginationRowModel","onPaginationChange","manualPagination","onRowSelectionChange","columnResizeDirection","columnResizeMode","onColumnOrderChange","getExpandedRowModel","onExpandedChange","getSubRows","subRows","loadingComponent","loaderText","showFilterCondition","show","exitFullscreen","requestFullscreen","catch","err","console","component","useCraftTable","paginationPageSize","setFilters","savedFilterEditValue","setSavedFilterEditValue","filterToDelete","setFilterToDelete","filterSelectedAttributeValue","setFilterSelectedAttributeValue","filterMaster","setFilterMaster","setShowTableFilter","showFilterOptions","setShowFilterOption","filterData","setFilterData","selectedFilterEntity","setSelectedFilterEntity","setColumnPinning","useCraftTableFilterSettings","showListViewSettings","setShowListViewSettings","settingsData","setSettingsData","kanbanSettingsData","setKanbanSettingsData","quickTabStates","setQuickTabStates","columnTabState","setColumnTabState","sortingTabState","setSortingTabState","saveButtonError","setSaveButtonError","hasError","messages","quick_tab","TableTabsRoot","Tabs","minHeight","tabsClasses","flexContainer","indicator","TableTab","Tab","maxHeight","textTransform","tabClasses","text","TableTabCount","lineHeight","TableTabs","loading","tabsData","tab_name","count","settingsOptions","CircularProgress","normalizedTabs","useMemo","tab","defaultTab","t","selectedTab","showIcon","SettingsOutlined","_","scrollButtons","String","padStart","ConfirmModal","description","buttons","input","inputValue","setInputValue","setError","Dialog","reason","PaperProps","DialogTitle","marginX","paddingBottom","DialogContent","marginBottom","marginTop","labelClassName","required","multiline","DialogActions","button","handleButtonClick","CustomTabPanel","hidden","CustomTabs","tabItems","activeFilterIndex","handleCrossClick","tabsProps","hoveredTab","setHoveredTab","idx","isActive","isHovered","onMouseEnter","FormDropdown","control","setValue","dropdownList","onValueChange","Controller","filter_attribute_name","filter_operator","render","FormControl","disableUnderline","newOperator","oldOperator","filter_attribute_data_type","moment","format","shouldDirty","filterStyles","scrollbarCustom","overflowY","pr","filterContainer","filterMainHeader","bgcolor","mx","filterMainComponentWrapper","filterFormStyles","formEditModeStyle","formFlexContainer","formListItem","formListSectionHeader","formListItemHeader","formListItemHeaderName","formListItemHeaderDropdown","CustomSearch","search","setSearch","val","borderColor","EmptyList","FilterCriteriaEntityList","filterComponentOptions","searchTerm","setSearchTerm","isSingleEntity","tabOptions","allEntities","mainFilter","entityList","entitiesToShow","filterEntityTypes","f","filter_entity_type","entity","includes","toLowerCase","my","ListItem","handleSelectEntity","Loader","paddingBlock","FilterCriteriaList","handleAddFilter","shouldShowCloseButton","some","entityWiseCriteria","isPending","filteredEntities","isAlreadySelected","filter_attribute","attribute_key","TextFieldStyles","FormTextfield","filter_value","FormDatePicker","views","isRange","isRelativeToToday","isEmptyOperator","LocalizationProvider","dateAdapter","AdapterDateFns","toDate","todayDate","fromDate","DatePicker","date","formatted","slotProps","textField","FormMultiSelect","dropdownData","isFlatJson","options","getOptionValue","cleanedValue","multiple","filtered","renderValue","match","join","optionValue","dateAllowedOperators","FilterCriteria","columnsData","onChangeFunction","FilterButton","main","dark","filterButtonRef","filterButtonWidth","setWidth","resizeObserver","ResizeObserver","clientWidth","observe","disconnect","useElementWidth","isSingleFilter","disableButton","ClickAwayListener","onClickAway","Paper","saved_filters","selectedId","attribute","operation_list","element_type","operationKey","elementType","getOperationKeyByElementType","matchingDropdownList","defaultOperator","newSelectedFilter","datasource_list","dropdown_list","filter_entity_name","newFilterState","FilterForm","handleRemoveFilter","editMode","onSaveFilterButtonClick","setDeleteFilterModalOpen","showSaveButton","showClearAllButton","customButtons","filterName","selectedName","isOwner","is_owner","defaultValues","filterValues","reduce","acc","curr","operator","dummyChange","watch","reset","unregister","useForm","resetOptions","keepDirtyValues","keepErrors","formValues","debouncedUpdateFilters","updatedFilters","updateFiltersFromForm","filterValue","groupedFilters","push","handleRemoveEntityType","entityType","remainingFilters","onSubmit","preventDefault","inputRef","entries","overflow","reverse","dummy","fieldValue","dataType","showDatePicker","resolveFilterInput","activeFilterTabIndex","btn","MainFilter","mainBoxStyles","newFilters","SavedFilterEditComponent","setEditMode","showBackButton","savedFilter","selectedCode","shareWithTeam","allowTeamEdit","BackArrow","SavedFilter","tabValue","myFilters","saved_filter","code","is_shared","created_by","is_editable","sharedFilters","shared_filter","prefs","sharedPreferences","preferences","shared_meta","editModeFromTab","applyFilterStates","newFilterMaster","radio","handleListItemClick","handleApplyFilter","openAccordion","setOpenAccordion","toggleAccodion","accordion","Accordion","disableGutters","elevation","AccordionSummary","expandIcon","ExpandMoreIcon","Divider","AccordionDetails","scrollbarWidth","source","visibility","renderSharedFilters","AttributesFilter","selectedAttribute","currentRadio","handleSingleRadioSelect","selectedAttr","matchingColumn","column_list","updatedRadio","newFilter","exists","updatedFilterMaster","selectedAttributeOptions","attributeKey","newFilterMasterState","displayEmpty","option","FormControlLabel","Radio","deepMergeObjects","output","SingleFilterRendering","showFilter","commonProps","editProps","attributesProps","SavedFilterModalView","onSave","disableShareFilter","forceShowSharingControls","setShareWithTeam","setAllowTeamEdit","filterNameValue","discriptionValue","isSaveDisabled","selectedFilterId","filterId","filterObj1","filterObj","initialShare","initialAllow","persistPreferences","sharedValue","editableValue","selectedFilter","selectedSavedFilter","showPrefields","showCheckboxes","isshow","getModalTitle","pt","minRows","nextAllow","gridTemplateColumns","created_date","toLocaleString","readOnly","CalendarTodayIcon","modified_date","modified_by","TableFilter","onDeleteFilter","onSaveFilter","onUpdateFilter","setTabValue","saveFilterModalOpen","setSaveFilterModalOpen","savedFilterModalOpen","setSavedFilterModalOpen","deleteFilterModalOpen","finalComponentOptions","showMainHeader","mainHeaderTitle","showTabs","showMainFilter","showSavedFilter","showAttributesFilter","editModeFromTabOptions","tabMapping","filterNameInput","hasSavedFilterRecords","handleSaveFilterButtonClick","savedFilterProps","tabType","clearAttributeRadio","patches","isRuleEngine","recordFilterComponentProps","edit","save","secondary","isSingleSavedFilterEditMode","delete","hasSavedFilters","verticalTabStyles","mainTabsContainer","mainTabContainer","mainTabLabel","horizontalTabStyles","CustomVerticalTabs","orientation","DraggableListItem","containerId","DragIndicator","dialogStyles","dialogTitle","dialogContent","paddingTop","dialogActionsButton","listingValuesStyles","wrapper","heading","draggableContainer","draggableCover","headerContainer","TabsStyles","mainTabsHeader","mainTabDropdown","mainTabSelect","selectDropdownSeparator","checkboxStyle","ListingValuesContent","onItemToggle","flex","ListingValues","filteredValues","buttonText","headerText","tabsApiDataLoading","enableDragAndDrop","AlertComponenet","useDroppable","InfoAlert","message","Alert","severity","QuickTab","tabsApiData","columnTabAttributes","currentQuickAttribute","setCurrentQuickAttribute","mappedColumns","normalizeTabItem","show_list","hide_list","showList","isValidShowList","ERROR_CODE","showListValues","hideListValues","i","constructHideList","filteredListValues","handleItemToggle","fromContainerId","toShowList","toHideList","updatedColumn","updatedSorting","splice","isDefault","tabs","sortby","updatedTabs","updatedSortingTabs","enableDND","MenuProps","currentContainer","overContainer","newShowList","newHideList","removed","sortingExists","columnExists","a","b","sort_by","currentShowList","currentHideList","availableSlots","limitedHideList","slice","updatedQuickTab","isAllSelected","isCombineOther","selectedTabStyle","CustomToggleSwitchButton","ToggleButtonGroup","exclusive","ToggleButton","isDisabled","SETTINGS_TABS","KANBAN_SETTINGS_TABS","TOGGLE_BUTTON_TABS","ColumnTab","columnTabAttributesLoading","selectedTabIndex","setSelectedTabIndex","settingsColumnState","isColumnDefault","isStateEmpty","isDefaultEmpty","isTabWiseEmpty","mappedTabs","hideList","hasOtherMessages","currentTab","getCurrentLists","visible","columnState","moved","hasShowListQuickTabs","activeItem","list","Sorting","setActiveTab","isSortingDefault","emptySortBy","order","generatedTabs","PointerSensor","activeTabIndex","tabSortedList","updateSortList","handleDNDDropdownChange","showAddSortButton","stateLength","isAddSortDisabled","hasEmptyColumn","reordered","columnKey","CustomDialog","DialogTransition","forwardRef","Slide","CustomButton","customSx","Lane","selectAttributeData","laneHideListData","currentLaneAttribute","setCurrentLaneAttribute","lane","log","swim_lane","isWorkflowAttribute","isSourceAttribute","attr","displaySortingValue","isSubLane","SwimLane","selectSwinLandData","swimLaneHideListData","currentSwimLaneAttribute","setCurrentSwimLaneAttribute","isStatusAttribute","QuickFilterSettings","view","columnsDataLoading","quickTabAttributes","quickTabAttributesLoading","sortingTabAttributes","sortingTabAttributesLoading","onSaveSettingsData","onSaveKanbanSettingsData","hasAPIData","disbaledCondition","handleSaveKanbanSetSettingsData","updatedLane","slots","Column","GroupBy","copyColumnTabState","copySortingTabState","copyQuickTabStates","kanbanStyles","syncingStyle","topHeader","laneHeader","badge","swimlaneWrapperStyle","columnStyle","stageStyle","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","subSectionAccordion","subSectionCountContainer","cardsContainer","settingStyle","swimLaneAccordionStyle","subSectionHeaderContainer","showMoreStyle","Kanban","metaData","KanbanCardComponent","showSettings","onOpenSettings","expandedPanels","setExpandedPanels","Active","subLaneExpanded","setSubLaneExpanded","showMoreMap","setShowMoreMap","swim_lanes","initial","sub_lanes","sub_lane","toggleShowMore","toggleSubLane","subLaneKey","getLeadValue","lead","getSubLaneCount","laneName","swimLaneName","subLaneName","getFilteredLeads","SettingsOutlinedIcon","lanes","panel","isExpanded","ArrowDropDownIcon","ml","pl","lane_id","sub_section","hasLeads","borderLeft","cards","visibleCards","card","cardData"],"mappings":"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","x_google_ignoreList":[0]}