@zydon/common 2.8.67 → 2.8.68

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.
@@ -0,0 +1,19 @@
1
+ import { a as a$4 } from './chunk-6ZSTKYGL.js';
2
+ import { a as a$1 } from './chunk-Y3TJIK6E.js';
3
+ import { a as a$3 } from './chunk-IJZCVZ32.js';
4
+ import { a as a$2 } from './chunk-F65ZXAGV.js';
5
+ import { a } from './chunk-FBVAHVU3.js';
6
+ import { memo, useCallback, useState, useMemo } from 'react';
7
+ import Q from '@mui/material/Button';
8
+ import U from '@mui/material/CircularProgress';
9
+ import q from '@mui/material/Grid';
10
+ import d from '@mui/material/Stack';
11
+ import h from '@mui/material/Typography';
12
+ import H from '@mui/material/Card';
13
+ import { styled, alpha } from '@mui/material/styles';
14
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
15
+
16
+ var T=styled(H,{shouldForwardProp:t=>t!=="active"&&t!=="disabled"})(({theme:t,active:a,disabled:i})=>({boxShadow:"none",borderRadius:8,borderStyle:"solid",borderWidth:1.5,borderColor:a?t.palette.primary.main:t.palette.grey[300],color:t.palette.primary.main,backgroundColor:a?alpha(t.palette.primary.main,.04):"white","&:hover":{borderColor:t.palette.primary.main},...i?{opacity:.6,cursor:"default"}:{opacity:1,cursor:"pointer"}}));var D=memo(({item:t,isSelected:a$1,disabled:i,onSelectItem:n})=>{let o=useCallback(()=>{n(t);},[t,n]);return jsx(q,{item:!0,xs:4,children:jsx(T,{active:a$1,onClick:o,disabled:i,children:jsxs(d,{padding:1.5,width:"100%",children:[jsxs(d,{direction:"row",alignItems:"center",justifyContent:"space-between",children:[jsx(h,{color:a$1?"primary.main":"text.primary",variant:"subtitle2",textAlign:"left",noWrap:!0,children:t.title}),a$1&&jsx(a,{icon:"CHECK_CIRCLE",width:24})]}),t.options.map(l=>jsx(h,{mt:1,variant:"body2",color:"text.disabled",fontSize:12,textAlign:"left",noWrap:!0,children:`${l.label}: ${l.value}`},l.label))]})})},t.title)});D.displayName="CardItem";var O=D;var Y=new Intl.PluralRules("pt-BR"),Z=new Map([["one","selecionado"],["other","selecionados"]]),tt=t=>{let a=Y.select(t),i=Z.get(a);return `${t} ${i}`},rt=({title:t,action:a,loading:i,items:n,values:o,onChange:l,onSearch:C,disabled:s=!1})=>{let[p,$]=useState(),b=useMemo(()=>new Set(o),[o]),y=useCallback(r=>b.has(r),[b]),A=useMemo(()=>{if(!p)return n;let r=p.toLowerCase();return n.filter(g=>g.title.toLowerCase().includes(r))},[n,p]),B=useCallback(r=>{if(s)return;let g=y(r.value),u;g?u=o.filter(N=>N!==r.value):u=[...o,r.value],l(u);},[s,y,l,o]),w=useMemo(()=>n.map(r=>r.value),[n]),G=useCallback(()=>{s||(o.length===n.length?l([]):l(w));},[s,n.length,l,o.length,w]),K=useCallback(r=>{$(r),C?.(r);},[C]),W=r=>{r.key==="Enter"&&r.preventDefault();},z=useMemo(()=>o.length===0?"nenhum selecionado":tt(o.length),[o.length]),M=useMemo(()=>typeof t=="string"?jsx(h,{variant:"overline",color:"text.disabled",children:t}):t,[t]);return jsxs(d,{gap:1.5,height:450,children:[jsxs(d,{direction:"row",justifyContent:"space-between",children:[M,jsx(h,{variant:"overline",color:"text.disabled",children:z})]}),jsxs(d,{direction:"row",alignItems:"center",spacing:1.5,children:[jsx(a$1,{fullWidth:!0,size:"small",iconPosition:"start",placeholder:"Buscar",trigger:"change",onSearch:K,onKeyDown:W}),a?jsx(Fragment,{children:a}):jsx(Q,{onClick:G,size:"small",disabled:s,children:jsx(h,{variant:"overline",children:"TODOS"})})]}),jsx(a$2,{children:jsx(d,{flex:1,mb:2,children:jsx(a$3,{isLoading:i,loading:jsx(d,{alignItems:"center",mt:3,children:jsx(U,{})}),isEmpty:n.length===0,empty:jsx(a$4,{sx:{svg:{height:140}},text:p?`N\xE3o foi possivel encontrar o item "${p}"`:"Nenhum item dispon\xEDvel"}),children:jsx(q,{container:!0,spacing:1.5,children:A.map(r=>jsx(O,{item:r,isSelected:y(r.value),disabled:s,onSelectItem:B},r.value))})})})})]})},xt=rt;
17
+
18
+ export { xt as a };
19
+ //# sourceMappingURL=chunk-6JTWZZRD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/SelectableCards/index.tsx","../src/components/SelectableCards/CardItem.tsx","../src/components/SelectableCards/style.ts"],"names":["useCallback","useMemo","useState","Button","CircularProgress","Grid","Stack","Typography","memo","Card","alpha","styled","StyledCard","prop","theme","active","disabled","jsx","jsxs","CardItem","item","isSelected","onSelectItem","handleClick","Icon_default","option","CardItem_default","Fragment","enCardinalRules","strings","formatStrings","n","rule","suffix","SelectableCards","title","action","loading","items","values","onChange","onSearch","search","setSearch","valuesSet","itemId","filteredItems","searchLower","isItemAlreadySelected","newSelectedOptions","element","allItemValues","selectAllItems","handleSearch","value","handleKeyDown","event","selectedCount","titleComponent","SearchInput_default","Scrollbar_default","Result_default","EmptyView_default","SelectableCards_default"],"mappings":"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","sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Grid from '@mui/material/Grid';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport EmptyView from 'components/EmptyView';\nimport Result from 'components/Result';\nimport Scrollbar from 'components/Scrollbar';\nimport SearchInput from 'components/SearchInput';\n\nimport CardItem from './CardItem';\nimport { Option, SelectableCardsProps } from './props';\n\nconst enCardinalRules = new Intl.PluralRules('pt-BR');\n\nconst strings = new Map([\n ['one', 'selecionado'],\n ['other', 'selecionados'],\n]);\n\nconst formatStrings = (n: number) => {\n const rule = enCardinalRules.select(n);\n const suffix = strings.get(rule);\n return `${n} ${suffix}`;\n};\n\nconst SelectableCards = ({\n title,\n action,\n loading,\n items,\n values,\n onChange,\n onSearch,\n disabled = false,\n}: SelectableCardsProps) => {\n const [search, setSearch] = useState<string>();\n\n const valuesSet = useMemo(() => new Set(values), [values]);\n\n const isSelected = useCallback(\n (itemId: string) => {\n return valuesSet.has(itemId);\n },\n [valuesSet],\n );\n\n const filteredItems = useMemo(() => {\n if (!search) return items;\n const searchLower = search.toLowerCase();\n return items.filter(item => item.title.toLowerCase().includes(searchLower));\n }, [items, search]);\n\n const onSelectItem = useCallback(\n (item: Option) => {\n if (disabled) return;\n const isItemAlreadySelected = isSelected(item.value);\n\n let newSelectedOptions: string[];\n\n if (isItemAlreadySelected) {\n newSelectedOptions = values.filter(element => element !== item.value);\n } else {\n newSelectedOptions = [...values, item.value];\n }\n\n onChange(newSelectedOptions);\n },\n [disabled, isSelected, onChange, values],\n );\n\n const allItemValues = useMemo(() => items.map(item => item.value), [items]);\n\n const selectAllItems = useCallback(() => {\n if (disabled) return;\n if (values.length === items.length) {\n onChange([]);\n } else {\n onChange(allItemValues);\n }\n }, [disabled, items.length, onChange, values.length, allItemValues]);\n\n const handleSearch = useCallback(\n (value: string) => {\n setSearch(value);\n onSearch?.(value);\n },\n [onSearch],\n );\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n }\n };\n\n const selectedCount = useMemo(\n () =>\n values.length === 0 ? 'nenhum selecionado' : formatStrings(values.length),\n [values.length],\n );\n\n const titleComponent = useMemo(\n () =>\n typeof title === 'string' ? (\n <Typography variant=\"overline\" color=\"text.disabled\">\n {title}\n </Typography>\n ) : (\n title\n ),\n [title],\n );\n\n return (\n <Stack gap={1.5} height={450}>\n <Stack direction=\"row\" justifyContent=\"space-between\">\n {titleComponent}\n <Typography variant=\"overline\" color=\"text.disabled\">\n {selectedCount}\n </Typography>\n </Stack>\n <Stack direction=\"row\" alignItems=\"center\" spacing={1.5}>\n <SearchInput\n fullWidth\n size=\"small\"\n iconPosition=\"start\"\n placeholder=\"Buscar\"\n trigger=\"change\"\n onSearch={handleSearch}\n onKeyDown={handleKeyDown}\n />\n\n {action ? (\n <>{action}</>\n ) : (\n <Button onClick={selectAllItems} size=\"small\" disabled={disabled}>\n <Typography variant=\"overline\">TODOS</Typography>\n </Button>\n )}\n </Stack>\n\n <Scrollbar>\n <Stack flex={1} mb={2}>\n <Result\n isLoading={loading}\n loading={\n <Stack alignItems=\"center\" mt={3}>\n <CircularProgress />\n </Stack>\n }\n isEmpty={items.length === 0}\n empty={\n <EmptyView\n sx={{ svg: { height: 140 } }}\n text={\n search\n ? `Não foi possivel encontrar o item \"${search}\"`\n : 'Nenhum item disponível'\n }\n />\n }\n >\n <Grid container spacing={1.5}>\n {filteredItems.map(item => (\n <CardItem\n key={item.value}\n item={item}\n isSelected={isSelected(item.value)}\n disabled={disabled}\n onSelectItem={onSelectItem}\n />\n ))}\n </Grid>\n </Result>\n </Stack>\n </Scrollbar>\n </Stack>\n );\n};\n\nexport default SelectableCards;\n","import { memo, useCallback } from 'react';\nimport Grid from '@mui/material/Grid';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nimport { CardItemProps } from './props';\nimport { StyledCard } from './style';\n\nconst CardItem = memo(\n ({ item, isSelected, disabled, onSelectItem }: CardItemProps) => {\n const handleClick = useCallback(() => {\n onSelectItem(item);\n }, [item, onSelectItem]);\n\n return (\n <Grid key={item.title} item xs={4}>\n <StyledCard\n active={isSelected}\n onClick={handleClick}\n disabled={disabled}\n >\n <Stack padding={1.5} width=\"100%\">\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <Typography\n color={isSelected ? 'primary.main' : 'text.primary'}\n variant=\"subtitle2\"\n textAlign=\"left\"\n noWrap\n >\n {item.title}\n </Typography>\n\n {isSelected && <Icon icon=\"CHECK_CIRCLE\" width={24} />}\n </Stack>\n\n {item.options.map(option => (\n <Typography\n key={option.label}\n mt={1}\n variant=\"body2\"\n color=\"text.disabled\"\n fontSize={12}\n textAlign=\"left\"\n noWrap\n >\n {`${option.label}: ${option.value}`}\n </Typography>\n ))}\n </Stack>\n </StyledCard>\n </Grid>\n );\n },\n);\n\nCardItem.displayName = 'CardItem';\n\nexport default CardItem;\n","import Card from '@mui/material/Card';\nimport { alpha, styled } from '@mui/material/styles';\n\nimport { CardProps } from './props';\n\nexport const StyledCard = styled(Card, {\n shouldForwardProp: prop => prop !== 'active' && prop !== 'disabled',\n})<CardProps>(({ theme, active, disabled }) => ({\n boxShadow: 'none',\n\n borderRadius: 8,\n borderStyle: 'solid',\n borderWidth: 1.5,\n borderColor: active ? theme.palette.primary.main : theme.palette.grey[300],\n\n color: theme.palette.primary.main,\n backgroundColor: active ? alpha(theme.palette.primary.main, 0.04) : 'white',\n\n '&:hover': {\n borderColor: theme.palette.primary.main,\n },\n\n ...(disabled\n ? {\n opacity: 0.6,\n cursor: 'default',\n }\n : {\n opacity: 1,\n cursor: 'pointer',\n }),\n}));\n"]}
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { S as SelectableCardsProps } from '../../props-3c81e5f4.js';
2
+ import { S as SelectableCardsProps } from '../../props-a322bf2a.js';
3
3
  import 'react';
4
4
 
5
- declare const SelectableCards: ({ title, action, loading, items, values, onChange, disabled, }: SelectableCardsProps) => react_jsx_runtime.JSX.Element;
5
+ declare const SelectableCards: ({ title, action, loading, items, values, onChange, onSearch, disabled, }: SelectableCardsProps) => react_jsx_runtime.JSX.Element;
6
6
 
7
7
  export { SelectableCards as default };
@@ -1,4 +1,4 @@
1
- export { a as default } from '../../chunk-SDS77DQQ.js';
1
+ export { a as default } from '../../chunk-6JTWZZRD.js';
2
2
  import '../../chunk-6ZSTKYGL.js';
3
3
  import '../../chunk-Y3TJIK6E.js';
4
4
  import '../../chunk-IJZCVZ32.js';
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { S as SelectableCardsProps$1 } from '../../../props-3c81e5f4.js';
2
+ import { S as SelectableCardsProps$1 } from '../../../props-a322bf2a.js';
3
3
  import { BaseField } from '../../../types/baseField.js';
4
4
  import 'react';
5
5
  import 'react-hook-form';
@@ -1,4 +1,4 @@
1
- import { a } from '../../../chunk-SDS77DQQ.js';
1
+ import { a } from '../../../chunk-6JTWZZRD.js';
2
2
  import '../../../chunk-6ZSTKYGL.js';
3
3
  import '../../../chunk-Y3TJIK6E.js';
4
4
  import '../../../chunk-IJZCVZ32.js';
@@ -15,6 +15,7 @@ interface SelectableCardsProps {
15
15
  items: Option[];
16
16
  values: string[];
17
17
  onChange: (value: string[]) => void;
18
+ onSearch?: (value: string) => void;
18
19
  disabled?: boolean;
19
20
  }
20
21
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zydon/common",
3
- "version": "2.8.67",
3
+ "version": "2.8.68",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "module": "./dist/index.js",
@@ -1,19 +0,0 @@
1
- import { a as a$4 } from './chunk-6ZSTKYGL.js';
2
- import { a as a$1 } from './chunk-Y3TJIK6E.js';
3
- import { a as a$3 } from './chunk-IJZCVZ32.js';
4
- import { a as a$2 } from './chunk-F65ZXAGV.js';
5
- import { a } from './chunk-FBVAHVU3.js';
6
- import { memo, useCallback, useState, useMemo } from 'react';
7
- import J from '@mui/material/Button';
8
- import Q from '@mui/material/CircularProgress';
9
- import j from '@mui/material/Grid';
10
- import d from '@mui/material/Stack';
11
- import h from '@mui/material/Typography';
12
- import N from '@mui/material/Card';
13
- import { styled, alpha } from '@mui/material/styles';
14
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
15
-
16
- var P=styled(N,{shouldForwardProp:r=>r!=="active"&&r!=="disabled"})(({theme:r,active:a,disabled:i})=>({boxShadow:"none",borderRadius:8,borderStyle:"solid",borderWidth:1.5,borderColor:a?r.palette.primary.main:r.palette.grey[300],color:r.palette.primary.main,backgroundColor:a?alpha(r.palette.primary.main,.04):"white","&:hover":{borderColor:r.palette.primary.main},...i?{opacity:.6,cursor:"default"}:{opacity:1,cursor:"pointer"}}));var L=memo(({item:r,isSelected:a$1,disabled:i,onSelectItem:n})=>{let o=useCallback(()=>{n(r);},[r,n]);return jsx(j,{item:!0,xs:4,children:jsx(P,{active:a$1,onClick:o,disabled:i,children:jsxs(d,{padding:1.5,width:"100%",children:[jsxs(d,{direction:"row",alignItems:"center",justifyContent:"space-between",children:[jsx(h,{color:a$1?"primary.main":"text.primary",variant:"subtitle2",textAlign:"left",noWrap:!0,children:r.title}),a$1&&jsx(a,{icon:"CHECK_CIRCLE",width:24})]}),r.options.map(l=>jsx(h,{mt:1,variant:"body2",color:"text.disabled",fontSize:12,textAlign:"left",noWrap:!0,children:`${l.label}: ${l.value}`},l.label))]})})},r.title)});L.displayName="CardItem";var D=L;var X=new Intl.PluralRules("pt-BR"),Y=new Map([["one","selecionado"],["other","selecionados"]]),Z=r=>{let a=X.select(r),i=Y.get(a);return `${r} ${i}`},rr=({title:r,action:a,loading:i,items:n,values:o,onChange:l,disabled:s=!1})=>{let[c,O]=useState(),C=useMemo(()=>new Set(o),[o]),y=useCallback(t=>C.has(t),[C]),$=useMemo(()=>{if(!c)return n;let t=c.toLowerCase();return n.filter(u=>u.title.toLowerCase().includes(t))},[n,c]),A=useCallback(t=>{if(s)return;let u=y(t.value),g;u?g=o.filter(M=>M!==t.value):g=[...o,t.value],l(g);},[s,y,l,o]),b=useMemo(()=>n.map(t=>t.value),[n]),B=useCallback(()=>{s||(o.length===n.length?l([]):l(b));},[s,n.length,l,o.length,b]),G=useCallback(t=>O(t),[]),K=t=>{t.key==="Enter"&&t.preventDefault();},W=useMemo(()=>o.length===0?"nenhum selecionado":Z(o.length),[o.length]),z=useMemo(()=>typeof r=="string"?jsx(h,{variant:"overline",color:"text.disabled",children:r}):r,[r]);return jsxs(d,{gap:1.5,height:450,children:[jsxs(d,{direction:"row",justifyContent:"space-between",children:[z,jsx(h,{variant:"overline",color:"text.disabled",children:W})]}),jsxs(d,{direction:"row",alignItems:"center",spacing:1.5,children:[jsx(a$1,{fullWidth:!0,size:"small",iconPosition:"start",placeholder:"Buscar",trigger:"change",onSearch:G,onKeyDown:K}),a?jsx(Fragment,{children:a}):jsx(J,{onClick:B,size:"small",disabled:s,children:jsx(h,{variant:"overline",children:"TODOS"})})]}),jsx(a$2,{children:jsx(d,{flex:1,mb:2,children:jsx(a$3,{isLoading:i,loading:jsx(d,{alignItems:"center",mt:3,children:jsx(Q,{})}),isEmpty:n.length===0,empty:jsx(a$4,{sx:{svg:{height:140}},text:c?`N\xE3o foi possivel encontrar o item "${c}"`:"Nenhum item dispon\xEDvel"}),children:jsx(j,{container:!0,spacing:1.5,children:$.map(t=>jsx(D,{item:t,isSelected:y(t.value),disabled:s,onSelectItem:A},t.value))})})})})]})},vr=rr;
17
-
18
- export { vr as a };
19
- //# sourceMappingURL=chunk-SDS77DQQ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/SelectableCards/index.tsx","../src/components/SelectableCards/CardItem.tsx","../src/components/SelectableCards/style.ts"],"names":["useCallback","useMemo","useState","Button","CircularProgress","Grid","Stack","Typography","memo","Card","alpha","styled","StyledCard","prop","theme","active","disabled","jsx","jsxs","CardItem","item","isSelected","onSelectItem","handleClick","Icon_default","option","CardItem_default","Fragment","enCardinalRules","strings","formatStrings","n","rule","suffix","SelectableCards","title","action","loading","items","values","onChange","search","setSearch","valuesSet","itemId","filteredItems","searchLower","isItemAlreadySelected","newSelectedOptions","element","allItemValues","selectAllItems","handleSearch","value","handleKeyDown","event","selectedCount","titleComponent","SearchInput_default","Scrollbar_default","Result_default","EmptyView_default","SelectableCards_default"],"mappings":"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","sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Grid from '@mui/material/Grid';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport EmptyView from 'components/EmptyView';\nimport Result from 'components/Result';\nimport Scrollbar from 'components/Scrollbar';\nimport SearchInput from 'components/SearchInput';\n\nimport CardItem from './CardItem';\nimport { Option, SelectableCardsProps } from './props';\n\nconst enCardinalRules = new Intl.PluralRules('pt-BR');\n\nconst strings = new Map([\n ['one', 'selecionado'],\n ['other', 'selecionados'],\n]);\n\nconst formatStrings = (n: number) => {\n const rule = enCardinalRules.select(n);\n const suffix = strings.get(rule);\n return `${n} ${suffix}`;\n};\n\nconst SelectableCards = ({\n title,\n action,\n loading,\n items,\n values,\n onChange,\n disabled = false,\n}: SelectableCardsProps) => {\n const [search, setSearch] = useState<string>();\n\n const valuesSet = useMemo(() => new Set(values), [values]);\n\n const isSelected = useCallback(\n (itemId: string) => {\n return valuesSet.has(itemId);\n },\n [valuesSet],\n );\n\n const filteredItems = useMemo(() => {\n if (!search) return items;\n const searchLower = search.toLowerCase();\n return items.filter(item => item.title.toLowerCase().includes(searchLower));\n }, [items, search]);\n\n const onSelectItem = useCallback(\n (item: Option) => {\n if (disabled) return;\n const isItemAlreadySelected = isSelected(item.value);\n\n let newSelectedOptions: string[];\n\n if (isItemAlreadySelected) {\n newSelectedOptions = values.filter(element => element !== item.value);\n } else {\n newSelectedOptions = [...values, item.value];\n }\n\n onChange(newSelectedOptions);\n },\n [disabled, isSelected, onChange, values],\n );\n\n const allItemValues = useMemo(() => items.map(item => item.value), [items]);\n\n const selectAllItems = useCallback(() => {\n if (disabled) return;\n if (values.length === items.length) {\n onChange([]);\n } else {\n onChange(allItemValues);\n }\n }, [disabled, items.length, onChange, values.length, allItemValues]);\n\n const handleSearch = useCallback((value: string) => setSearch(value), []);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n }\n };\n\n const selectedCount = useMemo(\n () =>\n values.length === 0 ? 'nenhum selecionado' : formatStrings(values.length),\n [values.length],\n );\n\n const titleComponent = useMemo(\n () =>\n typeof title === 'string' ? (\n <Typography variant=\"overline\" color=\"text.disabled\">\n {title}\n </Typography>\n ) : (\n title\n ),\n [title],\n );\n\n return (\n <Stack gap={1.5} height={450}>\n <Stack direction=\"row\" justifyContent=\"space-between\">\n {titleComponent}\n <Typography variant=\"overline\" color=\"text.disabled\">\n {selectedCount}\n </Typography>\n </Stack>\n <Stack direction=\"row\" alignItems=\"center\" spacing={1.5}>\n <SearchInput\n fullWidth\n size=\"small\"\n iconPosition=\"start\"\n placeholder=\"Buscar\"\n trigger=\"change\"\n onSearch={handleSearch}\n onKeyDown={handleKeyDown}\n />\n\n {action ? (\n <>{action}</>\n ) : (\n <Button onClick={selectAllItems} size=\"small\" disabled={disabled}>\n <Typography variant=\"overline\">TODOS</Typography>\n </Button>\n )}\n </Stack>\n\n <Scrollbar>\n <Stack flex={1} mb={2}>\n <Result\n isLoading={loading}\n loading={\n <Stack alignItems=\"center\" mt={3}>\n <CircularProgress />\n </Stack>\n }\n isEmpty={items.length === 0}\n empty={\n <EmptyView\n sx={{ svg: { height: 140 } }}\n text={\n search\n ? `Não foi possivel encontrar o item \"${search}\"`\n : 'Nenhum item disponível'\n }\n />\n }\n >\n <Grid container spacing={1.5}>\n {filteredItems.map(item => (\n <CardItem\n key={item.value}\n item={item}\n isSelected={isSelected(item.value)}\n disabled={disabled}\n onSelectItem={onSelectItem}\n />\n ))}\n </Grid>\n </Result>\n </Stack>\n </Scrollbar>\n </Stack>\n );\n};\n\nexport default SelectableCards;\n","import { memo, useCallback } from 'react';\nimport Grid from '@mui/material/Grid';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nimport { CardItemProps } from './props';\nimport { StyledCard } from './style';\n\nconst CardItem = memo(\n ({ item, isSelected, disabled, onSelectItem }: CardItemProps) => {\n const handleClick = useCallback(() => {\n onSelectItem(item);\n }, [item, onSelectItem]);\n\n return (\n <Grid key={item.title} item xs={4}>\n <StyledCard\n active={isSelected}\n onClick={handleClick}\n disabled={disabled}\n >\n <Stack padding={1.5} width=\"100%\">\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <Typography\n color={isSelected ? 'primary.main' : 'text.primary'}\n variant=\"subtitle2\"\n textAlign=\"left\"\n noWrap\n >\n {item.title}\n </Typography>\n\n {isSelected && <Icon icon=\"CHECK_CIRCLE\" width={24} />}\n </Stack>\n\n {item.options.map(option => (\n <Typography\n key={option.label}\n mt={1}\n variant=\"body2\"\n color=\"text.disabled\"\n fontSize={12}\n textAlign=\"left\"\n noWrap\n >\n {`${option.label}: ${option.value}`}\n </Typography>\n ))}\n </Stack>\n </StyledCard>\n </Grid>\n );\n },\n);\n\nCardItem.displayName = 'CardItem';\n\nexport default CardItem;\n","import Card from '@mui/material/Card';\nimport { alpha, styled } from '@mui/material/styles';\n\nimport { CardProps } from './props';\n\nexport const StyledCard = styled(Card, {\n shouldForwardProp: prop => prop !== 'active' && prop !== 'disabled',\n})<CardProps>(({ theme, active, disabled }) => ({\n boxShadow: 'none',\n\n borderRadius: 8,\n borderStyle: 'solid',\n borderWidth: 1.5,\n borderColor: active ? theme.palette.primary.main : theme.palette.grey[300],\n\n color: theme.palette.primary.main,\n backgroundColor: active ? alpha(theme.palette.primary.main, 0.04) : 'white',\n\n '&:hover': {\n borderColor: theme.palette.primary.main,\n },\n\n ...(disabled\n ? {\n opacity: 0.6,\n cursor: 'default',\n }\n : {\n opacity: 1,\n cursor: 'pointer',\n }),\n}));\n"]}