@zydon/common 2.8.83 → 2.8.85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
  var r=(e=>(e.AND="AND",e.OR="OR",e))(r||{}),t=(e=>(e.ASC="ASC",e.DESC="DESC",e))(t||{});
2
2
 
3
3
  export { r as a, t as b };
4
- //# sourceMappingURL=chunk-M62EJMQ6.js.map
4
+ //# sourceMappingURL=chunk-P64QBDAO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/model/filter.ts"],"names":["FilterOperator","SortType"],"mappings":"AAEO,IAAKA,OACVA,EAAA,IAAM,MACNA,EAAA,GAAK,KAFKA,OAAA,IA0CAC,OACVA,EAAA,IAAM,MACNA,EAAA,KAAO,OAFGA,OAAA","sourcesContent":["import { Condition } from './entity-metadata';\n\nexport enum FilterOperator {\n AND = 'AND',\n OR = 'OR',\n}\n\nexport interface FilterValue {\n fieldName: string;\n conditional: Condition;\n value: string[];\n}\n\nexport interface FilterState {\n [fieldName: string]: FilterValue;\n}\n\nexport interface FilterConditional {\n fieldName: string;\n conditional: Condition;\n value: string[];\n valueLabels?: Record<string, string>;\n}\n\nexport interface FilterGroup {\n operator: FilterOperator;\n conditionals: FilterConditional[];\n}\n\nexport interface Filter {\n operator: FilterOperator;\n groups: FilterGroup[];\n}\n\nexport interface FilterCondition {\n id: string;\n operator: FilterOperator;\n fieldName: string;\n conditional: Condition;\n value: string[];\n /** Labels de exibição para valores de campos ENTITY (ex: { \"uuid-da-marca\": \"Nome da Marca\" }). Usado apenas na UI. */\n valueLabels?: Record<string, string>;\n}\n\nexport enum SortType {\n ASC = 'ASC',\n DESC = 'DESC',\n}\n\nexport interface Sort {\n fieldName: string;\n sortType: SortType;\n}\n\nexport interface GridQuery {\n page?: number;\n perPage?: number;\n search?: string;\n criteria?: string[];\n arguments?: Record<string, unknown>;\n filter?: Filter;\n sort?: Sort;\n}\n"]}
@@ -10,6 +10,7 @@ import * as _mui_material_styles from '@mui/material/styles';
10
10
  import * as _mui_material_OverridableComponent from '@mui/material/OverridableComponent';
11
11
  import * as _mui_material from '@mui/material';
12
12
  import * as _mui_material_Button from '@mui/material/Button';
13
+ import '../../../types/orderProjection.js';
13
14
 
14
15
  interface ChartItem {
15
16
  name: string;
@@ -90,7 +90,7 @@ declare const SelectionOverlay: _emotion_styled.StyledComponent<_mui_material_St
90
90
  }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
91
91
  declare const SelectionCount: _emotion_styled.StyledComponent<_mui_material_Typography.TypographyOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
92
92
  ref?: ((instance: HTMLSpanElement | null) => void) | react.RefObject<HTMLSpanElement> | null | undefined;
93
- }, "typography" | "zIndex" | "fontFamily" | "fontWeight" | "children" | "pt" | "className" | "style" | "classes" | "sx" | "variant" | "border" | "boxShadow" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxSizing" | "color" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "top" | "visibility" | "whiteSpace" | "width" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "p" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "displayPrint" | "align" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
93
+ }, "fontFamily" | "children" | "pt" | "className" | "style" | "classes" | "sx" | "variant" | "border" | "boxShadow" | "fontWeight" | "zIndex" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxSizing" | "color" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "top" | "visibility" | "whiteSpace" | "width" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "p" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "typography" | "displayPrint" | "align" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
94
94
  declare const SelectionActions: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
95
95
  ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
96
96
  }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
@@ -1,5 +1,5 @@
1
1
  import '../../chunk-4P2L7UJA.js';
2
- export { a as FilterOperator, b as SortType } from '../../chunk-M62EJMQ6.js';
2
+ export { a as FilterOperator, b as SortType } from '../../chunk-P64QBDAO.js';
3
3
  import { a as a$4 } from '../../chunk-WLRSUL67.js';
4
4
  import { d, c } from '../../chunk-N7IK5EUP.js';
5
5
  import { h, a as a$6 } from '../../chunk-OF6623HG.js';
@@ -37,26 +37,26 @@ import '../../chunk-CFNATBO2.js';
37
37
  import { memo, useState, useMemo, useCallback, useEffect, useRef } from 'react';
38
38
  import $o from 'react-fast-compare';
39
39
  import et from '@mui/material/Badge';
40
- import Fe from '@mui/material/Button';
40
+ import he from '@mui/material/Button';
41
41
  import tt from '@mui/material/IconButton';
42
- import Lt from '@mui/material/Stack';
42
+ import wt from '@mui/material/Stack';
43
43
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
44
44
  import yt from '@mui/material/Divider';
45
- import be from '@mui/material/Typography';
45
+ import Se from '@mui/material/Typography';
46
46
  import ge from '@mui/material/FormControl';
47
47
  import Ce from '@mui/material/InputLabel';
48
- import J from '@mui/material/MenuItem';
48
+ import j from '@mui/material/MenuItem';
49
49
  import ye from '@mui/material/Select';
50
50
  import cr from '@mui/material/TextField';
51
- import ee from '@mui/material/Box';
51
+ import Z from '@mui/material/Box';
52
52
  import { styled } from '@mui/material/styles';
53
- import Lr from '@mui/material/Dialog';
53
+ import wr from '@mui/material/Dialog';
54
54
  import Pr from '@mui/material/DialogActions';
55
55
  import Or from '@mui/material/DialogContent';
56
56
  import kr from '@mui/material/DialogTitle';
57
57
  import li from '@mui/material/Chip';
58
58
 
59
- var Xo=({showFilterButton:e$1,isMobile:t,hasActiveFilters:o,activeFiltersCount:r,sort:n,onFilterClick:i,onSortClick:a$1})=>e$1?t?jsxs(Lt,{direction:"row",spacing:.5,children:[jsx(et,{badgeContent:r,color:"primary",invisible:r===0,sx:{"& .MuiBadge-badge":{transform:"scale(0.9) translate(10px, 9px)",opacity:r===0?0:1}},children:jsx(tt,{color:o?"primary":"default",onClick:i,size:"small","aria-label":"Filtrar",sx:{overflow:"visible"},children:jsx(a,{icon:"FILTER_VERTICAL"})})}),jsx(e,{sx:{height:16},orientation:"vertical",flexItem:!0}),jsx(tt,{color:n?"primary":"default",onClick:a$1,size:"small","aria-label":"Ordenar",children:jsx(a,{icon:n?.sortType==="DESC"?"SORTING_DESC":"SORTING_ASC"})})]}):jsx(et,{badgeContent:r,color:"primary",invisible:r===0,sx:{"& .MuiBadge-badge":r?{transform:"scale(0.9) translate(-3px, 7px)",position:"relative",opacity:1,transition:"none"}:{transition:"none",opacity:0}},children:jsx(Fe,{variant:"text",color:o?"primary":"inherit",startIcon:jsx(a,{icon:"FILTER_VERTICAL"}),onClick:i,size:"small",children:"Filtrar"})}):null,ot=memo(Xo,$o);var rt=e=>e.filter(t=>t.available_filter_conditions&&t.available_filter_conditions.length>0&&t.name!=="ACTIONS");var it=e=>{let{type:t,available_filter_conditions:o}=e;return o.length===0?"EQUALS":t==="TEXT"&&o.includes("LIKE")?"LIKE":o[0]},X=e=>e.value.length>0||e.conditional==="IS_NULL"||e.conditional==="IS_NOT_NULL",nt=e=>{if(e.length===0)return;let t=e.filter(X);if(t.length!==0)return {operator:"AND",groups:[{operator:t[0]?.operator||"AND",conditionals:t.map(o=>({fieldName:o.fieldName,conditional:o.conditional,value:o.value}))}]}};var at={["EQUALS"]:"Igual a",["NOT_EQUALS"]:"Diferente de",["LIKE"]:"Cont\xE9m",["NOT_LIKE"]:"N\xE3o cont\xE9m",["GREATER_THAN"]:"Maior que",["LESS_THAN"]:"Menor que",["GREATER_THAN_OR_EQUAL"]:"Maior ou igual a",["LESS_THAN_OR_EQUAL"]:"Menor ou igual a",["IN"]:"Em",["NOT_IN"]:"N\xE3o em",["IS_NULL"]:"\xC9 nulo",["IS_NOT_NULL"]:"N\xE3o \xE9 nulo"};var er=({config:e,metadata:t,value:o,initialLabel:r,onChange:n,disabled:i=!1})=>{let[a,,l]=a$1(!1),[d,m]=useState(""),p=a$2(d,400),{data:c,isLoading:f,isFetching:C}=e.useQuery({search:p||void 0,page:0,perPage:25,...e.queryParams},{skip:!a}),g=f||C,_=useMemo(()=>o?{value:o,label:r??o}:null,[o,r]),s=useMemo(()=>{let u=(c?.items??[]).map(y=>({label:String(y[t.description_field_name]??""),value:String(y[t.id_field_name]??"")})).filter(y=>y.value&&y.label);return _&&!u.some(y=>y.value.toString()===_.value.toString())&&u.unshift(_),u},[c,t.id_field_name,t.description_field_name,_]),R=useCallback(()=>l(!0),[l]),x=useCallback(()=>{l(!1),m("");},[l]),A=useCallback(u=>{if(!u){n("",void 0);return}let y=s.find(b=>b.value.toString()===u);n(u,y?.label);},[n,s]),B=useCallback(u=>{m(u??"");},[]);return jsx(a$3,{name:`entity-filter-${t.name}`,label:"Filtro",value:o||"",options:s,onChange:A,onSearch:B,loading:g,disabled:i,size:"small",filterOptions:u=>u,noOptionsText:d!==p?"Buscando...":"Nenhum resultado",InputLabelProps:{shrink:!0},sx:{flex:1,minWidth:120},open:a,onOpen:R,onClose:x})},st=memo(er);var ar=({value:e,onChange:t,totalConditions:o,isFirst:r})=>o===1?null:r?jsx(Lt,{sx:{width:55,flexShrink:0}}):jsxs(ye,{value:e,onChange:n=>t(n.target.value),size:"small",sx:{width:55,flexShrink:0},children:[jsx(J,{value:"AND",children:"e"}),jsx(J,{value:"OR",children:"ou"})]}),dt=memo(ar,$o);var G={whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},ur=({condition:e,fields:t,onChange:o,onRemove:r,totalConditions:n,isFirst:i,entityFilterConfig:a$1})=>{let l=useMemo(()=>t.find(s=>(s.filter_field_name??s.name)===e.fieldName),[t,e.fieldName]),d=useMemo(()=>l?.available_filter_conditions||[],[l]),m=useMemo(()=>!e.fieldName||e.conditional==="IS_NULL"||e.conditional==="IS_NOT_NULL",[e.fieldName,e.conditional]),p=useCallback(s=>{let R=t.find(A=>(A.filter_field_name??A.name)===s);if(!R)return;let x=R.available_filter_conditions[0]||"EQUALS";o({...e,fieldName:s,conditional:x,value:[]});},[t,e,o]),c=useCallback(s=>{o({...e,conditional:s});},[e,o]),f=useCallback(s=>{o({...e,value:s?[s]:[]});},[e,o]),C=useCallback((s,R)=>{let x={...e.valueLabels};s&&R&&(x[s]=R),o({...e,value:s?[s]:[],valueLabels:x});},[e,o]),g=useCallback(s=>{o({...e,operator:s});},[e,o]),_=()=>{if(l?.type==="BOOLEAN")return jsxs(ge,{size:"small",sx:{flex:1,minWidth:120},disabled:m,children:[jsx(Ce,{id:`value-label-${e.id}`,children:"Valor"}),jsxs(ye,{labelId:`value-label-${e.id}`,label:"Valor",value:e.value[0]||"",onChange:s=>f(s.target.value),size:"small",sx:{"& .MuiSelect-select":G},children:[jsx(J,{value:"true",children:"Verdadeiro"}),jsx(J,{value:"false",children:"Falso"})]})]});if(l?.type==="ENTITY"&&l.metadata&&a$1?.[l.metadata.name]){let s=e.value[0]||"";return jsx(st,{config:a$1[l.metadata.name],metadata:l.metadata,value:s,initialLabel:e.valueLabels?.[s],onChange:C,disabled:m})}return jsx(cr,{label:"Filtro",value:e.value[0]||"",onChange:s=>f(s.target.value),size:"small",disabled:m,InputLabelProps:{shrink:!0},sx:{flex:1,minWidth:120}})};return jsxs(Lt,{direction:"row",spacing:1,alignItems:"center",children:[jsx(tt,{onClick:r,size:"small","aria-label":"Remover filtro",sx:{flexShrink:0},children:jsx(a,{icon:"CLOSE_MARK_BUTTON",width:18})}),jsx(dt,{value:e.operator,onChange:g,totalConditions:n,isFirst:i}),jsxs(ge,{size:"small",sx:{minWidth:150,flex:1},children:[jsx(Ce,{id:`field-label-${e.id}`,children:"Coluna"}),jsx(ye,{labelId:`field-label-${e.id}`,label:"Coluna",value:e.fieldName,onChange:s=>p(s.target.value),size:"small",sx:{"& .MuiSelect-select":G},children:t.map(s=>jsx(J,{value:s.filter_field_name??s.name,sx:G,title:s.description||s.name,children:s.description||s.name},s.name))})]}),jsxs(ge,{size:"small",sx:{minWidth:90},disabled:!e.fieldName,children:[jsx(Ce,{id:`condition-label-${e.id}`,children:"Condi\xE7\xE3o"}),jsx(ye,{labelId:`condition-label-${e.id}`,label:"Condi\xE7\xE3o",value:e.conditional,onChange:s=>c(s.target.value),size:"small",sx:{"& .MuiSelect-select":G},children:d.map(s=>jsx(J,{value:s,sx:G,children:at[s]||s},s))})]}),_()]})},pt=memo(ur,$o);var yr=({filterableFields:e,conditions:t,onUpdateCondition:o,onRemoveCondition:r,entityFilterConfig:n})=>{let i=useCallback(m=>{o(m.id,m);},[o]),a=useCallback(m=>()=>{r(m);},[r]),l=useMemo(()=>t.map(m=>m.fieldName).filter(m=>!!m),[t]),d=useCallback(m=>e.filter(p=>!l.includes(p.name)||p.name===m),[e,l]);return e.length===0?jsx(be,{variant:"body2",color:"text.secondary",textAlign:"center",children:"Nenhum filtro dispon\xEDvel"}):t.length===0?jsxs(be,{variant:"body2",color:"text.secondary",textAlign:"center",children:["Clique em"," ",jsx(be,{component:"strong",variant:"body2",fontWeight:600,color:"text.primary",children:'"+"'})," ","para adicionar um filtro"]}):jsx(Fragment,{children:t.map((m,p)=>jsx(pt,{condition:m,fields:d(m.fieldName),onChange:i,onRemove:a(m.id),showOperator:p>0,totalConditions:t.length,isFirst:p===0,entityFilterConfig:n},m.id))})},ct=memo(yr,$o);var ut=styled(ee)({display:"flex",flexDirection:"column",height:"100%"}),ft=styled(ee)(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"space-between",padding:e.spacing(2,3)})),gt=styled(ee)(({theme:e})=>({flex:1,overflowY:"auto",padding:e.spacing(3),display:"flex",flexDirection:"column",gap:e.spacing(2)})),Ct=styled(ee)(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"space-between",padding:e.spacing(2)}));var Dr=({onClose:e,fields:t,conditions:o,onAddCondition:r,onUpdateCondition:n,onRemoveCondition:i,onApply:a$1,onClear:l,onCancel:d,entityFilterConfig:m})=>{let p=rt(t),c=o.length>0,f=useCallback(()=>{a$1(),e();},[a$1,e]),C=useCallback(()=>{l(),e();},[l,e]),g=useCallback(()=>{d();},[d]);return jsxs(ut,{children:[jsxs(ft,{children:[jsx(be,{variant:"overline",fontWeight:600,color:"text.secondary",children:"Defina as condi\xE7\xF5es para filtrar"}),jsx(tt,{onClick:r,size:"small","aria-label":"Adicionar filtro",title:"Adicionar filtro",disabled:o.length>=p.length,children:jsx(a,{icon:"SIMPLE_ADD"})})]}),jsx(yt,{}),jsx(gt,{children:jsx(ct,{filterableFields:p,conditions:o,onUpdateCondition:n,onRemoveCondition:i,entityFilterConfig:m})}),jsx(yt,{}),jsxs(Ct,{children:[jsx(Fe,{variant:"text",color:"inherit",onClick:C,children:"Limpar"}),jsxs(Lt,{direction:"row",spacing:1,children:[jsx(Fe,{variant:"outlined",color:"inherit",onClick:g,startIcon:jsx(a,{icon:"CANCEL_CIRCLE"}),children:"Cancelar"}),jsx(Fe,{variant:"contained",onClick:f,disabled:!c,startIcon:jsx(a,{icon:"SIMPLE_CHECK"}),children:"Aplicar"})]})]})]})},St=memo(Dr,$o);var Nr=e=>jsx(a$4,{open:e.open,onClose:e.onClose,anchorEl:e.anchorEl,isMobile:e.isMobileProp,popoverProps:{slotProps:{paper:{sx:{width:520,maxWidth:"calc(100vw - 24px)",maxHeight:600,mt:1}}}},drawerProps:{anchor:"right",PaperProps:{sx:{width:"100%",maxWidth:"100%",height:"100%",maxHeight:"100%",borderRadius:0}}},children:jsx(St,{...e})}),ht=memo(Nr,$o);var vr=({showFilterButton:e,isOpen:t,filterAnchorEl:o,fields:r,conditions:n,isMobile:i,onClose:a,onAddCondition:l,onUpdateCondition:d,onRemoveCondition:m,onApply:p,onClear:c,onCancel:f,entityFilterConfig:C})=>e?jsx(ht,{open:t||!!o,anchorEl:o,onClose:a,fields:r,conditions:n,onAddCondition:l,onUpdateCondition:d,onRemoveCondition:m,onApply:p,onClear:c,onCancel:f,isMobileProp:i,entityFilterConfig:C}):null,Ft=memo(vr,$o);var It=styled(Lr)(()=>({"& .MuiDialog-paper":{width:"100%"}})),Tt=styled(kr)(({theme:e})=>({borderBottom:"1px solid",borderColor:e.palette.divider,padding:e.spacing(1.5,2)})),Rt=styled(Or)(({theme:e})=>({padding:e.spacing(2)})),Dt=styled(Pr)(({theme:e})=>({borderTop:"1px solid",borderColor:e.palette.divider,padding:e.spacing(1.5,2)})),_t=styled(Fe)(({theme:e})=>({minWidth:24,[e.breakpoints.down(330)]:{padding:e.spacing(1)}})),Ie=styled(be)(({theme:e})=>({fontWeight:"600",margin:e.spacing(0,1),[e.breakpoints.down(330)]:{fontSize:0,margin:0}}));var Pt=({open:e,onClose:t,fields:o,sort:r,onSortChange:n})=>{let[i,a$1]=useState(r?.fieldName||""),[l,d]=useState(r?.sortType||"ASC"),m=useMemo(()=>o.filter(g=>g.name!=="ACTIONS"&&g.access_type!=="WRITE_ONLY"),[o]),p=useMemo(()=>o.find(g=>(g.filter_field_name??g.name)===i),[o,i]),c=p?.type==="DECIMAL"||p?.type==="INTEGER";useEffect(()=>{e&&(a$1(r?.fieldName||""),d(r?.sortType||"ASC"));},[e,r]);let f=useCallback(()=>{n&&n(i?{fieldName:i,sortType:l}:void 0),t();},[n,i,l,t]),C=useCallback(()=>{n&&(a$1(""),d("ASC"),n(void 0),t());},[n,t]);return jsxs(It,{open:e,onClose:t,maxWidth:"xs",fullWidth:!0,children:[jsx(Tt,{children:jsx(be,{variant:"overline",color:"text.secondary",children:"Ordenar por"})}),jsx(Rt,{children:jsxs(Lt,{spacing:2,pt:2,children:[jsxs(ge,{fullWidth:!0,size:"small",children:[jsx(Ce,{id:"sort-field-label",children:"Campo"}),jsxs(ye,{labelId:"sort-field-label",value:i,label:"Campo",onChange:g=>a$1(g.target.value),children:[jsx(J,{value:"",children:jsx("em",{children:"Nenhum"})}),m.map(g=>jsx(J,{value:g.filter_field_name??g.name,children:g.description||g.name},g.name))]})]}),jsxs(ge,{fullWidth:!0,size:"small",disabled:!i,children:[jsx(Ce,{id:"sort-direction-label",children:"Dire\xE7\xE3o"}),jsxs(ye,{labelId:"sort-direction-label",value:l,label:"Dire\xE7\xE3o",onChange:g=>d(g.target.value),children:[jsxs(J,{value:"ASC",children:["Crescente ",c?"(1-9)":"(A-Z)"]}),jsxs(J,{value:"DESC",children:["Decrescente ",c?"(9-1)":"(Z-A)"]})]})]})]})}),jsxs(Dt,{children:[jsx(Lt,{flex:1,width:"100%",direction:"row",children:jsx(Fe,{color:"inherit",onClick:C,children:"Limpar"})}),jsxs(Fe,{onClick:t,variant:"outlined",color:"inherit",sx:{minWidth:24},children:[jsx(a,{icon:"CANCEL_CIRCLE"}),jsx(Ie,{children:"Cancelar"})]}),jsxs(_t,{onClick:f,variant:"contained",children:[jsx(a,{icon:"SIMPLE_CHECK"}),jsx(Ie,{children:"Aplicar"})]})]})]})};Pt.displayName="SortModal";var Ot=memo(Pt);var kt=({columns:e,fields:t,preferredFieldOrder:o})=>{let r=useMemo(()=>new Map(e.map(a=>[a.field,a])),[e]),n=useMemo(()=>new Map(t?.map(a=>[a.name,a])||[]),[t]);return {orderedColumns:useMemo(()=>{if(!o||o.length===0||!t)return e;let a="ACTIONS",l=o.filter(c=>c!==a),d=new Set,m=[],p=c=>{let f=n.get(c);if(!f)return;let C=r.get(f.name);!C||d.has(f.name)||(m.push(C),d.add(f.name));};return l.forEach(c=>{p(c);}),t.forEach(c=>{if(c.name===a||l.includes(c.name))return;let f=r.get(c.name);!f||d.has(c.name)||(m.push(f),d.add(c.name));}),p(a),m.length===0?e:m},[e,r,n,o,t]),columnsByFieldId:r,fieldsByName:n}};function zr(e){return e.name}var Bt=({fields:e,columnsByFieldId:t,defaultVisibleFieldNames:o,columnVisibilityStorageKey:r,onColumnVisibilityModelChange:n})=>{let i=!!r,[a,l]=a$7(r||"__dynamic-data-view:columns__",void 0,{initializeWithValue:i}),d=useMemo(()=>{if(!e)return;let p={};if(e.forEach(c=>{let f=zr(c);if(!t.has(f))return;let C;if(i&&a){let g=a[f];typeof g=="boolean"&&(C=g);}C===void 0&&o&&o.length>0&&(C=o.includes(c.name)),typeof C=="boolean"&&(p[f]=C);}),Object.keys(p).length!==0)return {columns:{columnVisibilityModel:p}}},[t,o,e,i,a]),m=useCallback(p=>{if(i){let c={...p};delete c.__check__,l(c);}n&&n(p);},[i,n,l]);return {initialState:d,handleColumnVisibilityModelChange:m}};var w={IMAGE_WIDTH:90,MIN_WIDTH:130,ENTITY_MIN_WIDTH:100,ENTITY_FLEX:.5,ID_MIN_WIDTH:200,ID_FLEX:1,ACTIONS_WIDTH:80},Re={READ_ONLY:"READ_ONLY",READ_AND_WRITE:"READ_AND_WRITE"},Wt=["price","base_price","minimum_value","maximum_value","minimum_installment_value"];var Yr=(e,t)=>({field:e.name,headerName:e.description,sortable:!1,width:w.IMAGE_WIDTH,resizable:!1,headerAlign:"center",align:"center",renderCell:o=>t(e,o.row)}),qr=(e,t)=>({field:e.name,headerName:e.description,minWidth:w.ID_MIN_WIDTH,flex:w.ID_FLEX,renderCell:o=>t(e,o.row)}),$r=(e,t)=>({field:e.name,headerName:e.description,minWidth:w.ENTITY_MIN_WIDTH,flex:w.ENTITY_FLEX,renderCell:o=>t(e,o.row)}),Qr=(e,t)=>({field:e.name,headerName:e.description,minWidth:w.MIN_WIDTH,renderCell:o=>t(e,o.row)}),Kr=(e,t)=>({field:e.name,headerName:"A\xE7\xF5es",width:w.ACTIONS_WIDTH,sortable:!1,resizable:!1,disableReorder:!0,headerAlign:"center",disableColumnMenu:!0,align:"center",renderCell:o=>t(e,o.row)}),Vt=(e,t)=>e.name===t?.id_field_name||e.name==="name"?qr:e.name==="ACTIONS"?Kr:e.type==="FILE"?Yr:e.type==="ENTITY"?$r:Qr;var Gt=({metadata:e,renderCell:t,columnStrategies:o})=>useMemo(()=>{if(!e?.fields)return [];let r=new Map;return e.fields.filter(i=>i.access_type===Re.READ_ONLY||i.access_type===Re.READ_AND_WRITE?!0:i.name==="ACTIONS"||i.name===e?.id_field_name||i.name==="NAME").forEach(i=>{if(r.has(i.name))return;let l=(o?.[i.name]??Vt(i,e))(i,t,e);r.set(i.name,l);}),Array.from(r.values())},[o,e,t]);var Ut=e=>e?.groups?.[0]?.conditionals?e.groups[0].conditionals.map(t=>({id:a$8(),operator:e.groups[0].operator,fieldName:t.fieldName,conditional:t.conditional,value:t.value})):[],Ht=({fields:e,initialFilter:t})=>{let[o,r]=useState(!1),[n,i]=useState(()=>Ut(t)),[a,l]=useState(t),[d,m]=useState(()=>Ut(t)),p=useRef([]),c=useCallback(()=>{p.current=n.map(u=>({...u})),m(n.map(u=>({...u}))),r(!0);},[n]),f=()=>r(!1),C=useCallback(()=>{let u=e.filter(N=>N.available_filter_conditions?.length>0);if(u.length===0)return;let y=d.map(N=>N.fieldName),b=u.filter(N=>!y.includes(N.filter_field_name??N.name));if(b.length===0)return;let L=d.length>0?d[0].operator:"AND",I=b[0],v={id:a$8(),operator:L,fieldName:I.filter_field_name??I.name,conditional:it(I),value:[]};m(N=>[...N,v]);},[e,d]),g=useCallback((u,y)=>{m(b=>{let L=b.find(I=>I.id===u);if(!L)return b;if(y.operator&&y.operator!==L.operator){let I=y.operator;return b.map(v=>v.id===u?{...v,...y}:{...v,operator:I})}return b.map(I=>I.id===u?{...I,...y}:I)});},[]),_=useCallback(u=>{m(y=>y.filter(b=>b.id!==u));},[]),s=()=>{m([]),i([]),l(void 0);},R=()=>{let u=nt(d);return i(d.map(y=>({...y}))),l(u),r(!1),u},x=()=>{m(p.current.map(u=>({...u}))),r(!1);},A=n.some(X),B=n.filter(X).length;return {conditions:d,filter:a,isOpen:o,hasActiveFilters:A,activeFiltersCount:B,openDrawer:c,closeDrawer:f,addCondition:C,updateCondition:g,removeCondition:_,clearAllFilters:s,applyFilters:R,cancelChanges:x}};var $t=e=>{try{let t=localStorage.getItem(e);return t?JSON.parse(t):void 0}catch{return}},Qt=(e,t)=>{try{t===void 0?localStorage.removeItem(e):localStorage.setItem(e,JSON.stringify(t));}catch{}},Kt=(e,t,o)=>{let r=`${e}:filter`,[n,i]=useState(()=>$t(r)||t);useEffect(()=>{t!==void 0&&i(t);},[t]);let a=useCallback(l=>{i(l),Qt(r,l),o?.(l);},[r,o]);return {filter:n,setFilter:a}},Xt=(e,t,o)=>{let r=`${e}:sort`,[n,i]=useState(()=>$t(r)||t);useEffect(()=>{t!==void 0&&i(t);},[t]);let a=useCallback(l=>{i(l),Qt(r,l),o?.(l);},[r,o]);return {sort:n,setSort:a}};var ei=(e,t)=>e?e.find(r=>r.name===t)?.filter_field_name??t:t,ti=(e,t)=>e?e.find(r=>r.filter_field_name===t||r.name===t)?.name??t:t,jt=({sort:e,onSortChange:t,fields:o})=>{let r=useMemo(()=>e?[{field:ti(o,e.fieldName),sort:e.sortType.toLowerCase()}]:[],[e,o]),n=useCallback(i=>{if(!t)return;let a=i[0];if(!a||!a.sort){t(void 0);return}let l={fieldName:ei(o,a.field),sortType:a.sort.toUpperCase()};t(l);},[t,o]);return {sortModel:r,handleSortModelChange:n}};var Jt=()=>({name:"ACTIONS",description:"",filter_field_name:null,type:"TEXT",metadata:null,access_type:"READ_ONLY",relation_field_name:null,available_filter_conditions:[]}),De=e=>e.fields.some(o=>o.name==="ACTIONS")?e:{...e,fields:[...e.fields,Jt()]};var ri=({value:e,format:t})=>e==null?"-":d(e,t),_e=memo(ri);var ni=({value:e,format:t})=>e==null?"-":c(e,t),xe=memo(ni);var si=({value:e,field:t})=>{if(!t.metadata||typeof e!="object"||e===null)return e?String(e):"-";let o=e[t.metadata.description_field_name];return o?jsx(li,{label:String(o),variant:"outlined",size:"small",sx:{width:"fit-content",color:"text.secondary",borderColor:"divider",borderRadius:3}}):null},Ne=memo(si);var pi=({value:e,trueIcon:t="STAR_02",falseIcon:o="STAR",color:r="primary.main",width:n=18})=>jsx(a,{icon:e?t:o,color:r,width:n}),ci=memo(pi);var eo=styled("span")(({theme:e,isActive:t})=>({display:"inline-flex",alignItems:"center",justifyContent:"center",padding:e.spacing(.2,1),borderRadius:e.shape.borderRadius,fontSize:"0.75rem",fontWeight:600,width:"fit-content",height:"auto",lineHeight:"1.25rem",whiteSpace:"nowrap",margin:"auto",backgroundColor:t?e.palette.success.lighter||"#00A76F29":e.palette.warning.lighter||"#FF563029",color:t?e.palette.success.darker||"#007867":e.palette.warning.darker||"#B71D18"})),to=styled(ee,{shouldForwardProp:e=>!["size","noImage","clickable"].includes(e)})(({theme:e,size:t,noImage:o,clickable:r})=>({width:t,height:t,minWidth:t,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",overflow:"hidden",cursor:r?"pointer":"default",transition:"opacity 0.2s ease-in-out",color:e.palette.text.disabled,...o&&{border:`1px dashed ${e.palette.divider}`,backgroundColor:e.palette.grey[100]},...r&&{"&:hover":{opacity:.8}},"& img":{width:"100%",height:"100%",objectFit:"cover",borderRadius:"50%"},[e.breakpoints.down("sm")]:{justifyContent:"flex-start",alignItems:"flex-start"}}));var Ci=({imageResourceId:e,getImageUrl:t,size:o=48,alt:r="Imagem",onClick:n,sx:i})=>{let a$1=!!e,l=a$1&&t?t(e):void 0;return jsx(to,{size:o,noImage:!a$1,clickable:!!n,onClick:n,sx:i,children:l?jsx("img",{src:l,alt:r}):jsx(a,{icon:"SEARCH_IMAGE",width:Math.round(o/2),color:"text.disabled"})})},yi=memo(Ci);var bi=({id:e,displayName:t,copyMessage:o="ID copiado!"})=>jsxs(Lt,{height:1,justifyContent:"center",children:[jsx(be,{variant:"subtitle2",noWrap:!0,title:t,children:t}),jsxs(Lt,{direction:"row",gap:1,alignItems:"center",children:[jsxs(be,{color:"grey.600",variant:"body2",noWrap:!0,children:["ID: ",e]}),jsx(a$5,{toCopy:e,message:o})]})]}),hi=memo(bi);var Ri=({value:e,isCurrency:t=!1})=>e==null?"-":jsx(Lt,{direction:"row",alignItems:"center",height:"100%",children:jsx(be,{variant:"body2",noWrap:!0,width:"fit-content",children:t?h(Number(e)):a$6(Number(e))})}),ve=memo(Ri);var _i=({active:e,activeLabel:t="Ativo",inactiveLabel:o="Inativo"})=>jsx(eo,{isActive:e,children:e?t:o}),Me=memo(_i);var vi=e=>e.replace(/<[^>]*>/g,"").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").trim(),Mi=({value:e,showCopyButton:t=!1,copyMessage:o="Copiado",copyLabel:r,mask:n})=>{if(!e)return "-";let i=String(e),a=n?n(i):vi(i);return t?jsxs(Lt,{direction:"row",gap:1,alignItems:"center",children:[jsx(be,{variant:"body2",noWrap:!0,children:a}),jsx(a$5,{toCopy:i,message:o,label:r})]}):a},we=memo(Mi);function Li(e){return Wt.includes(e)}var lo=e=>{let{onRowAction:t}=e,o=(r,n)=>{let i=n[r.name];if(r.name==="ACTIONS")return t?.(n.id,n);switch(r.type){case"BOOLEAN":return jsx(Me,{active:!!i,activeLabel:"Ativo",inactiveLabel:"Inativo"});case"DATE":return jsx(_e,{value:i});case"DATETIME":return jsx(xe,{value:i});case"DECIMAL":case"INTEGER":return jsx(ve,{value:i,isCurrency:Li(r.name)});case"FILE":case"ENTITY":return jsx(Ne,{value:i,field:r});case"TEXT":default:return jsx(we,{value:i})}};return o.displayName="CellRendererComponent",o};var ki=({title:e,metadata:t,data:o,isLoading:r,isFetching:n,page:i,perPage:a,searchValue:l,onSearchChange:d,onSearch:m,onPaginationChange:p,onAdd:c,onRowAction:f,onRowDoubleClick:C,actions:g,moreActions:_,bulkActions:s,rowSelectionModel:R,onRowSelectionModelChange:x,slots:A,mobileRender:B,containerHeight:u=600,showColumnButton:y=!1,showFilterButton:b$1=!1,filter:L,onFilterChange:I,sort:v,onSortChange:N,defaultVisibleFieldNames:co,preferredFieldOrder:uo,columnStrategies:fo,onColumnVisibilityModelChange:go,storageKey:se,entityFilterConfig:Co})=>{let{items:H=[],total:yo=0}=o||{},z=useMemo(()=>{if(t)return t;if(H.length>0){let M=H[0],Q=Object.keys(M).map(Ge=>({name:Ge,type:"TEXT",description:Ge,filter_field_name:null,metadata:null,access_type:"READ_ONLY",relation_field_name:null,available_filter_conditions:[]}));return {name:"loading",description:"Loading...",id_field_name:"id",description_field_name:Q[0]?.name||"id",access_type:"READ_ONLY",fields:Q}}},[t,H]),W=useMemo(()=>z&&f?De(z):z,[z,f]),Y=useMemo(()=>W?.fields||[],[W]),So=useMemo(()=>lo({onRowAction:f}),[f]),bo=Gt({metadata:W,renderCell:So,columnStrategies:fo}),{orderedColumns:ho,columnsByFieldId:Fo}=kt({columns:bo,fields:W?.fields,preferredFieldOrder:uo}),{initialState:Io,handleColumnVisibilityModelChange:To}=Bt({fields:W?.fields,columnsByFieldId:Fo,defaultVisibleFieldNames:co,columnVisibilityStorageKey:`${se}:columns`,onColumnVisibilityModelChange:go}),Ro=useCallback(M=>{if(!C)return;let Q=M.id?.toString()||"";C(Q,M.row);},[C]),q=b("down","md"),[Do,me]=useState(null),{filter:_o,setFilter:$}=Kt(se,L,I),{sort:xo,setSort:Le}=Xt(se,v,N),No=L??_o,de=v??xo,{sortModel:Eo,handleSortModelChange:Ao}=jt({sort:de,onSortChange:Le,fields:Y}),{conditions:vo,isOpen:Mo,openDrawer:pe,closeDrawer:Pe,addCondition:wo,updateCondition:Lo,removeCondition:Po,clearAllFilters:Oe,applyFilters:ke,cancelChanges:Be,hasActiveFilters:Oo,activeFiltersCount:ko}=Ht({fields:Y,initialFilter:No}),Bo=useCallback(()=>{let M=ke();$(M);},[ke,$]),Wo=useCallback(()=>{Oe(),$(void 0);},[Oe,$]),Vo=useCallback(M=>{q?pe():(pe(),me(M.currentTarget));},[q,pe]),Go=useCallback(()=>{Be(),me(null);},[Be]),[Uo,We]=useState(!1),Ho=useCallback(()=>{me(null),Pe();},[Pe]),Ve=!!s?.length;return jsxs(Fragment,{children:[jsx(d$1,{title:e,columns:ho,rows:H,mobileRender:B,rowCount:yo,loading:r||!t,fetching:n,searchValue:l,onSearch:m,onSearchChange:d,paginationModel:{page:i,pageSize:a},onPaginationChange:p,actions:g,moreActions:_,onAdd:c,onRowDoubleClick:C?Ro:void 0,bulkActions:s,checkboxSelection:Ve,rowSelectionModel:R,onRowSelectionModelChange:x,keepNonExistentRowsSelected:Ve,disableRowSelectionOnClick:!0,slots:A,initialState:Io,showColumnButton:y,containerProps:{height:u,maxHeight:u},onColumnVisibilityModelChange:To,filterButton:jsx(ot,{showFilterButton:b$1,isMobile:q,hasActiveFilters:Oo,activeFiltersCount:ko,sort:de,onFilterClick:Vo,onSortClick:()=>We(!0)}),sortingMode:"server",sortModel:Eo,onSortModelChange:Ao,disableColumnFilter:!0}),t&&jsxs(Fragment,{children:[jsx(Ft,{showFilterButton:b$1,isOpen:Mo,filterAnchorEl:Do,fields:Y,conditions:vo,isMobile:q,onClose:Ho,onAddCondition:wo,onUpdateCondition:Lo,onRemoveCondition:Po,onApply:Bo,onClear:Wo,onCancel:Go,entityFilterConfig:Co}),jsx(Ot,{open:Uo,onClose:()=>We(!1),fields:Y,sort:de,onSortChange:Le})]})]})},Bi=memo(ki,$o);var Wi=({metadata:e,columnVisibilityModel:t,defaultVisibleFields:o})=>{if(!e?.fields)return;let n=e.fields.map(i=>i.name).filter(i=>i==="ACTIONS"?!1:t?t[i]!==!1:o?.includes(i)??!0);return o?n.sort((i,a)=>{let l=o.indexOf(i),d=o.indexOf(a);return l-d||0}):n};
59
+ var Xo=({showFilterButton:e$1,isMobile:t,hasActiveFilters:o,activeFiltersCount:r,sort:n,onFilterClick:i,onSortClick:a$1})=>e$1?t?jsxs(wt,{direction:"row",spacing:.5,children:[jsx(et,{badgeContent:r,color:"primary",invisible:r===0,sx:{"& .MuiBadge-badge":{transform:"scale(0.9) translate(10px, 9px)",opacity:r===0?0:1}},children:jsx(tt,{color:o?"primary":"default",onClick:i,size:"small","aria-label":"Filtrar",sx:{overflow:"visible"},children:jsx(a,{icon:"FILTER_VERTICAL"})})}),jsx(e,{sx:{height:16},orientation:"vertical",flexItem:!0}),jsx(tt,{color:n?"primary":"default",onClick:a$1,size:"small","aria-label":"Ordenar",children:jsx(a,{icon:n?.sortType==="DESC"?"SORTING_DESC":"SORTING_ASC"})})]}):jsx(et,{badgeContent:r,color:"primary",invisible:r===0,sx:{"& .MuiBadge-badge":r?{transform:"scale(0.9) translate(-3px, 7px)",position:"relative",opacity:1,transition:"none"}:{transition:"none",opacity:0}},children:jsx(he,{variant:"text",color:o?"primary":"inherit",startIcon:jsx(a,{icon:"FILTER_VERTICAL"}),onClick:i,size:"small",children:"Filtrar"})}):null,ot=memo(Xo,$o);var rt=e=>e.filter(t=>t.available_filter_conditions&&t.available_filter_conditions.length>0&&t.name!=="ACTIONS");var it=e=>{let{type:t,available_filter_conditions:o}=e;return o.length===0?"EQUALS":t==="TEXT"&&o.includes("LIKE")?"LIKE":o[0]},X=e=>e.value.length>0||e.conditional==="IS_NULL"||e.conditional==="IS_NOT_NULL",nt=e=>{if(e.length===0)return;let t=e.filter(X);if(t.length!==0)return {operator:"AND",groups:[{operator:t[0]?.operator||"AND",conditionals:t.map(o=>({fieldName:o.fieldName,conditional:o.conditional,value:o.value,valueLabels:o.valueLabels}))}]}};var at={["EQUALS"]:"Igual a",["NOT_EQUALS"]:"Diferente de",["LIKE"]:"Cont\xE9m",["NOT_LIKE"]:"N\xE3o cont\xE9m",["GREATER_THAN"]:"Maior que",["LESS_THAN"]:"Menor que",["GREATER_THAN_OR_EQUAL"]:"Maior ou igual a",["LESS_THAN_OR_EQUAL"]:"Menor ou igual a",["IN"]:"Em",["NOT_IN"]:"N\xE3o em",["IS_NULL"]:"\xC9 nulo",["IS_NOT_NULL"]:"N\xE3o \xE9 nulo"};var er=({config:e,metadata:t,value:o,initialLabel:r,onChange:n,disabled:i=!1})=>{let[a,s,d]=a$1(!1),[m,p]=useState(""),c=a$2(m,400),{data:f,isLoading:C,isFetching:g}=e.useQuery({search:c||void 0,page:0,perPage:25,...e.queryParams},{skip:!a}),L=C||g,l=useMemo(()=>o?{value:o,label:r??o}:null,[o,r]),I=useMemo(()=>{let u=(f?.items??[]).map(y=>({label:String(y[t.description_field_name]??""),value:String(y[t.id_field_name]??"")})).filter(y=>y.value&&y.label);return l&&!u.some(y=>y.value===l.value)&&u.unshift(l),u},[f,t.id_field_name,t.description_field_name,l]),_=useCallback(()=>{d(!1),p("");},[d]),E=useCallback(u=>{if(typeof u!="string"||!u){n("",void 0);return}let y=I.find(S=>S.value===u);n(u,y?.label);},[n,I]),B=useCallback((u,y,S)=>{S==="input"&&p(y);},[]);return jsx(a$3,{name:`entity-filter-${t.name}`,label:"Filtro",open:a,onOpen:s,onClose:_,value:o||"",onChange:E,inputValue:a?m:l?.label??"",onInputChange:B,options:I,loading:L,disabled:i,size:"small",filterOptions:u=>u,noOptionsText:m!==c?"Buscando...":"Nenhum resultado",sx:{flex:1,minWidth:120}})},st=memo(er);var ar=({value:e,onChange:t,totalConditions:o,isFirst:r})=>o===1?null:r?jsx(wt,{sx:{width:55,flexShrink:0}}):jsxs(ye,{value:e,onChange:n=>t(n.target.value),size:"small",sx:{width:55,flexShrink:0},children:[jsx(j,{value:"AND",children:"e"}),jsx(j,{value:"OR",children:"ou"})]}),dt=memo(ar,$o);var G={whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},ur=({condition:e,fields:t,onChange:o,onRemove:r,totalConditions:n,isFirst:i,entityFilterConfig:a$1})=>{let s=useMemo(()=>t.find(l=>(l.filter_field_name??l.name)===e.fieldName),[t,e.fieldName]),d=useMemo(()=>s?.available_filter_conditions||[],[s]),m=useMemo(()=>!e.fieldName||e.conditional==="IS_NULL"||e.conditional==="IS_NOT_NULL",[e.fieldName,e.conditional]),p=useCallback(l=>{let I=t.find(E=>(E.filter_field_name??E.name)===l);if(!I)return;let _=I.available_filter_conditions[0]||"EQUALS";o({...e,fieldName:l,conditional:_,value:[]});},[t,e,o]),c=useCallback(l=>{o({...e,conditional:l});},[e,o]),f=useCallback(l=>{o({...e,value:l?[l]:[]});},[e,o]),C=useCallback((l,I)=>{let _={...e.valueLabels};l&&I&&(_[l]=I),o({...e,value:l?[l]:[],valueLabels:_});},[e,o]),g=useCallback(l=>{o({...e,operator:l});},[e,o]),L=()=>{if(s?.type==="BOOLEAN")return jsxs(ge,{size:"small",sx:{flex:1,minWidth:120},disabled:m,children:[jsx(Ce,{id:`value-label-${e.id}`,children:"Valor"}),jsxs(ye,{labelId:`value-label-${e.id}`,label:"Valor",value:e.value[0]||"",onChange:l=>f(l.target.value),size:"small",sx:{"& .MuiSelect-select":G},children:[jsx(j,{value:"true",children:"Verdadeiro"}),jsx(j,{value:"false",children:"Falso"})]})]});if(s?.type==="ENTITY"&&s.metadata&&a$1?.[s.metadata.name]){let l=e.value[0]||"";return jsx(st,{config:a$1[s.metadata.name],metadata:s.metadata,value:l,initialLabel:e.valueLabels?.[l],onChange:C,disabled:m})}return jsx(cr,{label:"Filtro",value:e.value[0]||"",onChange:l=>f(l.target.value),size:"small",disabled:m,InputLabelProps:{shrink:!0},sx:{flex:1,minWidth:120}})};return jsxs(wt,{direction:"row",spacing:1,alignItems:"center",children:[jsx(tt,{onClick:r,size:"small","aria-label":"Remover filtro",sx:{flexShrink:0},children:jsx(a,{icon:"CLOSE_MARK_BUTTON",width:18})}),jsx(dt,{value:e.operator,onChange:g,totalConditions:n,isFirst:i}),jsxs(ge,{size:"small",sx:{minWidth:150,flex:1},children:[jsx(Ce,{id:`field-label-${e.id}`,children:"Coluna"}),jsx(ye,{labelId:`field-label-${e.id}`,label:"Coluna",value:e.fieldName,onChange:l=>p(l.target.value),size:"small",sx:{"& .MuiSelect-select":G},children:t.map(l=>jsx(j,{value:l.filter_field_name??l.name,sx:G,title:l.description||l.name,children:l.description||l.name},l.name))})]}),jsxs(ge,{size:"small",sx:{minWidth:90},disabled:!e.fieldName,children:[jsx(Ce,{id:`condition-label-${e.id}`,children:"Condi\xE7\xE3o"}),jsx(ye,{labelId:`condition-label-${e.id}`,label:"Condi\xE7\xE3o",value:e.conditional,onChange:l=>c(l.target.value),size:"small",sx:{"& .MuiSelect-select":G},children:d.map(l=>jsx(j,{value:l,sx:G,children:at[l]||l},l))})]}),L()]})},pt=memo(ur,$o);var yr=({filterableFields:e,conditions:t,onUpdateCondition:o,onRemoveCondition:r,entityFilterConfig:n})=>{let i=useCallback(m=>{o(m.id,m);},[o]),a=useCallback(m=>()=>{r(m);},[r]),s=useMemo(()=>t.map(m=>m.fieldName).filter(m=>!!m),[t]),d=useCallback(m=>e.filter(p=>!s.includes(p.name)||p.name===m),[e,s]);return e.length===0?jsx(Se,{variant:"body2",color:"text.secondary",textAlign:"center",children:"Nenhum filtro dispon\xEDvel"}):t.length===0?jsxs(Se,{variant:"body2",color:"text.secondary",textAlign:"center",children:["Clique em"," ",jsx(Se,{component:"strong",variant:"body2",fontWeight:600,color:"text.primary",children:'"+"'})," ","para adicionar um filtro"]}):jsx(Fragment,{children:t.map((m,p)=>jsx(pt,{condition:m,fields:d(m.fieldName),onChange:i,onRemove:a(m.id),showOperator:p>0,totalConditions:t.length,isFirst:p===0,entityFilterConfig:n},m.id))})},ct=memo(yr,$o);var ut=styled(Z)({display:"flex",flexDirection:"column",height:"100%"}),ft=styled(Z)(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"space-between",padding:e.spacing(2,3)})),gt=styled(Z)(({theme:e})=>({flex:1,overflowY:"auto",padding:e.spacing(3),display:"flex",flexDirection:"column",gap:e.spacing(2)})),Ct=styled(Z)(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"space-between",padding:e.spacing(2)}));var Dr=({onClose:e,fields:t,conditions:o,onAddCondition:r,onUpdateCondition:n,onRemoveCondition:i,onApply:a$1,onClear:s,onCancel:d,entityFilterConfig:m})=>{let p=rt(t),c=o.length>0,f=useCallback(()=>{a$1(),e();},[a$1,e]),C=useCallback(()=>{s(),e();},[s,e]),g=useCallback(()=>{d();},[d]);return jsxs(ut,{children:[jsxs(ft,{children:[jsx(Se,{variant:"overline",fontWeight:600,color:"text.secondary",children:"Defina as condi\xE7\xF5es para filtrar"}),jsx(tt,{onClick:r,size:"small","aria-label":"Adicionar filtro",title:"Adicionar filtro",disabled:o.length>=p.length,children:jsx(a,{icon:"SIMPLE_ADD"})})]}),jsx(yt,{}),jsx(gt,{children:jsx(ct,{filterableFields:p,conditions:o,onUpdateCondition:n,onRemoveCondition:i,entityFilterConfig:m})}),jsx(yt,{}),jsxs(Ct,{children:[jsx(he,{variant:"text",color:"inherit",onClick:C,children:"Limpar"}),jsxs(wt,{direction:"row",spacing:1,children:[jsx(he,{variant:"outlined",color:"inherit",onClick:g,startIcon:jsx(a,{icon:"CANCEL_CIRCLE"}),children:"Cancelar"}),jsx(he,{variant:"contained",onClick:f,disabled:!c,startIcon:jsx(a,{icon:"SIMPLE_CHECK"}),children:"Aplicar"})]})]})]})},bt=memo(Dr,$o);var Nr=e=>jsx(a$4,{open:e.open,onClose:e.onClose,anchorEl:e.anchorEl,isMobile:e.isMobileProp,popoverProps:{slotProps:{paper:{sx:{width:520,maxWidth:"calc(100vw - 24px)",maxHeight:600,mt:1}}}},drawerProps:{anchor:"right",PaperProps:{sx:{width:"100%",maxWidth:"100%",height:"100%",maxHeight:"100%",borderRadius:0}}},children:jsx(bt,{...e})}),Ft=memo(Nr,$o);var Ar=({showFilterButton:e,isOpen:t,filterAnchorEl:o,fields:r,conditions:n,isMobile:i,onClose:a,onAddCondition:s,onUpdateCondition:d,onRemoveCondition:m,onApply:p,onClear:c,onCancel:f,entityFilterConfig:C})=>e?jsx(Ft,{open:t||!!o,anchorEl:o,onClose:a,fields:r,conditions:n,onAddCondition:s,onUpdateCondition:d,onRemoveCondition:m,onApply:p,onClear:c,onCancel:f,isMobileProp:i,entityFilterConfig:C}):null,ht=memo(Ar,$o);var It=styled(wr)(()=>({"& .MuiDialog-paper":{width:"100%"}})),Tt=styled(kr)(({theme:e})=>({borderBottom:"1px solid",borderColor:e.palette.divider,padding:e.spacing(1.5,2)})),Rt=styled(Or)(({theme:e})=>({padding:e.spacing(2)})),Dt=styled(Pr)(({theme:e})=>({borderTop:"1px solid",borderColor:e.palette.divider,padding:e.spacing(1.5,2)})),_t=styled(he)(({theme:e})=>({minWidth:24,[e.breakpoints.down(330)]:{padding:e.spacing(1)}})),Ie=styled(Se)(({theme:e})=>({fontWeight:"600",margin:e.spacing(0,1),[e.breakpoints.down(330)]:{fontSize:0,margin:0}}));var Pt=({open:e,onClose:t,fields:o,sort:r,onSortChange:n})=>{let[i,a$1]=useState(r?.fieldName||""),[s,d]=useState(r?.sortType||"ASC"),m=useMemo(()=>o.filter(g=>g.name!=="ACTIONS"&&g.access_type!=="WRITE_ONLY"),[o]),p=useMemo(()=>o.find(g=>(g.filter_field_name??g.name)===i),[o,i]),c=p?.type==="DECIMAL"||p?.type==="INTEGER";useEffect(()=>{e&&(a$1(r?.fieldName||""),d(r?.sortType||"ASC"));},[e,r]);let f=useCallback(()=>{n&&n(i?{fieldName:i,sortType:s}:void 0),t();},[n,i,s,t]),C=useCallback(()=>{n&&(a$1(""),d("ASC"),n(void 0),t());},[n,t]);return jsxs(It,{open:e,onClose:t,maxWidth:"xs",fullWidth:!0,children:[jsx(Tt,{children:jsx(Se,{variant:"overline",color:"text.secondary",children:"Ordenar por"})}),jsx(Rt,{children:jsxs(wt,{spacing:2,pt:2,children:[jsxs(ge,{fullWidth:!0,size:"small",children:[jsx(Ce,{id:"sort-field-label",children:"Campo"}),jsxs(ye,{labelId:"sort-field-label",value:i,label:"Campo",onChange:g=>a$1(g.target.value),children:[jsx(j,{value:"",children:jsx("em",{children:"Nenhum"})}),m.map(g=>jsx(j,{value:g.filter_field_name??g.name,children:g.description||g.name},g.name))]})]}),jsxs(ge,{fullWidth:!0,size:"small",disabled:!i,children:[jsx(Ce,{id:"sort-direction-label",children:"Dire\xE7\xE3o"}),jsxs(ye,{labelId:"sort-direction-label",value:s,label:"Dire\xE7\xE3o",onChange:g=>d(g.target.value),children:[jsxs(j,{value:"ASC",children:["Crescente ",c?"(1-9)":"(A-Z)"]}),jsxs(j,{value:"DESC",children:["Decrescente ",c?"(9-1)":"(Z-A)"]})]})]})]})}),jsxs(Dt,{children:[jsx(wt,{flex:1,width:"100%",direction:"row",children:jsx(he,{color:"inherit",onClick:C,children:"Limpar"})}),jsxs(he,{onClick:t,variant:"outlined",color:"inherit",sx:{minWidth:24},children:[jsx(a,{icon:"CANCEL_CIRCLE"}),jsx(Ie,{children:"Cancelar"})]}),jsxs(_t,{onClick:f,variant:"contained",children:[jsx(a,{icon:"SIMPLE_CHECK"}),jsx(Ie,{children:"Aplicar"})]})]})]})};Pt.displayName="SortModal";var Ot=memo(Pt);var kt=({columns:e,fields:t,preferredFieldOrder:o})=>{let r=useMemo(()=>new Map(e.map(a=>[a.field,a])),[e]),n=useMemo(()=>new Map(t?.map(a=>[a.name,a])||[]),[t]);return {orderedColumns:useMemo(()=>{if(!o||o.length===0||!t)return e;let a="ACTIONS",s=o.filter(c=>c!==a),d=new Set,m=[],p=c=>{let f=n.get(c);if(!f)return;let C=r.get(f.name);!C||d.has(f.name)||(m.push(C),d.add(f.name));};return s.forEach(c=>{p(c);}),t.forEach(c=>{if(c.name===a||s.includes(c.name))return;let f=r.get(c.name);!f||d.has(c.name)||(m.push(f),d.add(c.name));}),p(a),m.length===0?e:m},[e,r,n,o,t]),columnsByFieldId:r,fieldsByName:n}};function zr(e){return e.name}var Bt=({fields:e,columnsByFieldId:t,defaultVisibleFieldNames:o,columnVisibilityStorageKey:r,onColumnVisibilityModelChange:n})=>{let i=!!r,[a,s]=a$7(r||"__dynamic-data-view:columns__",void 0,{initializeWithValue:i}),d=useMemo(()=>{if(!e)return;let p={};if(e.forEach(c=>{let f=zr(c);if(!t.has(f))return;let C;if(i&&a){let g=a[f];typeof g=="boolean"&&(C=g);}C===void 0&&o&&o.length>0&&(C=o.includes(c.name)),typeof C=="boolean"&&(p[f]=C);}),Object.keys(p).length!==0)return {columns:{columnVisibilityModel:p}}},[t,o,e,i,a]),m=useCallback(p=>{if(i){let c={...p};delete c.__check__,s(c);}n&&n(p);},[i,n,s]);return {initialState:d,handleColumnVisibilityModelChange:m}};var M={IMAGE_WIDTH:90,MIN_WIDTH:130,ENTITY_MIN_WIDTH:100,ENTITY_FLEX:.5,ID_MIN_WIDTH:200,ID_FLEX:1,ACTIONS_WIDTH:80},Re={READ_ONLY:"READ_ONLY",READ_AND_WRITE:"READ_AND_WRITE"},Wt=["price","base_price","minimum_value","maximum_value","minimum_installment_value"];var Yr=(e,t)=>({field:e.name,headerName:e.description,sortable:!1,width:M.IMAGE_WIDTH,resizable:!1,headerAlign:"center",align:"center",renderCell:o=>t(e,o.row)}),qr=(e,t)=>({field:e.name,headerName:e.description,minWidth:M.ID_MIN_WIDTH,flex:M.ID_FLEX,renderCell:o=>t(e,o.row)}),$r=(e,t)=>({field:e.name,headerName:e.description,minWidth:M.ENTITY_MIN_WIDTH,flex:M.ENTITY_FLEX,renderCell:o=>t(e,o.row)}),Qr=(e,t)=>({field:e.name,headerName:e.description,minWidth:M.MIN_WIDTH,renderCell:o=>t(e,o.row)}),Kr=(e,t)=>({field:e.name,headerName:"A\xE7\xF5es",width:M.ACTIONS_WIDTH,sortable:!1,resizable:!1,disableReorder:!0,headerAlign:"center",disableColumnMenu:!0,align:"center",renderCell:o=>t(e,o.row)}),Vt=(e,t)=>e.name===t?.id_field_name||e.name==="name"?qr:e.name==="ACTIONS"?Kr:e.type==="FILE"?Yr:e.type==="ENTITY"?$r:Qr;var Gt=({metadata:e,renderCell:t,columnStrategies:o})=>useMemo(()=>{if(!e?.fields)return [];let r=new Map;return e.fields.filter(i=>i.access_type===Re.READ_ONLY||i.access_type===Re.READ_AND_WRITE?!0:i.name==="ACTIONS"||i.name===e?.id_field_name||i.name==="NAME").forEach(i=>{if(r.has(i.name))return;let s=(o?.[i.name]??Vt(i,e))(i,t,e);r.set(i.name,s);}),Array.from(r.values())},[o,e,t]);var Ut=e=>e?.groups?.[0]?.conditionals?e.groups[0].conditionals.map(t=>({id:a$8(),operator:e.groups[0].operator,fieldName:t.fieldName,conditional:t.conditional,value:t.value,valueLabels:t.valueLabels})):[],Ht=({fields:e,initialFilter:t})=>{let[o,r]=useState(!1),[n,i]=useState(()=>Ut(t)),[a,s]=useState(t),[d,m]=useState(()=>Ut(t)),p=useRef([]),c=useCallback(()=>{p.current=n.map(u=>({...u})),m(n.map(u=>({...u}))),r(!0);},[n]),f=()=>r(!1),C=useCallback(()=>{let u=e.filter(x=>x.available_filter_conditions?.length>0);if(u.length===0)return;let y=d.map(x=>x.fieldName),S=u.filter(x=>!y.includes(x.filter_field_name??x.name));if(S.length===0)return;let w=d.length>0?d[0].operator:"AND",T=S[0],v={id:a$8(),operator:w,fieldName:T.filter_field_name??T.name,conditional:it(T),value:[]};m(x=>[...x,v]);},[e,d]),g=useCallback((u,y)=>{m(S=>{let w=S.find(T=>T.id===u);if(!w)return S;if(y.operator&&y.operator!==w.operator){let T=y.operator;return S.map(v=>v.id===u?{...v,...y}:{...v,operator:T})}return S.map(T=>T.id===u?{...T,...y}:T)});},[]),L=useCallback(u=>{m(y=>y.filter(S=>S.id!==u));},[]),l=()=>{m([]),i([]),s(void 0);},I=()=>{let u=nt(d);return i(d.map(y=>({...y}))),s(u),r(!1),u},_=()=>{m(p.current.map(u=>({...u}))),r(!1);},E=n.some(X),B=n.filter(X).length;return {conditions:d,filter:a,isOpen:o,hasActiveFilters:E,activeFiltersCount:B,openDrawer:c,closeDrawer:f,addCondition:C,updateCondition:g,removeCondition:L,clearAllFilters:l,applyFilters:I,cancelChanges:_}};var $t=e=>{try{let t=localStorage.getItem(e);return t?JSON.parse(t):void 0}catch{return}},Qt=(e,t)=>{try{t===void 0?localStorage.removeItem(e):localStorage.setItem(e,JSON.stringify(t));}catch{}},Kt=(e,t,o)=>{let r=`${e}:filter`,[n,i]=useState(()=>$t(r)||t);useEffect(()=>{t!==void 0&&i(t);},[t]);let a=useCallback(s=>{i(s),Qt(r,s),o?.(s);},[r,o]);return {filter:n,setFilter:a}},Xt=(e,t,o)=>{let r=`${e}:sort`,[n,i]=useState(()=>$t(r)||t);useEffect(()=>{t!==void 0&&i(t);},[t]);let a=useCallback(s=>{i(s),Qt(r,s),o?.(s);},[r,o]);return {sort:n,setSort:a}};var ei=(e,t)=>e?e.find(r=>r.name===t)?.filter_field_name??t:t,ti=(e,t)=>e?e.find(r=>r.filter_field_name===t||r.name===t)?.name??t:t,jt=({sort:e,onSortChange:t,fields:o})=>{let r=useMemo(()=>e?[{field:ti(o,e.fieldName),sort:e.sortType.toLowerCase()}]:[],[e,o]),n=useCallback(i=>{if(!t)return;let a=i[0];if(!a||!a.sort){t(void 0);return}let s={fieldName:ei(o,a.field),sortType:a.sort.toUpperCase()};t(s);},[t,o]);return {sortModel:r,handleSortModelChange:n}};var Jt=()=>({name:"ACTIONS",description:"",filter_field_name:null,type:"TEXT",metadata:null,access_type:"READ_ONLY",relation_field_name:null,available_filter_conditions:[]}),De=e=>e.fields.some(o=>o.name==="ACTIONS")?e:{...e,fields:[...e.fields,Jt()]};var ri=({value:e,format:t})=>e==null?"-":d(e,t),_e=memo(ri);var ni=({value:e,format:t})=>e==null?"-":c(e,t),xe=memo(ni);var si=({value:e,field:t})=>{if(!t.metadata||typeof e!="object"||e===null)return e?String(e):"-";let o=e[t.metadata.description_field_name];return o?jsx(li,{label:String(o),variant:"outlined",size:"small",sx:{width:"fit-content",color:"text.secondary",borderColor:"divider",borderRadius:3}}):null},Ne=memo(si);var pi=({value:e,trueIcon:t="STAR_02",falseIcon:o="STAR",color:r="primary.main",width:n=18})=>jsx(a,{icon:e?t:o,color:r,width:n}),ci=memo(pi);var eo=styled("span")(({theme:e,isActive:t})=>({display:"inline-flex",alignItems:"center",justifyContent:"center",padding:e.spacing(.2,1),borderRadius:e.shape.borderRadius,fontSize:"0.75rem",fontWeight:600,width:"fit-content",height:"auto",lineHeight:"1.25rem",whiteSpace:"nowrap",margin:"auto",backgroundColor:t?e.palette.success.lighter||"#00A76F29":e.palette.warning.lighter||"#FF563029",color:t?e.palette.success.darker||"#007867":e.palette.warning.darker||"#B71D18"})),to=styled(Z,{shouldForwardProp:e=>!["size","noImage","clickable"].includes(e)})(({theme:e,size:t,noImage:o,clickable:r})=>({width:t,height:t,minWidth:t,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",overflow:"hidden",cursor:r?"pointer":"default",transition:"opacity 0.2s ease-in-out",color:e.palette.text.disabled,...o&&{border:`1px dashed ${e.palette.divider}`,backgroundColor:e.palette.grey[100]},...r&&{"&:hover":{opacity:.8}},"& img":{width:"100%",height:"100%",objectFit:"cover",borderRadius:"50%"},[e.breakpoints.down("sm")]:{justifyContent:"flex-start",alignItems:"flex-start"}}));var Ci=({imageResourceId:e,getImageUrl:t,size:o=48,alt:r="Imagem",onClick:n,sx:i})=>{let a$1=!!e,s=a$1&&t?t(e):void 0;return jsx(to,{size:o,noImage:!a$1,clickable:!!n,onClick:n,sx:i,children:s?jsx("img",{src:s,alt:r}):jsx(a,{icon:"SEARCH_IMAGE",width:Math.round(o/2),color:"text.disabled"})})},yi=memo(Ci);var Si=({id:e,displayName:t,copyMessage:o="ID copiado!"})=>jsxs(wt,{height:1,justifyContent:"center",children:[jsx(Se,{variant:"subtitle2",noWrap:!0,title:t,children:t}),jsxs(wt,{direction:"row",gap:1,alignItems:"center",children:[jsxs(Se,{color:"grey.600",variant:"body2",noWrap:!0,children:["ID: ",e]}),jsx(a$5,{toCopy:e,message:o})]})]}),Fi=memo(Si);var Ri=({value:e,isCurrency:t=!1})=>e==null?"-":jsx(wt,{direction:"row",alignItems:"center",height:"100%",children:jsx(Se,{variant:"body2",noWrap:!0,width:"fit-content",children:t?h(Number(e)):a$6(Number(e))})}),Ae=memo(Ri);var _i=({active:e,activeLabel:t="Ativo",inactiveLabel:o="Inativo"})=>jsx(eo,{isActive:e,children:e?t:o}),Me=memo(_i);var Ai=e=>e.replace(/<[^>]*>/g,"").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").trim(),Mi=({value:e,showCopyButton:t=!1,copyMessage:o="Copiado",copyLabel:r,mask:n})=>{if(!e)return "-";let i=String(e),a=n?n(i):Ai(i);return t?jsxs(wt,{direction:"row",gap:1,alignItems:"center",children:[jsx(Se,{variant:"body2",noWrap:!0,children:a}),jsx(a$5,{toCopy:i,message:o,label:r})]}):a},Le=memo(Mi);function wi(e){return Wt.includes(e)}var lo=e=>{let{onRowAction:t}=e,o=(r,n)=>{let i=n[r.name];if(r.name==="ACTIONS")return t?.(n.id,n);switch(r.type){case"BOOLEAN":return jsx(Me,{active:!!i,activeLabel:"Ativo",inactiveLabel:"Inativo"});case"DATE":return jsx(_e,{value:i});case"DATETIME":return jsx(xe,{value:i});case"DECIMAL":case"INTEGER":return jsx(Ae,{value:i,isCurrency:wi(r.name)});case"FILE":case"ENTITY":return jsx(Ne,{value:i,field:r});case"TEXT":default:return jsx(Le,{value:i})}};return o.displayName="CellRendererComponent",o};var ki=({title:e,metadata:t,data:o,isLoading:r,isFetching:n,page:i,perPage:a,searchValue:s,onSearchChange:d,onSearch:m,onPaginationChange:p,onAdd:c,onRowAction:f,onRowDoubleClick:C,actions:g,moreActions:L,bulkActions:l,rowSelectionModel:I,onRowSelectionModelChange:_,slots:E,mobileRender:B,containerHeight:u=600,showColumnButton:y=!1,showFilterButton:S=!1,filter:w,onFilterChange:T,sort:v,onSortChange:x,defaultVisibleFieldNames:co,preferredFieldOrder:uo,columnStrategies:fo,onColumnVisibilityModelChange:go,storageKey:le,entityFilterConfig:Co})=>{let{items:H=[],total:yo=0}=o||{},z=useMemo(()=>{if(t)return t;if(H.length>0){let A=H[0],Q=Object.keys(A).map(Ge=>({name:Ge,type:"TEXT",description:Ge,filter_field_name:null,metadata:null,access_type:"READ_ONLY",relation_field_name:null,available_filter_conditions:[]}));return {name:"loading",description:"Loading...",id_field_name:"id",description_field_name:Q[0]?.name||"id",access_type:"READ_ONLY",fields:Q}}},[t,H]),W=useMemo(()=>z&&f?De(z):z,[z,f]),Y=useMemo(()=>W?.fields||[],[W]),bo=useMemo(()=>lo({onRowAction:f}),[f]),So=Gt({metadata:W,renderCell:bo,columnStrategies:fo}),{orderedColumns:Fo,columnsByFieldId:ho}=kt({columns:So,fields:W?.fields,preferredFieldOrder:uo}),{initialState:Io,handleColumnVisibilityModelChange:To}=Bt({fields:W?.fields,columnsByFieldId:ho,defaultVisibleFieldNames:co,columnVisibilityStorageKey:`${le}:columns`,onColumnVisibilityModelChange:go}),Ro=useCallback(A=>{if(!C)return;let Q=A.id?.toString()||"";C(Q,A.row);},[C]),q=b("down","md"),[Do,se]=useState(null),{filter:_o,setFilter:$}=Kt(le,w,T),{sort:xo,setSort:we}=Xt(le,v,x),No=w??_o,me=v??xo,{sortModel:Eo,handleSortModelChange:vo}=jt({sort:me,onSortChange:we,fields:Y}),{conditions:Ao,isOpen:Mo,openDrawer:de,closeDrawer:Pe,addCondition:Lo,updateCondition:wo,removeCondition:Po,clearAllFilters:Oe,applyFilters:ke,cancelChanges:Be,hasActiveFilters:Oo,activeFiltersCount:ko}=Ht({fields:Y,initialFilter:No}),Bo=useCallback(()=>{let A=ke();$(A);},[ke,$]),Wo=useCallback(()=>{Oe(),$(void 0);},[Oe,$]),Vo=useCallback(A=>{q?de():(de(),se(A.currentTarget));},[q,de]),Go=useCallback(()=>{Be(),se(null);},[Be]),[Uo,We]=useState(!1),Ho=useCallback(()=>{se(null),Pe();},[Pe]),Ve=!!l?.length;return jsxs(Fragment,{children:[jsx(d$1,{title:e,columns:Fo,rows:H,mobileRender:B,rowCount:yo,loading:r||!t,fetching:n,searchValue:s,onSearch:m,onSearchChange:d,paginationModel:{page:i,pageSize:a},onPaginationChange:p,actions:g,moreActions:L,onAdd:c,onRowDoubleClick:C?Ro:void 0,bulkActions:l,checkboxSelection:Ve,rowSelectionModel:I,onRowSelectionModelChange:_,keepNonExistentRowsSelected:Ve,disableRowSelectionOnClick:!0,slots:E,initialState:Io,showColumnButton:y,containerProps:{height:u,maxHeight:u},onColumnVisibilityModelChange:To,filterButton:jsx(ot,{showFilterButton:S,isMobile:q,hasActiveFilters:Oo,activeFiltersCount:ko,sort:me,onFilterClick:Vo,onSortClick:()=>We(!0)}),sortingMode:"server",sortModel:Eo,onSortModelChange:vo,disableColumnFilter:!0}),t&&jsxs(Fragment,{children:[jsx(ht,{showFilterButton:S,isOpen:Mo,filterAnchorEl:Do,fields:Y,conditions:Ao,isMobile:q,onClose:Ho,onAddCondition:Lo,onUpdateCondition:wo,onRemoveCondition:Po,onApply:Bo,onClear:Wo,onCancel:Go,entityFilterConfig:Co}),jsx(Ot,{open:Uo,onClose:()=>We(!1),fields:Y,sort:me,onSortChange:we})]})]})},Bi=memo(ki,$o);var Wi=({metadata:e,columnVisibilityModel:t,defaultVisibleFields:o})=>{if(!e?.fields)return;let n=e.fields.map(i=>i.name).filter(i=>i==="ACTIONS"?!1:t?t[i]!==!1:o?.includes(i)??!0);return o?n.sort((i,a)=>{let s=o.indexOf(i),d=o.indexOf(a);return s-d||0}):n};
60
60
 
61
- export { _e as DateRenderer, xe as DateTimeRenderer, Ne as EntityRenderer, ci as IconRenderer, yi as ImageRenderer, hi as NameRenderer, ve as NumberRenderer, Me as StatusRenderer, we as TextRenderer, De as addActionsFieldToMetadata, Wi as buildVisibleFields, Jt as createActionsField, Bi as default };
61
+ export { _e as DateRenderer, xe as DateTimeRenderer, Ne as EntityRenderer, ci as IconRenderer, yi as ImageRenderer, Fi as NameRenderer, Ae as NumberRenderer, Me as StatusRenderer, Le as TextRenderer, De as addActionsFieldToMetadata, Wi as buildVisibleFields, Jt as createActionsField, Bi as default };
62
62
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/DynamicDataView/DynamicDataView.tsx","../../../src/components/DynamicDataView/components/FilterButton.tsx","../../../src/components/DynamicDataView/components/FiltersSection.tsx","../../../src/components/DynamicDataView/components/filters/FiltersContainer.tsx","../../../src/components/DynamicDataView/components/filters/FiltersContent.tsx","../../../src/components/DynamicDataView/utils/filter.ts","../../../src/components/DynamicDataView/components/filters/FiltersList.tsx","../../../src/components/DynamicDataView/components/filters/FilterRow.tsx","../../../src/components/DynamicDataView/constants/filter.ts","../../../src/components/DynamicDataView/components/filters/EntityFilter.tsx","../../../src/components/DynamicDataView/components/filters/OperatorSelect.tsx","../../../src/components/DynamicDataView/components/filters/styles.ts","../../../src/components/DynamicDataView/components/SortModal/index.tsx","../../../src/components/DynamicDataView/components/SortModal/style.ts","../../../src/components/DynamicDataView/hooks/useColumnOrdering.ts","../../../src/components/DynamicDataView/hooks/useColumnVisibility.ts","../../../src/components/DynamicDataView/hooks/useDynamicColumns.ts","../../../src/components/DynamicDataView/constants/columnDefaults.ts","../../../src/components/DynamicDataView/utils/columnStrategies.ts","../../../src/components/DynamicDataView/hooks/useFilters.ts","../../../src/components/DynamicDataView/hooks/useFilterSortStorage.ts","../../../src/components/DynamicDataView/hooks/useSorting.ts","../../../src/components/DynamicDataView/utils/addActionsField.ts","../../../src/components/DynamicDataView/renderers/DateRenderer.ts","../../../src/components/DynamicDataView/renderers/DateTimeRenderer.ts","../../../src/components/DynamicDataView/renderers/EntityRenderer.tsx","../../../src/components/DynamicDataView/renderers/IconRenderer.tsx","../../../src/components/DynamicDataView/renderers/ImageRenderer.tsx","../../../src/components/DynamicDataView/renderers/style.ts","../../../src/components/DynamicDataView/renderers/NameRenderer.tsx","../../../src/components/DynamicDataView/renderers/NumberRenderer.tsx","../../../src/components/DynamicDataView/renderers/StatusRenderer.tsx","../../../src/components/DynamicDataView/renderers/TextRenderer.tsx","../../../src/components/DynamicDataView/utils/createCellRenderer.tsx","../../../src/components/DynamicDataView/utils/fields.ts"],"names":["memo","useCallback","useMemo","useState","isEqual","Badge","Button","IconButton","Stack","jsx","jsxs","FilterButton","showFilterButton","isMobile","hasActiveFilters","activeFiltersCount","sort","onFilterClick","onSortClick","Icon_default","ToolbarActionsDivider","FilterButton_default","Divider","Typography","getFilterableFields","fields","field","getDefaultCondition","type","available_filter_conditions","isValidCondition","condition","buildFilterFromConditions","conditions","validConditions","c","FormControl","InputLabel","MenuItem","Select","TextField","CONDITION_LABELS","EntityFilter","config","metadata","value","initialLabel","onChange","disabled","open","setOpen","useToggle_default","searchInput","setSearchInput","debouncedSearch","useDebounceValue_default","data","isLoading","isFetching","loading","selectedOption","options","items","item","opt","handleOpen","handleClose","handleChange","newValue","option","handleSearch","val","Autocomplete_default","x","EntityFilter_default","OperatorSelect","totalConditions","isFirst","e","OperatorSelect_default","ellipsisStyle","FilterRow","onRemove","entityFilterConfig","selectedField","f","availableConditions","isValueDisabled","handleFieldChange","fieldName","newField","defaultCondition","handleConditionChange","conditional","handleValueChange","handleEntityValueChange","label","valueLabels","handleOperatorChange","operator","renderValueInput","currentValue","cond","FilterRow_default","Fragment","FiltersList","filterableFields","onUpdateCondition","onRemoveCondition","handleUpdateCondition","updated","handleRemoveCondition","id","usedFieldNames","name","getAvailableFields","currentFieldName","index","FiltersList_default","Box","styled","Container","Header","theme","Content","Footer","FiltersContent","onClose","onAddCondition","onApply","onClear","onCancel","hasConditions","handleApply","handleClear","handleCancel","FiltersContent_default","FiltersContainer","props","ResponsivePopover_default","FiltersContainer_default","FiltersSection","isOpen","filterAnchorEl","FiltersSection_default","useEffect","Dialog","DialogActions","DialogContent","DialogTitle","StyledDialog","StyledDialogTitle","StyledDialogContent","StyledDialogActions","ApplyButton","LabelButton","SortModal","onSortChange","setSelectedField","selectedDirection","setSelectedDirection","sortableFields","selectedFieldObj","isNumberField","SortModal_default","useColumnOrdering","columns","preferredFieldOrder","columnsByFieldId","column","fieldsByName","actionFieldName","preferredWithoutActions","usedColumnFieldIds","ordered","pushColumnForField","getColumnFieldIdFromField","useColumnVisibility","defaultVisibleFieldNames","columnVisibilityStorageKey","onColumnVisibilityModelChange","hasStorageKey","storedVisibilityModel","setStoredVisibilityModel","useLocalStorage_default","initialState","visibilityModel","columnFieldId","visible","stored","handleColumnVisibilityModelChange","model","modelToSave","COLUMN_DEFAULTS","ACCESS_TYPES","CURRENCY_FIELD_NAMES","createImageColumn","renderCell","params","createIdColumn","createEntityColumn","createDefaultColumn","createActionsColumn","getColumnStrategy","useDynamicColumns","columnStrategies","columnsMap","useRef","parseInitialConditions","initialFilter","uuidv4","useFilters","setIsOpen","appliedConditions","setAppliedConditions","appliedFilter","setAppliedFilter","setConditions","snapshotRef","openDrawer","closeDrawer","addCondition","availableFields","currentOperator","firstField","newCondition","prev","updateCondition","changes","targetCondition","newOperator","removeCondition","clearAllFilters","applyFilters","filter","cancelChanges","getStoredValue","key","setStoredValue","useFilterStorage","storageKey","externalFilter","onFilterChange","filterKey","internalFilter","setInternalFilter","handleFilterChange","newFilter","useSortStorage","externalSort","sortKey","internalSort","setInternalSort","handleSortChange","newSort","resolveApiFieldName","resolveColumnFieldName","useSorting","sortModel","handleSortModelChange","firstItem","createActionsField","addActionsFieldToMetadata","DateRenderer","format","fDate","DateRenderer_default","DateTimeRenderer","fDateTime","DateTimeRenderer_default","Chip","EntityRenderer","entityValue","EntityRenderer_default","IconRenderer","trueIcon","falseIcon","color","width","IconRenderer_default","StatusLabel","isActive","ImageContainer","prop","size","noImage","clickable","ImageRenderer","imageResourceId","getImageUrl","alt","onClick","sx","hasImage","imageUrl","ImageRenderer_default","NameRenderer","displayName","copyMessage","CopyButton_default","NameRenderer_default","NumberRenderer","isCurrency","fCurrencyBRL","fNumber","NumberRenderer_default","StatusRenderer","active","activeLabel","inactiveLabel","StatusRenderer_default","sanitizeHtml","text","TextRenderer","showCopyButton","copyLabel","mask","stringValue","formattedValue","TextRenderer_default","getIsCurrency","createCellRenderer","context","onRowAction","CellRendererComponent","row","DynamicDataView","title","page","perPage","searchValue","onSearchChange","onSearch","onPaginationChange","onAdd","onRowDoubleClick","actions","moreActions","bulkActions","rowSelectionModel","onRowSelectionModelChange","slots","mobileRender","containerHeight","showColumnButton","rows","total","preloadedMetadata","firstRow","effectiveMetadata","effectiveMetadataFields","orderedColumns","handleRowDoubleClick","rowId","useResponsive_default","setFilterAnchorEl","storedFilter","setStoredFilter","storedSort","setStoredSort","effectiveFilter","effectiveSort","handleApplyFilters","handleClearFilters","handleFilterButtonClick","event","handleCancelFilters","isSortModalOpen","setIsSortModalOpen","handleFiltersClose","hasSelectionActions","DataView_default","DynamicDataView_default","buildVisibleFields","columnVisibilityModel","defaultVisibleFields","a","b","indexA","indexB"],"mappings":"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","sourcesContent":["import { memo, useCallback, useMemo, useState } from 'react';\nimport isEqual from 'react-fast-compare';\nimport { AccessType, DataType } from 'model/entity-metadata';\n\nimport useResponsive from 'hooks/useResponsive';\n\nimport DataView from '../DataView';\n\nimport FilterButton from './components/FilterButton';\nimport FiltersSection from './components/FiltersSection';\nimport SortModal from './components/SortModal';\nimport { useColumnOrdering } from './hooks/useColumnOrdering';\nimport { useColumnVisibility } from './hooks/useColumnVisibility';\nimport { useDynamicColumns } from './hooks/useDynamicColumns';\nimport { useFilters } from './hooks/useFilters';\nimport { useFilterStorage, useSortStorage } from './hooks/useFilterSortStorage';\nimport { useSorting } from './hooks/useSorting';\nimport { addActionsFieldToMetadata } from './utils/addActionsField';\nimport { createCellRenderer } from './utils/createCellRenderer';\nimport { DynamicDataViewProps, DynamicRowData } from './props';\n\nconst DynamicDataView = <T extends object = object>({\n title,\n metadata,\n data,\n isLoading,\n isFetching,\n page,\n perPage,\n searchValue,\n onSearchChange,\n onSearch,\n onPaginationChange,\n onAdd,\n onRowAction,\n onRowDoubleClick,\n actions,\n moreActions,\n bulkActions,\n rowSelectionModel,\n onRowSelectionModelChange,\n slots,\n mobileRender,\n containerHeight = 600,\n showColumnButton = false,\n showFilterButton = false,\n filter,\n onFilterChange,\n sort,\n onSortChange,\n defaultVisibleFieldNames,\n preferredFieldOrder,\n columnStrategies,\n onColumnVisibilityModelChange,\n storageKey,\n entityFilterConfig,\n}: DynamicDataViewProps<T>) => {\n const { items: rows = [], total = 0 } = data || {};\n\n // Criar metadata temporário baseado em data quando metadata não disponível\n const preloadedMetadata = useMemo(() => {\n if (metadata) return metadata;\n\n // Se não tem metadata mas tem dados, criar metadata baseado nas keys do primeiro item\n if (rows.length > 0) {\n const firstRow = rows[0];\n const fields = Object.keys(firstRow).map(key => ({\n name: key,\n type: DataType.TEXT,\n description: key,\n filter_field_name: null,\n metadata: null,\n access_type: AccessType.READ_ONLY,\n relation_field_name: null,\n available_filter_conditions: [],\n }));\n\n return {\n name: 'loading',\n description: 'Loading...',\n id_field_name: 'id',\n description_field_name: fields[0]?.name || 'id',\n access_type: AccessType.READ_ONLY,\n fields,\n };\n }\n\n return undefined;\n }, [metadata, rows]);\n\n const effectiveMetadata = useMemo(\n () =>\n preloadedMetadata && onRowAction\n ? addActionsFieldToMetadata(preloadedMetadata)\n : preloadedMetadata,\n [preloadedMetadata, onRowAction],\n );\n\n const effectiveMetadataFields = useMemo(\n () => effectiveMetadata?.fields || [],\n [effectiveMetadata],\n );\n\n const renderCell = useMemo(\n () =>\n createCellRenderer<T>({\n onRowAction,\n }),\n [onRowAction],\n );\n\n const columns = useDynamicColumns<T>({\n metadata: effectiveMetadata,\n renderCell,\n columnStrategies,\n });\n\n const { orderedColumns, columnsByFieldId } = useColumnOrdering({\n columns,\n fields: effectiveMetadata?.fields,\n preferredFieldOrder,\n });\n\n const { initialState, handleColumnVisibilityModelChange } =\n useColumnVisibility({\n fields: effectiveMetadata?.fields,\n columnsByFieldId,\n defaultVisibleFieldNames,\n columnVisibilityStorageKey: `${storageKey}:columns`,\n onColumnVisibilityModelChange,\n });\n\n const handleRowDoubleClick = useCallback(\n (params: { id: string | number; row: DynamicRowData<T> }) => {\n if (!onRowDoubleClick) return;\n\n const rowId = params.id?.toString() || '';\n onRowDoubleClick(rowId, params.row);\n },\n [onRowDoubleClick],\n );\n\n const isMobile = useResponsive('down', 'md');\n const [filterAnchorEl, setFilterAnchorEl] = useState<HTMLElement | null>(\n null,\n );\n\n const { filter: storedFilter, setFilter: setStoredFilter } = useFilterStorage(\n storageKey,\n filter,\n onFilterChange,\n );\n\n const { sort: storedSort, setSort: setStoredSort } = useSortStorage(\n storageKey,\n sort,\n onSortChange,\n );\n\n const effectiveFilter = filter ?? storedFilter;\n const effectiveSort = sort ?? storedSort;\n\n const { sortModel, handleSortModelChange } = useSorting({\n sort: effectiveSort,\n onSortChange: setStoredSort,\n fields: effectiveMetadataFields,\n });\n\n const {\n conditions,\n isOpen,\n openDrawer,\n closeDrawer,\n addCondition,\n updateCondition,\n removeCondition,\n clearAllFilters,\n applyFilters,\n cancelChanges,\n hasActiveFilters,\n activeFiltersCount,\n } = useFilters({\n fields: effectiveMetadataFields,\n initialFilter: effectiveFilter,\n });\n\n const handleApplyFilters = useCallback(() => {\n const newFilter = applyFilters();\n setStoredFilter(newFilter);\n }, [applyFilters, setStoredFilter]);\n\n const handleClearFilters = useCallback(() => {\n clearAllFilters();\n setStoredFilter(undefined);\n }, [clearAllFilters, setStoredFilter]);\n\n const handleFilterButtonClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (isMobile) {\n openDrawer();\n } else {\n openDrawer();\n setFilterAnchorEl(event.currentTarget);\n }\n },\n [isMobile, openDrawer],\n );\n\n const handleCancelFilters = useCallback(() => {\n cancelChanges();\n setFilterAnchorEl(null);\n }, [cancelChanges]);\n\n const [isSortModalOpen, setIsSortModalOpen] = useState(false);\n\n const handleFiltersClose = useCallback(() => {\n setFilterAnchorEl(null);\n closeDrawer();\n }, [closeDrawer]);\n const hasSelectionActions = !!bulkActions?.length;\n\n return (\n <>\n <DataView<DynamicRowData<T>>\n title={title}\n columns={orderedColumns}\n rows={rows}\n mobileRender={mobileRender}\n rowCount={total}\n loading={isLoading || !metadata}\n fetching={isFetching}\n searchValue={searchValue}\n onSearch={onSearch}\n onSearchChange={onSearchChange}\n paginationModel={{\n page,\n pageSize: perPage,\n }}\n onPaginationChange={onPaginationChange}\n actions={actions}\n moreActions={moreActions}\n onAdd={onAdd}\n onRowDoubleClick={onRowDoubleClick ? handleRowDoubleClick : undefined}\n bulkActions={bulkActions}\n checkboxSelection={hasSelectionActions}\n rowSelectionModel={rowSelectionModel}\n onRowSelectionModelChange={onRowSelectionModelChange}\n keepNonExistentRowsSelected={hasSelectionActions}\n disableRowSelectionOnClick\n slots={slots}\n initialState={initialState}\n showColumnButton={showColumnButton}\n containerProps={{\n height: containerHeight,\n maxHeight: containerHeight,\n }}\n onColumnVisibilityModelChange={handleColumnVisibilityModelChange}\n filterButton={\n <FilterButton\n showFilterButton={showFilterButton}\n isMobile={isMobile}\n hasActiveFilters={hasActiveFilters}\n activeFiltersCount={activeFiltersCount}\n sort={effectiveSort}\n onFilterClick={handleFilterButtonClick}\n onSortClick={() => setIsSortModalOpen(true)}\n />\n }\n sortingMode=\"server\"\n sortModel={sortModel}\n onSortModelChange={handleSortModelChange}\n disableColumnFilter\n />\n {metadata && (\n <>\n <FiltersSection\n showFilterButton={showFilterButton}\n isOpen={isOpen}\n filterAnchorEl={filterAnchorEl}\n fields={effectiveMetadataFields}\n conditions={conditions}\n isMobile={isMobile}\n onClose={handleFiltersClose}\n onAddCondition={addCondition}\n onUpdateCondition={updateCondition}\n onRemoveCondition={removeCondition}\n onApply={handleApplyFilters}\n onClear={handleClearFilters}\n onCancel={handleCancelFilters}\n entityFilterConfig={entityFilterConfig}\n />\n\n <SortModal\n open={isSortModalOpen}\n onClose={() => setIsSortModalOpen(false)}\n fields={effectiveMetadataFields}\n sort={effectiveSort}\n onSortChange={setStoredSort}\n />\n </>\n )}\n </>\n );\n};\n\nexport default memo(DynamicDataView, isEqual) as typeof DynamicDataView;\nexport type { DynamicDataViewProps, DynamicRowData } from './props';\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Badge from '@mui/material/Badge';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\n\nimport { ToolbarActionsDivider } from 'components/DataView';\nimport Icon from 'components/Icon';\n\nimport { FilterButtonProps } from '../props';\n\nconst FilterButton = ({\n showFilterButton,\n isMobile,\n hasActiveFilters,\n activeFiltersCount,\n sort,\n onFilterClick,\n onSortClick,\n}: FilterButtonProps) => {\n if (!showFilterButton) return null;\n\n if (isMobile) {\n return (\n <Stack direction=\"row\" spacing={0.5}>\n <Badge\n badgeContent={activeFiltersCount}\n color=\"primary\"\n invisible={activeFiltersCount === 0}\n sx={{\n '& .MuiBadge-badge': {\n transform: 'scale(0.9) translate(10px, 9px)',\n opacity: activeFiltersCount === 0 ? 0 : 1,\n },\n }}\n >\n <IconButton\n color={hasActiveFilters ? 'primary' : 'default'}\n onClick={onFilterClick}\n size=\"small\"\n aria-label=\"Filtrar\"\n sx={{ overflow: 'visible' }}\n >\n <Icon icon=\"FILTER_VERTICAL\" />\n </IconButton>\n </Badge>\n\n <ToolbarActionsDivider\n sx={{ height: 16 }}\n orientation=\"vertical\"\n flexItem\n />\n\n <IconButton\n color={sort ? 'primary' : 'default'}\n onClick={onSortClick}\n size=\"small\"\n aria-label=\"Ordenar\"\n >\n <Icon\n icon={sort?.sortType === 'DESC' ? 'SORTING_DESC' : 'SORTING_ASC'}\n />\n </IconButton>\n </Stack>\n );\n }\n\n return (\n <Badge\n badgeContent={activeFiltersCount}\n color=\"primary\"\n invisible={activeFiltersCount === 0}\n sx={{\n '& .MuiBadge-badge': activeFiltersCount\n ? {\n transform: 'scale(0.9) translate(-3px, 7px)',\n position: 'relative',\n opacity: 1,\n transition: 'none',\n }\n : {\n transition: 'none',\n opacity: 0,\n },\n }}\n >\n <Button\n variant=\"text\"\n color={hasActiveFilters ? 'primary' : 'inherit'}\n startIcon={<Icon icon=\"FILTER_VERTICAL\" />}\n onClick={onFilterClick}\n size=\"small\"\n >\n Filtrar\n </Button>\n </Badge>\n );\n};\n\nexport default memo(FilterButton, isEqual);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\n\nimport { FiltersSectionProps } from '../props';\n\nimport FiltersContainer from './filters/FiltersContainer';\n\nconst FiltersSection = ({\n showFilterButton,\n isOpen,\n filterAnchorEl,\n fields,\n conditions,\n isMobile,\n onClose,\n onAddCondition,\n onUpdateCondition,\n onRemoveCondition,\n onApply,\n onClear,\n onCancel,\n entityFilterConfig,\n}: FiltersSectionProps) => {\n if (!showFilterButton) return null;\n\n return (\n <FiltersContainer\n open={isOpen || Boolean(filterAnchorEl)}\n anchorEl={filterAnchorEl}\n onClose={onClose}\n fields={fields}\n conditions={conditions}\n onAddCondition={onAddCondition}\n onUpdateCondition={onUpdateCondition}\n onRemoveCondition={onRemoveCondition}\n onApply={onApply}\n onClear={onClear}\n onCancel={onCancel}\n isMobileProp={isMobile}\n entityFilterConfig={entityFilterConfig}\n />\n );\n};\n\nexport default memo(FiltersSection, isEqual);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\n\nimport ResponsivePopover from 'components/ResponsivePopover';\n\nimport FiltersContent from './FiltersContent';\nimport type { FiltersContainerProps } from './props';\n\nconst FiltersContainer = (props: FiltersContainerProps) => {\n return (\n <ResponsivePopover\n open={props.open}\n onClose={props.onClose}\n anchorEl={props.anchorEl}\n isMobile={props.isMobileProp}\n popoverProps={{\n slotProps: {\n paper: {\n sx: {\n width: 520,\n maxWidth: 'calc(100vw - 24px)',\n maxHeight: 600,\n mt: 1,\n },\n },\n },\n }}\n drawerProps={{\n anchor: 'right',\n PaperProps: {\n sx: {\n width: '100%',\n maxWidth: '100%',\n height: '100%',\n maxHeight: '100%',\n borderRadius: 0,\n },\n },\n }}\n >\n <FiltersContent {...props} />\n </ResponsivePopover>\n );\n};\n\nexport default memo(FiltersContainer, isEqual);\n","import { memo, useCallback } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Button from '@mui/material/Button';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nimport { getFilterableFields } from '../../utils/filter';\n\nimport FiltersList from './FiltersList';\nimport type { FiltersPopoverProps } from './props';\nimport { Container, Content, Footer, Header } from './styles';\n\nconst FiltersContent = ({\n onClose,\n fields,\n conditions,\n onAddCondition,\n onUpdateCondition,\n onRemoveCondition,\n onApply,\n onClear,\n onCancel,\n entityFilterConfig,\n}: FiltersPopoverProps) => {\n const filterableFields = getFilterableFields(fields);\n const hasConditions = conditions.length > 0;\n\n const handleApply = useCallback(() => {\n onApply();\n onClose();\n }, [onApply, onClose]);\n\n const handleClear = useCallback(() => {\n onClear();\n onClose();\n }, [onClear, onClose]);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n return (\n <Container>\n <Header>\n <Typography variant=\"overline\" fontWeight={600} color=\"text.secondary\">\n Defina as condições para filtrar\n </Typography>\n\n <IconButton\n onClick={onAddCondition}\n size=\"small\"\n aria-label=\"Adicionar filtro\"\n title=\"Adicionar filtro\"\n disabled={conditions.length >= filterableFields.length}\n >\n <Icon icon=\"SIMPLE_ADD\" />\n </IconButton>\n </Header>\n\n <Divider />\n\n <Content>\n <FiltersList\n filterableFields={filterableFields}\n conditions={conditions}\n onUpdateCondition={onUpdateCondition}\n onRemoveCondition={onRemoveCondition}\n entityFilterConfig={entityFilterConfig}\n />\n </Content>\n\n <Divider />\n\n <Footer>\n <Button variant=\"text\" color=\"inherit\" onClick={handleClear}>\n Limpar\n </Button>\n\n <Stack direction=\"row\" spacing={1}>\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n onClick={handleCancel}\n startIcon={<Icon icon=\"CANCEL_CIRCLE\" />}\n >\n Cancelar\n </Button>\n <Button\n variant=\"contained\"\n onClick={handleApply}\n disabled={!hasConditions}\n startIcon={<Icon icon=\"SIMPLE_CHECK\" />}\n >\n Aplicar\n </Button>\n </Stack>\n </Footer>\n </Container>\n );\n};\n\nexport default memo(FiltersContent, isEqual);\n","import { Condition, DataType, Field } from 'model/entity-metadata';\nimport {\n Filter,\n FilterCondition,\n FilterOperator,\n FilterState,\n} from 'model/filter';\n\n/**\n * Campos filtráveis (campos com condições disponíveis)\n */\nexport const getFilterableFields = (fields: Field[]): Field[] => {\n return fields.filter(\n field =>\n field.available_filter_conditions &&\n field.available_filter_conditions.length > 0 &&\n field.name !== 'ACTIONS',\n );\n};\n\n/**\n * Converte FilterState para formato de API\n */\nexport const buildFilterFromState = (\n state: FilterState,\n): Filter | undefined => {\n const entries = Object.entries(state).filter(\n ([, value]) => value.value.length > 0,\n );\n if (entries.length === 0) return undefined;\n return {\n operator: FilterOperator.AND,\n groups: [\n {\n operator: FilterOperator.AND,\n conditionals: entries.map(([, filterValue]) => ({\n fieldName: filterValue.fieldName,\n conditional: filterValue.conditional,\n value: filterValue.value,\n })),\n },\n ],\n };\n};\n\n/**\n * Retorna o conditional padrão para um tipo de campo\n */\nexport const getDefaultCondition = (field: Field): Condition => {\n const { type, available_filter_conditions } = field;\n if (available_filter_conditions.length === 0) return Condition.EQUALS;\n if (\n type === DataType.TEXT &&\n available_filter_conditions.includes(Condition.LIKE)\n ) {\n return Condition.LIKE;\n }\n return available_filter_conditions[0];\n};\n\n/**\n * Verifica se uma condição é válida (tem valor ou não requer valor)\n */\nexport const isValidCondition = (condition: FilterCondition): boolean => {\n return (\n condition.value.length > 0 ||\n condition.conditional === Condition.IS_NULL ||\n condition.conditional === Condition.IS_NOT_NULL\n );\n};\n\n/**\n * Converte array de FilterCondition para Filter API\n */\nexport const buildFilterFromConditions = (\n conditions: FilterCondition[],\n): Filter | undefined => {\n if (conditions.length === 0) return undefined;\n\n const validConditions = conditions.filter(isValidCondition);\n if (validConditions.length === 0) return undefined;\n\n return {\n operator: FilterOperator.AND,\n groups: [\n {\n operator: validConditions[0]?.operator || FilterOperator.AND,\n conditionals: validConditions.map(c => ({\n fieldName: c.fieldName,\n conditional: c.conditional,\n value: c.value,\n })),\n },\n ],\n };\n};\n","import { memo, useCallback, useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Typography from '@mui/material/Typography';\nimport type { FilterCondition } from 'model/filter';\n\nimport FilterRow from './FilterRow';\nimport type { FiltersListProps } from './props';\n\nconst FiltersList = ({\n filterableFields,\n conditions,\n onUpdateCondition,\n onRemoveCondition,\n entityFilterConfig,\n}: FiltersListProps) => {\n const handleUpdateCondition = useCallback(\n (updated: FilterCondition) => {\n onUpdateCondition(updated.id, updated);\n },\n [onUpdateCondition],\n );\n\n const handleRemoveCondition = useCallback(\n (id: string) => () => {\n onRemoveCondition(id);\n },\n [onRemoveCondition],\n );\n\n const usedFieldNames = useMemo(\n () =>\n conditions.map(c => c.fieldName).filter((name): name is string => !!name),\n [conditions],\n );\n\n const getAvailableFields = useCallback(\n (currentFieldName: string | undefined) =>\n filterableFields.filter(\n field =>\n !usedFieldNames.includes(field.name) ||\n field.name === currentFieldName,\n ),\n [filterableFields, usedFieldNames],\n );\n\n if (filterableFields.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n Nenhum filtro disponível\n </Typography>\n );\n }\n\n if (conditions.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n Clique em{' '}\n <Typography\n component=\"strong\"\n variant=\"body2\"\n fontWeight={600}\n color=\"text.primary\"\n >\n &quot;+&quot;\n </Typography>{' '}\n para adicionar um filtro\n </Typography>\n );\n }\n\n return (\n <>\n {conditions.map((condition, index) => (\n <FilterRow\n key={condition.id}\n condition={condition}\n fields={getAvailableFields(condition.fieldName)}\n onChange={handleUpdateCondition}\n onRemove={handleRemoveCondition(condition.id)}\n showOperator={index > 0}\n totalConditions={conditions.length}\n isFirst={index === 0}\n entityFilterConfig={entityFilterConfig}\n />\n ))}\n </>\n );\n};\n\nexport default memo(FiltersList, isEqual);\n","import { memo, useCallback, useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport FormControl from '@mui/material/FormControl';\nimport IconButton from '@mui/material/IconButton';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\nimport { Condition } from 'model/entity-metadata';\nimport { FilterOperator } from 'model/filter';\n\nimport Icon from 'components/Icon';\n\nimport { CONDITION_LABELS } from '../../constants/filter';\n\nimport EntityFilter from './EntityFilter';\nimport OperatorSelect from './OperatorSelect';\nimport type { FilterRowProps } from './props';\n\nconst ellipsisStyle = {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n} as const;\n\nconst FilterRow = ({\n condition,\n fields,\n onChange,\n onRemove,\n totalConditions,\n isFirst,\n entityFilterConfig,\n}: FilterRowProps) => {\n const selectedField = useMemo(\n () =>\n fields.find(f => (f.filter_field_name ?? f.name) === condition.fieldName),\n [fields, condition.fieldName],\n );\n\n const availableConditions = useMemo(\n () => selectedField?.available_filter_conditions || [],\n [selectedField],\n );\n\n const isValueDisabled = useMemo(\n () =>\n !condition.fieldName ||\n condition.conditional === 'IS_NULL' ||\n condition.conditional === 'IS_NOT_NULL',\n [condition.fieldName, condition.conditional],\n );\n\n const handleFieldChange = useCallback(\n (fieldName: string) => {\n const newField = fields.find(\n f => (f.filter_field_name ?? f.name) === fieldName,\n );\n if (!newField) return;\n\n const defaultCondition =\n newField.available_filter_conditions[0] || 'EQUALS';\n\n onChange({\n ...condition,\n fieldName,\n conditional: defaultCondition,\n value: [],\n });\n },\n [fields, condition, onChange],\n );\n\n const handleConditionChange = useCallback(\n (conditional: Condition) => {\n onChange({\n ...condition,\n conditional,\n });\n },\n [condition, onChange],\n );\n\n const handleValueChange = useCallback(\n (value: string) => {\n onChange({\n ...condition,\n value: value ? [value] : [],\n });\n },\n [condition, onChange],\n );\n\n const handleEntityValueChange = useCallback(\n (value: string, label?: string) => {\n const valueLabels = { ...condition.valueLabels };\n if (value && label) {\n valueLabels[value] = label;\n }\n onChange({\n ...condition,\n value: value ? [value] : [],\n valueLabels,\n });\n },\n [condition, onChange],\n );\n\n const handleOperatorChange = useCallback(\n (operator: FilterOperator) => {\n onChange({\n ...condition,\n operator,\n });\n },\n [condition, onChange],\n );\n\n const renderValueInput = () => {\n if (selectedField?.type === 'BOOLEAN') {\n return (\n <FormControl\n size=\"small\"\n sx={{ flex: 1, minWidth: 120 }}\n disabled={isValueDisabled}\n >\n <InputLabel id={`value-label-${condition.id}`}>Valor</InputLabel>\n <Select\n labelId={`value-label-${condition.id}`}\n label=\"Valor\"\n value={condition.value[0] || ''}\n onChange={e => handleValueChange(e.target.value)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n <MenuItem value=\"true\">Verdadeiro</MenuItem>\n <MenuItem value=\"false\">Falso</MenuItem>\n </Select>\n </FormControl>\n );\n }\n\n if (\n selectedField?.type === 'ENTITY' &&\n selectedField.metadata &&\n entityFilterConfig?.[selectedField.metadata.name]\n ) {\n const currentValue = condition.value[0] || '';\n return (\n <EntityFilter\n config={entityFilterConfig[selectedField.metadata.name]}\n metadata={selectedField.metadata}\n value={currentValue}\n initialLabel={condition.valueLabels?.[currentValue]}\n onChange={handleEntityValueChange}\n disabled={isValueDisabled}\n />\n );\n }\n\n return (\n <TextField\n label=\"Filtro\"\n value={condition.value[0] || ''}\n onChange={e => handleValueChange(e.target.value)}\n size=\"small\"\n disabled={isValueDisabled}\n InputLabelProps={{ shrink: true }}\n sx={{ flex: 1, minWidth: 120 }}\n />\n );\n };\n\n return (\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <IconButton\n onClick={onRemove}\n size=\"small\"\n aria-label=\"Remover filtro\"\n sx={{ flexShrink: 0 }}\n >\n <Icon icon=\"CLOSE_MARK_BUTTON\" width={18} />\n </IconButton>\n\n <OperatorSelect\n value={condition.operator}\n onChange={handleOperatorChange}\n totalConditions={totalConditions}\n isFirst={isFirst}\n />\n\n <FormControl size=\"small\" sx={{ minWidth: 150, flex: 1 }}>\n <InputLabel id={`field-label-${condition.id}`}>Coluna</InputLabel>\n <Select\n labelId={`field-label-${condition.id}`}\n label=\"Coluna\"\n value={condition.fieldName}\n onChange={e => handleFieldChange(e.target.value)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n {fields.map(field => (\n <MenuItem\n key={field.name}\n value={field.filter_field_name ?? field.name}\n sx={ellipsisStyle}\n title={field.description || field.name}\n >\n {field.description || field.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n <FormControl\n size=\"small\"\n sx={{ minWidth: 90 }}\n disabled={!condition.fieldName}\n >\n <InputLabel id={`condition-label-${condition.id}`}>Condição</InputLabel>\n <Select\n labelId={`condition-label-${condition.id}`}\n label=\"Condição\"\n value={condition.conditional}\n onChange={e => handleConditionChange(e.target.value as Condition)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n {availableConditions.map(cond => (\n <MenuItem key={cond} value={cond} sx={ellipsisStyle}>\n {CONDITION_LABELS[cond as Condition] || cond}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n {renderValueInput()}\n </Stack>\n );\n};\n\nexport default memo(FilterRow, isEqual);\n","import { Condition } from 'model/entity-metadata';\n\nexport const CONDITION_LABELS: Record<Condition, string> = {\n [Condition.EQUALS]: 'Igual a',\n [Condition.NOT_EQUALS]: 'Diferente de',\n [Condition.LIKE]: 'Contém',\n [Condition.NOT_LIKE]: 'Não contém',\n [Condition.GREATER_THAN]: 'Maior que',\n [Condition.LESS_THAN]: 'Menor que',\n [Condition.GREATER_THAN_OR_EQUAL]: 'Maior ou igual a',\n [Condition.LESS_THAN_OR_EQUAL]: 'Menor ou igual a',\n [Condition.IN]: 'Em',\n [Condition.NOT_IN]: 'Não em',\n [Condition.IS_NULL]: 'É nulo',\n [Condition.IS_NOT_NULL]: 'Não é nulo',\n};\n","import { memo, useCallback, useMemo, useState } from 'react';\n\nimport Autocomplete from 'components/Autocomplete';\nimport useDebounceValue from 'hooks/useDebounceValue';\nimport useToggle from 'hooks/useToggle';\nimport type { Option } from 'types/option';\n\nimport type { EntityFilterProps } from './props';\n\nconst EntityFilter = ({\n config,\n metadata,\n value,\n initialLabel,\n onChange,\n disabled = false,\n}: EntityFilterProps) => {\n const [open, , setOpen] = useToggle(false);\n const [searchInput, setSearchInput] = useState('');\n const debouncedSearch = useDebounceValue(searchInput, 400);\n\n const { data, isLoading, isFetching } = config.useQuery(\n {\n search: debouncedSearch || undefined,\n page: 0,\n perPage: 25,\n ...config.queryParams,\n },\n { skip: !open },\n );\n\n const loading = isLoading || isFetching;\n\n const selectedOption = useMemo<Option | null>(() => {\n if (!value) return null;\n return { value, label: initialLabel ?? value };\n }, [value, initialLabel]);\n\n const options = useMemo<Option[]>(() => {\n const items: Option[] = (data?.items ?? [])\n .map(item => ({\n label: String(item[metadata.description_field_name] ?? ''),\n value: String(item[metadata.id_field_name] ?? ''),\n }))\n .filter(opt => opt.value && opt.label);\n\n if (\n selectedOption &&\n !items.some(\n opt => opt.value.toString() === selectedOption.value.toString(),\n )\n ) {\n items.unshift(selectedOption);\n }\n\n return items;\n }, [\n data,\n metadata.id_field_name,\n metadata.description_field_name,\n selectedOption,\n ]);\n\n const handleOpen = useCallback(() => setOpen(true), [setOpen]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n setSearchInput('');\n }, [setOpen]);\n\n const handleChange = useCallback(\n (newValue: string) => {\n if (!newValue) {\n onChange('', undefined);\n return;\n }\n const option = options.find(opt => opt.value.toString() === newValue);\n onChange(newValue, option?.label);\n },\n [onChange, options],\n );\n\n const handleSearch = useCallback((val?: string) => {\n setSearchInput(val ?? '');\n }, []);\n\n return (\n <Autocomplete\n name={`entity-filter-${metadata.name}`}\n label=\"Filtro\"\n value={value || ''}\n options={options}\n onChange={handleChange}\n onSearch={handleSearch}\n loading={loading}\n disabled={disabled}\n size=\"small\"\n filterOptions={x => x}\n noOptionsText={\n searchInput !== debouncedSearch ? 'Buscando...' : 'Nenhum resultado'\n }\n InputLabelProps={{ shrink: true }}\n sx={{ flex: 1, minWidth: 120 }}\n open={open}\n onOpen={handleOpen}\n onClose={handleClose}\n />\n );\n};\n\nexport default memo(EntityFilter);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport { FilterOperator } from 'model/filter';\n\nimport type { OperatorSelectProps } from './props';\n\nconst OperatorSelect = ({\n value,\n onChange,\n totalConditions,\n isFirst,\n}: OperatorSelectProps) => {\n if (totalConditions === 1) {\n return null;\n }\n\n if (isFirst) {\n return <Stack sx={{ width: 55, flexShrink: 0 }} />;\n }\n\n return (\n <Select\n value={value}\n onChange={e => onChange(e.target.value as FilterOperator)}\n size=\"small\"\n sx={{ width: 55, flexShrink: 0 }}\n >\n <MenuItem value={FilterOperator.AND}>e</MenuItem>\n <MenuItem value={FilterOperator.OR}>ou</MenuItem>\n </Select>\n );\n};\n\nexport default memo(OperatorSelect, isEqual);\n","import Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\n// Estilos baseados no Drawer/Popover para garantir consistência\nexport const Container = styled(Box)({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n // No popover, a altura será controlada pelo max-height do container\n});\n\nexport const Header = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2, 3),\n}));\n\nexport const Content = styled(Box)(({ theme }) => ({\n flex: 1,\n overflowY: 'auto',\n padding: theme.spacing(3),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nexport const Footer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2),\n}));\n","import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport Button from '@mui/material/Button';\nimport FormControl from '@mui/material/FormControl';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { SortType } from 'model/filter';\n\nimport Icon from 'components/Icon';\n\nimport { SortModalProps } from './props';\nimport {\n ApplyButton,\n LabelButton,\n StyledDialog,\n StyledDialogActions,\n StyledDialogContent,\n StyledDialogTitle,\n} from './style';\n\nconst SortModal = ({\n open,\n onClose,\n fields,\n sort,\n onSortChange,\n}: SortModalProps) => {\n const [selectedField, setSelectedField] = useState<string>(\n sort?.fieldName || '',\n );\n const [selectedDirection, setSelectedDirection] = useState<SortType>(\n sort?.sortType || SortType.ASC,\n );\n\n const sortableFields = useMemo(\n () =>\n fields.filter(\n field => field.name !== 'ACTIONS' && field.access_type !== 'WRITE_ONLY',\n ),\n [fields],\n );\n\n const selectedFieldObj = useMemo(\n () =>\n fields.find(\n field => (field.filter_field_name ?? field.name) === selectedField,\n ),\n [fields, selectedField],\n );\n\n const isNumberField =\n selectedFieldObj?.type === 'DECIMAL' ||\n selectedFieldObj?.type === 'INTEGER';\n\n useEffect(() => {\n if (open) {\n setSelectedField(sort?.fieldName || '');\n setSelectedDirection(sort?.sortType || SortType.ASC);\n }\n }, [open, sort]);\n\n const handleApply = useCallback(() => {\n if (onSortChange) {\n if (!selectedField) {\n onSortChange(undefined);\n } else {\n onSortChange({\n fieldName: selectedField,\n sortType: selectedDirection,\n });\n }\n }\n onClose();\n }, [onSortChange, selectedField, selectedDirection, onClose]);\n\n const handleClear = useCallback(() => {\n if (!onSortChange) return;\n\n setSelectedField('');\n setSelectedDirection(SortType.ASC);\n\n onSortChange(undefined);\n onClose();\n }, [onSortChange, onClose]);\n\n return (\n <StyledDialog open={open} onClose={onClose} maxWidth=\"xs\" fullWidth>\n <StyledDialogTitle>\n <Typography variant=\"overline\" color=\"text.secondary\">\n Ordenar por\n </Typography>\n </StyledDialogTitle>\n <StyledDialogContent>\n <Stack spacing={2} pt={2}>\n <FormControl fullWidth size=\"small\">\n <InputLabel id=\"sort-field-label\">Campo</InputLabel>\n <Select\n labelId=\"sort-field-label\"\n value={selectedField}\n label=\"Campo\"\n onChange={e => setSelectedField(e.target.value)}\n >\n <MenuItem value=\"\">\n <em>Nenhum</em>\n </MenuItem>\n {sortableFields.map(field => (\n <MenuItem\n key={field.name}\n value={field.filter_field_name ?? field.name}\n >\n {field.description || field.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl fullWidth size=\"small\" disabled={!selectedField}>\n <InputLabel id=\"sort-direction-label\">Direção</InputLabel>\n <Select\n labelId=\"sort-direction-label\"\n value={selectedDirection}\n label=\"Direção\"\n onChange={e => setSelectedDirection(e.target.value as SortType)}\n >\n <MenuItem value={SortType.ASC}>\n Crescente {isNumberField ? '(1-9)' : '(A-Z)'}\n </MenuItem>\n <MenuItem value={SortType.DESC}>\n Decrescente {isNumberField ? '(9-1)' : '(Z-A)'}\n </MenuItem>\n </Select>\n </FormControl>\n </Stack>\n </StyledDialogContent>\n <StyledDialogActions>\n <Stack flex={1} width=\"100%\" direction=\"row\">\n <Button color=\"inherit\" onClick={handleClear}>\n Limpar\n </Button>\n </Stack>\n <Button\n onClick={onClose}\n variant=\"outlined\"\n color=\"inherit\"\n sx={{ minWidth: 24 }}\n >\n <Icon icon=\"CANCEL_CIRCLE\" />\n <LabelButton>Cancelar</LabelButton>\n </Button>\n <ApplyButton onClick={handleApply} variant=\"contained\">\n <Icon icon=\"SIMPLE_CHECK\" />\n <LabelButton>Aplicar</LabelButton>\n </ApplyButton>\n </StyledDialogActions>\n </StyledDialog>\n );\n};\n\nSortModal.displayName = 'SortModal';\n\nexport default memo(SortModal);\n","import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\n\nexport const StyledDialog = styled(Dialog)(() => ({\n '& .MuiDialog-paper': { width: '100%' },\n}));\n\nexport const StyledDialogTitle = styled(DialogTitle)(({ theme }) => ({\n borderBottom: '1px solid',\n borderColor: theme.palette.divider,\n padding: theme.spacing(1.5, 2),\n}));\n\nexport const StyledDialogContent = styled(DialogContent)(({ theme }) => ({\n padding: theme.spacing(2),\n}));\n\nexport const StyledDialogActions = styled(DialogActions)(({ theme }) => ({\n borderTop: '1px solid',\n borderColor: theme.palette.divider,\n padding: theme.spacing(1.5, 2),\n}));\n\nexport const ApplyButton = styled(Button)(({ theme }) => ({\n minWidth: 24,\n [theme.breakpoints.down(330)]: {\n padding: theme.spacing(1),\n },\n}));\n\nexport const LabelButton = styled(Typography)(({ theme }) => ({\n fontWeight: '600',\n margin: theme.spacing(0, 1),\n [theme.breakpoints.down(330)]: {\n fontSize: 0,\n margin: 0,\n },\n}));\n","import { useMemo } from 'react';\nimport type { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { UseColumnOrderingParams } from '../props';\n\nexport const useColumnOrdering = ({\n columns,\n fields,\n preferredFieldOrder,\n}: UseColumnOrderingParams) => {\n const columnsByFieldId = useMemo(\n () => new Map(columns.map(column => [column.field, column])),\n [columns],\n );\n\n const fieldsByName = useMemo(\n () => new Map(fields?.map(f => [f.name, f]) || []),\n [fields],\n );\n\n const orderedColumns = useMemo(() => {\n if (!preferredFieldOrder || preferredFieldOrder.length === 0 || !fields) {\n return columns;\n }\n\n const actionFieldName = 'ACTIONS';\n const preferredWithoutActions = preferredFieldOrder.filter(\n fieldName => fieldName !== actionFieldName,\n );\n\n const usedColumnFieldIds = new Set<string>();\n const ordered: GridColDef[] = [];\n\n const pushColumnForField = (fieldName: string) => {\n const field = fieldsByName.get(fieldName);\n if (!field) return;\n\n const column = columnsByFieldId.get(field.name);\n\n if (!column || usedColumnFieldIds.has(field.name)) return;\n\n ordered.push(column);\n usedColumnFieldIds.add(field.name);\n };\n\n preferredWithoutActions.forEach(fieldName => {\n pushColumnForField(fieldName);\n });\n\n fields.forEach(field => {\n if (field.name === actionFieldName) return;\n if (preferredWithoutActions.includes(field.name)) return;\n\n const column = columnsByFieldId.get(field.name);\n\n if (!column || usedColumnFieldIds.has(field.name)) return;\n\n ordered.push(column);\n usedColumnFieldIds.add(field.name);\n });\n\n pushColumnForField(actionFieldName);\n\n return ordered.length === 0 ? columns : ordered;\n }, [columns, columnsByFieldId, fieldsByName, preferredFieldOrder, fields]);\n\n return { orderedColumns, columnsByFieldId, fieldsByName };\n};\n","import { useCallback, useMemo } from 'react';\nimport type { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\nimport { Field } from 'model/entity-metadata';\n\nimport useLocalStorage from 'hooks/useLocalStorage';\n\nimport { UseColumnVisibilityParams } from '../props';\n\nfunction getColumnFieldIdFromField(field: Field): string {\n return field.name;\n}\n\nexport const useColumnVisibility = ({\n fields,\n columnsByFieldId,\n defaultVisibleFieldNames,\n columnVisibilityStorageKey,\n onColumnVisibilityModelChange,\n}: UseColumnVisibilityParams) => {\n const hasStorageKey = Boolean(columnVisibilityStorageKey);\n\n const [storedVisibilityModel, setStoredVisibilityModel] = useLocalStorage<\n GridColumnVisibilityModel | undefined\n >(columnVisibilityStorageKey || '__dynamic-data-view:columns__', undefined, {\n initializeWithValue: hasStorageKey,\n });\n\n const initialState = useMemo(() => {\n if (!fields) return undefined;\n\n const visibilityModel: GridColumnVisibilityModel = {};\n\n fields.forEach(field => {\n const columnFieldId = getColumnFieldIdFromField(field);\n if (!columnsByFieldId.has(columnFieldId)) return;\n\n let visible: boolean | undefined;\n\n if (hasStorageKey && storedVisibilityModel) {\n const stored = storedVisibilityModel[columnFieldId];\n if (typeof stored === 'boolean') {\n visible = stored;\n }\n }\n\n if (\n visible === undefined &&\n defaultVisibleFieldNames &&\n defaultVisibleFieldNames.length > 0\n ) {\n visible = defaultVisibleFieldNames.includes(field.name);\n }\n\n if (typeof visible === 'boolean') {\n visibilityModel[columnFieldId] = visible;\n }\n });\n\n if (Object.keys(visibilityModel).length === 0) return undefined;\n\n return {\n columns: {\n columnVisibilityModel: visibilityModel,\n },\n };\n }, [\n columnsByFieldId,\n defaultVisibleFieldNames,\n fields,\n hasStorageKey,\n storedVisibilityModel,\n ]);\n\n const handleColumnVisibilityModelChange = useCallback(\n (model: GridColumnVisibilityModel) => {\n if (hasStorageKey) {\n const modelToSave = { ...model };\n // Prevents __check__ (checkboxSelection column) from being permanently hidden in local storage\n delete modelToSave['__check__'];\n setStoredVisibilityModel(modelToSave);\n }\n\n if (onColumnVisibilityModelChange) {\n onColumnVisibilityModelChange(model);\n }\n },\n [hasStorageKey, onColumnVisibilityModelChange, setStoredVisibilityModel],\n );\n\n return {\n initialState,\n handleColumnVisibilityModelChange,\n };\n};\n","import { useMemo } from 'react';\nimport { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { Columns } from 'types/datagrid';\n\nimport { ACCESS_TYPES } from '../constants/columnDefaults';\nimport { UseDynamicColumnsProps } from '../props';\nimport { getColumnStrategy } from '../utils/columnStrategies';\n\nexport const useDynamicColumns = <T extends object>({\n metadata,\n renderCell,\n columnStrategies,\n}: UseDynamicColumnsProps<T>): Columns => {\n return useMemo(() => {\n if (!metadata?.fields) return [];\n\n const columnsMap = new Map<string, GridColDef>();\n\n const visibleFields = metadata.fields.filter(field => {\n if (\n field.access_type === ACCESS_TYPES.READ_ONLY ||\n field.access_type === ACCESS_TYPES.READ_AND_WRITE\n ) {\n return true;\n }\n\n return (\n field.name === 'ACTIONS' ||\n field.name === metadata?.id_field_name ||\n field.name === 'NAME'\n );\n });\n\n visibleFields.forEach(field => {\n if (columnsMap.has(field.name)) {\n return;\n }\n\n const strategy =\n columnStrategies?.[field.name] ?? getColumnStrategy<T>(field, metadata);\n const column = strategy(field, renderCell, metadata);\n\n columnsMap.set(field.name, column);\n });\n\n return Array.from(columnsMap.values());\n }, [columnStrategies, metadata, renderCell]);\n};\n","export const COLUMN_DEFAULTS = {\n IMAGE_WIDTH: 90,\n MIN_WIDTH: 130,\n ENTITY_MIN_WIDTH: 100,\n ENTITY_FLEX: 0.5,\n ID_MIN_WIDTH: 200,\n ID_FLEX: 1,\n ACTIONS_WIDTH: 80,\n} as const;\n\nexport const ACCESS_TYPES = {\n READ_ONLY: 'READ_ONLY',\n READ_AND_WRITE: 'READ_AND_WRITE',\n} as const;\n\nexport const CURRENCY_FIELD_NAMES: readonly string[] = [\n 'price',\n 'base_price',\n 'minimum_value',\n 'maximum_value',\n 'minimum_installment_value',\n];\n","import { GridColDef, GridRenderCellParams } from '@mui/x-data-grid-premium';\nimport { Field } from 'model/entity-metadata';\n\nimport { COLUMN_DEFAULTS } from '../constants/columnDefaults';\nimport { CellRenderer, ColumnStrategy, DynamicRowData } from '../props';\n\nconst createImageColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n sortable: false,\n width: COLUMN_DEFAULTS.IMAGE_WIDTH,\n resizable: false,\n headerAlign: 'center',\n align: 'center',\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createIdColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.ID_MIN_WIDTH,\n flex: COLUMN_DEFAULTS.ID_FLEX,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createEntityColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.ENTITY_MIN_WIDTH,\n flex: COLUMN_DEFAULTS.ENTITY_FLEX,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createDefaultColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.MIN_WIDTH,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createActionsColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: 'Ações',\n width: COLUMN_DEFAULTS.ACTIONS_WIDTH,\n sortable: false,\n resizable: false,\n disableReorder: true,\n headerAlign: 'center',\n disableColumnMenu: true,\n align: 'center',\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nexport const getColumnStrategy = <T extends object>(\n field: Field,\n metadata?: { id_field_name?: string },\n): ColumnStrategy<T> => {\n if (field.name === metadata?.id_field_name || field.name === 'name') {\n return createIdColumn;\n }\n\n if (field.name === 'ACTIONS') {\n return createActionsColumn;\n }\n\n if (field.type === 'FILE') {\n return createImageColumn;\n }\n\n if (field.type === 'ENTITY') {\n return createEntityColumn;\n }\n\n return createDefaultColumn;\n};\n","import { useCallback, useRef, useState } from 'react';\nimport {\n type Filter,\n type FilterCondition,\n FilterOperator,\n} from 'model/filter';\n\nimport uuidv4 from 'utils/uuidv4';\n\nimport { UseFiltersProps, UseFiltersReturn } from '../props';\nimport {\n buildFilterFromConditions,\n getDefaultCondition,\n isValidCondition,\n} from '../utils/filter';\n\n// Converte filtro inicial em condições\nconst parseInitialConditions = (initialFilter?: Filter): FilterCondition[] => {\n if (!initialFilter?.groups?.[0]?.conditionals) return [];\n return initialFilter.groups[0].conditionals.map(cond => ({\n id: uuidv4(),\n operator: initialFilter.groups[0].operator,\n fieldName: cond.fieldName,\n conditional: cond.conditional,\n value: cond.value,\n }));\n};\n\n/**\n * Hook para gerenciar estado de filtros do DynamicDataView com condições dinâmicas\n *\n * - conditions: estado de edição (o que o usuário vê no popover)\n * - appliedConditions: estado aplicado (o que está efetivamente filtrando)\n * - hasActiveFilters/activeFiltersCount: calculados com base em appliedConditions\n */\nexport const useFilters = ({\n fields,\n initialFilter,\n}: UseFiltersProps): UseFiltersReturn => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Estado aplicado (efetivamente filtrando)\n const [appliedConditions, setAppliedConditions] = useState<FilterCondition[]>(\n () => parseInitialConditions(initialFilter),\n );\n const [appliedFilter, setAppliedFilter] = useState<Filter | undefined>(\n initialFilter,\n );\n\n // Estado de edição (o que o usuário vê/edita no popover)\n const [conditions, setConditions] = useState<FilterCondition[]>(() =>\n parseInitialConditions(initialFilter),\n );\n\n // Referência para snapshot antes de abrir o popover\n const snapshotRef = useRef<FilterCondition[]>([]);\n\n const openDrawer = useCallback(() => {\n // Salva snapshot das condições atuais (aplicadas) ao abrir\n snapshotRef.current = appliedConditions.map(c => ({ ...c }));\n // Sincroniza edição com aplicado ao abrir\n setConditions(appliedConditions.map(c => ({ ...c })));\n setIsOpen(true);\n }, [appliedConditions]);\n\n const closeDrawer = () => setIsOpen(false);\n\n const addCondition = useCallback(() => {\n const filterableFields = fields.filter(\n f => f.available_filter_conditions?.length > 0,\n );\n if (filterableFields.length === 0) return;\n\n const usedFieldNames = conditions.map(c => c.fieldName);\n const availableFields = filterableFields.filter(\n f => !usedFieldNames.includes(f.filter_field_name ?? f.name),\n );\n if (availableFields.length === 0) return;\n\n const currentOperator =\n conditions.length > 0 ? conditions[0].operator : FilterOperator.AND;\n const firstField = availableFields[0];\n const newCondition: FilterCondition = {\n id: uuidv4(),\n operator: currentOperator,\n fieldName: firstField.filter_field_name ?? firstField.name,\n conditional: getDefaultCondition(firstField),\n value: [],\n };\n\n setConditions(prev => [...prev, newCondition]);\n }, [fields, conditions]);\n\n const updateCondition = useCallback(\n (id: string, changes: Partial<FilterCondition>) => {\n setConditions(prev => {\n const targetCondition = prev.find(c => c.id === id);\n if (!targetCondition) return prev;\n\n if (changes.operator && changes.operator !== targetCondition.operator) {\n const newOperator = changes.operator;\n return prev.map(c => {\n if (c.id === id) {\n return { ...c, ...changes };\n }\n return { ...c, operator: newOperator };\n });\n }\n\n return prev.map(c => (c.id === id ? { ...c, ...changes } : c));\n });\n },\n [],\n );\n\n const removeCondition = useCallback((id: string) => {\n setConditions(prev => prev.filter(c => c.id !== id));\n }, []);\n\n const clearAllFilters = () => {\n setConditions([]);\n setAppliedConditions([]);\n setAppliedFilter(undefined);\n };\n\n const applyFilters = () => {\n const filter = buildFilterFromConditions(conditions);\n setAppliedConditions(conditions.map(c => ({ ...c })));\n setAppliedFilter(filter);\n setIsOpen(false);\n return filter;\n };\n\n const cancelChanges = () => {\n // Reverte para o snapshot salvo ao abrir\n setConditions(snapshotRef.current.map(c => ({ ...c })));\n setIsOpen(false);\n };\n\n // Calculado com base nos filtros APLICADOS (não em edição)\n const hasActiveFilters = appliedConditions.some(isValidCondition);\n const activeFiltersCount = appliedConditions.filter(isValidCondition).length;\n\n return {\n conditions,\n filter: appliedFilter,\n isOpen,\n hasActiveFilters,\n activeFiltersCount,\n openDrawer,\n closeDrawer,\n addCondition,\n updateCondition,\n removeCondition,\n clearAllFilters,\n applyFilters,\n cancelChanges,\n };\n};\n\nexport default useFilters;\n","import { useCallback, useEffect, useState } from 'react';\nimport { Filter, Sort } from 'model/filter';\n\nconst getStoredValue = <T>(key: string): T | undefined => {\n try {\n const item = localStorage.getItem(key);\n return item ? JSON.parse(item) : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst setStoredValue = <T>(key: string, value: T | undefined): void => {\n try {\n if (value === undefined) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch {\n // Silently ignore localStorage errors\n }\n};\n\nexport const useFilterStorage = (\n storageKey: string,\n externalFilter?: Filter,\n onFilterChange?: (filter: Filter | undefined) => void,\n) => {\n const filterKey = `${storageKey}:filter`;\n\n const [internalFilter, setInternalFilter] = useState<Filter | undefined>(\n () => {\n return getStoredValue<Filter>(filterKey) || externalFilter;\n },\n );\n\n // Sync with external filter\n useEffect(() => {\n if (externalFilter !== undefined) {\n setInternalFilter(externalFilter);\n }\n }, [externalFilter]);\n\n const handleFilterChange = useCallback(\n (newFilter: Filter | undefined) => {\n setInternalFilter(newFilter);\n setStoredValue(filterKey, newFilter);\n onFilterChange?.(newFilter);\n },\n [filterKey, onFilterChange],\n );\n\n return {\n filter: internalFilter,\n setFilter: handleFilterChange,\n };\n};\n\nexport const useSortStorage = (\n storageKey: string,\n externalSort?: Sort,\n onSortChange?: (sort: Sort | undefined) => void,\n) => {\n const sortKey = `${storageKey}:sort`;\n\n const [internalSort, setInternalSort] = useState<Sort | undefined>(() => {\n return getStoredValue<Sort>(sortKey) || externalSort;\n });\n\n // Sync with external sort\n useEffect(() => {\n if (externalSort !== undefined) {\n setInternalSort(externalSort);\n }\n }, [externalSort]);\n\n const handleSortChange = useCallback(\n (newSort: Sort | undefined) => {\n setInternalSort(newSort);\n setStoredValue(sortKey, newSort);\n onSortChange?.(newSort);\n },\n [sortKey, onSortChange],\n );\n\n return {\n sort: internalSort,\n setSort: handleSortChange,\n };\n};\n","import { useCallback, useMemo } from 'react';\nimport type { GridSortModel } from '@mui/x-data-grid-premium';\nimport { Field } from 'model/entity-metadata';\nimport { Sort, SortType } from 'model/filter';\n\nimport { UseSortingParams } from '../props';\n\n/**\n * Mapeia field.name (coluna do DataGrid) → filter_field_name (campo da API).\n * Usado quando o usuário clica no header da coluna para ordenar.\n */\nconst resolveApiFieldName = (\n fields: Field[] | undefined,\n fieldName: string,\n): string => {\n if (!fields) return fieldName;\n const field = fields.find(f => f.name === fieldName);\n return field?.filter_field_name ?? fieldName;\n};\n\n/**\n * Mapeia filter_field_name (campo da API) → field.name (coluna do DataGrid).\n * Usado para o sortModel destacar a coluna correta na UI.\n */\nconst resolveColumnFieldName = (\n fields: Field[] | undefined,\n fieldName: string,\n): string => {\n if (!fields) return fieldName;\n const field = fields.find(\n f => f.filter_field_name === fieldName || f.name === fieldName,\n );\n return field?.name ?? fieldName;\n};\n\nexport const useSorting = ({\n sort,\n onSortChange,\n fields,\n}: UseSortingParams) => {\n const sortModel: GridSortModel = useMemo(() => {\n if (!sort) return [];\n return [\n {\n field: resolveColumnFieldName(fields, sort.fieldName),\n sort: sort.sortType.toLowerCase() as 'asc' | 'desc',\n },\n ];\n }, [sort, fields]);\n\n const handleSortModelChange = useCallback(\n (model: GridSortModel) => {\n if (!onSortChange) return;\n\n const firstItem = model[0];\n if (!firstItem || !firstItem.sort) {\n onSortChange(undefined);\n return;\n }\n\n const newSort: Sort = {\n fieldName: resolveApiFieldName(fields, firstItem.field),\n sortType: firstItem.sort.toUpperCase() as SortType,\n };\n onSortChange(newSort);\n },\n [onSortChange, fields],\n );\n\n return {\n sortModel,\n handleSortModelChange,\n };\n};\n","import {\n AccessType,\n DataType,\n EntityMetadataResponse,\n Field,\n} from 'model/entity-metadata';\n\nexport const createActionsField = (): Field => ({\n name: 'ACTIONS',\n description: '',\n filter_field_name: null,\n type: DataType.TEXT,\n metadata: null,\n access_type: AccessType.READ_ONLY,\n relation_field_name: null,\n available_filter_conditions: [],\n});\n\nexport const addActionsFieldToMetadata = (\n metadata: EntityMetadataResponse,\n): EntityMetadataResponse => {\n const hasActionsField = metadata.fields.some(\n field => field.name === 'ACTIONS',\n );\n\n if (hasActionsField) {\n return metadata;\n }\n\n return {\n ...metadata,\n fields: [...metadata.fields, createActionsField()],\n };\n};\n","import { memo, ReactNode } from 'react';\n\nimport { DatePickerFormat, fDate } from 'utils/formatTime';\n\nimport type { DateRendererProps } from './props';\n\nconst DateRenderer = ({ value, format }: DateRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return fDate(value as DatePickerFormat, format);\n};\n\nexport default memo(DateRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { DatePickerFormat, fDateTime } from 'utils/formatTime';\n\nimport type { DateTimeRendererProps } from './props';\n\nconst DateTimeRenderer = ({\n value,\n format,\n}: DateTimeRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return fDateTime(value as DatePickerFormat, format);\n};\n\nexport default memo(DateTimeRenderer);\n","import { memo, ReactNode } from 'react';\nimport Chip from '@mui/material/Chip';\n\nimport { EntityRendererProps } from './props';\n\nconst EntityRenderer = ({ value, field }: EntityRendererProps): ReactNode => {\n if (!field.metadata || typeof value !== 'object' || value === null) {\n return value ? String(value) : '-';\n }\n\n const entityValue = (value as Record<string, unknown>)[\n field.metadata.description_field_name\n ];\n\n if (!entityValue) return null;\n\n return (\n <Chip\n label={String(entityValue)}\n variant=\"outlined\"\n size=\"small\"\n sx={{\n width: 'fit-content',\n color: 'text.secondary',\n borderColor: 'divider',\n borderRadius: 3,\n }}\n />\n );\n};\n\nexport default memo(EntityRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport Icon, { IconEnum } from '../../Icon';\n\nimport { IconRendererProps } from './props';\n\nconst IconRenderer = ({\n value,\n trueIcon = IconEnum.STAR_02,\n falseIcon = IconEnum.STAR,\n color = 'primary.main',\n width = 18,\n}: IconRendererProps): ReactNode => {\n return (\n <Icon icon={value ? trueIcon : falseIcon} color={color} width={width} />\n );\n};\n\nexport default memo(IconRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport Icon from 'components/Icon';\n\nimport { ImageRendererProps } from './props';\nimport { ImageContainer } from './style';\n\nconst ImageRenderer = ({\n imageResourceId,\n getImageUrl,\n size = 48,\n alt = 'Imagem',\n onClick,\n sx,\n}: ImageRendererProps): ReactNode => {\n const hasImage = !!imageResourceId;\n const imageUrl =\n hasImage && getImageUrl ? getImageUrl(imageResourceId) : undefined;\n const clickable = !!onClick;\n\n return (\n <ImageContainer\n size={size}\n noImage={!hasImage}\n clickable={clickable}\n onClick={onClick}\n sx={sx}\n >\n {imageUrl ? (\n <img src={imageUrl} alt={alt} />\n ) : (\n <Icon\n icon=\"SEARCH_IMAGE\"\n width={Math.round(size / 2)}\n color=\"text.disabled\"\n />\n )}\n </ImageContainer>\n );\n};\n\nexport default memo(ImageRenderer);\n","import Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\n// StatusRenderer styles\nexport interface StatusLabelProps {\n isActive: boolean;\n}\n\nexport const StatusLabel = styled('span')<StatusLabelProps>(\n ({ theme, isActive }) => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.spacing(0.2, 1),\n borderRadius: theme.shape.borderRadius,\n fontSize: '0.75rem',\n fontWeight: 600,\n width: 'fit-content',\n height: 'auto',\n lineHeight: '1.25rem',\n whiteSpace: 'nowrap',\n margin: 'auto',\n backgroundColor: isActive\n ? theme.palette.success.lighter || '#00A76F29'\n : theme.palette.warning.lighter || '#FF563029',\n color: isActive\n ? theme.palette.success.darker || '#007867'\n : theme.palette.warning.darker || '#B71D18',\n }),\n);\n\n// ImageRenderer styles\nexport interface ImageContainerProps {\n size: number;\n noImage: boolean;\n clickable: boolean;\n}\n\nexport const ImageContainer = styled(Box, {\n shouldForwardProp: prop =>\n !['size', 'noImage', 'clickable'].includes(prop as string),\n})<ImageContainerProps>(({ theme, size, noImage, clickable }) => ({\n width: size,\n height: size,\n minWidth: size,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n cursor: clickable ? 'pointer' : 'default',\n transition: 'opacity 0.2s ease-in-out',\n color: theme.palette.text.disabled,\n ...(noImage && {\n border: `1px dashed ${theme.palette.divider}`,\n backgroundColor: theme.palette.grey[100],\n }),\n ...(clickable && {\n '&:hover': {\n opacity: 0.8,\n },\n }),\n '& img': {\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n borderRadius: '50%',\n },\n [theme.breakpoints.down('sm')]: {\n justifyContent: 'flex-start',\n alignItems: 'flex-start',\n },\n}));\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport CopyButton from 'components/CopyButton';\n\nimport { NameRendererProps } from './props';\n\nconst NameRenderer = ({\n id,\n displayName,\n copyMessage = 'ID copiado!',\n}: NameRendererProps): ReactNode => {\n return (\n <Stack height={1} justifyContent=\"center\">\n <Typography variant=\"subtitle2\" noWrap title={displayName}>\n {displayName}\n </Typography>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography color=\"grey.600\" variant=\"body2\" noWrap>\n ID: {id}\n </Typography>\n <CopyButton toCopy={id} message={copyMessage} />\n </Stack>\n </Stack>\n );\n};\n\nexport default memo(NameRenderer);\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { fCurrencyBRL, fNumber } from 'utils/formatNumber';\n\nimport { NumberRendererProps } from './props';\n\nconst NumberRenderer = ({\n value,\n isCurrency = false,\n}: NumberRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return (\n <Stack direction=\"row\" alignItems=\"center\" height=\"100%\">\n <Typography variant=\"body2\" noWrap width=\"fit-content\">\n {isCurrency ? fCurrencyBRL(Number(value)) : fNumber(Number(value))}\n </Typography>\n </Stack>\n );\n};\n\nexport default memo(NumberRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { StatusRendererProps } from './props';\nimport { StatusLabel } from './style';\n\nconst StatusRenderer = ({\n active,\n activeLabel = 'Ativo',\n inactiveLabel = 'Inativo',\n}: StatusRendererProps): ReactNode => {\n return (\n <StatusLabel isActive={active}>\n {active ? activeLabel : inactiveLabel}\n </StatusLabel>\n );\n};\n\nexport default memo(StatusRenderer);\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport CopyButton from 'components/CopyButton';\n\nimport { TextRendererProps } from './props';\n\nconst sanitizeHtml = (text: string): string => {\n const withoutTags = text.replace(/<[^>]*>/g, '');\n return (\n withoutTags\n .replace(/&nbsp;/g, ' ')\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n // prettier-ignore\n .replace(/&#39;/g, '\\'')\n .trim()\n );\n};\n\nconst TextRenderer = ({\n value,\n showCopyButton = false,\n copyMessage = 'Copiado',\n copyLabel,\n mask,\n}: TextRendererProps): ReactNode => {\n if (!value) return '-';\n\n const stringValue = String(value);\n const formattedValue = mask ? mask(stringValue) : sanitizeHtml(stringValue);\n\n if (showCopyButton) {\n return (\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography variant=\"body2\" noWrap>\n {formattedValue}\n </Typography>\n <CopyButton\n toCopy={stringValue}\n message={copyMessage}\n label={copyLabel}\n />\n </Stack>\n );\n }\n\n return formattedValue;\n};\n\nexport default memo(TextRenderer);\n","import { ReactNode } from 'react';\nimport { Field } from 'model/entity-metadata';\n\nimport { CURRENCY_FIELD_NAMES } from '../constants/columnDefaults';\nimport { CellRenderer, DynamicRowData } from '../props';\nimport {\n DateRenderer,\n DateTimeRenderer,\n EntityRenderer,\n NumberRenderer,\n StatusRenderer,\n TextRenderer,\n} from '../renderers';\n\nfunction getIsCurrency(fieldName: string): boolean {\n return CURRENCY_FIELD_NAMES.includes(fieldName);\n}\n\nexport const createCellRenderer = <T extends object = object>(context: {\n onRowAction?: (rowId: string, row: DynamicRowData<T>) => ReactNode;\n}): CellRenderer<T> => {\n const { onRowAction } = context;\n\n const CellRendererComponent = (\n field: Field,\n row: DynamicRowData<T>,\n ): ReactNode => {\n const value = row[field.name];\n\n if (field.name === 'ACTIONS') {\n return onRowAction?.(row.id, row);\n }\n\n switch (field.type) {\n case 'BOOLEAN':\n return (\n <StatusRenderer\n active={Boolean(value)}\n activeLabel=\"Ativo\"\n inactiveLabel=\"Inativo\"\n />\n );\n\n case 'DATE':\n return <DateRenderer value={value} />;\n\n case 'DATETIME':\n return <DateTimeRenderer value={value} />;\n\n case 'DECIMAL':\n case 'INTEGER':\n return (\n <NumberRenderer\n value={value}\n isCurrency={getIsCurrency(field.name)}\n />\n );\n\n case 'FILE':\n case 'ENTITY':\n return <EntityRenderer value={value} field={field} />;\n case 'TEXT':\n default:\n return <TextRenderer value={value} />;\n }\n };\n\n CellRendererComponent.displayName = 'CellRendererComponent';\n return CellRendererComponent;\n};\n","import { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\nimport { EntityMetadataResponse } from 'model/entity-metadata';\n\ninterface BuildVisibleFieldsParams {\n metadata?: EntityMetadataResponse;\n columnVisibilityModel?: GridColumnVisibilityModel;\n defaultVisibleFields?: string[];\n}\n\nexport const buildVisibleFields = ({\n metadata,\n columnVisibilityModel,\n defaultVisibleFields,\n}: BuildVisibleFieldsParams): string[] | undefined => {\n if (!metadata?.fields) return undefined;\n\n const allFields = metadata.fields.map(f => f.name);\n\n const visible = allFields.filter(fieldName => {\n if (fieldName === 'ACTIONS') return false;\n\n if (columnVisibilityModel) {\n return columnVisibilityModel[fieldName] !== false;\n }\n\n return defaultVisibleFields?.includes(fieldName) ?? true;\n });\n\n if (!defaultVisibleFields) return visible;\n\n return visible.sort((a, b) => {\n const indexA = defaultVisibleFields.indexOf(a);\n const indexB = defaultVisibleFields.indexOf(b);\n\n return indexA - indexB || 0;\n });\n};\n"]}
1
+ {"version":3,"sources":["../../../src/components/DynamicDataView/DynamicDataView.tsx","../../../src/components/DynamicDataView/components/FilterButton.tsx","../../../src/components/DynamicDataView/components/FiltersSection.tsx","../../../src/components/DynamicDataView/components/filters/FiltersContainer.tsx","../../../src/components/DynamicDataView/components/filters/FiltersContent.tsx","../../../src/components/DynamicDataView/utils/filter.ts","../../../src/components/DynamicDataView/components/filters/FiltersList.tsx","../../../src/components/DynamicDataView/components/filters/FilterRow.tsx","../../../src/components/DynamicDataView/constants/filter.ts","../../../src/components/DynamicDataView/components/filters/EntityFilter.tsx","../../../src/components/DynamicDataView/components/filters/OperatorSelect.tsx","../../../src/components/DynamicDataView/components/filters/styles.ts","../../../src/components/DynamicDataView/components/SortModal/index.tsx","../../../src/components/DynamicDataView/components/SortModal/style.ts","../../../src/components/DynamicDataView/hooks/useColumnOrdering.ts","../../../src/components/DynamicDataView/hooks/useColumnVisibility.ts","../../../src/components/DynamicDataView/hooks/useDynamicColumns.ts","../../../src/components/DynamicDataView/constants/columnDefaults.ts","../../../src/components/DynamicDataView/utils/columnStrategies.ts","../../../src/components/DynamicDataView/hooks/useFilters.ts","../../../src/components/DynamicDataView/hooks/useFilterSortStorage.ts","../../../src/components/DynamicDataView/hooks/useSorting.ts","../../../src/components/DynamicDataView/utils/addActionsField.ts","../../../src/components/DynamicDataView/renderers/DateRenderer.ts","../../../src/components/DynamicDataView/renderers/DateTimeRenderer.ts","../../../src/components/DynamicDataView/renderers/EntityRenderer.tsx","../../../src/components/DynamicDataView/renderers/IconRenderer.tsx","../../../src/components/DynamicDataView/renderers/ImageRenderer.tsx","../../../src/components/DynamicDataView/renderers/style.ts","../../../src/components/DynamicDataView/renderers/NameRenderer.tsx","../../../src/components/DynamicDataView/renderers/NumberRenderer.tsx","../../../src/components/DynamicDataView/renderers/StatusRenderer.tsx","../../../src/components/DynamicDataView/renderers/TextRenderer.tsx","../../../src/components/DynamicDataView/utils/createCellRenderer.tsx","../../../src/components/DynamicDataView/utils/fields.ts"],"names":["memo","useCallback","useMemo","useState","isEqual","Badge","Button","IconButton","Stack","jsx","jsxs","FilterButton","showFilterButton","isMobile","hasActiveFilters","activeFiltersCount","sort","onFilterClick","onSortClick","Icon_default","ToolbarActionsDivider","FilterButton_default","Divider","Typography","getFilterableFields","fields","field","getDefaultCondition","type","available_filter_conditions","isValidCondition","condition","buildFilterFromConditions","conditions","validConditions","c","FormControl","InputLabel","MenuItem","Select","TextField","CONDITION_LABELS","EntityFilter","config","metadata","value","initialLabel","onChange","disabled","open","toggleOpen","setOpen","useToggle_default","inputValue","setInputValue","debouncedSearch","useDebounceValue_default","data","isLoading","isFetching","loading","selectedOption","options","items","item","opt","handleClose","handleChange","newValue","option","handleInputChange","_event","newInputValue","reason","Autocomplete_default","x","EntityFilter_default","OperatorSelect","totalConditions","isFirst","e","OperatorSelect_default","ellipsisStyle","FilterRow","onRemove","entityFilterConfig","selectedField","f","availableConditions","isValueDisabled","handleFieldChange","fieldName","newField","defaultCondition","handleConditionChange","conditional","handleValueChange","handleEntityValueChange","label","valueLabels","handleOperatorChange","operator","renderValueInput","currentValue","cond","FilterRow_default","Fragment","FiltersList","filterableFields","onUpdateCondition","onRemoveCondition","handleUpdateCondition","updated","handleRemoveCondition","id","usedFieldNames","name","getAvailableFields","currentFieldName","index","FiltersList_default","Box","styled","Container","Header","theme","Content","Footer","FiltersContent","onClose","onAddCondition","onApply","onClear","onCancel","hasConditions","handleApply","handleClear","handleCancel","FiltersContent_default","FiltersContainer","props","ResponsivePopover_default","FiltersContainer_default","FiltersSection","isOpen","filterAnchorEl","FiltersSection_default","useEffect","Dialog","DialogActions","DialogContent","DialogTitle","StyledDialog","StyledDialogTitle","StyledDialogContent","StyledDialogActions","ApplyButton","LabelButton","SortModal","onSortChange","setSelectedField","selectedDirection","setSelectedDirection","sortableFields","selectedFieldObj","isNumberField","SortModal_default","useColumnOrdering","columns","preferredFieldOrder","columnsByFieldId","column","fieldsByName","actionFieldName","preferredWithoutActions","usedColumnFieldIds","ordered","pushColumnForField","getColumnFieldIdFromField","useColumnVisibility","defaultVisibleFieldNames","columnVisibilityStorageKey","onColumnVisibilityModelChange","hasStorageKey","storedVisibilityModel","setStoredVisibilityModel","useLocalStorage_default","initialState","visibilityModel","columnFieldId","visible","stored","handleColumnVisibilityModelChange","model","modelToSave","COLUMN_DEFAULTS","ACCESS_TYPES","CURRENCY_FIELD_NAMES","createImageColumn","renderCell","params","createIdColumn","createEntityColumn","createDefaultColumn","createActionsColumn","getColumnStrategy","useDynamicColumns","columnStrategies","columnsMap","useRef","parseInitialConditions","initialFilter","uuidv4","useFilters","setIsOpen","appliedConditions","setAppliedConditions","appliedFilter","setAppliedFilter","setConditions","snapshotRef","openDrawer","closeDrawer","addCondition","availableFields","currentOperator","firstField","newCondition","prev","updateCondition","changes","targetCondition","newOperator","removeCondition","clearAllFilters","applyFilters","filter","cancelChanges","getStoredValue","key","setStoredValue","useFilterStorage","storageKey","externalFilter","onFilterChange","filterKey","internalFilter","setInternalFilter","handleFilterChange","newFilter","useSortStorage","externalSort","sortKey","internalSort","setInternalSort","handleSortChange","newSort","resolveApiFieldName","resolveColumnFieldName","useSorting","sortModel","handleSortModelChange","firstItem","createActionsField","addActionsFieldToMetadata","DateRenderer","format","fDate","DateRenderer_default","DateTimeRenderer","fDateTime","DateTimeRenderer_default","Chip","EntityRenderer","entityValue","EntityRenderer_default","IconRenderer","trueIcon","falseIcon","color","width","IconRenderer_default","StatusLabel","isActive","ImageContainer","prop","size","noImage","clickable","ImageRenderer","imageResourceId","getImageUrl","alt","onClick","sx","hasImage","imageUrl","ImageRenderer_default","NameRenderer","displayName","copyMessage","CopyButton_default","NameRenderer_default","NumberRenderer","isCurrency","fCurrencyBRL","fNumber","NumberRenderer_default","StatusRenderer","active","activeLabel","inactiveLabel","StatusRenderer_default","sanitizeHtml","text","TextRenderer","showCopyButton","copyLabel","mask","stringValue","formattedValue","TextRenderer_default","getIsCurrency","createCellRenderer","context","onRowAction","CellRendererComponent","row","DynamicDataView","title","page","perPage","searchValue","onSearchChange","onSearch","onPaginationChange","onAdd","onRowDoubleClick","actions","moreActions","bulkActions","rowSelectionModel","onRowSelectionModelChange","slots","mobileRender","containerHeight","showColumnButton","rows","total","preloadedMetadata","firstRow","effectiveMetadata","effectiveMetadataFields","orderedColumns","handleRowDoubleClick","rowId","useResponsive_default","setFilterAnchorEl","storedFilter","setStoredFilter","storedSort","setStoredSort","effectiveFilter","effectiveSort","handleApplyFilters","handleClearFilters","handleFilterButtonClick","event","handleCancelFilters","isSortModalOpen","setIsSortModalOpen","handleFiltersClose","hasSelectionActions","DataView_default","DynamicDataView_default","buildVisibleFields","columnVisibilityModel","defaultVisibleFields","a","b","indexA","indexB"],"mappings":"40CAAA,OAAS,QAAAA,GAAM,eAAAC,EAAa,WAAAC,GAAS,YAAAC,OAAgB,QACrD,OAAOC,OAAa,qBCDpB,OAAS,QAAAJ,OAAY,QACrB,OAAOI,OAAa,qBACpB,OAAOC,OAAW,sBAClB,OAAOC,OAAY,uBACnB,OAAOC,OAAgB,2BACvB,OAAOC,OAAW,sBAoBZ,OAmBM,OAAAC,EAnBN,QAAAC,OAAA,oBAbN,IAAMC,GAAe,CAAC,CACpB,iBAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,mBAAAC,EACA,KAAAC,EACA,cAAAC,EACA,YAAAC,CACF,IACON,EAEDC,EAEAH,GAACF,GAAA,CAAM,UAAU,MAAM,QAAS,GAC9B,UAAAC,EAACJ,GAAA,CACC,aAAcU,EACd,MAAM,UACN,UAAWA,IAAuB,EAClC,GAAI,CACF,oBAAqB,CACnB,UAAW,kCACX,QAASA,IAAuB,EAAI,EAAI,CAC1C,CACF,EAEA,SAAAN,EAACF,GAAA,CACC,MAAOO,EAAmB,UAAY,UACtC,QAASG,EACT,KAAK,QACL,aAAW,UACX,GAAI,CAAE,SAAU,SAAU,EAE1B,SAAAR,EAACU,EAAA,CAAK,KAAK,kBAAkB,EAC/B,EACF,EAEAV,EAACW,GAAA,CACC,GAAI,CAAE,OAAQ,EAAG,EACjB,YAAY,WACZ,SAAQ,GACV,EAEAX,EAACF,GAAA,CACC,MAAOS,EAAO,UAAY,UAC1B,QAASE,EACT,KAAK,QACL,aAAW,UAEX,SAAAT,EAACU,EAAA,CACC,KAAMH,GAAM,WAAa,OAAS,eAAiB,cACrD,EACF,GACF,EAKFP,EAACJ,GAAA,CACC,aAAcU,EACd,MAAM,UACN,UAAWA,IAAuB,EAClC,GAAI,CACF,oBAAqBA,EACjB,CACE,UAAW,kCACX,SAAU,WACV,QAAS,EACT,WAAY,MACd,EACA,CACE,WAAY,OACZ,QAAS,CACX,CACN,EAEA,SAAAN,EAACH,GAAA,CACC,QAAQ,OACR,MAAOQ,EAAmB,UAAY,UACtC,UAAWL,EAACU,EAAA,CAAK,KAAK,kBAAkB,EACxC,QAASF,EACT,KAAK,QACN,mBAED,EACF,EA3E4B,KA+EzBI,GAAQrB,GAAKW,GAAcP,EAAO,ECpGzC,OAAS,QAAAJ,OAAY,QACrB,OAAOI,OAAa,qBCDpB,OAAS,QAAAJ,OAAY,QACrB,OAAOI,OAAa,qBCDpB,OAAS,QAAAJ,GAAM,eAAAC,OAAmB,QAClC,OAAOG,OAAa,qBACpB,OAAOE,OAAY,uBACnB,OAAOgB,OAAa,wBACpB,OAAOf,OAAgB,2BACvB,OAAOC,OAAW,sBAClB,OAAOe,OAAgB,2BCKhB,IAAMC,GAAuBC,GAC3BA,EAAO,OACZC,GACEA,EAAM,6BACNA,EAAM,4BAA4B,OAAS,GAC3CA,EAAM,OAAS,SACnB,EA+BK,IAAMC,GAAuBD,GAA4B,CAC9D,GAAM,CAAE,KAAAE,EAAM,4BAAAC,CAA4B,EAAIH,EAC9C,OAAIG,EAA4B,SAAW,WAEzCD,YACAC,EAA4B,eAAuB,SAI9CA,EAA4B,CAAC,CACtC,EAKaC,EAAoBC,GAE7BA,EAAU,MAAM,OAAS,GACzBA,EAAU,yBACVA,EAAU,4BAODC,GACXC,GACuB,CACvB,GAAIA,EAAW,SAAW,EAAG,OAE7B,IAAMC,EAAkBD,EAAW,OAAOH,CAAgB,EAC1D,GAAII,EAAgB,SAAW,EAE/B,MAAO,CACL,eACA,OAAQ,CACN,CACE,SAAUA,EAAgB,CAAC,GAAG,gBAC9B,aAAcA,EAAgB,IAAIC,IAAM,CACtC,UAAWA,EAAE,UACb,YAAaA,EAAE,YACf,MAAOA,EAAE,MACT,YAAaA,EAAE,WACjB,EAAE,CACJ,CACF,CACF,CACF,EChGA,OAAS,QAAAnC,GAAM,eAAAC,GAAa,WAAAC,OAAe,QAC3C,OAAOE,OAAa,qBACpB,OAAOmB,OAAgB,2BCFvB,OAAS,QAAAvB,GAAM,eAAAC,EAAa,WAAAC,OAAe,QAC3C,OAAOE,OAAa,qBACpB,OAAOgC,OAAiB,4BACxB,OAAO7B,OAAgB,2BACvB,OAAO8B,OAAgB,2BACvB,OAAOC,MAAc,yBACrB,OAAOC,OAAY,uBACnB,OAAO/B,OAAW,sBAClB,OAAOgC,OAAe,0BCNf,IAAMC,GAA8C,CACzD,SAAiB,EAAG,UACpB,aAAqB,EAAG,eACxB,OAAe,EAAG,YAClB,WAAmB,EAAG,mBACtB,eAAuB,EAAG,YAC1B,YAAoB,EAAG,YACvB,wBAAgC,EAAG,mBACnC,qBAA6B,EAAG,mBAChC,KAAa,EAAG,KAChB,SAAiB,EAAG,YACpB,UAAkB,EAAG,YACrB,cAAsB,EAAG,kBAC3B,ECfA,OAAS,QAAAzC,GAAM,eAAAC,GAAa,WAAAC,GAAS,YAAAC,OAAgB,QAyFjD,cAAAM,OAAA,oBAjFJ,IAAMiC,GAAe,CAAC,CACpB,OAAAC,EACA,SAAAC,EACA,MAAAC,EACA,aAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,EACb,IAAyB,CACvB,GAAM,CAACC,EAAMC,EAAYC,CAAO,EAAIC,GAAU,EAAK,EAC7C,CAACC,EAAYC,CAAa,EAAInD,GAAS,EAAE,EACzCoD,EAAkBC,GAAiBH,EAAY,GAAG,EAElD,CAAE,KAAAI,EAAM,UAAAC,EAAW,WAAAC,CAAW,EAAIhB,EAAO,SAC7C,CACE,OAAQY,GAAmB,OAC3B,KAAM,EACN,QAAS,GACT,GAAGZ,EAAO,WACZ,EACA,CACE,KAAM,CAACM,CACT,CACF,EAEMW,EAAUF,GAAaC,EAEvBE,EAAiB3D,GAAmC,IACnD2C,EACE,CAAE,MAAAA,EAAO,MAAOC,GAAgBD,CAAM,EAD1B,KAElB,CAACA,EAAOC,CAAY,CAAC,EAElBgB,EAAU5D,GAAQ,IAAM,CAC5B,IAAM6D,GAASN,GAAM,OAAS,CAAC,GAC5B,IAAIO,IAAS,CACZ,MAAO,OAAOA,EAAKpB,EAAS,sBAAsB,GAAK,EAAE,EACzD,MAAO,OAAOoB,EAAKpB,EAAS,aAAa,GAAK,EAAE,CAClD,EAAE,EACD,OAAOqB,GAAOA,EAAI,OAASA,EAAI,KAAK,EAEvC,OACEJ,GACA,CAACE,EAAM,KAAKE,GAAOA,EAAI,QAAUJ,EAAe,KAAK,GAErDE,EAAM,QAAQF,CAAc,EAGvBE,CACT,EAAG,CACDN,EACAb,EAAS,cACTA,EAAS,uBACTiB,CACF,CAAC,EAEKK,EAAcjE,GAAY,IAAM,CACpCkD,EAAQ,EAAK,EACbG,EAAc,EAAE,CAClB,EAAG,CAACH,CAAO,CAAC,EAENgB,EAAelE,GAClBmE,GAAsB,CACrB,GAAI,OAAOA,GAAa,UAAY,CAACA,EAAU,CAC7CrB,EAAS,GAAI,MAAS,EACtB,OAEF,IAAMsB,EAASP,EAAQ,KAAKG,GAAOA,EAAI,QAAUG,CAAQ,EACzDrB,EAASqB,EAAUC,GAAQ,KAAK,CAClC,EACA,CAACtB,EAAUe,CAAO,CACpB,EAEMQ,EAAoBrE,GACxB,CAACsE,EAA8BC,EAAuBC,IAAmB,CACnEA,IAAW,SACbnB,EAAckB,CAAa,CAE/B,EACA,CAAC,CACH,EAEA,OACE/D,GAACiE,GAAA,CACC,KAAM,iBAAiB9B,EAAS,OAChC,MAAM,SACN,KAAMK,EACN,OAAQC,EACR,QAASgB,EACT,MAAOrB,GAAS,GAChB,SAAUsB,EACV,WAAYlB,EAAOI,EAAcQ,GAAgB,OAAS,GAC1D,cAAeS,EACf,QAASR,EACT,QAASF,EACT,SAAUZ,EACV,KAAK,QACL,cAAe2B,GAAKA,EACpB,cACEtB,IAAeE,EAAkB,cAAgB,mBAEnD,GAAI,CAAE,KAAM,EAAG,SAAU,GAAI,EAC/B,CAEJ,EAEOqB,GAAQ5E,GAAK0C,EAAY,EChHhC,OAAS,QAAA1C,OAAY,QACrB,OAAOI,OAAa,qBACpB,OAAOkC,OAAc,yBACrB,OAAOC,OAAY,uBACnB,OAAO/B,OAAW,sBAgBP,cAAAC,GAIP,QAAAC,OAJO,oBAXX,IAAMmE,GAAiB,CAAC,CACtB,MAAAhC,EACA,SAAAE,EACA,gBAAA+B,EACA,QAAAC,CACF,IACMD,IAAoB,EACf,KAGLC,EACKtE,GAACD,GAAA,CAAM,GAAI,CAAE,MAAO,GAAI,WAAY,CAAE,EAAG,EAIhDE,GAAC6B,GAAA,CACC,MAAOM,EACP,SAAUmC,GAAKjC,EAASiC,EAAE,OAAO,KAAuB,EACxD,KAAK,QACL,GAAI,CAAE,MAAO,GAAI,WAAY,CAAE,EAE/B,UAAAvE,GAAC6B,GAAA,CAAS,YAA2B,aAAC,EACtC7B,GAAC6B,GAAA,CAAS,WAA0B,cAAE,GACxC,EAIG2C,GAAQjF,GAAK6E,GAAgBzE,EAAO,EH2FjC,cAAAK,EACA,QAAAC,MADA,oBA3GV,IAAMwE,EAAgB,CACpB,WAAY,SACZ,SAAU,SACV,aAAc,UAChB,EAEMC,GAAY,CAAC,CACjB,UAAApD,EACA,OAAAN,EACA,SAAAsB,EACA,SAAAqC,EACA,gBAAAN,EACA,QAAAC,EACA,mBAAAM,CACF,IAAsB,CACpB,IAAMC,EAAgBpF,GACpB,IACEuB,EAAO,KAAK8D,IAAMA,EAAE,mBAAqBA,EAAE,QAAUxD,EAAU,SAAS,EAC1E,CAACN,EAAQM,EAAU,SAAS,CAC9B,EAEMyD,EAAsBtF,GAC1B,IAAMoF,GAAe,6BAA+B,CAAC,EACrD,CAACA,CAAa,CAChB,EAEMG,EAAkBvF,GACtB,IACE,CAAC6B,EAAU,WACXA,EAAU,cAAgB,WAC1BA,EAAU,cAAgB,cAC5B,CAACA,EAAU,UAAWA,EAAU,WAAW,CAC7C,EAEM2D,EAAoBzF,EACvB0F,GAAsB,CACrB,IAAMC,EAAWnE,EAAO,KACtB8D,IAAMA,EAAE,mBAAqBA,EAAE,QAAUI,CAC3C,EACA,GAAI,CAACC,EAAU,OAEf,IAAMC,EACJD,EAAS,4BAA4B,CAAC,GAAK,SAE7C7C,EAAS,CACP,GAAGhB,EACH,UAAA4D,EACA,YAAaE,EACb,MAAO,CAAC,CACV,CAAC,CACH,EACA,CAACpE,EAAQM,EAAWgB,CAAQ,CAC9B,EAEM+C,EAAwB7F,EAC3B8F,GAA2B,CAC1BhD,EAAS,CACP,GAAGhB,EACH,YAAAgE,CACF,CAAC,CACH,EACA,CAAChE,EAAWgB,CAAQ,CACtB,EAEMiD,EAAoB/F,EACvB4C,GAAkB,CACjBE,EAAS,CACP,GAAGhB,EACH,MAAOc,EAAQ,CAACA,CAAK,EAAI,CAAC,CAC5B,CAAC,CACH,EACA,CAACd,EAAWgB,CAAQ,CACtB,EAEMkD,EAA0BhG,EAC9B,CAAC4C,EAAeqD,IAAmB,CACjC,IAAMC,EAAc,CAAE,GAAGpE,EAAU,WAAY,EAC3Cc,GAASqD,IACXC,EAAYtD,CAAK,EAAIqD,GAEvBnD,EAAS,CACP,GAAGhB,EACH,MAAOc,EAAQ,CAACA,CAAK,EAAI,CAAC,EAC1B,YAAAsD,CACF,CAAC,CACH,EACA,CAACpE,EAAWgB,CAAQ,CACtB,EAEMqD,EAAuBnG,EAC1BoG,GAA6B,CAC5BtD,EAAS,CACP,GAAGhB,EACH,SAAAsE,CACF,CAAC,CACH,EACA,CAACtE,EAAWgB,CAAQ,CACtB,EAEMuD,EAAmB,IAAM,CAC7B,GAAIhB,GAAe,OAAS,UAC1B,OACE5E,EAAC0B,GAAA,CACC,KAAK,QACL,GAAI,CAAE,KAAM,EAAG,SAAU,GAAI,EAC7B,SAAUqD,EAEV,UAAAhF,EAAC4B,GAAA,CAAW,GAAI,eAAeN,EAAU,KAAM,iBAAK,EACpDrB,EAAC6B,GAAA,CACC,QAAS,eAAeR,EAAU,KAClC,MAAM,QACN,MAAOA,EAAU,MAAM,CAAC,GAAK,GAC7B,SAAUiD,GAAKgB,EAAkBhB,EAAE,OAAO,KAAK,EAC/C,KAAK,QACL,GAAI,CACF,sBAAuBE,CACzB,EAEA,UAAAzE,EAAC6B,EAAA,CAAS,MAAM,OAAO,sBAAU,EACjC7B,EAAC6B,EAAA,CAAS,MAAM,QAAQ,iBAAK,GAC/B,GACF,EAIJ,GACEgD,GAAe,OAAS,UACxBA,EAAc,UACdD,IAAqBC,EAAc,SAAS,IAAI,EAChD,CACA,IAAMiB,EAAexE,EAAU,MAAM,CAAC,GAAK,GAE3C,OACEtB,EAACmE,GAAA,CACC,OAAQS,EAAmBC,EAAc,SAAS,IAAI,EACtD,SAAUA,EAAc,SACxB,MAAOiB,EACP,aAAcxE,EAAU,cAAcwE,CAAY,EAClD,SAAUN,EACV,SAAUR,EACZ,EAIJ,OACEhF,EAAC+B,GAAA,CACC,MAAM,SACN,MAAOT,EAAU,MAAM,CAAC,GAAK,GAC7B,SAAUiD,GAAKgB,EAAkBhB,EAAE,OAAO,KAAK,EAC/C,KAAK,QACL,SAAUS,EACV,gBAAiB,CAAE,OAAQ,EAAK,EAChC,GAAI,CAAE,KAAM,EAAG,SAAU,GAAI,EAC/B,CAEJ,EAEA,OACE/E,EAACF,GAAA,CAAM,UAAU,MAAM,QAAS,EAAG,WAAW,SAC5C,UAAAC,EAACF,GAAA,CACC,QAAS6E,EACT,KAAK,QACL,aAAW,iBACX,GAAI,CAAE,WAAY,CAAE,EAEpB,SAAA3E,EAACU,EAAA,CAAK,KAAK,oBAAoB,MAAO,GAAI,EAC5C,EAEAV,EAACwE,GAAA,CACC,MAAOlD,EAAU,SACjB,SAAUqE,EACV,gBAAiBtB,EACjB,QAASC,EACX,EAEArE,EAAC0B,GAAA,CAAY,KAAK,QAAQ,GAAI,CAAE,SAAU,IAAK,KAAM,CAAE,EACrD,UAAA3B,EAAC4B,GAAA,CAAW,GAAI,eAAeN,EAAU,KAAM,kBAAM,EACrDtB,EAAC8B,GAAA,CACC,QAAS,eAAeR,EAAU,KAClC,MAAM,SACN,MAAOA,EAAU,UACjB,SAAUiD,GAAKU,EAAkBV,EAAE,OAAO,KAAK,EAC/C,KAAK,QACL,GAAI,CACF,sBAAuBE,CACzB,EAEC,SAAAzD,EAAO,IAAIC,GACVjB,EAAC6B,EAAA,CAEC,MAAOZ,EAAM,mBAAqBA,EAAM,KACxC,GAAIwD,EACJ,MAAOxD,EAAM,aAAeA,EAAM,KAEjC,SAAAA,EAAM,aAAeA,EAAM,MALvBA,EAAM,IAMb,CACD,EACH,GACF,EAEAhB,EAAC0B,GAAA,CACC,KAAK,QACL,GAAI,CAAE,SAAU,EAAG,EACnB,SAAU,CAACL,EAAU,UAErB,UAAAtB,EAAC4B,GAAA,CAAW,GAAI,mBAAmBN,EAAU,KAAM,0BAAQ,EAC3DtB,EAAC8B,GAAA,CACC,QAAS,mBAAmBR,EAAU,KACtC,MAAM,iBACN,MAAOA,EAAU,YACjB,SAAUiD,GAAKc,EAAsBd,EAAE,OAAO,KAAkB,EAChE,KAAK,QACL,GAAI,CACF,sBAAuBE,CACzB,EAEC,SAAAM,EAAoB,IAAIgB,GACvB/F,EAAC6B,EAAA,CAAoB,MAAOkE,EAAM,GAAItB,EACnC,SAAAzC,GAAiB+D,CAAiB,GAAKA,GAD3BA,CAEf,CACD,EACH,GACF,EAECF,EAAiB,GACpB,CAEJ,EAEOG,GAAQzG,GAAKmF,GAAW/E,EAAO,ED1MhC,OAwBF,YAAAsG,GAxBE,OAAAjG,EAQA,QAAAC,OARA,oBAvCN,IAAMiG,GAAc,CAAC,CACnB,iBAAAC,EACA,WAAA3E,EACA,kBAAA4E,EACA,kBAAAC,EACA,mBAAAzB,CACF,IAAwB,CACtB,IAAM0B,EAAwB9G,GAC3B+G,GAA6B,CAC5BH,EAAkBG,EAAQ,GAAIA,CAAO,CACvC,EACA,CAACH,CAAiB,CACpB,EAEMI,EAAwBhH,GAC3BiH,GAAe,IAAM,CACpBJ,EAAkBI,CAAE,CACtB,EACA,CAACJ,CAAiB,CACpB,EAEMK,EAAiBjH,GACrB,IACE+B,EAAW,IAAIE,GAAKA,EAAE,SAAS,EAAE,OAAQiF,GAAyB,CAAC,CAACA,CAAI,EAC1E,CAACnF,CAAU,CACb,EAEMoF,EAAqBpH,GACxBqH,GACCV,EAAiB,OACflF,GACE,CAACyF,EAAe,SAASzF,EAAM,IAAI,GACnCA,EAAM,OAAS4F,CACnB,EACF,CAACV,EAAkBO,CAAc,CACnC,EAEA,OAAIP,EAAiB,SAAW,EAE5BnG,EAACc,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,UAAU,SAAS,uCAEtE,EAIAU,EAAW,SAAW,EAEtBvB,GAACa,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,UAAU,SAAS,sBAC1D,IACVd,EAACc,GAAA,CACC,UAAU,SACV,QAAQ,QACR,WAAY,IACZ,MAAM,eACP,eAED,EAAc,IAAI,4BAEpB,EAKFd,EAAAiG,GAAA,CACG,SAAAzE,EAAW,IAAI,CAACF,EAAWwF,IAC1B9G,EAACgG,GAAA,CAEC,UAAW1E,EACX,OAAQsF,EAAmBtF,EAAU,SAAS,EAC9C,SAAUgF,EACV,SAAUE,EAAsBlF,EAAU,EAAE,EAC5C,aAAcwF,EAAQ,EACtB,gBAAiBtF,EAAW,OAC5B,QAASsF,IAAU,EACnB,mBAAoBlC,GARftD,EAAU,EASjB,CACD,EACH,CAEJ,EAEOyF,GAAQxH,GAAK2G,GAAavG,EAAO,EKzFxC,OAAOqH,MAAS,oBAChB,OAAS,UAAAC,OAAc,uBAGhB,IAAMC,GAAYD,GAAOD,CAAG,EAAE,CACnC,QAAS,OACT,cAAe,SACf,OAAQ,MAEV,CAAC,EAEYG,GAASF,GAAOD,CAAG,EAAE,CAAC,CAAE,MAAAI,CAAM,KAAO,CAChD,QAAS,OACT,WAAY,SACZ,eAAgB,gBAChB,QAASA,EAAM,QAAQ,EAAG,CAAC,CAC7B,EAAE,EAEWC,GAAUJ,GAAOD,CAAG,EAAE,CAAC,CAAE,MAAAI,CAAM,KAAO,CACjD,KAAM,EACN,UAAW,OACX,QAASA,EAAM,QAAQ,CAAC,EACxB,QAAS,OACT,cAAe,SACf,IAAKA,EAAM,QAAQ,CAAC,CACtB,EAAE,EAEWE,GAASL,GAAOD,CAAG,EAAE,CAAC,CAAE,MAAAI,CAAM,KAAO,CAChD,QAAS,OACT,WAAY,SACZ,eAAgB,gBAChB,QAASA,EAAM,QAAQ,CAAC,CAC1B,EAAE,EPeI,OACE,OAAApH,EADF,QAAAC,OAAA,oBA/BN,IAAMsH,GAAiB,CAAC,CACtB,QAAAC,EACA,OAAAxG,EACA,WAAAQ,EACA,eAAAiG,EACA,kBAAArB,EACA,kBAAAC,EACA,QAAAqB,EACA,QAAAC,EACA,SAAAC,EACA,mBAAAhD,CACF,IAA2B,CACzB,IAAMuB,EAAmBpF,GAAoBC,CAAM,EAC7C6G,EAAgBrG,EAAW,OAAS,EAEpCsG,EAActI,GAAY,IAAM,CACpCkI,EAAQ,EACRF,EAAQ,CACV,EAAG,CAACE,EAASF,CAAO,CAAC,EAEfO,EAAcvI,GAAY,IAAM,CACpCmI,EAAQ,EACRH,EAAQ,CACV,EAAG,CAACG,EAASH,CAAO,CAAC,EAEfQ,EAAexI,GAAY,IAAM,CACrCoI,EAAS,CACX,EAAG,CAACA,CAAQ,CAAC,EAEb,OACE3H,GAACiH,GAAA,CACC,UAAAjH,GAACkH,GAAA,CACC,UAAAnH,EAACc,GAAA,CAAW,QAAQ,WAAW,WAAY,IAAK,MAAM,iBAAiB,kDAEvE,EAEAd,EAACF,GAAA,CACC,QAAS2H,EACT,KAAK,QACL,aAAW,mBACX,MAAM,mBACN,SAAUjG,EAAW,QAAU2E,EAAiB,OAEhD,SAAAnG,EAACU,EAAA,CAAK,KAAK,aAAa,EAC1B,GACF,EAEAV,EAACa,GAAA,EAAQ,EAETb,EAACqH,GAAA,CACC,SAAArH,EAAC+G,GAAA,CACC,iBAAkBZ,EAClB,WAAY3E,EACZ,kBAAmB4E,EACnB,kBAAmBC,EACnB,mBAAoBzB,EACtB,EACF,EAEA5E,EAACa,GAAA,EAAQ,EAETZ,GAACqH,GAAA,CACC,UAAAtH,EAACH,GAAA,CAAO,QAAQ,OAAO,MAAM,UAAU,QAASkI,EAAa,kBAE7D,EAEA9H,GAACF,GAAA,CAAM,UAAU,MAAM,QAAS,EAC9B,UAAAC,EAACH,GAAA,CACC,QAAQ,WACR,MAAM,UACN,QAASmI,EACT,UAAWhI,EAACU,EAAA,CAAK,KAAK,gBAAgB,EACvC,oBAED,EACAV,EAACH,GAAA,CACC,QAAQ,YACR,QAASiI,EACT,SAAU,CAACD,EACX,UAAW7H,EAACU,EAAA,CAAK,KAAK,eAAe,EACtC,mBAED,GACF,GACF,GACF,CAEJ,EAEOuH,GAAQ1I,GAAKgI,GAAgB5H,EAAO,EDjErC,cAAAK,OAAA,oBAhCN,IAAMkI,GAAoBC,GAEtBnI,GAACoI,GAAA,CACC,KAAMD,EAAM,KACZ,QAASA,EAAM,QACf,SAAUA,EAAM,SAChB,SAAUA,EAAM,aAChB,aAAc,CACZ,UAAW,CACT,MAAO,CACL,GAAI,CACF,MAAO,IACP,SAAU,qBACV,UAAW,IACX,GAAI,CACN,CACF,CACF,CACF,EACA,YAAa,CACX,OAAQ,QACR,WAAY,CACV,GAAI,CACF,MAAO,OACP,SAAU,OACV,OAAQ,OACR,UAAW,OACX,aAAc,CAChB,CACF,CACF,EAEA,SAAAnI,GAACiI,GAAA,CAAgB,GAAGE,EAAO,EAC7B,EAIGE,GAAQ9I,GAAK2I,GAAkBvI,EAAO,EDnBzC,cAAAK,OAAA,oBAnBJ,IAAMsI,GAAiB,CAAC,CACtB,iBAAAnI,EACA,OAAAoI,EACA,eAAAC,EACA,OAAAxH,EACA,WAAAQ,EACA,SAAApB,EACA,QAAAoH,EACA,eAAAC,EACA,kBAAArB,EACA,kBAAAC,EACA,QAAAqB,EACA,QAAAC,EACA,SAAAC,EACA,mBAAAhD,CACF,IACOzE,EAGHH,GAACqI,GAAA,CACC,KAAME,GAAU,EAAQC,EACxB,SAAUA,EACV,QAAShB,EACT,OAAQxG,EACR,WAAYQ,EACZ,eAAgBiG,EAChB,kBAAmBrB,EACnB,kBAAmBC,EACnB,QAASqB,EACT,QAASC,EACT,SAAUC,EACV,aAAcxH,EACd,mBAAoBwE,EACtB,EAjB4B,KAqBzB6D,GAAQlJ,GAAK+I,GAAgB3I,EAAO,EU5C3C,OAAS,QAAAJ,GAAM,eAAAC,GAAa,aAAAkJ,GAAW,WAAAjJ,GAAS,YAAAC,OAAgB,QAChE,OAAOG,OAAY,uBACnB,OAAO8B,OAAiB,4BACxB,OAAOC,OAAgB,2BACvB,OAAOC,OAAc,yBACrB,OAAOC,OAAY,uBACnB,OAAO/B,OAAW,sBAClB,OAAOe,OAAgB,2BCPvB,OAAOjB,OAAY,uBACnB,OAAO8I,OAAY,uBACnB,OAAOC,OAAmB,8BAC1B,OAAOC,OAAmB,8BAC1B,OAAOC,OAAiB,4BACxB,OAAS,UAAA7B,MAAc,uBACvB,OAAOnG,OAAgB,2BAEhB,IAAMiI,GAAe9B,EAAO0B,EAAM,EAAE,KAAO,CAChD,qBAAsB,CAAE,MAAO,MAAO,CACxC,EAAE,EAEWK,GAAoB/B,EAAO6B,EAAW,EAAE,CAAC,CAAE,MAAA1B,CAAM,KAAO,CACnE,aAAc,YACd,YAAaA,EAAM,QAAQ,QAC3B,QAASA,EAAM,QAAQ,IAAK,CAAC,CAC/B,EAAE,EAEW6B,GAAsBhC,EAAO4B,EAAa,EAAE,CAAC,CAAE,MAAAzB,CAAM,KAAO,CACvE,QAASA,EAAM,QAAQ,CAAC,CAC1B,EAAE,EAEW8B,GAAsBjC,EAAO2B,EAAa,EAAE,CAAC,CAAE,MAAAxB,CAAM,KAAO,CACvE,UAAW,YACX,YAAaA,EAAM,QAAQ,QAC3B,QAASA,EAAM,QAAQ,IAAK,CAAC,CAC/B,EAAE,EAEW+B,GAAclC,EAAOpH,EAAM,EAAE,CAAC,CAAE,MAAAuH,CAAM,KAAO,CACxD,SAAU,GACV,CAACA,EAAM,YAAY,KAAK,GAAG,CAAC,EAAG,CAC7B,QAASA,EAAM,QAAQ,CAAC,CAC1B,CACF,EAAE,EAEWgC,GAAcnC,EAAOnG,EAAU,EAAE,CAAC,CAAE,MAAAsG,CAAM,KAAO,CAC5D,WAAY,MACZ,OAAQA,EAAM,QAAQ,EAAG,CAAC,EAC1B,CAACA,EAAM,YAAY,KAAK,GAAG,CAAC,EAAG,CAC7B,SAAU,EACV,OAAQ,CACV,CACF,EAAE,EDgDM,cAAApH,EAQI,QAAAC,MARJ,oBApER,IAAMoJ,GAAY,CAAC,CACjB,KAAA7G,EACA,QAAAgF,EACA,OAAAxG,EACA,KAAAT,EACA,aAAA+I,CACF,IAAsB,CACpB,GAAM,CAACzE,EAAe0E,CAAgB,EAAI7J,GACxCa,GAAM,WAAa,EACrB,EACM,CAACiJ,EAAmBC,CAAoB,EAAI/J,GAChDa,GAAM,eACR,EAEMmJ,EAAiBjK,GACrB,IACEuB,EAAO,OACLC,GAASA,EAAM,OAAS,WAAaA,EAAM,cAAgB,YAC7D,EACF,CAACD,CAAM,CACT,EAEM2I,EAAmBlK,GACvB,IACEuB,EAAO,KACLC,IAAUA,EAAM,mBAAqBA,EAAM,QAAU4D,CACvD,EACF,CAAC7D,EAAQ6D,CAAa,CACxB,EAEM+E,EACJD,GAAkB,OAAS,WAC3BA,GAAkB,OAAS,UAE7BjB,GAAU,IAAM,CACVlG,IACF+G,EAAiBhJ,GAAM,WAAa,EAAE,EACtCkJ,EAAqBlJ,GAAM,eAAwB,EAEvD,EAAG,CAACiC,EAAMjC,CAAI,CAAC,EAEf,IAAMuH,EAActI,GAAY,IAAM,CAChC8J,GAIAA,EAHGzE,EAGU,CACX,UAAWA,EACX,SAAU2E,CACZ,EALa,MAKZ,EAGLhC,EAAQ,CACV,EAAG,CAAC8B,EAAczE,EAAe2E,EAAmBhC,CAAO,CAAC,EAEtDO,EAAcvI,GAAY,IAAM,CAC/B8J,IAELC,EAAiB,EAAE,EACnBE,OAAiC,EAEjCH,EAAa,MAAS,EACtB9B,EAAQ,EACV,EAAG,CAAC8B,EAAc9B,CAAO,CAAC,EAE1B,OACEvH,EAAC8I,GAAA,CAAa,KAAMvG,EAAM,QAASgF,EAAS,SAAS,KAAK,UAAS,GACjE,UAAAxH,EAACgJ,GAAA,CACC,SAAAhJ,EAACc,GAAA,CAAW,QAAQ,WAAW,MAAM,iBAAiB,uBAEtD,EACF,EACAd,EAACiJ,GAAA,CACC,SAAAhJ,EAACF,GAAA,CAAM,QAAS,EAAG,GAAI,EACrB,UAAAE,EAAC0B,GAAA,CAAY,UAAS,GAAC,KAAK,QAC1B,UAAA3B,EAAC4B,GAAA,CAAW,GAAG,mBAAmB,iBAAK,EACvC3B,EAAC6B,GAAA,CACC,QAAQ,mBACR,MAAO+C,EACP,MAAM,QACN,SAAUN,GAAKgF,EAAiBhF,EAAE,OAAO,KAAK,EAE9C,UAAAvE,EAAC6B,GAAA,CAAS,MAAM,GACd,SAAA7B,EAAC,MAAG,kBAAM,EACZ,EACC0J,EAAe,IAAIzI,GAClBjB,EAAC6B,GAAA,CAEC,MAAOZ,EAAM,mBAAqBA,EAAM,KAEvC,SAAAA,EAAM,aAAeA,EAAM,MAHvBA,EAAM,IAIb,CACD,GACH,GACF,EACAhB,EAAC0B,GAAA,CAAY,UAAS,GAAC,KAAK,QAAQ,SAAU,CAACkD,EAC7C,UAAA7E,EAAC4B,GAAA,CAAW,GAAG,uBAAuB,yBAAO,EAC7C3B,EAAC6B,GAAA,CACC,QAAQ,uBACR,MAAO0H,EACP,MAAM,gBACN,SAAUjF,GAAKkF,EAAqBlF,EAAE,OAAO,KAAiB,EAE9D,UAAAtE,EAAC4B,GAAA,CAAS,YAAqB,uBAClB+H,EAAgB,QAAU,SACvC,EACA3J,EAAC4B,GAAA,CAAS,aAAsB,yBACjB+H,EAAgB,QAAU,SACzC,GACF,GACF,GACF,EACF,EACA3J,EAACiJ,GAAA,CACC,UAAAlJ,EAACD,GAAA,CAAM,KAAM,EAAG,MAAM,OAAO,UAAU,MACrC,SAAAC,EAACH,GAAA,CAAO,MAAM,UAAU,QAASkI,EAAa,kBAE9C,EACF,EACA9H,EAACJ,GAAA,CACC,QAAS2H,EACT,QAAQ,WACR,MAAM,UACN,GAAI,CAAE,SAAU,EAAG,EAEnB,UAAAxH,EAACU,EAAA,CAAK,KAAK,gBAAgB,EAC3BV,EAACoJ,GAAA,CAAY,oBAAQ,GACvB,EACAnJ,EAACkJ,GAAA,CAAY,QAASrB,EAAa,QAAQ,YACzC,UAAA9H,EAACU,EAAA,CAAK,KAAK,eAAe,EAC1BV,EAACoJ,GAAA,CAAY,mBAAO,GACtB,GACF,GACF,CAEJ,EAEAC,GAAU,YAAc,YAExB,IAAOQ,GAAQtK,GAAK8J,EAAS,EEjK7B,OAAS,WAAA5J,OAAe,QAKjB,IAAMqK,GAAoB,CAAC,CAChC,QAAAC,EACA,OAAA/I,EACA,oBAAAgJ,CACF,IAA+B,CAC7B,IAAMC,EAAmBxK,GACvB,IAAM,IAAI,IAAIsK,EAAQ,IAAIG,GAAU,CAACA,EAAO,MAAOA,CAAM,CAAC,CAAC,EAC3D,CAACH,CAAO,CACV,EAEMI,EAAe1K,GACnB,IAAM,IAAI,IAAIuB,GAAQ,IAAI8D,GAAK,CAACA,EAAE,KAAMA,CAAC,CAAC,GAAK,CAAC,CAAC,EACjD,CAAC9D,CAAM,CACT,EAgDA,MAAO,CAAE,eA9CcvB,GAAQ,IAAM,CACnC,GAAI,CAACuK,GAAuBA,EAAoB,SAAW,GAAK,CAAChJ,EAC/D,OAAO+I,EAGT,IAAMK,EAAkB,UAClBC,EAA0BL,EAAoB,OAClD9E,GAAaA,IAAckF,CAC7B,EAEME,EAAqB,IAAI,IACzBC,EAAwB,CAAC,EAEzBC,EAAsBtF,GAAsB,CAChD,IAAMjE,EAAQkJ,EAAa,IAAIjF,CAAS,EACxC,GAAI,CAACjE,EAAO,OAEZ,IAAMiJ,EAASD,EAAiB,IAAIhJ,EAAM,IAAI,EAE1C,CAACiJ,GAAUI,EAAmB,IAAIrJ,EAAM,IAAI,IAEhDsJ,EAAQ,KAAKL,CAAM,EACnBI,EAAmB,IAAIrJ,EAAM,IAAI,EACnC,EAEA,OAAAoJ,EAAwB,QAAQnF,GAAa,CAC3CsF,EAAmBtF,CAAS,CAC9B,CAAC,EAEDlE,EAAO,QAAQC,GAAS,CAEtB,GADIA,EAAM,OAASmJ,GACfC,EAAwB,SAASpJ,EAAM,IAAI,EAAG,OAElD,IAAMiJ,EAASD,EAAiB,IAAIhJ,EAAM,IAAI,EAE1C,CAACiJ,GAAUI,EAAmB,IAAIrJ,EAAM,IAAI,IAEhDsJ,EAAQ,KAAKL,CAAM,EACnBI,EAAmB,IAAIrJ,EAAM,IAAI,EACnC,CAAC,EAEDuJ,EAAmBJ,CAAe,EAE3BG,EAAQ,SAAW,EAAIR,EAAUQ,CAC1C,EAAG,CAACR,EAASE,EAAkBE,EAAcH,EAAqBhJ,CAAM,CAAC,EAEhD,iBAAAiJ,EAAkB,aAAAE,CAAa,CAC1D,ECnEA,OAAS,eAAA3K,GAAa,WAAAC,OAAe,QAQrC,SAASgL,GAA0BxJ,EAAsB,CACvD,OAAOA,EAAM,IACf,CAEO,IAAMyJ,GAAsB,CAAC,CAClC,OAAA1J,EACA,iBAAAiJ,EACA,yBAAAU,EACA,2BAAAC,EACA,8BAAAC,CACF,IAAiC,CAC/B,IAAMC,EAAgB,EAAQF,EAExB,CAACG,EAAuBC,CAAwB,EAAIC,GAExDL,GAA8B,gCAAiC,OAAW,CAC1E,oBAAqBE,CACvB,CAAC,EAEKI,EAAezL,GAAQ,IAAM,CACjC,GAAI,CAACuB,EAAQ,OAEb,IAAMmK,EAA6C,CAAC,EA4BpD,GA1BAnK,EAAO,QAAQC,GAAS,CACtB,IAAMmK,EAAgBX,GAA0BxJ,CAAK,EACrD,GAAI,CAACgJ,EAAiB,IAAImB,CAAa,EAAG,OAE1C,IAAIC,EAEJ,GAAIP,GAAiBC,EAAuB,CAC1C,IAAMO,EAASP,EAAsBK,CAAa,EAC9C,OAAOE,GAAW,YACpBD,EAAUC,GAKZD,IAAY,QACZV,GACAA,EAAyB,OAAS,IAElCU,EAAUV,EAAyB,SAAS1J,EAAM,IAAI,GAGpD,OAAOoK,GAAY,YACrBF,EAAgBC,CAAa,EAAIC,EAErC,CAAC,EAEG,OAAO,KAAKF,CAAe,EAAE,SAAW,EAE5C,MAAO,CACL,QAAS,CACP,sBAAuBA,CACzB,CACF,CACF,EAAG,CACDlB,EACAU,EACA3J,EACA8J,EACAC,CACF,CAAC,EAEKQ,EAAoC/L,GACvCgM,GAAqC,CACpC,GAAIV,EAAe,CACjB,IAAMW,EAAc,CAAE,GAAGD,CAAM,EAE/B,OAAOC,EAAY,UACnBT,EAAyBS,CAAW,EAGlCZ,GACFA,EAA8BW,CAAK,CAEvC,EACA,CAACV,EAAeD,EAA+BG,CAAwB,CACzE,EAEA,MAAO,CACL,aAAAE,EACA,kCAAAK,CACF,CACF,EC7FA,OAAS,WAAA9L,OAAe,QCAjB,IAAMiM,EAAkB,CAC7B,YAAa,GACb,UAAW,IACX,iBAAkB,IAClB,YAAa,GACb,aAAc,IACd,QAAS,EACT,cAAe,EACjB,EAEaC,GAAe,CAC1B,UAAW,YACX,eAAgB,gBAClB,EAEaC,GAA0C,CACrD,QACA,aACA,gBACA,gBACA,2BACF,ECfA,IAAMC,GAAoB,CACxB5K,EACA6K,KACgB,CAChB,MAAO7K,EAAM,KACb,WAAYA,EAAM,YAClB,SAAU,GACV,MAAOyK,EAAgB,YACvB,UAAW,GACX,YAAa,SACb,MAAO,SACP,WAAaK,GACXD,EAAW7K,EAAO8K,EAAO,GAAwB,CACrD,GAEMC,GAAiB,CACrB/K,EACA6K,KACgB,CAChB,MAAO7K,EAAM,KACb,WAAYA,EAAM,YAClB,SAAUyK,EAAgB,aAC1B,KAAMA,EAAgB,QACtB,WAAaK,GACXD,EAAW7K,EAAO8K,EAAO,GAAwB,CACrD,GAEME,GAAqB,CACzBhL,EACA6K,KACgB,CAChB,MAAO7K,EAAM,KACb,WAAYA,EAAM,YAClB,SAAUyK,EAAgB,iBAC1B,KAAMA,EAAgB,YACtB,WAAaK,GACXD,EAAW7K,EAAO8K,EAAO,GAAwB,CACrD,GAEMG,GAAsB,CAC1BjL,EACA6K,KACgB,CAChB,MAAO7K,EAAM,KACb,WAAYA,EAAM,YAClB,SAAUyK,EAAgB,UAC1B,WAAaK,GACXD,EAAW7K,EAAO8K,EAAO,GAAwB,CACrD,GAEMI,GAAsB,CAC1BlL,EACA6K,KACgB,CAChB,MAAO7K,EAAM,KACb,WAAY,cACZ,MAAOyK,EAAgB,cACvB,SAAU,GACV,UAAW,GACX,eAAgB,GAChB,YAAa,SACb,kBAAmB,GACnB,MAAO,SACP,WAAaK,GACXD,EAAW7K,EAAO8K,EAAO,GAAwB,CACrD,GAEaK,GAAoB,CAC/BnL,EACAkB,IAEIlB,EAAM,OAASkB,GAAU,eAAiBlB,EAAM,OAAS,OACpD+K,GAGL/K,EAAM,OAAS,UACVkL,GAGLlL,EAAM,OAAS,OACV4K,GAGL5K,EAAM,OAAS,SACVgL,GAGFC,GFpFF,IAAMG,GAAoB,CAAmB,CAClD,SAAAlK,EACA,WAAA2J,EACA,iBAAAQ,CACF,IACS7M,GAAQ,IAAM,CACnB,GAAI,CAAC0C,GAAU,OAAQ,MAAO,CAAC,EAE/B,IAAMoK,EAAa,IAAI,IAiBvB,OAfsBpK,EAAS,OAAO,OAAOlB,GAEzCA,EAAM,cAAgB0K,GAAa,WACnC1K,EAAM,cAAgB0K,GAAa,eAE5B,GAIP1K,EAAM,OAAS,WACfA,EAAM,OAASkB,GAAU,eACzBlB,EAAM,OAAS,MAElB,EAEa,QAAQA,GAAS,CAC7B,GAAIsL,EAAW,IAAItL,EAAM,IAAI,EAC3B,OAKF,IAAMiJ,GADJoC,IAAmBrL,EAAM,IAAI,GAAKmL,GAAqBnL,EAAOkB,CAAQ,GAChDlB,EAAO6K,EAAY3J,CAAQ,EAEnDoK,EAAW,IAAItL,EAAM,KAAMiJ,CAAM,CACnC,CAAC,EAEM,MAAM,KAAKqC,EAAW,OAAO,CAAC,CACvC,EAAG,CAACD,EAAkBnK,EAAU2J,CAAU,CAAC,EG/C7C,OAAS,eAAAtM,GAAa,UAAAgN,GAAQ,YAAA9M,OAAgB,QAiB9C,IAAM+M,GAA0BC,GACzBA,GAAe,SAAS,CAAC,GAAG,aAC1BA,EAAc,OAAO,CAAC,EAAE,aAAa,IAAI3G,IAAS,CACvD,GAAI4G,GAAO,EACX,SAAUD,EAAc,OAAO,CAAC,EAAE,SAClC,UAAW3G,EAAK,UAChB,YAAaA,EAAK,YAClB,MAAOA,EAAK,MACZ,YAAaA,EAAK,WACpB,EAAE,EARoD,CAAC,EAkB5C6G,GAAa,CAAC,CACzB,OAAA5L,EACA,cAAA0L,CACF,IAAyC,CACvC,GAAM,CAACnE,EAAQsE,CAAS,EAAInN,GAAS,EAAK,EAGpC,CAACoN,EAAmBC,CAAoB,EAAIrN,GAChD,IAAM+M,GAAuBC,CAAa,CAC5C,EACM,CAACM,EAAeC,CAAgB,EAAIvN,GACxCgN,CACF,EAGM,CAAClL,EAAY0L,CAAa,EAAIxN,GAA4B,IAC9D+M,GAAuBC,CAAa,CACtC,EAGMS,EAAcX,GAA0B,CAAC,CAAC,EAE1CY,EAAa5N,GAAY,IAAM,CAEnC2N,EAAY,QAAUL,EAAkB,IAAIpL,IAAM,CAAE,GAAGA,CAAE,EAAE,EAE3DwL,EAAcJ,EAAkB,IAAIpL,IAAM,CAAE,GAAGA,CAAE,EAAE,CAAC,EACpDmL,EAAU,EAAI,CAChB,EAAG,CAACC,CAAiB,CAAC,EAEhBO,EAAc,IAAMR,EAAU,EAAK,EAEnCS,EAAe9N,GAAY,IAAM,CACrC,IAAM2G,EAAmBnF,EAAO,OAC9B8D,GAAKA,EAAE,6BAA6B,OAAS,CAC/C,EACA,GAAIqB,EAAiB,SAAW,EAAG,OAEnC,IAAMO,EAAiBlF,EAAW,IAAIE,GAAKA,EAAE,SAAS,EAChD6L,EAAkBpH,EAAiB,OACvCrB,GAAK,CAAC4B,EAAe,SAAS5B,EAAE,mBAAqBA,EAAE,IAAI,CAC7D,EACA,GAAIyI,EAAgB,SAAW,EAAG,OAElC,IAAMC,EACJhM,EAAW,OAAS,EAAIA,EAAW,CAAC,EAAE,eAClCiM,EAAaF,EAAgB,CAAC,EAC9BG,EAAgC,CACpC,GAAIf,GAAO,EACX,SAAUa,EACV,UAAWC,EAAW,mBAAqBA,EAAW,KACtD,YAAavM,GAAoBuM,CAAU,EAC3C,MAAO,CAAC,CACV,EAEAP,EAAcS,GAAQ,CAAC,GAAGA,EAAMD,CAAY,CAAC,CAC/C,EAAG,CAAC1M,EAAQQ,CAAU,CAAC,EAEjBoM,EAAkBpO,GACtB,CAACiH,EAAYoH,IAAsC,CACjDX,EAAcS,GAAQ,CACpB,IAAMG,EAAkBH,EAAK,KAAKjM,GAAKA,EAAE,KAAO+E,CAAE,EAClD,GAAI,CAACqH,EAAiB,OAAOH,EAE7B,GAAIE,EAAQ,UAAYA,EAAQ,WAAaC,EAAgB,SAAU,CACrE,IAAMC,EAAcF,EAAQ,SAC5B,OAAOF,EAAK,IAAIjM,GACVA,EAAE,KAAO+E,EACJ,CAAE,GAAG/E,EAAG,GAAGmM,CAAQ,EAErB,CAAE,GAAGnM,EAAG,SAAUqM,CAAY,CACtC,EAGH,OAAOJ,EAAK,IAAIjM,GAAMA,EAAE,KAAO+E,EAAK,CAAE,GAAG/E,EAAG,GAAGmM,CAAQ,EAAInM,CAAE,CAC/D,CAAC,CACH,EACA,CAAC,CACH,EAEMsM,EAAkBxO,GAAaiH,GAAe,CAClDyG,EAAcS,GAAQA,EAAK,OAAOjM,GAAKA,EAAE,KAAO+E,CAAE,CAAC,CACrD,EAAG,CAAC,CAAC,EAECwH,EAAkB,IAAM,CAC5Bf,EAAc,CAAC,CAAC,EAChBH,EAAqB,CAAC,CAAC,EACvBE,EAAiB,MAAS,CAC5B,EAEMiB,EAAe,IAAM,CACzB,IAAMC,EAAS5M,GAA0BC,CAAU,EACnD,OAAAuL,EAAqBvL,EAAW,IAAIE,IAAM,CAAE,GAAGA,CAAE,EAAE,CAAC,EACpDuL,EAAiBkB,CAAM,EACvBtB,EAAU,EAAK,EACRsB,CACT,EAEMC,EAAgB,IAAM,CAE1BlB,EAAcC,EAAY,QAAQ,IAAIzL,IAAM,CAAE,GAAGA,CAAE,EAAE,CAAC,EACtDmL,EAAU,EAAK,CACjB,EAGMxM,EAAmByM,EAAkB,KAAKzL,CAAgB,EAC1Df,EAAqBwM,EAAkB,OAAOzL,CAAgB,EAAE,OAEtE,MAAO,CACL,WAAAG,EACA,OAAQwL,EACR,OAAAzE,EACA,iBAAAlI,EACA,mBAAAC,EACA,WAAA8M,EACA,YAAAC,EACA,aAAAC,EACA,gBAAAM,EACA,gBAAAI,EACA,gBAAAC,EACA,aAAAC,EACA,cAAAE,CACF,CACF,EC/JA,OAAS,eAAA5O,GAAa,aAAAkJ,GAAW,YAAAhJ,OAAgB,QAGjD,IAAM2O,GAAqBC,GAA+B,CACxD,GAAI,CACF,IAAM/K,EAAO,aAAa,QAAQ+K,CAAG,EACrC,OAAO/K,EAAO,KAAK,MAAMA,CAAI,EAAI,MACnC,MAAE,CACA,MACF,CACF,EAEMgL,GAAiB,CAAID,EAAalM,IAA+B,CACrE,GAAI,CACEA,IAAU,OACZ,aAAa,WAAWkM,CAAG,EAE3B,aAAa,QAAQA,EAAK,KAAK,UAAUlM,CAAK,CAAC,CAEnD,MAAE,CAEF,CACF,EAEaoM,GAAmB,CAC9BC,EACAC,EACAC,IACG,CACH,IAAMC,EAAY,GAAGH,WAEf,CAACI,EAAgBC,CAAiB,EAAIpP,GAC1C,IACS2O,GAAuBO,CAAS,GAAKF,CAEhD,EAGAhG,GAAU,IAAM,CACVgG,IAAmB,QACrBI,EAAkBJ,CAAc,CAEpC,EAAG,CAACA,CAAc,CAAC,EAEnB,IAAMK,EAAqBvP,GACxBwP,GAAkC,CACjCF,EAAkBE,CAAS,EAC3BT,GAAeK,EAAWI,CAAS,EACnCL,IAAiBK,CAAS,CAC5B,EACA,CAACJ,EAAWD,CAAc,CAC5B,EAEA,MAAO,CACL,OAAQE,EACR,UAAWE,CACb,CACF,EAEaE,GAAiB,CAC5BR,EACAS,EACA5F,IACG,CACH,IAAM6F,EAAU,GAAGV,SAEb,CAACW,EAAcC,CAAe,EAAI3P,GAA2B,IAC1D2O,GAAqBc,CAAO,GAAKD,CACzC,EAGDxG,GAAU,IAAM,CACVwG,IAAiB,QACnBG,EAAgBH,CAAY,CAEhC,EAAG,CAACA,CAAY,CAAC,EAEjB,IAAMI,EAAmB9P,GACtB+P,GAA8B,CAC7BF,EAAgBE,CAAO,EACvBhB,GAAeY,EAASI,CAAO,EAC/BjG,IAAeiG,CAAO,CACxB,EACA,CAACJ,EAAS7F,CAAY,CACxB,EAEA,MAAO,CACL,KAAM8F,EACN,QAASE,CACX,CACF,EC1FA,OAAS,eAAA9P,GAAa,WAAAC,OAAe,QAWrC,IAAM+P,GAAsB,CAC1BxO,EACAkE,IAEKlE,EACSA,EAAO,KAAK8D,GAAKA,EAAE,OAASI,CAAS,GACrC,mBAAqBA,EAFfA,EAShBuK,GAAyB,CAC7BzO,EACAkE,IAEKlE,EACSA,EAAO,KACnB8D,GAAKA,EAAE,oBAAsBI,GAAaJ,EAAE,OAASI,CACvD,GACc,MAAQA,EAJFA,EAOTwK,GAAa,CAAC,CACzB,KAAAnP,EACA,aAAA+I,EACA,OAAAtI,CACF,IAAwB,CACtB,IAAM2O,EAA2BlQ,GAAQ,IAClCc,EACE,CACL,CACE,MAAOkP,GAAuBzO,EAAQT,EAAK,SAAS,EACpD,KAAMA,EAAK,SAAS,YAAY,CAClC,CACF,EANkB,CAAC,EAOlB,CAACA,EAAMS,CAAM,CAAC,EAEX4O,EAAwBpQ,GAC3BgM,GAAyB,CACxB,GAAI,CAAClC,EAAc,OAEnB,IAAMuG,EAAYrE,EAAM,CAAC,EACzB,GAAI,CAACqE,GAAa,CAACA,EAAU,KAAM,CACjCvG,EAAa,MAAS,EACtB,OAGF,IAAMiG,EAAgB,CACpB,UAAWC,GAAoBxO,EAAQ6O,EAAU,KAAK,EACtD,SAAUA,EAAU,KAAK,YAAY,CACvC,EACAvG,EAAaiG,CAAO,CACtB,EACA,CAACjG,EAActI,CAAM,CACvB,EAEA,MAAO,CACL,UAAA2O,EACA,sBAAAC,CACF,CACF,EClEO,IAAME,GAAqB,KAAc,CAC9C,KAAM,UACN,YAAa,GACb,kBAAmB,KACnB,YACA,SAAU,KACV,wBACA,oBAAqB,KACrB,4BAA6B,CAAC,CAChC,GAEaC,GACX5N,GAEwBA,EAAS,OAAO,KACtClB,GAASA,EAAM,OAAS,SAC1B,EAGSkB,EAGF,CACL,GAAGA,EACH,OAAQ,CAAC,GAAGA,EAAS,OAAQ2N,GAAmB,CAAC,CACnD,EChCF,OAAS,QAAAvQ,OAAuB,QAMhC,IAAMyQ,GAAe,CAAC,CAAE,MAAA5N,EAAO,OAAA6N,CAAO,IAChC7N,GAAU,KAAoC,IAE3C8N,GAAM9N,EAA2B6N,CAAM,EAGzCE,GAAQ5Q,GAAKyQ,EAAY,ECZhC,OAAS,QAAAzQ,OAAuB,QAMhC,IAAM6Q,GAAmB,CAAC,CACxB,MAAAhO,EACA,OAAA6N,CACF,IACM7N,GAAU,KAAoC,IAE3CiO,GAAUjO,EAA2B6N,CAAM,EAG7CK,GAAQ/Q,GAAK6Q,EAAgB,ECfpC,OAAS,QAAA7Q,OAAuB,QAChC,OAAOgR,OAAU,qBAgBb,cAAAvQ,OAAA,oBAZJ,IAAMwQ,GAAiB,CAAC,CAAE,MAAApO,EAAO,MAAAnB,CAAM,IAAsC,CAC3E,GAAI,CAACA,EAAM,UAAY,OAAOmB,GAAU,UAAYA,IAAU,KAC5D,OAAOA,EAAQ,OAAOA,CAAK,EAAI,IAGjC,IAAMqO,EAAerO,EACnBnB,EAAM,SAAS,sBACjB,EAEA,OAAKwP,EAGHzQ,GAACuQ,GAAA,CACC,MAAO,OAAOE,CAAW,EACzB,QAAQ,WACR,KAAK,QACL,GAAI,CACF,MAAO,cACP,MAAO,iBACP,YAAa,UACb,aAAc,CAChB,EACF,EAbuB,IAe3B,EAEOC,GAAQnR,GAAKiR,EAAc,EC/BlC,OAAS,QAAAjR,OAAuB,QAc5B,cAAAS,OAAA,oBARJ,IAAM2Q,GAAe,CAAC,CACpB,MAAAvO,EACA,SAAAwO,YACA,UAAAC,SACA,MAAAC,EAAQ,eACR,MAAAC,EAAQ,EACV,IAEI/Q,GAACU,EAAA,CAAK,KAAM0B,EAAQwO,EAAWC,EAAW,MAAOC,EAAO,MAAOC,EAAO,EAInEC,GAAQzR,GAAKoR,EAAY,EClBhC,OAAS,QAAApR,OAAuB,QCAhC,OAAOyH,OAAS,oBAChB,OAAS,UAAAC,OAAc,uBAOhB,IAAMgK,GAAchK,GAAO,MAAM,EACtC,CAAC,CAAE,MAAAG,EAAO,SAAA8J,CAAS,KAAO,CACxB,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,QAAS9J,EAAM,QAAQ,GAAK,CAAC,EAC7B,aAAcA,EAAM,MAAM,aAC1B,SAAU,UACV,WAAY,IACZ,MAAO,cACP,OAAQ,OACR,WAAY,UACZ,WAAY,SACZ,OAAQ,OACR,gBAAiB8J,EACb9J,EAAM,QAAQ,QAAQ,SAAW,YACjCA,EAAM,QAAQ,QAAQ,SAAW,YACrC,MAAO8J,EACH9J,EAAM,QAAQ,QAAQ,QAAU,UAChCA,EAAM,QAAQ,QAAQ,QAAU,SACtC,EACF,EASa+J,GAAiBlK,GAAOD,GAAK,CACxC,kBAAmBoK,GACjB,CAAC,CAAC,OAAQ,UAAW,WAAW,EAAE,SAASA,CAAc,CAC7D,CAAC,EAAuB,CAAC,CAAE,MAAAhK,EAAO,KAAAiK,EAAM,QAAAC,EAAS,UAAAC,CAAU,KAAO,CAChE,MAAOF,EACP,OAAQA,EACR,SAAUA,EACV,aAAc,MACd,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,SAAU,SACV,OAAQE,EAAY,UAAY,UAChC,WAAY,2BACZ,MAAOnK,EAAM,QAAQ,KAAK,SAC1B,GAAIkK,GAAW,CACb,OAAQ,cAAclK,EAAM,QAAQ,UACpC,gBAAiBA,EAAM,QAAQ,KAAK,GAAG,CACzC,EACA,GAAImK,GAAa,CACf,UAAW,CACT,QAAS,EACX,CACF,EACA,QAAS,CACP,MAAO,OACP,OAAQ,OACR,UAAW,QACX,aAAc,KAChB,EACA,CAACnK,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,eAAgB,aAChB,WAAY,YACd,CACF,EAAE,ED3CM,cAAApH,OAAA,oBAtBR,IAAMwR,GAAgB,CAAC,CACrB,gBAAAC,EACA,YAAAC,EACA,KAAAL,EAAO,GACP,IAAAM,EAAM,SACN,QAAAC,EACA,GAAAC,CACF,IAAqC,CACnC,IAAMC,EAAW,CAAC,CAACL,EACbM,EACJD,GAAYJ,EAAcA,EAAYD,CAAe,EAAI,OAG3D,OACEzR,GAACmR,GAAA,CACC,KAAME,EACN,QAAS,CAACS,EACV,UANc,CAAC,CAACF,EAOhB,QAASA,EACT,GAAIC,EAEH,SAAAE,EACC/R,GAAC,OAAI,IAAK+R,EAAU,IAAKJ,EAAK,EAE9B3R,GAACU,EAAA,CACC,KAAK,eACL,MAAO,KAAK,MAAM2Q,EAAO,CAAC,EAC1B,MAAM,gBACR,EAEJ,CAEJ,EAEOW,GAAQzS,GAAKiS,EAAa,EEzCjC,OAAS,QAAAjS,OAAuB,QAChC,OAAOQ,OAAW,sBAClB,OAAOe,OAAgB,2BAajB,cAAAd,GAIE,QAAAC,OAJF,oBAPN,IAAMgS,GAAe,CAAC,CACpB,GAAAxL,EACA,YAAAyL,EACA,YAAAC,EAAc,aAChB,IAEIlS,GAACF,GAAA,CAAM,OAAQ,EAAG,eAAe,SAC/B,UAAAC,GAACc,GAAA,CAAW,QAAQ,YAAY,OAAM,GAAC,MAAOoR,EAC3C,SAAAA,EACH,EACAjS,GAACF,GAAA,CAAM,UAAU,MAAM,IAAK,EAAG,WAAW,SACxC,UAAAE,GAACa,GAAA,CAAW,MAAM,WAAW,QAAQ,QAAQ,OAAM,GAAC,iBAC7C2F,GACP,EACAzG,GAACoS,EAAA,CAAW,OAAQ3L,EAAI,QAAS0L,EAAa,GAChD,GACF,EAIGE,GAAQ9S,GAAK0S,EAAY,EC5BhC,OAAS,QAAA1S,OAAuB,QAChC,OAAOQ,OAAW,sBAClB,OAAOe,OAAgB,2BAcjB,cAAAd,OAAA,oBARN,IAAMsS,GAAiB,CAAC,CACtB,MAAAlQ,EACA,WAAAmQ,EAAa,EACf,IACMnQ,GAAU,KAAoC,IAGhDpC,GAACD,GAAA,CAAM,UAAU,MAAM,WAAW,SAAS,OAAO,OAChD,SAAAC,GAACc,GAAA,CAAW,QAAQ,QAAQ,OAAM,GAAC,MAAM,cACtC,SAAAyR,EAAaC,GAAa,OAAOpQ,CAAK,CAAC,EAAIqQ,GAAQ,OAAOrQ,CAAK,CAAC,EACnE,EACF,EAIGsQ,GAAQnT,GAAK+S,EAAc,ECvBlC,OAAS,QAAA/S,OAAuB,QAW5B,cAAAS,OAAA,oBANJ,IAAM2S,GAAiB,CAAC,CACtB,OAAAC,EACA,YAAAC,EAAc,QACd,cAAAC,EAAgB,SAClB,IAEI9S,GAACiR,GAAA,CAAY,SAAU2B,EACpB,SAAAA,EAASC,EAAcC,EAC1B,EAIGC,GAAQxT,GAAKoT,EAAc,ECjBlC,OAAS,QAAApT,OAAuB,QAChC,OAAOQ,OAAW,sBAClB,OAAOe,OAAgB,2BAmCjB,OACE,OAAAd,GADF,QAAAC,OAAA,oBA7BN,IAAM+S,GAAgBC,GACAA,EAAK,QAAQ,WAAY,EAAE,EAG1C,QAAQ,UAAW,GAAG,EACtB,QAAQ,SAAU,GAAG,EACrB,QAAQ,QAAS,GAAG,EACpB,QAAQ,QAAS,GAAG,EACpB,QAAQ,UAAW,GAAG,EAEtB,QAAQ,SAAU,GAAI,EACtB,KAAK,EAINC,GAAe,CAAC,CACpB,MAAA9Q,EACA,eAAA+Q,EAAiB,GACjB,YAAAhB,EAAc,UACd,UAAAiB,EACA,KAAAC,CACF,IAAoC,CAClC,GAAI,CAACjR,EAAO,MAAO,IAEnB,IAAMkR,EAAc,OAAOlR,CAAK,EAC1BmR,EAAiBF,EAAOA,EAAKC,CAAW,EAAIN,GAAaM,CAAW,EAE1E,OAAIH,EAEAlT,GAACF,GAAA,CAAM,UAAU,MAAM,IAAK,EAAG,WAAW,SACxC,UAAAC,GAACc,GAAA,CAAW,QAAQ,QAAQ,OAAM,GAC/B,SAAAyS,EACH,EACAvT,GAACoS,EAAA,CACC,OAAQkB,EACR,QAASnB,EACT,MAAOiB,EACT,GACF,EAIGG,CACT,EAEOC,GAAQjU,GAAK2T,EAAY,ECjBtB,cAAAlT,MAAA,oBAtBV,SAASyT,GAAcvO,EAA4B,CACjD,OAAO0G,GAAqB,SAAS1G,CAAS,CAChD,CAEO,IAAMwO,GAAiDC,GAEvC,CACrB,GAAM,CAAE,YAAAC,CAAY,EAAID,EAElBE,EAAwB,CAC5B5S,EACA6S,IACc,CACd,IAAM1R,EAAQ0R,EAAI7S,EAAM,IAAI,EAE5B,GAAIA,EAAM,OAAS,UACjB,OAAO2S,IAAcE,EAAI,GAAIA,CAAG,EAGlC,OAAQ7S,EAAM,KAAM,CAClB,IAAK,UACH,OACEjB,EAAC+S,GAAA,CACC,OAAQ,EAAQ3Q,EAChB,YAAY,QACZ,cAAc,UAChB,EAGJ,IAAK,OACH,OAAOpC,EAACmQ,GAAA,CAAa,MAAO/N,EAAO,EAErC,IAAK,WACH,OAAOpC,EAACsQ,GAAA,CAAiB,MAAOlO,EAAO,EAEzC,IAAK,UACL,IAAK,UACH,OACEpC,EAAC0S,GAAA,CACC,MAAOtQ,EACP,WAAYqR,GAAcxS,EAAM,IAAI,EACtC,EAGJ,IAAK,OACL,IAAK,SACH,OAAOjB,EAAC0Q,GAAA,CAAe,MAAOtO,EAAO,MAAOnB,EAAO,EACrD,IAAK,OACL,QACE,OAAOjB,EAACwT,GAAA,CAAa,MAAOpR,EAAO,CACvC,CACF,EAEA,OAAAyR,EAAsB,YAAc,wBAC7BA,CACT,EjC6LU,OAgBF,YAAA5N,GAhBE,OAAAjG,GAgBF,QAAAC,OAhBE,oBA7OV,IAAM8T,GAAkB,CAA4B,CAClD,MAAAC,EACA,SAAA7R,EACA,KAAAa,EACA,UAAAC,EACA,WAAAC,EACA,KAAA+Q,EACA,QAAAC,EACA,YAAAC,EACA,eAAAC,EACA,SAAAC,EACA,mBAAAC,EACA,MAAAC,EACA,YAAAX,EACA,iBAAAY,EACA,QAAAC,EACA,YAAAC,EACA,YAAAC,EACA,kBAAAC,EACA,0BAAAC,EACA,MAAAC,EACA,aAAAC,EACA,gBAAAC,EAAkB,IAClB,iBAAAC,EAAmB,GACnB,iBAAA9U,EAAmB,GACnB,OAAAgO,EACA,eAAAQ,EACA,KAAApO,EACA,aAAA+I,EACA,yBAAAqB,GACA,oBAAAX,GACA,iBAAAsC,GACA,8BAAAzB,GACA,WAAA4D,GACA,mBAAA7J,EACF,IAA+B,CAC7B,GAAM,CAAE,MAAOsQ,EAAO,CAAC,EAAG,MAAAC,GAAQ,CAAE,EAAInS,GAAQ,CAAC,EAG3CoS,EAAoB3V,GAAQ,IAAM,CACtC,GAAI0C,EAAU,OAAOA,EAGrB,GAAI+S,EAAK,OAAS,EAAG,CACnB,IAAMG,EAAWH,EAAK,CAAC,EACjBlU,EAAS,OAAO,KAAKqU,CAAQ,EAAE,IAAI/G,KAAQ,CAC/C,KAAMA,GACN,YACA,YAAaA,GACb,kBAAmB,KACnB,SAAU,KACV,wBACA,oBAAqB,KACrB,4BAA6B,CAAC,CAChC,EAAE,EAEF,MAAO,CACL,KAAM,UACN,YAAa,aACb,cAAe,KACf,uBAAwBtN,EAAO,CAAC,GAAG,MAAQ,KAC3C,wBACA,OAAAA,CACF,EAIJ,EAAG,CAACmB,EAAU+S,CAAI,CAAC,EAEbI,EAAoB7V,GACxB,IACE2V,GAAqBxB,EACjB7D,GAA0BqF,CAAiB,EAC3CA,EACN,CAACA,EAAmBxB,CAAW,CACjC,EAEM2B,EAA0B9V,GAC9B,IAAM6V,GAAmB,QAAU,CAAC,EACpC,CAACA,CAAiB,CACpB,EAEMxJ,GAAarM,GACjB,IACEiU,GAAsB,CACpB,YAAAE,CACF,CAAC,EACH,CAACA,CAAW,CACd,EAEM7J,GAAUsC,GAAqB,CACnC,SAAUiJ,EACV,WAAAxJ,GACA,iBAAAQ,EACF,CAAC,EAEK,CAAE,eAAAkJ,GAAgB,iBAAAvL,EAAiB,EAAIH,GAAkB,CAC7D,QAAAC,GACA,OAAQuL,GAAmB,OAC3B,oBAAAtL,EACF,CAAC,EAEK,CAAE,aAAAkB,GAAc,kCAAAK,EAAkC,EACtDb,GAAoB,CAClB,OAAQ4K,GAAmB,OAC3B,iBAAArL,GACA,yBAAAU,GACA,2BAA4B,GAAG8D,aAC/B,8BAAA5D,EACF,CAAC,EAEG4K,GAAuBjW,EAC1BuM,GAA4D,CAC3D,GAAI,CAACyI,EAAkB,OAEvB,IAAMkB,EAAQ3J,EAAO,IAAI,SAAS,GAAK,GACvCyI,EAAiBkB,EAAO3J,EAAO,GAAG,CACpC,EACA,CAACyI,CAAgB,CACnB,EAEMpU,EAAWuV,GAAc,OAAQ,IAAI,EACrC,CAACnN,GAAgBoN,EAAiB,EAAIlW,GAC1C,IACF,EAEM,CAAE,OAAQmW,GAAc,UAAWC,CAAgB,EAAItH,GAC3DC,GACAN,EACAQ,CACF,EAEM,CAAE,KAAMoH,GAAY,QAASC,EAAc,EAAI/G,GACnDR,GACAlO,EACA+I,CACF,EAEM2M,GAAkB9H,GAAU0H,GAC5BK,GAAgB3V,GAAQwV,GAExB,CAAE,UAAApG,GAAW,sBAAAC,EAAsB,EAAIF,GAAW,CACtD,KAAMwG,GACN,aAAcF,GACd,OAAQT,CACV,CAAC,EAEK,CACJ,WAAA/T,GACA,OAAA+G,GACA,WAAA6E,GACA,YAAAC,GACA,aAAAC,GACA,gBAAAM,GACA,gBAAAI,GACA,gBAAAC,GACA,aAAAC,GACA,cAAAE,GACA,iBAAA/N,GACA,mBAAAC,EACF,EAAIsM,GAAW,CACb,OAAQ2I,EACR,cAAeU,EACjB,CAAC,EAEKE,GAAqB3W,EAAY,IAAM,CAC3C,IAAMwP,EAAYd,GAAa,EAC/B4H,EAAgB9G,CAAS,CAC3B,EAAG,CAACd,GAAc4H,CAAe,CAAC,EAE5BM,GAAqB5W,EAAY,IAAM,CAC3CyO,GAAgB,EAChB6H,EAAgB,MAAS,CAC3B,EAAG,CAAC7H,GAAiB6H,CAAe,CAAC,EAE/BO,GAA0B7W,EAC7B8W,GAAyC,CACpClW,EACFgN,GAAW,GAEXA,GAAW,EACXwI,GAAkBU,EAAM,aAAa,EAEzC,EACA,CAAClW,EAAUgN,EAAU,CACvB,EAEMmJ,GAAsB/W,EAAY,IAAM,CAC5C4O,GAAc,EACdwH,GAAkB,IAAI,CACxB,EAAG,CAACxH,EAAa,CAAC,EAEZ,CAACoI,GAAiBC,EAAkB,EAAI/W,GAAS,EAAK,EAEtDgX,GAAqBlX,EAAY,IAAM,CAC3CoW,GAAkB,IAAI,EACtBvI,GAAY,CACd,EAAG,CAACA,EAAW,CAAC,EACVsJ,GAAsB,CAAC,CAAChC,GAAa,OAE3C,OACE1U,GAAAgG,GAAA,CACE,UAAAjG,GAAC4W,GAAA,CACC,MAAO5C,EACP,QAASwB,GACT,KAAMN,EACN,aAAcH,EACd,SAAUI,GACV,QAASlS,GAAa,CAACd,EACvB,SAAUe,EACV,YAAaiR,EACb,SAAUE,EACV,eAAgBD,EAChB,gBAAiB,CACf,KAAAH,EACA,SAAUC,CACZ,EACA,mBAAoBI,EACpB,QAASG,EACT,YAAaC,EACb,MAAOH,EACP,iBAAkBC,EAAmBiB,GAAuB,OAC5D,YAAad,EACb,kBAAmBgC,GACnB,kBAAmB/B,EACnB,0BAA2BC,EAC3B,4BAA6B8B,GAC7B,2BAA0B,GAC1B,MAAO7B,EACP,aAAc5J,GACd,iBAAkB+J,EAClB,eAAgB,CACd,OAAQD,EACR,UAAWA,CACb,EACA,8BAA+BzJ,GAC/B,aACEvL,GAACY,GAAA,CACC,iBAAkBT,EAClB,SAAUC,EACV,iBAAkBC,GAClB,mBAAoBC,GACpB,KAAM4V,GACN,cAAeG,GACf,YAAa,IAAMI,GAAmB,EAAI,EAC5C,EAEF,YAAY,SACZ,UAAW9G,GACX,kBAAmBC,GACnB,oBAAmB,GACrB,EACCzN,GACClC,GAAAgG,GAAA,CACE,UAAAjG,GAACyI,GAAA,CACC,iBAAkBtI,EAClB,OAAQoI,GACR,eAAgBC,GAChB,OAAQ+M,EACR,WAAY/T,GACZ,SAAUpB,EACV,QAASsW,GACT,eAAgBpJ,GAChB,kBAAmBM,GACnB,kBAAmBI,GACnB,QAASmI,GACT,QAASC,GACT,SAAUG,GACV,mBAAoB3R,GACtB,EAEA5E,GAAC6J,GAAA,CACC,KAAM2M,GACN,QAAS,IAAMC,GAAmB,EAAK,EACvC,OAAQlB,EACR,KAAMW,GACN,aAAcF,GAChB,GACF,GAEJ,CAEJ,EAEOa,GAAQtX,GAAKwU,GAAiBpU,EAAO,EkCxSrC,IAAMmX,GAAqB,CAAC,CACjC,SAAA3U,EACA,sBAAA4U,EACA,qBAAAC,CACF,IAAsD,CACpD,GAAI,CAAC7U,GAAU,OAAQ,OAIvB,IAAMkJ,EAFYlJ,EAAS,OAAO,IAAI2C,GAAKA,EAAE,IAAI,EAEvB,OAAOI,GAC3BA,IAAc,UAAkB,GAEhC6R,EACKA,EAAsB7R,CAAS,IAAM,GAGvC8R,GAAsB,SAAS9R,CAAS,GAAK,EACrD,EAED,OAAK8R,EAEE3L,EAAQ,KAAK,CAAC4L,EAAGC,IAAM,CAC5B,IAAMC,EAASH,EAAqB,QAAQC,CAAC,EACvCG,EAASJ,EAAqB,QAAQE,CAAC,EAE7C,OAAOC,EAASC,GAAU,CAC5B,CAAC,EAPiC/L,CAQpC","sourcesContent":["import { memo, useCallback, useMemo, useState } from 'react';\nimport isEqual from 'react-fast-compare';\nimport { AccessType, DataType } from 'model/entity-metadata';\n\nimport useResponsive from 'hooks/useResponsive';\n\nimport DataView from '../DataView';\n\nimport FilterButton from './components/FilterButton';\nimport FiltersSection from './components/FiltersSection';\nimport SortModal from './components/SortModal';\nimport { useColumnOrdering } from './hooks/useColumnOrdering';\nimport { useColumnVisibility } from './hooks/useColumnVisibility';\nimport { useDynamicColumns } from './hooks/useDynamicColumns';\nimport { useFilters } from './hooks/useFilters';\nimport { useFilterStorage, useSortStorage } from './hooks/useFilterSortStorage';\nimport { useSorting } from './hooks/useSorting';\nimport { addActionsFieldToMetadata } from './utils/addActionsField';\nimport { createCellRenderer } from './utils/createCellRenderer';\nimport { DynamicDataViewProps, DynamicRowData } from './props';\n\nconst DynamicDataView = <T extends object = object>({\n title,\n metadata,\n data,\n isLoading,\n isFetching,\n page,\n perPage,\n searchValue,\n onSearchChange,\n onSearch,\n onPaginationChange,\n onAdd,\n onRowAction,\n onRowDoubleClick,\n actions,\n moreActions,\n bulkActions,\n rowSelectionModel,\n onRowSelectionModelChange,\n slots,\n mobileRender,\n containerHeight = 600,\n showColumnButton = false,\n showFilterButton = false,\n filter,\n onFilterChange,\n sort,\n onSortChange,\n defaultVisibleFieldNames,\n preferredFieldOrder,\n columnStrategies,\n onColumnVisibilityModelChange,\n storageKey,\n entityFilterConfig,\n}: DynamicDataViewProps<T>) => {\n const { items: rows = [], total = 0 } = data || {};\n\n // Criar metadata temporário baseado em data quando metadata não disponível\n const preloadedMetadata = useMemo(() => {\n if (metadata) return metadata;\n\n // Se não tem metadata mas tem dados, criar metadata baseado nas keys do primeiro item\n if (rows.length > 0) {\n const firstRow = rows[0];\n const fields = Object.keys(firstRow).map(key => ({\n name: key,\n type: DataType.TEXT,\n description: key,\n filter_field_name: null,\n metadata: null,\n access_type: AccessType.READ_ONLY,\n relation_field_name: null,\n available_filter_conditions: [],\n }));\n\n return {\n name: 'loading',\n description: 'Loading...',\n id_field_name: 'id',\n description_field_name: fields[0]?.name || 'id',\n access_type: AccessType.READ_ONLY,\n fields,\n };\n }\n\n return undefined;\n }, [metadata, rows]);\n\n const effectiveMetadata = useMemo(\n () =>\n preloadedMetadata && onRowAction\n ? addActionsFieldToMetadata(preloadedMetadata)\n : preloadedMetadata,\n [preloadedMetadata, onRowAction],\n );\n\n const effectiveMetadataFields = useMemo(\n () => effectiveMetadata?.fields || [],\n [effectiveMetadata],\n );\n\n const renderCell = useMemo(\n () =>\n createCellRenderer<T>({\n onRowAction,\n }),\n [onRowAction],\n );\n\n const columns = useDynamicColumns<T>({\n metadata: effectiveMetadata,\n renderCell,\n columnStrategies,\n });\n\n const { orderedColumns, columnsByFieldId } = useColumnOrdering({\n columns,\n fields: effectiveMetadata?.fields,\n preferredFieldOrder,\n });\n\n const { initialState, handleColumnVisibilityModelChange } =\n useColumnVisibility({\n fields: effectiveMetadata?.fields,\n columnsByFieldId,\n defaultVisibleFieldNames,\n columnVisibilityStorageKey: `${storageKey}:columns`,\n onColumnVisibilityModelChange,\n });\n\n const handleRowDoubleClick = useCallback(\n (params: { id: string | number; row: DynamicRowData<T> }) => {\n if (!onRowDoubleClick) return;\n\n const rowId = params.id?.toString() || '';\n onRowDoubleClick(rowId, params.row);\n },\n [onRowDoubleClick],\n );\n\n const isMobile = useResponsive('down', 'md');\n const [filterAnchorEl, setFilterAnchorEl] = useState<HTMLElement | null>(\n null,\n );\n\n const { filter: storedFilter, setFilter: setStoredFilter } = useFilterStorage(\n storageKey,\n filter,\n onFilterChange,\n );\n\n const { sort: storedSort, setSort: setStoredSort } = useSortStorage(\n storageKey,\n sort,\n onSortChange,\n );\n\n const effectiveFilter = filter ?? storedFilter;\n const effectiveSort = sort ?? storedSort;\n\n const { sortModel, handleSortModelChange } = useSorting({\n sort: effectiveSort,\n onSortChange: setStoredSort,\n fields: effectiveMetadataFields,\n });\n\n const {\n conditions,\n isOpen,\n openDrawer,\n closeDrawer,\n addCondition,\n updateCondition,\n removeCondition,\n clearAllFilters,\n applyFilters,\n cancelChanges,\n hasActiveFilters,\n activeFiltersCount,\n } = useFilters({\n fields: effectiveMetadataFields,\n initialFilter: effectiveFilter,\n });\n\n const handleApplyFilters = useCallback(() => {\n const newFilter = applyFilters();\n setStoredFilter(newFilter);\n }, [applyFilters, setStoredFilter]);\n\n const handleClearFilters = useCallback(() => {\n clearAllFilters();\n setStoredFilter(undefined);\n }, [clearAllFilters, setStoredFilter]);\n\n const handleFilterButtonClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (isMobile) {\n openDrawer();\n } else {\n openDrawer();\n setFilterAnchorEl(event.currentTarget);\n }\n },\n [isMobile, openDrawer],\n );\n\n const handleCancelFilters = useCallback(() => {\n cancelChanges();\n setFilterAnchorEl(null);\n }, [cancelChanges]);\n\n const [isSortModalOpen, setIsSortModalOpen] = useState(false);\n\n const handleFiltersClose = useCallback(() => {\n setFilterAnchorEl(null);\n closeDrawer();\n }, [closeDrawer]);\n const hasSelectionActions = !!bulkActions?.length;\n\n return (\n <>\n <DataView<DynamicRowData<T>>\n title={title}\n columns={orderedColumns}\n rows={rows}\n mobileRender={mobileRender}\n rowCount={total}\n loading={isLoading || !metadata}\n fetching={isFetching}\n searchValue={searchValue}\n onSearch={onSearch}\n onSearchChange={onSearchChange}\n paginationModel={{\n page,\n pageSize: perPage,\n }}\n onPaginationChange={onPaginationChange}\n actions={actions}\n moreActions={moreActions}\n onAdd={onAdd}\n onRowDoubleClick={onRowDoubleClick ? handleRowDoubleClick : undefined}\n bulkActions={bulkActions}\n checkboxSelection={hasSelectionActions}\n rowSelectionModel={rowSelectionModel}\n onRowSelectionModelChange={onRowSelectionModelChange}\n keepNonExistentRowsSelected={hasSelectionActions}\n disableRowSelectionOnClick\n slots={slots}\n initialState={initialState}\n showColumnButton={showColumnButton}\n containerProps={{\n height: containerHeight,\n maxHeight: containerHeight,\n }}\n onColumnVisibilityModelChange={handleColumnVisibilityModelChange}\n filterButton={\n <FilterButton\n showFilterButton={showFilterButton}\n isMobile={isMobile}\n hasActiveFilters={hasActiveFilters}\n activeFiltersCount={activeFiltersCount}\n sort={effectiveSort}\n onFilterClick={handleFilterButtonClick}\n onSortClick={() => setIsSortModalOpen(true)}\n />\n }\n sortingMode=\"server\"\n sortModel={sortModel}\n onSortModelChange={handleSortModelChange}\n disableColumnFilter\n />\n {metadata && (\n <>\n <FiltersSection\n showFilterButton={showFilterButton}\n isOpen={isOpen}\n filterAnchorEl={filterAnchorEl}\n fields={effectiveMetadataFields}\n conditions={conditions}\n isMobile={isMobile}\n onClose={handleFiltersClose}\n onAddCondition={addCondition}\n onUpdateCondition={updateCondition}\n onRemoveCondition={removeCondition}\n onApply={handleApplyFilters}\n onClear={handleClearFilters}\n onCancel={handleCancelFilters}\n entityFilterConfig={entityFilterConfig}\n />\n\n <SortModal\n open={isSortModalOpen}\n onClose={() => setIsSortModalOpen(false)}\n fields={effectiveMetadataFields}\n sort={effectiveSort}\n onSortChange={setStoredSort}\n />\n </>\n )}\n </>\n );\n};\n\nexport default memo(DynamicDataView, isEqual) as typeof DynamicDataView;\nexport type { DynamicDataViewProps, DynamicRowData } from './props';\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Badge from '@mui/material/Badge';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\n\nimport { ToolbarActionsDivider } from 'components/DataView';\nimport Icon from 'components/Icon';\n\nimport { FilterButtonProps } from '../props';\n\nconst FilterButton = ({\n showFilterButton,\n isMobile,\n hasActiveFilters,\n activeFiltersCount,\n sort,\n onFilterClick,\n onSortClick,\n}: FilterButtonProps) => {\n if (!showFilterButton) return null;\n\n if (isMobile) {\n return (\n <Stack direction=\"row\" spacing={0.5}>\n <Badge\n badgeContent={activeFiltersCount}\n color=\"primary\"\n invisible={activeFiltersCount === 0}\n sx={{\n '& .MuiBadge-badge': {\n transform: 'scale(0.9) translate(10px, 9px)',\n opacity: activeFiltersCount === 0 ? 0 : 1,\n },\n }}\n >\n <IconButton\n color={hasActiveFilters ? 'primary' : 'default'}\n onClick={onFilterClick}\n size=\"small\"\n aria-label=\"Filtrar\"\n sx={{ overflow: 'visible' }}\n >\n <Icon icon=\"FILTER_VERTICAL\" />\n </IconButton>\n </Badge>\n\n <ToolbarActionsDivider\n sx={{ height: 16 }}\n orientation=\"vertical\"\n flexItem\n />\n\n <IconButton\n color={sort ? 'primary' : 'default'}\n onClick={onSortClick}\n size=\"small\"\n aria-label=\"Ordenar\"\n >\n <Icon\n icon={sort?.sortType === 'DESC' ? 'SORTING_DESC' : 'SORTING_ASC'}\n />\n </IconButton>\n </Stack>\n );\n }\n\n return (\n <Badge\n badgeContent={activeFiltersCount}\n color=\"primary\"\n invisible={activeFiltersCount === 0}\n sx={{\n '& .MuiBadge-badge': activeFiltersCount\n ? {\n transform: 'scale(0.9) translate(-3px, 7px)',\n position: 'relative',\n opacity: 1,\n transition: 'none',\n }\n : {\n transition: 'none',\n opacity: 0,\n },\n }}\n >\n <Button\n variant=\"text\"\n color={hasActiveFilters ? 'primary' : 'inherit'}\n startIcon={<Icon icon=\"FILTER_VERTICAL\" />}\n onClick={onFilterClick}\n size=\"small\"\n >\n Filtrar\n </Button>\n </Badge>\n );\n};\n\nexport default memo(FilterButton, isEqual);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\n\nimport { FiltersSectionProps } from '../props';\n\nimport FiltersContainer from './filters/FiltersContainer';\n\nconst FiltersSection = ({\n showFilterButton,\n isOpen,\n filterAnchorEl,\n fields,\n conditions,\n isMobile,\n onClose,\n onAddCondition,\n onUpdateCondition,\n onRemoveCondition,\n onApply,\n onClear,\n onCancel,\n entityFilterConfig,\n}: FiltersSectionProps) => {\n if (!showFilterButton) return null;\n\n return (\n <FiltersContainer\n open={isOpen || Boolean(filterAnchorEl)}\n anchorEl={filterAnchorEl}\n onClose={onClose}\n fields={fields}\n conditions={conditions}\n onAddCondition={onAddCondition}\n onUpdateCondition={onUpdateCondition}\n onRemoveCondition={onRemoveCondition}\n onApply={onApply}\n onClear={onClear}\n onCancel={onCancel}\n isMobileProp={isMobile}\n entityFilterConfig={entityFilterConfig}\n />\n );\n};\n\nexport default memo(FiltersSection, isEqual);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\n\nimport ResponsivePopover from 'components/ResponsivePopover';\n\nimport FiltersContent from './FiltersContent';\nimport type { FiltersContainerProps } from './props';\n\nconst FiltersContainer = (props: FiltersContainerProps) => {\n return (\n <ResponsivePopover\n open={props.open}\n onClose={props.onClose}\n anchorEl={props.anchorEl}\n isMobile={props.isMobileProp}\n popoverProps={{\n slotProps: {\n paper: {\n sx: {\n width: 520,\n maxWidth: 'calc(100vw - 24px)',\n maxHeight: 600,\n mt: 1,\n },\n },\n },\n }}\n drawerProps={{\n anchor: 'right',\n PaperProps: {\n sx: {\n width: '100%',\n maxWidth: '100%',\n height: '100%',\n maxHeight: '100%',\n borderRadius: 0,\n },\n },\n }}\n >\n <FiltersContent {...props} />\n </ResponsivePopover>\n );\n};\n\nexport default memo(FiltersContainer, isEqual);\n","import { memo, useCallback } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Button from '@mui/material/Button';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nimport { getFilterableFields } from '../../utils/filter';\n\nimport FiltersList from './FiltersList';\nimport type { FiltersPopoverProps } from './props';\nimport { Container, Content, Footer, Header } from './styles';\n\nconst FiltersContent = ({\n onClose,\n fields,\n conditions,\n onAddCondition,\n onUpdateCondition,\n onRemoveCondition,\n onApply,\n onClear,\n onCancel,\n entityFilterConfig,\n}: FiltersPopoverProps) => {\n const filterableFields = getFilterableFields(fields);\n const hasConditions = conditions.length > 0;\n\n const handleApply = useCallback(() => {\n onApply();\n onClose();\n }, [onApply, onClose]);\n\n const handleClear = useCallback(() => {\n onClear();\n onClose();\n }, [onClear, onClose]);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n return (\n <Container>\n <Header>\n <Typography variant=\"overline\" fontWeight={600} color=\"text.secondary\">\n Defina as condições para filtrar\n </Typography>\n\n <IconButton\n onClick={onAddCondition}\n size=\"small\"\n aria-label=\"Adicionar filtro\"\n title=\"Adicionar filtro\"\n disabled={conditions.length >= filterableFields.length}\n >\n <Icon icon=\"SIMPLE_ADD\" />\n </IconButton>\n </Header>\n\n <Divider />\n\n <Content>\n <FiltersList\n filterableFields={filterableFields}\n conditions={conditions}\n onUpdateCondition={onUpdateCondition}\n onRemoveCondition={onRemoveCondition}\n entityFilterConfig={entityFilterConfig}\n />\n </Content>\n\n <Divider />\n\n <Footer>\n <Button variant=\"text\" color=\"inherit\" onClick={handleClear}>\n Limpar\n </Button>\n\n <Stack direction=\"row\" spacing={1}>\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n onClick={handleCancel}\n startIcon={<Icon icon=\"CANCEL_CIRCLE\" />}\n >\n Cancelar\n </Button>\n <Button\n variant=\"contained\"\n onClick={handleApply}\n disabled={!hasConditions}\n startIcon={<Icon icon=\"SIMPLE_CHECK\" />}\n >\n Aplicar\n </Button>\n </Stack>\n </Footer>\n </Container>\n );\n};\n\nexport default memo(FiltersContent, isEqual);\n","import { Condition, DataType, Field } from 'model/entity-metadata';\nimport {\n Filter,\n FilterCondition,\n FilterOperator,\n FilterState,\n} from 'model/filter';\n\n/**\n * Campos filtráveis (campos com condições disponíveis)\n */\nexport const getFilterableFields = (fields: Field[]): Field[] => {\n return fields.filter(\n field =>\n field.available_filter_conditions &&\n field.available_filter_conditions.length > 0 &&\n field.name !== 'ACTIONS',\n );\n};\n\n/**\n * Converte FilterState para formato de API\n */\nexport const buildFilterFromState = (\n state: FilterState,\n): Filter | undefined => {\n const entries = Object.entries(state).filter(\n ([, value]) => value.value.length > 0,\n );\n if (entries.length === 0) return undefined;\n return {\n operator: FilterOperator.AND,\n groups: [\n {\n operator: FilterOperator.AND,\n conditionals: entries.map(([, filterValue]) => ({\n fieldName: filterValue.fieldName,\n conditional: filterValue.conditional,\n value: filterValue.value,\n })),\n },\n ],\n };\n};\n\n/**\n * Retorna o conditional padrão para um tipo de campo\n */\nexport const getDefaultCondition = (field: Field): Condition => {\n const { type, available_filter_conditions } = field;\n if (available_filter_conditions.length === 0) return Condition.EQUALS;\n if (\n type === DataType.TEXT &&\n available_filter_conditions.includes(Condition.LIKE)\n ) {\n return Condition.LIKE;\n }\n return available_filter_conditions[0];\n};\n\n/**\n * Verifica se uma condição é válida (tem valor ou não requer valor)\n */\nexport const isValidCondition = (condition: FilterCondition): boolean => {\n return (\n condition.value.length > 0 ||\n condition.conditional === Condition.IS_NULL ||\n condition.conditional === Condition.IS_NOT_NULL\n );\n};\n\n/**\n * Converte array de FilterCondition para Filter API\n */\nexport const buildFilterFromConditions = (\n conditions: FilterCondition[],\n): Filter | undefined => {\n if (conditions.length === 0) return undefined;\n\n const validConditions = conditions.filter(isValidCondition);\n if (validConditions.length === 0) return undefined;\n\n return {\n operator: FilterOperator.AND,\n groups: [\n {\n operator: validConditions[0]?.operator || FilterOperator.AND,\n conditionals: validConditions.map(c => ({\n fieldName: c.fieldName,\n conditional: c.conditional,\n value: c.value,\n valueLabels: c.valueLabels,\n })),\n },\n ],\n };\n};\n","import { memo, useCallback, useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Typography from '@mui/material/Typography';\nimport type { FilterCondition } from 'model/filter';\n\nimport FilterRow from './FilterRow';\nimport type { FiltersListProps } from './props';\n\nconst FiltersList = ({\n filterableFields,\n conditions,\n onUpdateCondition,\n onRemoveCondition,\n entityFilterConfig,\n}: FiltersListProps) => {\n const handleUpdateCondition = useCallback(\n (updated: FilterCondition) => {\n onUpdateCondition(updated.id, updated);\n },\n [onUpdateCondition],\n );\n\n const handleRemoveCondition = useCallback(\n (id: string) => () => {\n onRemoveCondition(id);\n },\n [onRemoveCondition],\n );\n\n const usedFieldNames = useMemo(\n () =>\n conditions.map(c => c.fieldName).filter((name): name is string => !!name),\n [conditions],\n );\n\n const getAvailableFields = useCallback(\n (currentFieldName: string | undefined) =>\n filterableFields.filter(\n field =>\n !usedFieldNames.includes(field.name) ||\n field.name === currentFieldName,\n ),\n [filterableFields, usedFieldNames],\n );\n\n if (filterableFields.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n Nenhum filtro disponível\n </Typography>\n );\n }\n\n if (conditions.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n Clique em{' '}\n <Typography\n component=\"strong\"\n variant=\"body2\"\n fontWeight={600}\n color=\"text.primary\"\n >\n &quot;+&quot;\n </Typography>{' '}\n para adicionar um filtro\n </Typography>\n );\n }\n\n return (\n <>\n {conditions.map((condition, index) => (\n <FilterRow\n key={condition.id}\n condition={condition}\n fields={getAvailableFields(condition.fieldName)}\n onChange={handleUpdateCondition}\n onRemove={handleRemoveCondition(condition.id)}\n showOperator={index > 0}\n totalConditions={conditions.length}\n isFirst={index === 0}\n entityFilterConfig={entityFilterConfig}\n />\n ))}\n </>\n );\n};\n\nexport default memo(FiltersList, isEqual);\n","import { memo, useCallback, useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport FormControl from '@mui/material/FormControl';\nimport IconButton from '@mui/material/IconButton';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\nimport { Condition } from 'model/entity-metadata';\nimport { FilterOperator } from 'model/filter';\n\nimport Icon from 'components/Icon';\n\nimport { CONDITION_LABELS } from '../../constants/filter';\n\nimport EntityFilter from './EntityFilter';\nimport OperatorSelect from './OperatorSelect';\nimport type { FilterRowProps } from './props';\n\nconst ellipsisStyle = {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n} as const;\n\nconst FilterRow = ({\n condition,\n fields,\n onChange,\n onRemove,\n totalConditions,\n isFirst,\n entityFilterConfig,\n}: FilterRowProps) => {\n const selectedField = useMemo(\n () =>\n fields.find(f => (f.filter_field_name ?? f.name) === condition.fieldName),\n [fields, condition.fieldName],\n );\n\n const availableConditions = useMemo(\n () => selectedField?.available_filter_conditions || [],\n [selectedField],\n );\n\n const isValueDisabled = useMemo(\n () =>\n !condition.fieldName ||\n condition.conditional === 'IS_NULL' ||\n condition.conditional === 'IS_NOT_NULL',\n [condition.fieldName, condition.conditional],\n );\n\n const handleFieldChange = useCallback(\n (fieldName: string) => {\n const newField = fields.find(\n f => (f.filter_field_name ?? f.name) === fieldName,\n );\n if (!newField) return;\n\n const defaultCondition =\n newField.available_filter_conditions[0] || 'EQUALS';\n\n onChange({\n ...condition,\n fieldName,\n conditional: defaultCondition,\n value: [],\n });\n },\n [fields, condition, onChange],\n );\n\n const handleConditionChange = useCallback(\n (conditional: Condition) => {\n onChange({\n ...condition,\n conditional,\n });\n },\n [condition, onChange],\n );\n\n const handleValueChange = useCallback(\n (value: string) => {\n onChange({\n ...condition,\n value: value ? [value] : [],\n });\n },\n [condition, onChange],\n );\n\n const handleEntityValueChange = useCallback(\n (value: string, label?: string) => {\n const valueLabels = { ...condition.valueLabels };\n if (value && label) {\n valueLabels[value] = label;\n }\n onChange({\n ...condition,\n value: value ? [value] : [],\n valueLabels,\n });\n },\n [condition, onChange],\n );\n\n const handleOperatorChange = useCallback(\n (operator: FilterOperator) => {\n onChange({\n ...condition,\n operator,\n });\n },\n [condition, onChange],\n );\n\n const renderValueInput = () => {\n if (selectedField?.type === 'BOOLEAN') {\n return (\n <FormControl\n size=\"small\"\n sx={{ flex: 1, minWidth: 120 }}\n disabled={isValueDisabled}\n >\n <InputLabel id={`value-label-${condition.id}`}>Valor</InputLabel>\n <Select\n labelId={`value-label-${condition.id}`}\n label=\"Valor\"\n value={condition.value[0] || ''}\n onChange={e => handleValueChange(e.target.value)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n <MenuItem value=\"true\">Verdadeiro</MenuItem>\n <MenuItem value=\"false\">Falso</MenuItem>\n </Select>\n </FormControl>\n );\n }\n\n if (\n selectedField?.type === 'ENTITY' &&\n selectedField.metadata &&\n entityFilterConfig?.[selectedField.metadata.name]\n ) {\n const currentValue = condition.value[0] || '';\n\n return (\n <EntityFilter\n config={entityFilterConfig[selectedField.metadata.name]}\n metadata={selectedField.metadata}\n value={currentValue}\n initialLabel={condition.valueLabels?.[currentValue]}\n onChange={handleEntityValueChange}\n disabled={isValueDisabled}\n />\n );\n }\n\n return (\n <TextField\n label=\"Filtro\"\n value={condition.value[0] || ''}\n onChange={e => handleValueChange(e.target.value)}\n size=\"small\"\n disabled={isValueDisabled}\n InputLabelProps={{ shrink: true }}\n sx={{ flex: 1, minWidth: 120 }}\n />\n );\n };\n\n return (\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <IconButton\n onClick={onRemove}\n size=\"small\"\n aria-label=\"Remover filtro\"\n sx={{ flexShrink: 0 }}\n >\n <Icon icon=\"CLOSE_MARK_BUTTON\" width={18} />\n </IconButton>\n\n <OperatorSelect\n value={condition.operator}\n onChange={handleOperatorChange}\n totalConditions={totalConditions}\n isFirst={isFirst}\n />\n\n <FormControl size=\"small\" sx={{ minWidth: 150, flex: 1 }}>\n <InputLabel id={`field-label-${condition.id}`}>Coluna</InputLabel>\n <Select\n labelId={`field-label-${condition.id}`}\n label=\"Coluna\"\n value={condition.fieldName}\n onChange={e => handleFieldChange(e.target.value)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n {fields.map(field => (\n <MenuItem\n key={field.name}\n value={field.filter_field_name ?? field.name}\n sx={ellipsisStyle}\n title={field.description || field.name}\n >\n {field.description || field.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n <FormControl\n size=\"small\"\n sx={{ minWidth: 90 }}\n disabled={!condition.fieldName}\n >\n <InputLabel id={`condition-label-${condition.id}`}>Condição</InputLabel>\n <Select\n labelId={`condition-label-${condition.id}`}\n label=\"Condição\"\n value={condition.conditional}\n onChange={e => handleConditionChange(e.target.value as Condition)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n {availableConditions.map(cond => (\n <MenuItem key={cond} value={cond} sx={ellipsisStyle}>\n {CONDITION_LABELS[cond as Condition] || cond}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n {renderValueInput()}\n </Stack>\n );\n};\n\nexport default memo(FilterRow, isEqual);\n","import { Condition } from 'model/entity-metadata';\n\nexport const CONDITION_LABELS: Record<Condition, string> = {\n [Condition.EQUALS]: 'Igual a',\n [Condition.NOT_EQUALS]: 'Diferente de',\n [Condition.LIKE]: 'Contém',\n [Condition.NOT_LIKE]: 'Não contém',\n [Condition.GREATER_THAN]: 'Maior que',\n [Condition.LESS_THAN]: 'Menor que',\n [Condition.GREATER_THAN_OR_EQUAL]: 'Maior ou igual a',\n [Condition.LESS_THAN_OR_EQUAL]: 'Menor ou igual a',\n [Condition.IN]: 'Em',\n [Condition.NOT_IN]: 'Não em',\n [Condition.IS_NULL]: 'É nulo',\n [Condition.IS_NOT_NULL]: 'Não é nulo',\n};\n","import { memo, useCallback, useMemo, useState } from 'react';\n\nimport Autocomplete from 'components/Autocomplete';\nimport useDebounceValue from 'hooks/useDebounceValue';\nimport useToggle from 'hooks/useToggle';\n\nimport type { EntityFilterOption, EntityFilterProps } from './props';\n\nconst EntityFilter = ({\n config,\n metadata,\n value,\n initialLabel,\n onChange,\n disabled = false,\n}: EntityFilterProps) => {\n const [open, toggleOpen, setOpen] = useToggle(false);\n const [inputValue, setInputValue] = useState('');\n const debouncedSearch = useDebounceValue(inputValue, 400);\n\n const { data, isLoading, isFetching } = config.useQuery(\n {\n search: debouncedSearch || undefined,\n page: 0,\n perPage: 25,\n ...config.queryParams,\n },\n {\n skip: !open,\n },\n );\n\n const loading = isLoading || isFetching;\n\n const selectedOption = useMemo<EntityFilterOption | null>(() => {\n if (!value) return null;\n return { value, label: initialLabel ?? value };\n }, [value, initialLabel]);\n\n const options = useMemo(() => {\n const items = (data?.items ?? [])\n .map(item => ({\n label: String(item[metadata.description_field_name] ?? ''),\n value: String(item[metadata.id_field_name] ?? ''),\n }))\n .filter(opt => opt.value && opt.label);\n\n if (\n selectedOption &&\n !items.some(opt => opt.value === selectedOption.value)\n ) {\n items.unshift(selectedOption);\n }\n\n return items;\n }, [\n data,\n metadata.id_field_name,\n metadata.description_field_name,\n selectedOption,\n ]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n setInputValue('');\n }, [setOpen]);\n\n const handleChange = useCallback(\n (newValue: unknown) => {\n if (typeof newValue !== 'string' || !newValue) {\n onChange('', undefined);\n return;\n }\n const option = options.find(opt => opt.value === newValue);\n onChange(newValue, option?.label);\n },\n [onChange, options],\n );\n\n const handleInputChange = useCallback(\n (_event: React.SyntheticEvent, newInputValue: string, reason: string) => {\n if (reason === 'input') {\n setInputValue(newInputValue);\n }\n },\n [],\n );\n\n return (\n <Autocomplete\n name={`entity-filter-${metadata.name}`}\n label=\"Filtro\"\n open={open}\n onOpen={toggleOpen}\n onClose={handleClose}\n value={value || ''}\n onChange={handleChange}\n inputValue={open ? inputValue : (selectedOption?.label ?? '')}\n onInputChange={handleInputChange}\n options={options}\n loading={loading}\n disabled={disabled}\n size=\"small\"\n filterOptions={x => x}\n noOptionsText={\n inputValue !== debouncedSearch ? 'Buscando...' : 'Nenhum resultado'\n }\n sx={{ flex: 1, minWidth: 120 }}\n />\n );\n};\n\nexport default memo(EntityFilter);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport { FilterOperator } from 'model/filter';\n\nimport type { OperatorSelectProps } from './props';\n\nconst OperatorSelect = ({\n value,\n onChange,\n totalConditions,\n isFirst,\n}: OperatorSelectProps) => {\n if (totalConditions === 1) {\n return null;\n }\n\n if (isFirst) {\n return <Stack sx={{ width: 55, flexShrink: 0 }} />;\n }\n\n return (\n <Select\n value={value}\n onChange={e => onChange(e.target.value as FilterOperator)}\n size=\"small\"\n sx={{ width: 55, flexShrink: 0 }}\n >\n <MenuItem value={FilterOperator.AND}>e</MenuItem>\n <MenuItem value={FilterOperator.OR}>ou</MenuItem>\n </Select>\n );\n};\n\nexport default memo(OperatorSelect, isEqual);\n","import Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\n// Estilos baseados no Drawer/Popover para garantir consistência\nexport const Container = styled(Box)({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n // No popover, a altura será controlada pelo max-height do container\n});\n\nexport const Header = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2, 3),\n}));\n\nexport const Content = styled(Box)(({ theme }) => ({\n flex: 1,\n overflowY: 'auto',\n padding: theme.spacing(3),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nexport const Footer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2),\n}));\n","import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport Button from '@mui/material/Button';\nimport FormControl from '@mui/material/FormControl';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { SortType } from 'model/filter';\n\nimport Icon from 'components/Icon';\n\nimport { SortModalProps } from './props';\nimport {\n ApplyButton,\n LabelButton,\n StyledDialog,\n StyledDialogActions,\n StyledDialogContent,\n StyledDialogTitle,\n} from './style';\n\nconst SortModal = ({\n open,\n onClose,\n fields,\n sort,\n onSortChange,\n}: SortModalProps) => {\n const [selectedField, setSelectedField] = useState<string>(\n sort?.fieldName || '',\n );\n const [selectedDirection, setSelectedDirection] = useState<SortType>(\n sort?.sortType || SortType.ASC,\n );\n\n const sortableFields = useMemo(\n () =>\n fields.filter(\n field => field.name !== 'ACTIONS' && field.access_type !== 'WRITE_ONLY',\n ),\n [fields],\n );\n\n const selectedFieldObj = useMemo(\n () =>\n fields.find(\n field => (field.filter_field_name ?? field.name) === selectedField,\n ),\n [fields, selectedField],\n );\n\n const isNumberField =\n selectedFieldObj?.type === 'DECIMAL' ||\n selectedFieldObj?.type === 'INTEGER';\n\n useEffect(() => {\n if (open) {\n setSelectedField(sort?.fieldName || '');\n setSelectedDirection(sort?.sortType || SortType.ASC);\n }\n }, [open, sort]);\n\n const handleApply = useCallback(() => {\n if (onSortChange) {\n if (!selectedField) {\n onSortChange(undefined);\n } else {\n onSortChange({\n fieldName: selectedField,\n sortType: selectedDirection,\n });\n }\n }\n onClose();\n }, [onSortChange, selectedField, selectedDirection, onClose]);\n\n const handleClear = useCallback(() => {\n if (!onSortChange) return;\n\n setSelectedField('');\n setSelectedDirection(SortType.ASC);\n\n onSortChange(undefined);\n onClose();\n }, [onSortChange, onClose]);\n\n return (\n <StyledDialog open={open} onClose={onClose} maxWidth=\"xs\" fullWidth>\n <StyledDialogTitle>\n <Typography variant=\"overline\" color=\"text.secondary\">\n Ordenar por\n </Typography>\n </StyledDialogTitle>\n <StyledDialogContent>\n <Stack spacing={2} pt={2}>\n <FormControl fullWidth size=\"small\">\n <InputLabel id=\"sort-field-label\">Campo</InputLabel>\n <Select\n labelId=\"sort-field-label\"\n value={selectedField}\n label=\"Campo\"\n onChange={e => setSelectedField(e.target.value)}\n >\n <MenuItem value=\"\">\n <em>Nenhum</em>\n </MenuItem>\n {sortableFields.map(field => (\n <MenuItem\n key={field.name}\n value={field.filter_field_name ?? field.name}\n >\n {field.description || field.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl fullWidth size=\"small\" disabled={!selectedField}>\n <InputLabel id=\"sort-direction-label\">Direção</InputLabel>\n <Select\n labelId=\"sort-direction-label\"\n value={selectedDirection}\n label=\"Direção\"\n onChange={e => setSelectedDirection(e.target.value as SortType)}\n >\n <MenuItem value={SortType.ASC}>\n Crescente {isNumberField ? '(1-9)' : '(A-Z)'}\n </MenuItem>\n <MenuItem value={SortType.DESC}>\n Decrescente {isNumberField ? '(9-1)' : '(Z-A)'}\n </MenuItem>\n </Select>\n </FormControl>\n </Stack>\n </StyledDialogContent>\n <StyledDialogActions>\n <Stack flex={1} width=\"100%\" direction=\"row\">\n <Button color=\"inherit\" onClick={handleClear}>\n Limpar\n </Button>\n </Stack>\n <Button\n onClick={onClose}\n variant=\"outlined\"\n color=\"inherit\"\n sx={{ minWidth: 24 }}\n >\n <Icon icon=\"CANCEL_CIRCLE\" />\n <LabelButton>Cancelar</LabelButton>\n </Button>\n <ApplyButton onClick={handleApply} variant=\"contained\">\n <Icon icon=\"SIMPLE_CHECK\" />\n <LabelButton>Aplicar</LabelButton>\n </ApplyButton>\n </StyledDialogActions>\n </StyledDialog>\n );\n};\n\nSortModal.displayName = 'SortModal';\n\nexport default memo(SortModal);\n","import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\n\nexport const StyledDialog = styled(Dialog)(() => ({\n '& .MuiDialog-paper': { width: '100%' },\n}));\n\nexport const StyledDialogTitle = styled(DialogTitle)(({ theme }) => ({\n borderBottom: '1px solid',\n borderColor: theme.palette.divider,\n padding: theme.spacing(1.5, 2),\n}));\n\nexport const StyledDialogContent = styled(DialogContent)(({ theme }) => ({\n padding: theme.spacing(2),\n}));\n\nexport const StyledDialogActions = styled(DialogActions)(({ theme }) => ({\n borderTop: '1px solid',\n borderColor: theme.palette.divider,\n padding: theme.spacing(1.5, 2),\n}));\n\nexport const ApplyButton = styled(Button)(({ theme }) => ({\n minWidth: 24,\n [theme.breakpoints.down(330)]: {\n padding: theme.spacing(1),\n },\n}));\n\nexport const LabelButton = styled(Typography)(({ theme }) => ({\n fontWeight: '600',\n margin: theme.spacing(0, 1),\n [theme.breakpoints.down(330)]: {\n fontSize: 0,\n margin: 0,\n },\n}));\n","import { useMemo } from 'react';\nimport type { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { UseColumnOrderingParams } from '../props';\n\nexport const useColumnOrdering = ({\n columns,\n fields,\n preferredFieldOrder,\n}: UseColumnOrderingParams) => {\n const columnsByFieldId = useMemo(\n () => new Map(columns.map(column => [column.field, column])),\n [columns],\n );\n\n const fieldsByName = useMemo(\n () => new Map(fields?.map(f => [f.name, f]) || []),\n [fields],\n );\n\n const orderedColumns = useMemo(() => {\n if (!preferredFieldOrder || preferredFieldOrder.length === 0 || !fields) {\n return columns;\n }\n\n const actionFieldName = 'ACTIONS';\n const preferredWithoutActions = preferredFieldOrder.filter(\n fieldName => fieldName !== actionFieldName,\n );\n\n const usedColumnFieldIds = new Set<string>();\n const ordered: GridColDef[] = [];\n\n const pushColumnForField = (fieldName: string) => {\n const field = fieldsByName.get(fieldName);\n if (!field) return;\n\n const column = columnsByFieldId.get(field.name);\n\n if (!column || usedColumnFieldIds.has(field.name)) return;\n\n ordered.push(column);\n usedColumnFieldIds.add(field.name);\n };\n\n preferredWithoutActions.forEach(fieldName => {\n pushColumnForField(fieldName);\n });\n\n fields.forEach(field => {\n if (field.name === actionFieldName) return;\n if (preferredWithoutActions.includes(field.name)) return;\n\n const column = columnsByFieldId.get(field.name);\n\n if (!column || usedColumnFieldIds.has(field.name)) return;\n\n ordered.push(column);\n usedColumnFieldIds.add(field.name);\n });\n\n pushColumnForField(actionFieldName);\n\n return ordered.length === 0 ? columns : ordered;\n }, [columns, columnsByFieldId, fieldsByName, preferredFieldOrder, fields]);\n\n return { orderedColumns, columnsByFieldId, fieldsByName };\n};\n","import { useCallback, useMemo } from 'react';\nimport type { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\nimport { Field } from 'model/entity-metadata';\n\nimport useLocalStorage from 'hooks/useLocalStorage';\n\nimport { UseColumnVisibilityParams } from '../props';\n\nfunction getColumnFieldIdFromField(field: Field): string {\n return field.name;\n}\n\nexport const useColumnVisibility = ({\n fields,\n columnsByFieldId,\n defaultVisibleFieldNames,\n columnVisibilityStorageKey,\n onColumnVisibilityModelChange,\n}: UseColumnVisibilityParams) => {\n const hasStorageKey = Boolean(columnVisibilityStorageKey);\n\n const [storedVisibilityModel, setStoredVisibilityModel] = useLocalStorage<\n GridColumnVisibilityModel | undefined\n >(columnVisibilityStorageKey || '__dynamic-data-view:columns__', undefined, {\n initializeWithValue: hasStorageKey,\n });\n\n const initialState = useMemo(() => {\n if (!fields) return undefined;\n\n const visibilityModel: GridColumnVisibilityModel = {};\n\n fields.forEach(field => {\n const columnFieldId = getColumnFieldIdFromField(field);\n if (!columnsByFieldId.has(columnFieldId)) return;\n\n let visible: boolean | undefined;\n\n if (hasStorageKey && storedVisibilityModel) {\n const stored = storedVisibilityModel[columnFieldId];\n if (typeof stored === 'boolean') {\n visible = stored;\n }\n }\n\n if (\n visible === undefined &&\n defaultVisibleFieldNames &&\n defaultVisibleFieldNames.length > 0\n ) {\n visible = defaultVisibleFieldNames.includes(field.name);\n }\n\n if (typeof visible === 'boolean') {\n visibilityModel[columnFieldId] = visible;\n }\n });\n\n if (Object.keys(visibilityModel).length === 0) return undefined;\n\n return {\n columns: {\n columnVisibilityModel: visibilityModel,\n },\n };\n }, [\n columnsByFieldId,\n defaultVisibleFieldNames,\n fields,\n hasStorageKey,\n storedVisibilityModel,\n ]);\n\n const handleColumnVisibilityModelChange = useCallback(\n (model: GridColumnVisibilityModel) => {\n if (hasStorageKey) {\n const modelToSave = { ...model };\n // Prevents __check__ (checkboxSelection column) from being permanently hidden in local storage\n delete modelToSave['__check__'];\n setStoredVisibilityModel(modelToSave);\n }\n\n if (onColumnVisibilityModelChange) {\n onColumnVisibilityModelChange(model);\n }\n },\n [hasStorageKey, onColumnVisibilityModelChange, setStoredVisibilityModel],\n );\n\n return {\n initialState,\n handleColumnVisibilityModelChange,\n };\n};\n","import { useMemo } from 'react';\nimport { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { Columns } from 'types/datagrid';\n\nimport { ACCESS_TYPES } from '../constants/columnDefaults';\nimport { UseDynamicColumnsProps } from '../props';\nimport { getColumnStrategy } from '../utils/columnStrategies';\n\nexport const useDynamicColumns = <T extends object>({\n metadata,\n renderCell,\n columnStrategies,\n}: UseDynamicColumnsProps<T>): Columns => {\n return useMemo(() => {\n if (!metadata?.fields) return [];\n\n const columnsMap = new Map<string, GridColDef>();\n\n const visibleFields = metadata.fields.filter(field => {\n if (\n field.access_type === ACCESS_TYPES.READ_ONLY ||\n field.access_type === ACCESS_TYPES.READ_AND_WRITE\n ) {\n return true;\n }\n\n return (\n field.name === 'ACTIONS' ||\n field.name === metadata?.id_field_name ||\n field.name === 'NAME'\n );\n });\n\n visibleFields.forEach(field => {\n if (columnsMap.has(field.name)) {\n return;\n }\n\n const strategy =\n columnStrategies?.[field.name] ?? getColumnStrategy<T>(field, metadata);\n const column = strategy(field, renderCell, metadata);\n\n columnsMap.set(field.name, column);\n });\n\n return Array.from(columnsMap.values());\n }, [columnStrategies, metadata, renderCell]);\n};\n","export const COLUMN_DEFAULTS = {\n IMAGE_WIDTH: 90,\n MIN_WIDTH: 130,\n ENTITY_MIN_WIDTH: 100,\n ENTITY_FLEX: 0.5,\n ID_MIN_WIDTH: 200,\n ID_FLEX: 1,\n ACTIONS_WIDTH: 80,\n} as const;\n\nexport const ACCESS_TYPES = {\n READ_ONLY: 'READ_ONLY',\n READ_AND_WRITE: 'READ_AND_WRITE',\n} as const;\n\nexport const CURRENCY_FIELD_NAMES: readonly string[] = [\n 'price',\n 'base_price',\n 'minimum_value',\n 'maximum_value',\n 'minimum_installment_value',\n];\n","import { GridColDef, GridRenderCellParams } from '@mui/x-data-grid-premium';\nimport { Field } from 'model/entity-metadata';\n\nimport { COLUMN_DEFAULTS } from '../constants/columnDefaults';\nimport { CellRenderer, ColumnStrategy, DynamicRowData } from '../props';\n\nconst createImageColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n sortable: false,\n width: COLUMN_DEFAULTS.IMAGE_WIDTH,\n resizable: false,\n headerAlign: 'center',\n align: 'center',\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createIdColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.ID_MIN_WIDTH,\n flex: COLUMN_DEFAULTS.ID_FLEX,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createEntityColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.ENTITY_MIN_WIDTH,\n flex: COLUMN_DEFAULTS.ENTITY_FLEX,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createDefaultColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.MIN_WIDTH,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createActionsColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: 'Ações',\n width: COLUMN_DEFAULTS.ACTIONS_WIDTH,\n sortable: false,\n resizable: false,\n disableReorder: true,\n headerAlign: 'center',\n disableColumnMenu: true,\n align: 'center',\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nexport const getColumnStrategy = <T extends object>(\n field: Field,\n metadata?: { id_field_name?: string },\n): ColumnStrategy<T> => {\n if (field.name === metadata?.id_field_name || field.name === 'name') {\n return createIdColumn;\n }\n\n if (field.name === 'ACTIONS') {\n return createActionsColumn;\n }\n\n if (field.type === 'FILE') {\n return createImageColumn;\n }\n\n if (field.type === 'ENTITY') {\n return createEntityColumn;\n }\n\n return createDefaultColumn;\n};\n","import { useCallback, useRef, useState } from 'react';\nimport {\n type Filter,\n type FilterCondition,\n FilterOperator,\n} from 'model/filter';\n\nimport uuidv4 from 'utils/uuidv4';\n\nimport { UseFiltersProps, UseFiltersReturn } from '../props';\nimport {\n buildFilterFromConditions,\n getDefaultCondition,\n isValidCondition,\n} from '../utils/filter';\n\n// Converte filtro inicial em condições\nconst parseInitialConditions = (initialFilter?: Filter): FilterCondition[] => {\n if (!initialFilter?.groups?.[0]?.conditionals) return [];\n return initialFilter.groups[0].conditionals.map(cond => ({\n id: uuidv4(),\n operator: initialFilter.groups[0].operator,\n fieldName: cond.fieldName,\n conditional: cond.conditional,\n value: cond.value,\n valueLabels: cond.valueLabels,\n }));\n};\n\n/**\n * Hook para gerenciar estado de filtros do DynamicDataView com condições dinâmicas\n *\n * - conditions: estado de edição (o que o usuário vê no popover)\n * - appliedConditions: estado aplicado (o que está efetivamente filtrando)\n * - hasActiveFilters/activeFiltersCount: calculados com base em appliedConditions\n */\nexport const useFilters = ({\n fields,\n initialFilter,\n}: UseFiltersProps): UseFiltersReturn => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Estado aplicado (efetivamente filtrando)\n const [appliedConditions, setAppliedConditions] = useState<FilterCondition[]>(\n () => parseInitialConditions(initialFilter),\n );\n const [appliedFilter, setAppliedFilter] = useState<Filter | undefined>(\n initialFilter,\n );\n\n // Estado de edição (o que o usuário vê/edita no popover)\n const [conditions, setConditions] = useState<FilterCondition[]>(() =>\n parseInitialConditions(initialFilter),\n );\n\n // Referência para snapshot antes de abrir o popover\n const snapshotRef = useRef<FilterCondition[]>([]);\n\n const openDrawer = useCallback(() => {\n // Salva snapshot das condições atuais (aplicadas) ao abrir\n snapshotRef.current = appliedConditions.map(c => ({ ...c }));\n // Sincroniza edição com aplicado ao abrir\n setConditions(appliedConditions.map(c => ({ ...c })));\n setIsOpen(true);\n }, [appliedConditions]);\n\n const closeDrawer = () => setIsOpen(false);\n\n const addCondition = useCallback(() => {\n const filterableFields = fields.filter(\n f => f.available_filter_conditions?.length > 0,\n );\n if (filterableFields.length === 0) return;\n\n const usedFieldNames = conditions.map(c => c.fieldName);\n const availableFields = filterableFields.filter(\n f => !usedFieldNames.includes(f.filter_field_name ?? f.name),\n );\n if (availableFields.length === 0) return;\n\n const currentOperator =\n conditions.length > 0 ? conditions[0].operator : FilterOperator.AND;\n const firstField = availableFields[0];\n const newCondition: FilterCondition = {\n id: uuidv4(),\n operator: currentOperator,\n fieldName: firstField.filter_field_name ?? firstField.name,\n conditional: getDefaultCondition(firstField),\n value: [],\n };\n\n setConditions(prev => [...prev, newCondition]);\n }, [fields, conditions]);\n\n const updateCondition = useCallback(\n (id: string, changes: Partial<FilterCondition>) => {\n setConditions(prev => {\n const targetCondition = prev.find(c => c.id === id);\n if (!targetCondition) return prev;\n\n if (changes.operator && changes.operator !== targetCondition.operator) {\n const newOperator = changes.operator;\n return prev.map(c => {\n if (c.id === id) {\n return { ...c, ...changes };\n }\n return { ...c, operator: newOperator };\n });\n }\n\n return prev.map(c => (c.id === id ? { ...c, ...changes } : c));\n });\n },\n [],\n );\n\n const removeCondition = useCallback((id: string) => {\n setConditions(prev => prev.filter(c => c.id !== id));\n }, []);\n\n const clearAllFilters = () => {\n setConditions([]);\n setAppliedConditions([]);\n setAppliedFilter(undefined);\n };\n\n const applyFilters = () => {\n const filter = buildFilterFromConditions(conditions);\n setAppliedConditions(conditions.map(c => ({ ...c })));\n setAppliedFilter(filter);\n setIsOpen(false);\n return filter;\n };\n\n const cancelChanges = () => {\n // Reverte para o snapshot salvo ao abrir\n setConditions(snapshotRef.current.map(c => ({ ...c })));\n setIsOpen(false);\n };\n\n // Calculado com base nos filtros APLICADOS (não em edição)\n const hasActiveFilters = appliedConditions.some(isValidCondition);\n const activeFiltersCount = appliedConditions.filter(isValidCondition).length;\n\n return {\n conditions,\n filter: appliedFilter,\n isOpen,\n hasActiveFilters,\n activeFiltersCount,\n openDrawer,\n closeDrawer,\n addCondition,\n updateCondition,\n removeCondition,\n clearAllFilters,\n applyFilters,\n cancelChanges,\n };\n};\n\nexport default useFilters;\n","import { useCallback, useEffect, useState } from 'react';\nimport { Filter, Sort } from 'model/filter';\n\nconst getStoredValue = <T>(key: string): T | undefined => {\n try {\n const item = localStorage.getItem(key);\n return item ? JSON.parse(item) : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst setStoredValue = <T>(key: string, value: T | undefined): void => {\n try {\n if (value === undefined) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch {\n // Silently ignore localStorage errors\n }\n};\n\nexport const useFilterStorage = (\n storageKey: string,\n externalFilter?: Filter,\n onFilterChange?: (filter: Filter | undefined) => void,\n) => {\n const filterKey = `${storageKey}:filter`;\n\n const [internalFilter, setInternalFilter] = useState<Filter | undefined>(\n () => {\n return getStoredValue<Filter>(filterKey) || externalFilter;\n },\n );\n\n // Sync with external filter\n useEffect(() => {\n if (externalFilter !== undefined) {\n setInternalFilter(externalFilter);\n }\n }, [externalFilter]);\n\n const handleFilterChange = useCallback(\n (newFilter: Filter | undefined) => {\n setInternalFilter(newFilter);\n setStoredValue(filterKey, newFilter);\n onFilterChange?.(newFilter);\n },\n [filterKey, onFilterChange],\n );\n\n return {\n filter: internalFilter,\n setFilter: handleFilterChange,\n };\n};\n\nexport const useSortStorage = (\n storageKey: string,\n externalSort?: Sort,\n onSortChange?: (sort: Sort | undefined) => void,\n) => {\n const sortKey = `${storageKey}:sort`;\n\n const [internalSort, setInternalSort] = useState<Sort | undefined>(() => {\n return getStoredValue<Sort>(sortKey) || externalSort;\n });\n\n // Sync with external sort\n useEffect(() => {\n if (externalSort !== undefined) {\n setInternalSort(externalSort);\n }\n }, [externalSort]);\n\n const handleSortChange = useCallback(\n (newSort: Sort | undefined) => {\n setInternalSort(newSort);\n setStoredValue(sortKey, newSort);\n onSortChange?.(newSort);\n },\n [sortKey, onSortChange],\n );\n\n return {\n sort: internalSort,\n setSort: handleSortChange,\n };\n};\n","import { useCallback, useMemo } from 'react';\nimport type { GridSortModel } from '@mui/x-data-grid-premium';\nimport { Field } from 'model/entity-metadata';\nimport { Sort, SortType } from 'model/filter';\n\nimport { UseSortingParams } from '../props';\n\n/**\n * Mapeia field.name (coluna do DataGrid) → filter_field_name (campo da API).\n * Usado quando o usuário clica no header da coluna para ordenar.\n */\nconst resolveApiFieldName = (\n fields: Field[] | undefined,\n fieldName: string,\n): string => {\n if (!fields) return fieldName;\n const field = fields.find(f => f.name === fieldName);\n return field?.filter_field_name ?? fieldName;\n};\n\n/**\n * Mapeia filter_field_name (campo da API) → field.name (coluna do DataGrid).\n * Usado para o sortModel destacar a coluna correta na UI.\n */\nconst resolveColumnFieldName = (\n fields: Field[] | undefined,\n fieldName: string,\n): string => {\n if (!fields) return fieldName;\n const field = fields.find(\n f => f.filter_field_name === fieldName || f.name === fieldName,\n );\n return field?.name ?? fieldName;\n};\n\nexport const useSorting = ({\n sort,\n onSortChange,\n fields,\n}: UseSortingParams) => {\n const sortModel: GridSortModel = useMemo(() => {\n if (!sort) return [];\n return [\n {\n field: resolveColumnFieldName(fields, sort.fieldName),\n sort: sort.sortType.toLowerCase() as 'asc' | 'desc',\n },\n ];\n }, [sort, fields]);\n\n const handleSortModelChange = useCallback(\n (model: GridSortModel) => {\n if (!onSortChange) return;\n\n const firstItem = model[0];\n if (!firstItem || !firstItem.sort) {\n onSortChange(undefined);\n return;\n }\n\n const newSort: Sort = {\n fieldName: resolveApiFieldName(fields, firstItem.field),\n sortType: firstItem.sort.toUpperCase() as SortType,\n };\n onSortChange(newSort);\n },\n [onSortChange, fields],\n );\n\n return {\n sortModel,\n handleSortModelChange,\n };\n};\n","import {\n AccessType,\n DataType,\n EntityMetadataResponse,\n Field,\n} from 'model/entity-metadata';\n\nexport const createActionsField = (): Field => ({\n name: 'ACTIONS',\n description: '',\n filter_field_name: null,\n type: DataType.TEXT,\n metadata: null,\n access_type: AccessType.READ_ONLY,\n relation_field_name: null,\n available_filter_conditions: [],\n});\n\nexport const addActionsFieldToMetadata = (\n metadata: EntityMetadataResponse,\n): EntityMetadataResponse => {\n const hasActionsField = metadata.fields.some(\n field => field.name === 'ACTIONS',\n );\n\n if (hasActionsField) {\n return metadata;\n }\n\n return {\n ...metadata,\n fields: [...metadata.fields, createActionsField()],\n };\n};\n","import { memo, ReactNode } from 'react';\n\nimport { DatePickerFormat, fDate } from 'utils/formatTime';\n\nimport type { DateRendererProps } from './props';\n\nconst DateRenderer = ({ value, format }: DateRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return fDate(value as DatePickerFormat, format);\n};\n\nexport default memo(DateRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { DatePickerFormat, fDateTime } from 'utils/formatTime';\n\nimport type { DateTimeRendererProps } from './props';\n\nconst DateTimeRenderer = ({\n value,\n format,\n}: DateTimeRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return fDateTime(value as DatePickerFormat, format);\n};\n\nexport default memo(DateTimeRenderer);\n","import { memo, ReactNode } from 'react';\nimport Chip from '@mui/material/Chip';\n\nimport { EntityRendererProps } from './props';\n\nconst EntityRenderer = ({ value, field }: EntityRendererProps): ReactNode => {\n if (!field.metadata || typeof value !== 'object' || value === null) {\n return value ? String(value) : '-';\n }\n\n const entityValue = (value as Record<string, unknown>)[\n field.metadata.description_field_name\n ];\n\n if (!entityValue) return null;\n\n return (\n <Chip\n label={String(entityValue)}\n variant=\"outlined\"\n size=\"small\"\n sx={{\n width: 'fit-content',\n color: 'text.secondary',\n borderColor: 'divider',\n borderRadius: 3,\n }}\n />\n );\n};\n\nexport default memo(EntityRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport Icon, { IconEnum } from '../../Icon';\n\nimport { IconRendererProps } from './props';\n\nconst IconRenderer = ({\n value,\n trueIcon = IconEnum.STAR_02,\n falseIcon = IconEnum.STAR,\n color = 'primary.main',\n width = 18,\n}: IconRendererProps): ReactNode => {\n return (\n <Icon icon={value ? trueIcon : falseIcon} color={color} width={width} />\n );\n};\n\nexport default memo(IconRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport Icon from 'components/Icon';\n\nimport { ImageRendererProps } from './props';\nimport { ImageContainer } from './style';\n\nconst ImageRenderer = ({\n imageResourceId,\n getImageUrl,\n size = 48,\n alt = 'Imagem',\n onClick,\n sx,\n}: ImageRendererProps): ReactNode => {\n const hasImage = !!imageResourceId;\n const imageUrl =\n hasImage && getImageUrl ? getImageUrl(imageResourceId) : undefined;\n const clickable = !!onClick;\n\n return (\n <ImageContainer\n size={size}\n noImage={!hasImage}\n clickable={clickable}\n onClick={onClick}\n sx={sx}\n >\n {imageUrl ? (\n <img src={imageUrl} alt={alt} />\n ) : (\n <Icon\n icon=\"SEARCH_IMAGE\"\n width={Math.round(size / 2)}\n color=\"text.disabled\"\n />\n )}\n </ImageContainer>\n );\n};\n\nexport default memo(ImageRenderer);\n","import Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\n// StatusRenderer styles\nexport interface StatusLabelProps {\n isActive: boolean;\n}\n\nexport const StatusLabel = styled('span')<StatusLabelProps>(\n ({ theme, isActive }) => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.spacing(0.2, 1),\n borderRadius: theme.shape.borderRadius,\n fontSize: '0.75rem',\n fontWeight: 600,\n width: 'fit-content',\n height: 'auto',\n lineHeight: '1.25rem',\n whiteSpace: 'nowrap',\n margin: 'auto',\n backgroundColor: isActive\n ? theme.palette.success.lighter || '#00A76F29'\n : theme.palette.warning.lighter || '#FF563029',\n color: isActive\n ? theme.palette.success.darker || '#007867'\n : theme.palette.warning.darker || '#B71D18',\n }),\n);\n\n// ImageRenderer styles\nexport interface ImageContainerProps {\n size: number;\n noImage: boolean;\n clickable: boolean;\n}\n\nexport const ImageContainer = styled(Box, {\n shouldForwardProp: prop =>\n !['size', 'noImage', 'clickable'].includes(prop as string),\n})<ImageContainerProps>(({ theme, size, noImage, clickable }) => ({\n width: size,\n height: size,\n minWidth: size,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n cursor: clickable ? 'pointer' : 'default',\n transition: 'opacity 0.2s ease-in-out',\n color: theme.palette.text.disabled,\n ...(noImage && {\n border: `1px dashed ${theme.palette.divider}`,\n backgroundColor: theme.palette.grey[100],\n }),\n ...(clickable && {\n '&:hover': {\n opacity: 0.8,\n },\n }),\n '& img': {\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n borderRadius: '50%',\n },\n [theme.breakpoints.down('sm')]: {\n justifyContent: 'flex-start',\n alignItems: 'flex-start',\n },\n}));\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport CopyButton from 'components/CopyButton';\n\nimport { NameRendererProps } from './props';\n\nconst NameRenderer = ({\n id,\n displayName,\n copyMessage = 'ID copiado!',\n}: NameRendererProps): ReactNode => {\n return (\n <Stack height={1} justifyContent=\"center\">\n <Typography variant=\"subtitle2\" noWrap title={displayName}>\n {displayName}\n </Typography>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography color=\"grey.600\" variant=\"body2\" noWrap>\n ID: {id}\n </Typography>\n <CopyButton toCopy={id} message={copyMessage} />\n </Stack>\n </Stack>\n );\n};\n\nexport default memo(NameRenderer);\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { fCurrencyBRL, fNumber } from 'utils/formatNumber';\n\nimport { NumberRendererProps } from './props';\n\nconst NumberRenderer = ({\n value,\n isCurrency = false,\n}: NumberRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return (\n <Stack direction=\"row\" alignItems=\"center\" height=\"100%\">\n <Typography variant=\"body2\" noWrap width=\"fit-content\">\n {isCurrency ? fCurrencyBRL(Number(value)) : fNumber(Number(value))}\n </Typography>\n </Stack>\n );\n};\n\nexport default memo(NumberRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { StatusRendererProps } from './props';\nimport { StatusLabel } from './style';\n\nconst StatusRenderer = ({\n active,\n activeLabel = 'Ativo',\n inactiveLabel = 'Inativo',\n}: StatusRendererProps): ReactNode => {\n return (\n <StatusLabel isActive={active}>\n {active ? activeLabel : inactiveLabel}\n </StatusLabel>\n );\n};\n\nexport default memo(StatusRenderer);\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport CopyButton from 'components/CopyButton';\n\nimport { TextRendererProps } from './props';\n\nconst sanitizeHtml = (text: string): string => {\n const withoutTags = text.replace(/<[^>]*>/g, '');\n return (\n withoutTags\n .replace(/&nbsp;/g, ' ')\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n // prettier-ignore\n .replace(/&#39;/g, '\\'')\n .trim()\n );\n};\n\nconst TextRenderer = ({\n value,\n showCopyButton = false,\n copyMessage = 'Copiado',\n copyLabel,\n mask,\n}: TextRendererProps): ReactNode => {\n if (!value) return '-';\n\n const stringValue = String(value);\n const formattedValue = mask ? mask(stringValue) : sanitizeHtml(stringValue);\n\n if (showCopyButton) {\n return (\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography variant=\"body2\" noWrap>\n {formattedValue}\n </Typography>\n <CopyButton\n toCopy={stringValue}\n message={copyMessage}\n label={copyLabel}\n />\n </Stack>\n );\n }\n\n return formattedValue;\n};\n\nexport default memo(TextRenderer);\n","import { ReactNode } from 'react';\nimport { Field } from 'model/entity-metadata';\n\nimport { CURRENCY_FIELD_NAMES } from '../constants/columnDefaults';\nimport { CellRenderer, DynamicRowData } from '../props';\nimport {\n DateRenderer,\n DateTimeRenderer,\n EntityRenderer,\n NumberRenderer,\n StatusRenderer,\n TextRenderer,\n} from '../renderers';\n\nfunction getIsCurrency(fieldName: string): boolean {\n return CURRENCY_FIELD_NAMES.includes(fieldName);\n}\n\nexport const createCellRenderer = <T extends object = object>(context: {\n onRowAction?: (rowId: string, row: DynamicRowData<T>) => ReactNode;\n}): CellRenderer<T> => {\n const { onRowAction } = context;\n\n const CellRendererComponent = (\n field: Field,\n row: DynamicRowData<T>,\n ): ReactNode => {\n const value = row[field.name];\n\n if (field.name === 'ACTIONS') {\n return onRowAction?.(row.id, row);\n }\n\n switch (field.type) {\n case 'BOOLEAN':\n return (\n <StatusRenderer\n active={Boolean(value)}\n activeLabel=\"Ativo\"\n inactiveLabel=\"Inativo\"\n />\n );\n\n case 'DATE':\n return <DateRenderer value={value} />;\n\n case 'DATETIME':\n return <DateTimeRenderer value={value} />;\n\n case 'DECIMAL':\n case 'INTEGER':\n return (\n <NumberRenderer\n value={value}\n isCurrency={getIsCurrency(field.name)}\n />\n );\n\n case 'FILE':\n case 'ENTITY':\n return <EntityRenderer value={value} field={field} />;\n case 'TEXT':\n default:\n return <TextRenderer value={value} />;\n }\n };\n\n CellRendererComponent.displayName = 'CellRendererComponent';\n return CellRendererComponent;\n};\n","import { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\nimport { EntityMetadataResponse } from 'model/entity-metadata';\n\ninterface BuildVisibleFieldsParams {\n metadata?: EntityMetadataResponse;\n columnVisibilityModel?: GridColumnVisibilityModel;\n defaultVisibleFields?: string[];\n}\n\nexport const buildVisibleFields = ({\n metadata,\n columnVisibilityModel,\n defaultVisibleFields,\n}: BuildVisibleFieldsParams): string[] | undefined => {\n if (!metadata?.fields) return undefined;\n\n const allFields = metadata.fields.map(f => f.name);\n\n const visible = allFields.filter(fieldName => {\n if (fieldName === 'ACTIONS') return false;\n\n if (columnVisibilityModel) {\n return columnVisibilityModel[fieldName] !== false;\n }\n\n return defaultVisibleFields?.includes(fieldName) ?? true;\n });\n\n if (!defaultVisibleFields) return visible;\n\n return visible.sort((a, b) => {\n const indexA = defaultVisibleFields.indexOf(a);\n const indexB = defaultVisibleFields.indexOf(b);\n\n return indexA - indexB || 0;\n });\n};\n"]}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { C as CustomShadows } from './index-5a5e5dc8.js';
2
- export { d as ColorType, k as action, j as background, l as basePalette, o as colorSchemes, h as common, c as components, a as createShadowColor, b as customShadows, n as darkPalette, r as defaultFont, f as error, g as grey, i as info, m as lightPalette, p as primary, u as primaryFont, s as secondary, v as secondaryFont, q as shadows, e as success, t as text, x as typography, w as warning } from './index-5a5e5dc8.js';
1
+ import { C as CustomShadows } from './index-c8f1e6e7.js';
2
+ export { d as ColorType, k as action, j as background, l as basePalette, o as colorSchemes, h as common, c as components, a as createShadowColor, b as customShadows, n as darkPalette, r as defaultFont, f as error, g as grey, i as info, m as lightPalette, p as primary, u as primaryFont, s as secondary, v as secondaryFont, q as shadows, e as success, t as text, x as typography, w as warning } from './index-c8f1e6e7.js';
3
3
  export { S as SettingsContextValue, _ as SettingsProvider, T as ThemeProviderProps, u as useSettingsContext } from './settings-provider-38d09283.js';
4
4
  export { THEME_CONFIG, default as ThemeProvider } from './theme/theme-provider.js';
5
5
  import { S as SettingsState } from './settings-583c107c.js';
@@ -1,4 +1,4 @@
1
- export { d as ColorType, k as action, j as background, l as basePalette, o as colorSchemes, h as common, c as components, a as createShadowColor, b as customShadows, n as darkPalette, r as defaultFont, f as error, g as grey, i as info, m as lightPalette, p as primary, u as primaryFont, s as secondary, v as secondaryFont, q as shadows, e as success, t as text, x as typography, w as warning } from '../../index-5a5e5dc8.js';
1
+ export { d as ColorType, k as action, j as background, l as basePalette, o as colorSchemes, h as common, c as components, a as createShadowColor, b as customShadows, n as darkPalette, r as defaultFont, f as error, g as grey, i as info, m as lightPalette, p as primary, u as primaryFont, s as secondary, v as secondaryFont, q as shadows, e as success, t as text, x as typography, w as warning } from '../../index-c8f1e6e7.js';
2
2
  import '@mui/lab/TimelineConnector';
3
3
  import '@mui/system';
4
4
  import '@mui/lab/TimelineDot';
@@ -173,7 +173,7 @@ declare function paper({ theme, color, dropdown }: PaperProps): {
173
173
  float?: csstype.Property.Float | readonly NonNullable<csstype.Property.Float | undefined>[] | readonly csstype.Property.Float[] | undefined;
174
174
  floodColor?: readonly string[] | csstype.Property.FloodColor | readonly csstype.Property.FloodColor[] | undefined;
175
175
  floodOpacity?: readonly ((string & {}) | csstype.Globals)[] | csstype.Property.FloodOpacity | readonly NonNullable<csstype.Property.FloodOpacity | undefined>[] | undefined;
176
- fontFamily?: csstype.Property.FontFamily | readonly string[] | readonly csstype.Property.FontFamily[] | undefined;
176
+ fontFamily?: readonly string[] | csstype.Property.FontFamily | readonly csstype.Property.FontFamily[] | undefined;
177
177
  fontFeatureSettings?: readonly string[] | csstype.Property.FontFeatureSettings | readonly csstype.Property.FontFeatureSettings[] | undefined;
178
178
  fontKerning?: csstype.Property.FontKerning | readonly NonNullable<csstype.Property.FontKerning | undefined>[] | readonly csstype.Property.FontKerning[] | undefined;
179
179
  fontLanguageOverride?: readonly string[] | csstype.Property.FontLanguageOverride | readonly csstype.Property.FontLanguageOverride[] | undefined;
@@ -197,7 +197,7 @@ declare function paper({ theme, color, dropdown }: PaperProps): {
197
197
  fontVariantNumeric?: readonly string[] | csstype.Property.FontVariantNumeric | readonly csstype.Property.FontVariantNumeric[] | undefined;
198
198
  fontVariantPosition?: csstype.Property.FontVariantPosition | readonly NonNullable<csstype.Property.FontVariantPosition | undefined>[] | readonly csstype.Property.FontVariantPosition[] | undefined;
199
199
  fontVariationSettings?: readonly string[] | csstype.Property.FontVariationSettings | readonly csstype.Property.FontVariationSettings[] | undefined;
200
- fontWeight?: csstype.Property.FontWeight | readonly NonNullable<csstype.Property.FontWeight | undefined>[] | readonly ((string & {}) | csstype.Globals | "bold" | "normal" | "bolder" | "lighter")[] | undefined;
200
+ fontWeight?: csstype.Property.FontWeight | readonly NonNullable<csstype.Property.FontWeight | undefined>[] | readonly ("bold" | (string & {}) | csstype.Globals | "normal" | "bolder" | "lighter")[] | undefined;
201
201
  fontWidth?: readonly string[] | csstype.Property.FontWidth | readonly csstype.Property.FontWidth[] | undefined;
202
202
  forcedColorAdjust?: csstype.Property.ForcedColorAdjust | readonly NonNullable<csstype.Property.ForcedColorAdjust | undefined>[] | readonly csstype.Property.ForcedColorAdjust[] | undefined;
203
203
  gridAutoColumns?: readonly (string | (string & {}))[] | csstype.Property.GridAutoColumns<string | number> | readonly NonNullable<csstype.Property.GridAutoColumns<string | number> | undefined>[] | undefined;
@@ -462,7 +462,7 @@ declare function paper({ theme, color, dropdown }: PaperProps): {
462
462
  zIndex?: readonly ((string & {}) | csstype.Globals | "auto")[] | csstype.Property.ZIndex | readonly NonNullable<csstype.Property.ZIndex | undefined>[] | undefined;
463
463
  zoom?: csstype.Property.Zoom | readonly NonNullable<csstype.Property.Zoom | undefined>[] | readonly ((string & {}) | csstype.Globals | "normal" | "reset")[] | undefined;
464
464
  all?: csstype.Globals | readonly NonNullable<csstype.Globals | undefined>[] | readonly csstype.Globals[] | undefined;
465
- animation?: csstype.Property.Animation<string & {}> | readonly NonNullable<csstype.Property.Animation<string & {}> | undefined>[] | readonly ((string & {}) | csstype.Globals | "normal" | "reverse" | "none" | "auto" | "alternate" | "alternate-reverse" | "backwards" | "both" | "forwards" | "infinite" | "paused" | "running" | "ease" | "ease-in" | "ease-in-out" | "ease-out" | "step-end" | "step-start" | "linear")[] | undefined;
465
+ animation?: csstype.Property.Animation<string & {}> | readonly NonNullable<csstype.Property.Animation<string & {}> | undefined>[] | readonly ("reverse" | (string & {}) | csstype.Globals | "none" | "auto" | "normal" | "alternate" | "alternate-reverse" | "backwards" | "both" | "forwards" | "infinite" | "paused" | "running" | "ease" | "ease-in" | "ease-in-out" | "ease-out" | "step-end" | "step-start" | "linear")[] | undefined;
466
466
  animationRange?: readonly (string | (string & {}))[] | csstype.Property.AnimationRange<string | number> | readonly NonNullable<csstype.Property.AnimationRange<string | number> | undefined>[] | undefined;
467
467
  background?: readonly (string | (string & {}))[] | csstype.Property.Background<string | number> | readonly NonNullable<csstype.Property.Background<string | number> | undefined>[] | undefined;
468
468
  border?: readonly (string | (string & {}))[] | csstype.Property.Border<string | number> | readonly NonNullable<csstype.Property.Border<string | number> | undefined>[] | undefined;
@@ -474,7 +474,7 @@ declare function paper({ theme, color, dropdown }: PaperProps): {
474
474
  borderBlockWidth?: readonly (string | (string & {}))[] | csstype.Property.BorderBlockWidth<string | number> | readonly NonNullable<csstype.Property.BorderBlockWidth<string | number> | undefined>[] | undefined;
475
475
  borderBottom?: readonly (string | (string & {}))[] | csstype.Property.BorderBottom<string | number> | readonly NonNullable<csstype.Property.BorderBottom<string | number> | undefined>[] | undefined;
476
476
  borderColor?: readonly string[] | csstype.Property.BorderColor | readonly csstype.Property.BorderColor[] | undefined;
477
- borderImage?: csstype.Property.BorderImage | readonly NonNullable<csstype.Property.BorderImage | undefined>[] | readonly ((string & {}) | csstype.Globals | "repeat" | "none" | "round" | "space" | "stretch")[] | undefined;
477
+ borderImage?: csstype.Property.BorderImage | readonly NonNullable<csstype.Property.BorderImage | undefined>[] | readonly ("repeat" | (string & {}) | csstype.Globals | "none" | "round" | "space" | "stretch")[] | undefined;
478
478
  borderInline?: readonly (string | (string & {}))[] | csstype.Property.BorderInline<string | number> | readonly NonNullable<csstype.Property.BorderInline<string | number> | undefined>[] | undefined;
479
479
  borderInlineColor?: readonly string[] | csstype.Property.BorderInlineColor | readonly csstype.Property.BorderInlineColor[] | undefined;
480
480
  borderInlineEnd?: readonly (string | (string & {}))[] | csstype.Property.BorderInlineEnd<string | number> | readonly NonNullable<csstype.Property.BorderInlineEnd<string | number> | undefined>[] | undefined;
@@ -509,7 +509,7 @@ declare function paper({ theme, color, dropdown }: PaperProps): {
509
509
  marginBlock?: readonly (string | (string & {}))[] | csstype.Property.MarginBlock<string | number> | readonly NonNullable<csstype.Property.MarginBlock<string | number> | undefined>[] | undefined;
510
510
  marginInline?: readonly (string | (string & {}))[] | csstype.Property.MarginInline<string | number> | readonly NonNullable<csstype.Property.MarginInline<string | number> | undefined>[] | undefined;
511
511
  mask?: readonly (string | (string & {}))[] | csstype.Property.Mask<string | number> | readonly NonNullable<csstype.Property.Mask<string | number> | undefined>[] | undefined;
512
- maskBorder?: csstype.Property.MaskBorder | readonly NonNullable<csstype.Property.MaskBorder | undefined>[] | readonly ((string & {}) | csstype.Globals | "repeat" | "none" | "round" | "space" | "alpha" | "luminance" | "stretch")[] | undefined;
512
+ maskBorder?: csstype.Property.MaskBorder | readonly NonNullable<csstype.Property.MaskBorder | undefined>[] | readonly ("repeat" | (string & {}) | csstype.Globals | "none" | "round" | "space" | "alpha" | "luminance" | "stretch")[] | undefined;
513
513
  motion?: readonly (string | (string & {}))[] | csstype.Property.Offset<string | number> | readonly NonNullable<csstype.Property.Offset<string | number> | undefined>[] | undefined;
514
514
  offset?: readonly (string | (string & {}))[] | csstype.Property.Offset<string | number> | readonly NonNullable<csstype.Property.Offset<string | number> | undefined>[] | undefined;
515
515
  outline?: readonly (string | (string & {}))[] | csstype.Property.Outline<string | number> | readonly NonNullable<csstype.Property.Outline<string | number> | undefined>[] | undefined;
@@ -758,8 +758,8 @@ declare function paper({ theme, color, dropdown }: PaperProps): {
758
758
  WebkitUserModify?: csstype.Property.WebkitUserModify | readonly NonNullable<csstype.Property.WebkitUserModify | undefined>[] | readonly csstype.Property.WebkitUserModify[] | undefined;
759
759
  WebkitUserSelect?: csstype.Property.WebkitUserSelect | readonly NonNullable<csstype.Property.WebkitUserSelect | undefined>[] | readonly csstype.Property.WebkitUserSelect[] | undefined;
760
760
  WebkitWritingMode?: csstype.Property.WritingMode | readonly NonNullable<csstype.Property.WritingMode | undefined>[] | readonly csstype.Property.WritingMode[] | undefined;
761
- MozAnimation?: csstype.Property.Animation<string & {}> | readonly NonNullable<csstype.Property.Animation<string & {}> | undefined>[] | readonly ((string & {}) | csstype.Globals | "normal" | "reverse" | "none" | "auto" | "alternate" | "alternate-reverse" | "backwards" | "both" | "forwards" | "infinite" | "paused" | "running" | "ease" | "ease-in" | "ease-in-out" | "ease-out" | "step-end" | "step-start" | "linear")[] | undefined;
762
- MozBorderImage?: csstype.Property.BorderImage | readonly NonNullable<csstype.Property.BorderImage | undefined>[] | readonly ((string & {}) | csstype.Globals | "repeat" | "none" | "round" | "space" | "stretch")[] | undefined;
761
+ MozAnimation?: csstype.Property.Animation<string & {}> | readonly NonNullable<csstype.Property.Animation<string & {}> | undefined>[] | readonly ("reverse" | (string & {}) | csstype.Globals | "none" | "auto" | "normal" | "alternate" | "alternate-reverse" | "backwards" | "both" | "forwards" | "infinite" | "paused" | "running" | "ease" | "ease-in" | "ease-in-out" | "ease-out" | "step-end" | "step-start" | "linear")[] | undefined;
762
+ MozBorderImage?: csstype.Property.BorderImage | readonly NonNullable<csstype.Property.BorderImage | undefined>[] | readonly ("repeat" | (string & {}) | csstype.Globals | "none" | "round" | "space" | "stretch")[] | undefined;
763
763
  MozColumnRule?: readonly (string | (string & {}))[] | csstype.Property.ColumnRule<string | number> | readonly NonNullable<csstype.Property.ColumnRule<string | number> | undefined>[] | undefined;
764
764
  MozColumns?: readonly (string | (string & {}))[] | csstype.Property.Columns<string | number> | readonly NonNullable<csstype.Property.Columns<string | number> | undefined>[] | undefined;
765
765
  MozOutlineRadius?: readonly (string | (string & {}))[] | csstype.Property.MozOutlineRadius<string | number> | readonly NonNullable<csstype.Property.MozOutlineRadius<string | number> | undefined>[] | undefined;
@@ -771,16 +771,16 @@ declare function paper({ theme, color, dropdown }: PaperProps): {
771
771
  msScrollSnapX?: readonly string[] | csstype.Property.MsScrollSnapX | readonly csstype.Property.MsScrollSnapX[] | undefined;
772
772
  msScrollSnapY?: readonly string[] | csstype.Property.MsScrollSnapY | readonly csstype.Property.MsScrollSnapY[] | undefined;
773
773
  msTransition?: readonly string[] | csstype.Property.Transition<string & {}> | readonly csstype.Property.Transition<string & {}>[] | undefined;
774
- WebkitAnimation?: csstype.Property.Animation<string & {}> | readonly NonNullable<csstype.Property.Animation<string & {}> | undefined>[] | readonly ((string & {}) | csstype.Globals | "normal" | "reverse" | "none" | "auto" | "alternate" | "alternate-reverse" | "backwards" | "both" | "forwards" | "infinite" | "paused" | "running" | "ease" | "ease-in" | "ease-in-out" | "ease-out" | "step-end" | "step-start" | "linear")[] | undefined;
774
+ WebkitAnimation?: csstype.Property.Animation<string & {}> | readonly NonNullable<csstype.Property.Animation<string & {}> | undefined>[] | readonly ("reverse" | (string & {}) | csstype.Globals | "none" | "auto" | "normal" | "alternate" | "alternate-reverse" | "backwards" | "both" | "forwards" | "infinite" | "paused" | "running" | "ease" | "ease-in" | "ease-in-out" | "ease-out" | "step-end" | "step-start" | "linear")[] | undefined;
775
775
  WebkitBorderBefore?: readonly (string | (string & {}))[] | csstype.Property.WebkitBorderBefore<string | number> | readonly NonNullable<csstype.Property.WebkitBorderBefore<string | number> | undefined>[] | undefined;
776
- WebkitBorderImage?: csstype.Property.BorderImage | readonly NonNullable<csstype.Property.BorderImage | undefined>[] | readonly ((string & {}) | csstype.Globals | "repeat" | "none" | "round" | "space" | "stretch")[] | undefined;
776
+ WebkitBorderImage?: csstype.Property.BorderImage | readonly NonNullable<csstype.Property.BorderImage | undefined>[] | readonly ("repeat" | (string & {}) | csstype.Globals | "none" | "round" | "space" | "stretch")[] | undefined;
777
777
  WebkitBorderRadius?: readonly (string | (string & {}))[] | csstype.Property.BorderRadius<string | number> | readonly NonNullable<csstype.Property.BorderRadius<string | number> | undefined>[] | undefined;
778
778
  WebkitColumnRule?: readonly (string | (string & {}))[] | csstype.Property.ColumnRule<string | number> | readonly NonNullable<csstype.Property.ColumnRule<string | number> | undefined>[] | undefined;
779
779
  WebkitColumns?: readonly (string | (string & {}))[] | csstype.Property.Columns<string | number> | readonly NonNullable<csstype.Property.Columns<string | number> | undefined>[] | undefined;
780
780
  WebkitFlex?: readonly (string | (string & {}))[] | csstype.Property.Flex<string | number> | readonly NonNullable<csstype.Property.Flex<string | number> | undefined>[] | undefined;
781
781
  WebkitFlexFlow?: readonly string[] | csstype.Property.FlexFlow | readonly csstype.Property.FlexFlow[] | undefined;
782
782
  WebkitMask?: readonly (string | (string & {}))[] | csstype.Property.WebkitMask<string | number> | readonly NonNullable<csstype.Property.WebkitMask<string | number> | undefined>[] | undefined;
783
- WebkitMaskBoxImage?: csstype.Property.MaskBorder | readonly NonNullable<csstype.Property.MaskBorder | undefined>[] | readonly ((string & {}) | csstype.Globals | "repeat" | "none" | "round" | "space" | "alpha" | "luminance" | "stretch")[] | undefined;
783
+ WebkitMaskBoxImage?: csstype.Property.MaskBorder | readonly NonNullable<csstype.Property.MaskBorder | undefined>[] | readonly ("repeat" | (string & {}) | csstype.Globals | "none" | "round" | "space" | "alpha" | "luminance" | "stretch")[] | undefined;
784
784
  WebkitTextEmphasis?: readonly string[] | csstype.Property.TextEmphasis | readonly csstype.Property.TextEmphasis[] | undefined;
785
785
  WebkitTextStroke?: readonly (string | (string & {}))[] | csstype.Property.WebkitTextStroke<string | number> | readonly NonNullable<csstype.Property.WebkitTextStroke<string | number> | undefined>[] | undefined;
786
786
  WebkitTransition?: readonly string[] | csstype.Property.Transition<string & {}> | readonly csstype.Property.Transition<string & {}>[] | undefined;
@@ -861,7 +861,7 @@ declare function paper({ theme, color, dropdown }: PaperProps): {
861
861
  MozUserFocus?: csstype.Property.MozUserFocus | readonly NonNullable<csstype.Property.MozUserFocus | undefined>[] | readonly csstype.Property.MozUserFocus[] | undefined;
862
862
  MozUserInput?: csstype.Property.MozUserInput | readonly NonNullable<csstype.Property.MozUserInput | undefined>[] | readonly csstype.Property.MozUserInput[] | undefined;
863
863
  msImeMode?: csstype.Property.ImeMode | readonly NonNullable<csstype.Property.ImeMode | undefined>[] | readonly csstype.Property.ImeMode[] | undefined;
864
- OAnimation?: csstype.Property.Animation<string & {}> | readonly NonNullable<csstype.Property.Animation<string & {}> | undefined>[] | readonly ((string & {}) | csstype.Globals | "normal" | "reverse" | "none" | "auto" | "alternate" | "alternate-reverse" | "backwards" | "both" | "forwards" | "infinite" | "paused" | "running" | "ease" | "ease-in" | "ease-in-out" | "ease-out" | "step-end" | "step-start" | "linear")[] | undefined;
864
+ OAnimation?: csstype.Property.Animation<string & {}> | readonly NonNullable<csstype.Property.Animation<string & {}> | undefined>[] | readonly ("reverse" | (string & {}) | csstype.Globals | "none" | "auto" | "normal" | "alternate" | "alternate-reverse" | "backwards" | "both" | "forwards" | "infinite" | "paused" | "running" | "ease" | "ease-in" | "ease-in-out" | "ease-out" | "step-end" | "step-start" | "linear")[] | undefined;
865
865
  OAnimationDelay?: readonly string[] | csstype.Property.AnimationDelay<string & {}> | readonly csstype.Property.AnimationDelay<string & {}>[] | undefined;
866
866
  OAnimationDirection?: readonly string[] | csstype.Property.AnimationDirection | readonly csstype.Property.AnimationDirection[] | undefined;
867
867
  OAnimationDuration?: readonly string[] | csstype.Property.AnimationDuration<string & {}> | readonly csstype.Property.AnimationDuration<string & {}>[] | undefined;
@@ -871,7 +871,7 @@ declare function paper({ theme, color, dropdown }: PaperProps): {
871
871
  OAnimationPlayState?: readonly string[] | csstype.Property.AnimationPlayState | readonly csstype.Property.AnimationPlayState[] | undefined;
872
872
  OAnimationTimingFunction?: readonly string[] | csstype.Property.AnimationTimingFunction | readonly csstype.Property.AnimationTimingFunction[] | undefined;
873
873
  OBackgroundSize?: readonly (string | (string & {}))[] | csstype.Property.BackgroundSize<string | number> | readonly NonNullable<csstype.Property.BackgroundSize<string | number> | undefined>[] | undefined;
874
- OBorderImage?: csstype.Property.BorderImage | readonly NonNullable<csstype.Property.BorderImage | undefined>[] | readonly ((string & {}) | csstype.Globals | "repeat" | "none" | "round" | "space" | "stretch")[] | undefined;
874
+ OBorderImage?: csstype.Property.BorderImage | readonly NonNullable<csstype.Property.BorderImage | undefined>[] | readonly ("repeat" | (string & {}) | csstype.Globals | "none" | "round" | "space" | "stretch")[] | undefined;
875
875
  OObjectFit?: csstype.Property.ObjectFit | readonly NonNullable<csstype.Property.ObjectFit | undefined>[] | readonly csstype.Property.ObjectFit[] | undefined;
876
876
  OObjectPosition?: readonly (string | (string & {}))[] | csstype.Property.ObjectPosition<string | number> | readonly NonNullable<csstype.Property.ObjectPosition<string | number> | undefined>[] | undefined;
877
877
  OTabSize?: readonly (string | (string & {}))[] | csstype.Property.TabSize<string | number> | readonly NonNullable<csstype.Property.TabSize<string | number> | undefined>[] | undefined;
@@ -16,6 +16,7 @@ interface FilterConditional {
16
16
  fieldName: string;
17
17
  conditional: Condition;
18
18
  value: string[];
19
+ valueLabels?: Record<string, string>;
19
20
  }
20
21
  interface FilterGroup {
21
22
  operator: FilterOperator;
@@ -1,2 +1,2 @@
1
- export { a as FilterOperator, b as SortType } from '../chunk-M62EJMQ6.js';
1
+ export { a as FilterOperator, b as SortType } from '../chunk-P64QBDAO.js';
2
2
  //# sourceMappingURL=filter.js.map
@@ -0,0 +1,35 @@
1
+ declare enum Frequency {
2
+ DAILY = "DAILY",
3
+ WEEKLY = "WEEKLY",
4
+ MONTHLY = "MONTHLY",
5
+ CUSTOM = "CUSTOM"
6
+ }
7
+ declare enum DayOfWeek {
8
+ SUNDAY = "SUNDAY",
9
+ MONDAY = "MONDAY",
10
+ TUESDAY = "TUESDAY",
11
+ WEDNESDAY = "WEDNESDAY",
12
+ THURSDAY = "THURSDAY",
13
+ FRIDAY = "FRIDAY",
14
+ SATURDAY = "SATURDAY"
15
+ }
16
+ declare enum MontlhyStrategy {
17
+ FIXED_DAY = "FIXED_DAY",
18
+ SPECIFIC_DAY = "SPECIFIC_DAY"
19
+ }
20
+ declare enum CustomUnit {
21
+ DAYS = "DAYS",
22
+ WEEKS = "WEEKS",
23
+ MONTHS = "MONTHS"
24
+ }
25
+ interface Recurrence {
26
+ frequency: Frequency;
27
+ interval: number;
28
+ days_of_week: DayOfWeek[];
29
+ monthly_strategy: MontlhyStrategy;
30
+ day_of_month: number;
31
+ occurrence: number;
32
+ custom_unit: CustomUnit;
33
+ }
34
+
35
+ export { CustomUnit, DayOfWeek, Frequency, MontlhyStrategy, Recurrence };
@@ -0,0 +1,4 @@
1
+ var E=(A=>(A.DAILY="DAILY",A.WEEKLY="WEEKLY",A.MONTHLY="MONTHLY",A.CUSTOM="CUSTOM",A))(E||{}),r=(Y=>(Y.SUNDAY="SUNDAY",Y.MONDAY="MONDAY",Y.TUESDAY="TUESDAY",Y.WEDNESDAY="WEDNESDAY",Y.THURSDAY="THURSDAY",Y.FRIDAY="FRIDAY",Y.SATURDAY="SATURDAY",Y))(r||{}),T=(S=>(S.FIXED_DAY="FIXED_DAY",S.SPECIFIC_DAY="SPECIFIC_DAY",S))(T||{}),I=(D=>(D.DAYS="DAYS",D.WEEKS="WEEKS",D.MONTHS="MONTHS",D))(I||{});
2
+
3
+ export { I as CustomUnit, r as DayOfWeek, E as Frequency, T as MontlhyStrategy };
4
+ //# sourceMappingURL=orderProjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/types/orderProjection.ts"],"names":["Frequency","DayOfWeek","MontlhyStrategy","CustomUnit"],"mappings":"AAAO,IAAKA,OACVA,EAAA,MAAQ,QACRA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,OAAS,SAJCA,OAAA,IAOAC,OACVA,EAAA,OAAS,SACTA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,OAAS,SACTA,EAAA,SAAW,WAPDA,OAAA,IAUAC,OACVA,EAAA,UAAY,YACZA,EAAA,aAAe,eAFLA,OAAA,IAKAC,OACVA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,OAAS,SAHCA,OAAA","sourcesContent":["export enum Frequency {\n DAILY = 'DAILY',\n WEEKLY = 'WEEKLY',\n MONTHLY = 'MONTHLY',\n CUSTOM = 'CUSTOM',\n}\n\nexport enum DayOfWeek {\n SUNDAY = 'SUNDAY',\n MONDAY = 'MONDAY',\n TUESDAY = 'TUESDAY',\n WEDNESDAY = 'WEDNESDAY',\n THURSDAY = 'THURSDAY',\n FRIDAY = 'FRIDAY',\n SATURDAY = 'SATURDAY',\n}\n\nexport enum MontlhyStrategy {\n FIXED_DAY = 'FIXED_DAY',\n SPECIFIC_DAY = 'SPECIFIC_DAY',\n}\n\nexport enum CustomUnit {\n DAYS = 'DAYS',\n WEEKS = 'WEEKS',\n MONTHS = 'MONTHS',\n}\n\nexport interface Recurrence {\n frequency: Frequency;\n interval: number;\n days_of_week: DayOfWeek[];\n monthly_strategy: MontlhyStrategy;\n day_of_month: number;\n occurrence: number;\n custom_unit: CustomUnit;\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import { AbcCurve } from '../utils/partnerAnalysis.js';
2
+ import { Recurrence } from './orderProjection.js';
2
3
 
3
4
  interface RankingItem {
4
5
  partner_external_id: string;
@@ -49,6 +50,7 @@ interface ByProfile {
49
50
  }
50
51
  interface DashboardPartnerSaleAnalysis {
51
52
  last_sale_external_id: string;
53
+ last_sale_sale_external_id?: string | null;
52
54
  sale_count: number;
53
55
  last_sale_negotiation_date: string;
54
56
  total_sale_value: number;
@@ -60,7 +62,7 @@ interface DashboardPartner {
60
62
  main_seller_external_id: string;
61
63
  classification: string;
62
64
  abc_curve: string;
63
- recurrence?: Record<string, unknown>;
65
+ recurrence?: Recurrence;
64
66
  sale_analysis: DashboardPartnerSaleAnalysis;
65
67
  state: string;
66
68
  }
@@ -1,5 +1,5 @@
1
1
  import '../chunk-4P2L7UJA.js';
2
- import '../chunk-M62EJMQ6.js';
2
+ import '../chunk-P64QBDAO.js';
3
3
 
4
4
  var u=(t,e)=>{if(!(!t?.fields||!e))return t.fields.find(r=>r.name===e||r.filter_field_name===e)},i=(t,e)=>{if(!e)return;let r=u(t,e);return t?.fields?r?.filter_field_name||r?.name:e},f=(t,e)=>{if(!(!t?.fields||!e||e.length===0))return e.filter(r=>r!=="ACTIONS")},l=(t,e)=>{let r=e?.trim();if(!r)return;let n=i(t,t?.description_field_name)||i(t,"name");if(n)return {operator:"AND",groups:[{operator:"AND",conditionals:[{fieldName:n,conditional:"LIKE",value:[r]}]}]}},p=(t,e,r)=>{if(!e||!r)return;let n=i(t,e);if(n)return {fieldName:n,sortType:r==="desc"?"DESC":"ASC"}},c=({metadata:t,visibleFieldNames:e,search:r,sort:n,dir:s})=>{let o=f(t,e),d=l(t,r),a=p(t,n,s);return {...o&&{criteria:o},...d&&{filter:d},...a&&{sort:a}}},y=c;
5
5
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zydon/common",
3
- "version": "2.8.83",
3
+ "version": "2.8.85",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "module": "./dist/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/model/filter.ts"],"names":["FilterOperator","SortType"],"mappings":"AAEO,IAAKA,OACVA,EAAA,IAAM,MACNA,EAAA,GAAK,KAFKA,OAAA,IAyCAC,OACVA,EAAA,IAAM,MACNA,EAAA,KAAO,OAFGA,OAAA","sourcesContent":["import { Condition } from './entity-metadata';\n\nexport enum FilterOperator {\n AND = 'AND',\n OR = 'OR',\n}\n\nexport interface FilterValue {\n fieldName: string;\n conditional: Condition;\n value: string[];\n}\n\nexport interface FilterState {\n [fieldName: string]: FilterValue;\n}\n\nexport interface FilterConditional {\n fieldName: string;\n conditional: Condition;\n value: string[];\n}\n\nexport interface FilterGroup {\n operator: FilterOperator;\n conditionals: FilterConditional[];\n}\n\nexport interface Filter {\n operator: FilterOperator;\n groups: FilterGroup[];\n}\n\nexport interface FilterCondition {\n id: string;\n operator: FilterOperator;\n fieldName: string;\n conditional: Condition;\n value: string[];\n /** Labels de exibição para valores de campos ENTITY (ex: { \"uuid-da-marca\": \"Nome da Marca\" }). Usado apenas na UI. */\n valueLabels?: Record<string, string>;\n}\n\nexport enum SortType {\n ASC = 'ASC',\n DESC = 'DESC',\n}\n\nexport interface Sort {\n fieldName: string;\n sortType: SortType;\n}\n\nexport interface GridQuery {\n page?: number;\n perPage?: number;\n search?: string;\n criteria?: string[];\n arguments?: Record<string, unknown>;\n filter?: Filter;\n sort?: Sort;\n}\n"]}
@@ -286,10 +286,13 @@ declare const components: {
286
286
  MuiTimelineDot: {
287
287
  defaultProps?: Partial<_mui_lab_TimelineDot.TimelineDotProps> | undefined;
288
288
  styleOverrides?: Partial<_mui_material_styles_overrides.OverridesStyleRules<keyof _mui_lab_TimelineDot.TimelineDotClasses, "MuiTimelineDot", {
289
- transitions: _mui_material.Transitions;
289
+ cssVarPrefix: string;
290
+ zIndex: _mui_material.ZIndex;
291
+ direction: _mui_system.Direction;
292
+ opacity: _mui_material.Opacity;
293
+ typography: _mui_material.TypographyVariants;
290
294
  palette: _mui_material.Palette;
291
295
  colorSchemes: Record<_mui_material.SupportedColorScheme, _mui_material.ColorSystem>;
292
- cssVarPrefix: string;
293
296
  vars: _mui_material.ThemeVars;
294
297
  getCssVar: (field: _mui_material.ThemeCssVar, ...vars: _mui_material.ThemeCssVar[]) => string;
295
298
  getColorSchemeSelector: (colorScheme: _mui_material.SupportedColorScheme) => string;
@@ -300,16 +303,13 @@ declare const components: {
300
303
  spacing: _mui_system.Spacing;
301
304
  breakpoints: _mui_system.Breakpoints;
302
305
  shape: _mui_system.Shape;
303
- typography: _mui_material.TypographyVariants;
306
+ transitions: _mui_material.Transitions;
304
307
  shadows: _mui_material.Shadows;
305
308
  mixins: _mui_material.Mixins;
306
- zIndex: _mui_material.ZIndex;
307
- direction: _mui_system.Direction;
308
309
  shouldSkipGeneratingVar: (keys: string[], value: string | number) => boolean;
309
310
  unstable_sxConfig: _mui_system.SxConfig;
310
311
  unstable_sx: (props: _mui_system.SxProps<_mui_material.Theme>) => _mui_styled_engine.CSSObject;
311
312
  applyStyles: _mui_system.ApplyStyles<"light" | "dark">;
312
- opacity: _mui_material.Opacity;
313
313
  overlays: _mui_material.Overlays;
314
314
  customShadows: CustomShadows;
315
315
  unstable_strictMode?: boolean | undefined;
@@ -326,10 +326,13 @@ declare const components: {
326
326
  MuiTimelineConnector: {
327
327
  defaultProps?: Partial<_mui_lab_TimelineConnector.TimelineConnectorProps> | undefined;
328
328
  styleOverrides?: Partial<_mui_material_styles_overrides.OverridesStyleRules<"root", "MuiTimelineConnector", {
329
- transitions: _mui_material.Transitions;
329
+ cssVarPrefix: string;
330
+ zIndex: _mui_material.ZIndex;
331
+ direction: _mui_system.Direction;
332
+ opacity: _mui_material.Opacity;
333
+ typography: _mui_material.TypographyVariants;
330
334
  palette: _mui_material.Palette;
331
335
  colorSchemes: Record<_mui_material.SupportedColorScheme, _mui_material.ColorSystem>;
332
- cssVarPrefix: string;
333
336
  vars: _mui_material.ThemeVars;
334
337
  getCssVar: (field: _mui_material.ThemeCssVar, ...vars: _mui_material.ThemeCssVar[]) => string;
335
338
  getColorSchemeSelector: (colorScheme: _mui_material.SupportedColorScheme) => string;
@@ -340,16 +343,13 @@ declare const components: {
340
343
  spacing: _mui_system.Spacing;
341
344
  breakpoints: _mui_system.Breakpoints;
342
345
  shape: _mui_system.Shape;
343
- typography: _mui_material.TypographyVariants;
346
+ transitions: _mui_material.Transitions;
344
347
  shadows: _mui_material.Shadows;
345
348
  mixins: _mui_material.Mixins;
346
- zIndex: _mui_material.ZIndex;
347
- direction: _mui_system.Direction;
348
349
  shouldSkipGeneratingVar: (keys: string[], value: string | number) => boolean;
349
350
  unstable_sxConfig: _mui_system.SxConfig;
350
351
  unstable_sx: (props: _mui_system.SxProps<_mui_material.Theme>) => _mui_styled_engine.CSSObject;
351
352
  applyStyles: _mui_system.ApplyStyles<"light" | "dark">;
352
- opacity: _mui_material.Opacity;
353
353
  overlays: _mui_material.Overlays;
354
354
  customShadows: CustomShadows;
355
355
  unstable_strictMode?: boolean | undefined;