@peak-ai/canvas 1.3.3-rc.39 → 1.3.3-rc.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@peak-ai/canvas",
3
3
  "author": "squad-builder-experience",
4
4
  "license": "UNLICENSED",
5
- "version": "1.3.3-rc.39",
5
+ "version": "1.3.3-rc.40",
6
6
  "description": "",
7
7
  "dependencies": {
8
8
  "@peak-ai/ais-components": "6.41.0",
@@ -1,2 +1,2 @@
1
- import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _extends from"@babel/runtime/helpers/extends";import _regeneratorRuntime from"@babel/runtime/regenerator";/* eslint-disable @typescript-eslint/no-explicit-any */import{useCallback,useEffect,useRef,useState}from"react";import isEqual from"lodash/isEqual";import{Button}from"./button";import{Checkbox}from"./checkbox";import{Loader2Icon}from"lucide-react";import{ScrollArea}from"./scroll-area";import{getAffectedComponentsWithLoader}from"../../../helpers";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";function FilterHeader(_ref){var label=_ref.label,count=_ref.count,isDisabled=_ref.isDisabled,isLoading=_ref.isLoading,toggleOpen=_ref.toggleOpen;return/*#__PURE__*/_jsxs(Button,{variant:"outline",size:"sm",disabled:isDisabled,onClick:toggleOpen,children:[count>0?label+" ("+count+")":label,isLoading&&/*#__PURE__*/_jsx(Loader2Icon,{className:"ml-2 animate-spin",size:16})]})}function FilterActions(_ref2){var selected=_ref2.selected,allSelected=_ref2.allSelected,onClear=_ref2.onClear,onSelectAll=_ref2.onSelectAll,isDisabled=_ref2.isDisabled;return/*#__PURE__*/_jsxs("div",{className:"flex items-center mb-3",children:[/*#__PURE__*/_jsx(Checkbox,{checked:allSelected,onCheckedChange:function onCheckedChange(){return allSelected?onClear():onSelectAll()},disabled:isDisabled}),/*#__PURE__*/_jsx("span",{className:"ml-2 text-sm text-gray-900",children:"Select All"}),selected.length>0&&/*#__PURE__*/_jsx("button",{type:"button",className:"ml-auto text-sm text-blue-600 hover:underline",onMouseDown:function onMouseDown(e){e.stopPropagation();e.preventDefault()},onClick:onClear,disabled:isDisabled,children:"Clear All"})]})}function FilterOptionList(_ref3){var options=_ref3.options,selected=_ref3.selected,onToggle=_ref3.onToggle,isDisabled=_ref3.isDisabled;return/*#__PURE__*/_jsx(ScrollArea,{className:"max-h-48 mb-4 space-y-2",children:options.length>0?options.map(function(opt){return/*#__PURE__*/_jsxs("label",{className:"flex items-center space-x-2 hover:bg-gray-100 rounded p-1 transition",children:[/*#__PURE__*/_jsx(Checkbox,{checked:selected.includes(opt.value),onCheckedChange:function onCheckedChange(){return onToggle(opt.value)},disabled:isDisabled}),/*#__PURE__*/_jsx("span",{className:"text-sm text-gray-900",children:opt.label})]},opt.value)}):/*#__PURE__*/_jsx("div",{className:"text-sm text-gray-500",children:"No results found"})})}export function renderFilter(_ref4){var _ref4$isEditable=_ref4.isEditable,isEditable=_ref4$isEditable===void 0?false:_ref4$isEditable,gjsModel=_ref4.gjsModel,performInteraction=_ref4.performInteraction;var wrapperRef=useRef(null);var _useState=useState(_extends({},gjsModel.get("componentProps"))),componentData=_useState[0],setComponentData=_useState[1];var _useState2=useState(_extends({},gjsModel.get("attributes"))),attributes=_useState2[0],setAttributes=_useState2[1];var _useState3=useState(false),isDropdownOpen=_useState3[0],setIsDropdownOpen=_useState3[1];var _useState4=useState(""),searchQuery=_useState4[0],setSearchQuery=_useState4[1];var _useState5=useState(false),isApplying=_useState5[0],setIsApplying=_useState5[1];var _componentData$option=componentData.options,options=_componentData$option===void 0?[]:_componentData$option,_componentData$value=componentData.value,value=_componentData$value===void 0?[]:_componentData$value,_componentData$classN=componentData.className,className=_componentData$classN===void 0?"":_componentData$classN,_componentData$affect=componentData.affectedComponents,affectedComponents=_componentData$affect===void 0?[]:_componentData$affect,id=componentData.id,_componentData$text=componentData.text,label=_componentData$text===void 0?"Filter":_componentData$text,_componentData$filter=componentData.filterType,filterType=_componentData$filter===void 0?"multiselect":_componentData$filter;var defaultValue=componentData["default"]||[];var _useState6=useState(value!=null&&value.length?value:defaultValue),selectedValues=_useState6[0],setSelectedValues=_useState6[1];var isFirstRender=useRef(true);var isMultiSelect=filterType==="multiselect";var isBusy=attributes.interactionApiInProgress||isApplying;var allOptionsSelected=selectedValues.length===options.length&&options.length>0;useEffect(function(){if(isFirstRender.current){if(Array.isArray(value)&&value.length===0&&defaultValue.length>0){setSelectedValues(defaultValue)}else{setSelectedValues(value)}isFirstRender.current=false}else if(!isEqual(value,selectedValues)){setSelectedValues(value)}},[value]);useEffect(function(){function updateComponentData(){setComponentData(_extends({},gjsModel.get("componentProps")))}function updateAttributes(){setAttributes(_extends({},gjsModel.get("attributes")))}gjsModel.on("change:componentProps",updateComponentData);gjsModel.on("change:attributes",updateAttributes);return function(){gjsModel.off("change:componentProps",updateComponentData);gjsModel.off("change:attributes",updateAttributes)}},[gjsModel]);useEffect(function(){var _wrapperRef$current$o,_wrapperRef$current;var doc=(_wrapperRef$current$o=(_wrapperRef$current=wrapperRef.current)==null?void 0:_wrapperRef$current.ownerDocument)!=null?_wrapperRef$current$o:document;function handleOutsideClick(e){if(isDropdownOpen&&wrapperRef.current&&!wrapperRef.current.contains(e.target)){setIsDropdownOpen(false)}}function handleEscape(e){if(e.key==="Escape"){setIsDropdownOpen(false)}}doc.addEventListener("pointerdown",handleOutsideClick);doc.addEventListener("keydown",handleEscape);return function(){doc.removeEventListener("pointerdown",handleOutsideClick);doc.removeEventListener("keydown",handleEscape)}},[isDropdownOpen]);var filteredOptions=options.filter(function(opt){return opt.label.toLowerCase().includes(searchQuery.toLowerCase())});function updateAndApply(_x){return _updateAndApply.apply(this,arguments)}function _updateAndApply(){_updateAndApply=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(newValues){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(newValues===void 0){newValues=selectedValues}setIsApplying(true);_context.prev=2;gjsModel.set("componentProps",_extends({},gjsModel.get("componentProps"),{value:newValues},isEditable&&{"default":newValues}));_context.next=6;return performInteraction({interactionType:"filter",id:id,affectedComponents:getAffectedComponentsWithLoader([id].concat(affectedComponents),true)});case 6:_context.prev=6;setIsApplying(false);setIsDropdownOpen(false);return _context.finish(6);case 10:case"end":return _context.stop()}},_callee,null,[[2,,6,10]])}));return _updateAndApply.apply(this,arguments)}var handleOptionToggle=useCallback(function(val){if(isMultiSelect){setSelectedValues(function(prev){return prev.includes(val)?prev.filter(function(v){return v!==val}):[].concat(prev,[val])})}else{if(selectedValues.includes(val)){setSelectedValues([]);updateAndApply([])}else{var singleValue=[val];setSelectedValues(singleValue);updateAndApply(singleValue)}}},[isMultiSelect,selectedValues]);function handleClearAll(){setSelectedValues([])}function handleSelectAll(){setSelectedValues(options.map(function(o){return o.value}))}return/*#__PURE__*/_jsxs("div",{ref:wrapperRef,className:"relative inline-block "+className,children:[/*#__PURE__*/_jsx(FilterHeader,{label:label,count:selectedValues.length,isDisabled:isBusy,isLoading:isBusy,toggleOpen:function toggleOpen(){return setIsDropdownOpen(function(prev){return!prev})}}),isDropdownOpen&&/*#__PURE__*/_jsxs("div",{className:"absolute left-0 top-full mt-2 w-64 bg-white border rounded-lg shadow-lg ring-1 ring-black ring-opacity-5 p-4 z-50",children:[/*#__PURE__*/_jsx("input",{type:"text",placeholder:"Search...",value:searchQuery,onChange:function onChange(e){return setSearchQuery(e.target.value)},className:"w-full mb-3 px-2 py-1 border rounded focus:outline-none",disabled:isBusy}),isMultiSelect&&/*#__PURE__*/_jsx(FilterActions,{selected:selectedValues,allSelected:allOptionsSelected,onClear:handleClearAll,onSelectAll:handleSelectAll,isDisabled:isBusy}),/*#__PURE__*/_jsx(FilterOptionList,{options:filteredOptions,selected:selectedValues,onToggle:handleOptionToggle,isDisabled:isBusy}),isMultiSelect&&/*#__PURE__*/_jsxs("div",{className:"flex justify-end space-x-2",children:[/*#__PURE__*/_jsx(Button,{variant:"ghost",size:"sm",onClick:function onClick(){return setIsDropdownOpen(false)},disabled:isApplying,children:"Cancel"}),/*#__PURE__*/_jsxs(Button,{variant:"default",size:"sm",onClick:function onClick(){return updateAndApply(selectedValues)},disabled:isBusy,children:[isApplying&&/*#__PURE__*/_jsx(Loader2Icon,{className:"animate-spin mr-2",size:16}),"Apply"]})]})]})]})}
1
+ import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _extends from"@babel/runtime/helpers/extends";import _regeneratorRuntime from"@babel/runtime/regenerator";/* eslint-disable @typescript-eslint/no-explicit-any */import{useCallback,useEffect,useRef,useState}from"react";import isEqual from"lodash/isEqual";import{Button}from"./button";import{Checkbox}from"./checkbox";import{Loader2Icon}from"lucide-react";import{ScrollArea}from"./scroll-area";import{getAffectedComponentsWithLoader}from"../../../helpers";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";function FilterHeader(_ref){var label=_ref.label,count=_ref.count,isDisabled=_ref.isDisabled,isLoading=_ref.isLoading,toggleOpen=_ref.toggleOpen;return/*#__PURE__*/_jsxs(Button,{variant:"outline",size:"sm",disabled:isDisabled,onClick:toggleOpen,children:[count>0?label+" ("+count+")":label,isLoading&&/*#__PURE__*/_jsx(Loader2Icon,{className:"ml-2 animate-spin",size:16})]})}function FilterActions(_ref2){var selected=_ref2.selected,allSelected=_ref2.allSelected,onClear=_ref2.onClear,onSelectAll=_ref2.onSelectAll,isDisabled=_ref2.isDisabled;return/*#__PURE__*/_jsxs("div",{className:"flex items-center mb-3",children:[/*#__PURE__*/_jsx(Checkbox,{checked:allSelected,onCheckedChange:function onCheckedChange(){return allSelected?onClear():onSelectAll()},disabled:isDisabled}),/*#__PURE__*/_jsx("span",{className:"ml-2 text-sm text-gray-900",children:"Select All"}),selected.length>0&&/*#__PURE__*/_jsx("button",{type:"button",className:"ml-auto text-sm text-blue-600 hover:underline",onMouseDown:function onMouseDown(e){e.stopPropagation();e.preventDefault()},onClick:onClear,disabled:isDisabled,children:"Clear All"})]})}function FilterOptionList(_ref3){var options=_ref3.options,selected=_ref3.selected,onToggle=_ref3.onToggle,isDisabled=_ref3.isDisabled;return/*#__PURE__*/_jsx(ScrollArea,{className:"max-h-48 mb-4 space-y-2",children:options.length>0?options.map(function(opt){return/*#__PURE__*/_jsxs("label",{className:"flex items-center space-x-2 hover:bg-gray-100 rounded p-1 transition",children:[/*#__PURE__*/_jsx(Checkbox,{checked:selected.includes(opt.value),onCheckedChange:function onCheckedChange(){return onToggle(opt.value)},disabled:isDisabled}),/*#__PURE__*/_jsx("span",{className:"text-sm text-gray-900",children:opt.label})]},opt.value)}):/*#__PURE__*/_jsx("div",{className:"text-sm text-gray-500",children:"No results found"})})}export function renderFilter(_ref4){var _ref4$isEditable=_ref4.isEditable,isEditable=_ref4$isEditable===void 0?false:_ref4$isEditable,gjsModel=_ref4.gjsModel,performInteraction=_ref4.performInteraction;var wrapperRef=useRef(null);var _useState=useState(_extends({},gjsModel.get("componentProps"))),componentData=_useState[0],setComponentData=_useState[1];var _useState2=useState(_extends({},gjsModel.get("attributes"))),attributes=_useState2[0],setAttributes=_useState2[1];var _useState3=useState(false),isDropdownOpen=_useState3[0],setIsDropdownOpen=_useState3[1];var _useState4=useState(""),searchQuery=_useState4[0],setSearchQuery=_useState4[1];var _useState5=useState(false),isApplying=_useState5[0],setIsApplying=_useState5[1];var _componentData$option=componentData.options,options=_componentData$option===void 0?[]:_componentData$option,_componentData$value=componentData.value,value=_componentData$value===void 0?[]:_componentData$value,_componentData$classN=componentData.className,className=_componentData$classN===void 0?"":_componentData$classN,_componentData$affect=componentData.affectedComponents,affectedComponents=_componentData$affect===void 0?[]:_componentData$affect,id=componentData.id,_componentData$text=componentData.text,label=_componentData$text===void 0?"Filter":_componentData$text,_componentData$filter=componentData.filterType,filterType=_componentData$filter===void 0?"multiselect":_componentData$filter;var defaultValue=componentData["default"]||[];var _useState6=useState(value!=null&&value.length?value:defaultValue),selectedValues=_useState6[0],setSelectedValues=_useState6[1];var isFirstRender=useRef(true);var isMultiSelect=filterType==="multiselect";var isBusy=attributes.interactionApiInProgress||isApplying;var allOptionsSelected=selectedValues.length===options.length&&options.length>0;useEffect(function(){console.log({firstRefValue:isFirstRender.current,value:value,selectedValues:selectedValues,defaultValue:defaultValue});if(isFirstRender.current){if(Array.isArray(value)&&value.length===0&&defaultValue.length>0){setSelectedValues(defaultValue)}else{setSelectedValues(value)}isFirstRender.current=false}else if(!isEqual(value,selectedValues)){setSelectedValues(value)}},[value]);useEffect(function(){function updateComponentData(){setComponentData(_extends({},gjsModel.get("componentProps")))}function updateAttributes(){setAttributes(_extends({},gjsModel.get("attributes")))}gjsModel.on("change:componentProps",updateComponentData);gjsModel.on("change:attributes",updateAttributes);return function(){gjsModel.off("change:componentProps",updateComponentData);gjsModel.off("change:attributes",updateAttributes)}},[gjsModel]);useEffect(function(){var _wrapperRef$current$o,_wrapperRef$current;var doc=(_wrapperRef$current$o=(_wrapperRef$current=wrapperRef.current)==null?void 0:_wrapperRef$current.ownerDocument)!=null?_wrapperRef$current$o:document;function handleOutsideClick(e){if(isDropdownOpen&&wrapperRef.current&&!wrapperRef.current.contains(e.target)){setIsDropdownOpen(false)}}function handleEscape(e){if(e.key==="Escape"){setIsDropdownOpen(false)}}doc.addEventListener("pointerdown",handleOutsideClick);doc.addEventListener("keydown",handleEscape);return function(){doc.removeEventListener("pointerdown",handleOutsideClick);doc.removeEventListener("keydown",handleEscape)}},[isDropdownOpen]);var filteredOptions=options.filter(function(opt){return opt.label.toLowerCase().includes(searchQuery.toLowerCase())});function updateAndApply(_x){return _updateAndApply.apply(this,arguments)}function _updateAndApply(){_updateAndApply=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(newValues){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(newValues===void 0){newValues=selectedValues}setIsApplying(true);_context.prev=2;gjsModel.set("componentProps",_extends({},gjsModel.get("componentProps"),{value:newValues},isEditable&&{"default":newValues}));_context.next=6;return performInteraction({interactionType:"filter",id:id,affectedComponents:getAffectedComponentsWithLoader([id].concat(affectedComponents),true)});case 6:_context.prev=6;setIsApplying(false);setIsDropdownOpen(false);return _context.finish(6);case 10:case"end":return _context.stop()}},_callee,null,[[2,,6,10]])}));return _updateAndApply.apply(this,arguments)}var handleOptionToggle=useCallback(function(val){if(isMultiSelect){setSelectedValues(function(prev){return prev.includes(val)?prev.filter(function(v){return v!==val}):[].concat(prev,[val])})}else{if(selectedValues.includes(val)){setSelectedValues([]);updateAndApply([])}else{var singleValue=[val];setSelectedValues(singleValue);updateAndApply(singleValue)}}},[isMultiSelect,selectedValues]);function handleClearAll(){setSelectedValues([])}function handleSelectAll(){setSelectedValues(options.map(function(o){return o.value}))}return/*#__PURE__*/_jsxs("div",{ref:wrapperRef,className:"relative inline-block "+className,children:[/*#__PURE__*/_jsx(FilterHeader,{label:label,count:selectedValues.length,isDisabled:isBusy,isLoading:isBusy,toggleOpen:function toggleOpen(){return setIsDropdownOpen(function(prev){return!prev})}}),isDropdownOpen&&/*#__PURE__*/_jsxs("div",{className:"absolute left-0 top-full mt-2 w-64 bg-white border rounded-lg shadow-lg ring-1 ring-black ring-opacity-5 p-4 z-50",children:[/*#__PURE__*/_jsx("input",{type:"text",placeholder:"Search...",value:searchQuery,onChange:function onChange(e){return setSearchQuery(e.target.value)},className:"w-full mb-3 px-2 py-1 border rounded focus:outline-none",disabled:isBusy}),isMultiSelect&&/*#__PURE__*/_jsx(FilterActions,{selected:selectedValues,allSelected:allOptionsSelected,onClear:handleClearAll,onSelectAll:handleSelectAll,isDisabled:isBusy}),/*#__PURE__*/_jsx(FilterOptionList,{options:filteredOptions,selected:selectedValues,onToggle:handleOptionToggle,isDisabled:isBusy}),isMultiSelect&&/*#__PURE__*/_jsxs("div",{className:"flex justify-end space-x-2",children:[/*#__PURE__*/_jsx(Button,{variant:"ghost",size:"sm",onClick:function onClick(){return setIsDropdownOpen(false)},disabled:isApplying,children:"Cancel"}),/*#__PURE__*/_jsxs(Button,{variant:"default",size:"sm",onClick:function onClick(){return updateAndApply(selectedValues)},disabled:isBusy,children:[isApplying&&/*#__PURE__*/_jsx(Loader2Icon,{className:"animate-spin mr-2",size:16}),"Apply"]})]})]})]})}
2
2
  //# sourceMappingURL=filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","names":["useCallback","useEffect","useRef","useState","isEqual","Button","Checkbox","Loader2Icon","ScrollArea","getAffectedComponentsWithLoader","jsx","_jsx","jsxs","_jsxs","FilterHeader","_ref","label","count","isDisabled","isLoading","toggleOpen","variant","size","disabled","onClick","children","className","FilterActions","_ref2","selected","allSelected","onClear","onSelectAll","checked","onCheckedChange","length","type","onMouseDown","e","stopPropagation","preventDefault","FilterOptionList","_ref3","options","onToggle","map","opt","includes","value","renderFilter","_ref4","_ref4$isEditable","isEditable","gjsModel","performInteraction","wrapperRef","_useState","_extends","get","componentData","setComponentData","_useState2","attributes","setAttributes","_useState3","isDropdownOpen","setIsDropdownOpen","_useState4","searchQuery","setSearchQuery","_useState5","isApplying","setIsApplying","_componentData$option","_componentData$value","_componentData$classN","_componentData$affect","affectedComponents","id","_componentData$text","text","_componentData$filter","filterType","defaultValue","_useState6","selectedValues","setSelectedValues","isFirstRender","isMultiSelect","isBusy","interactionApiInProgress","allOptionsSelected","current","Array","isArray","updateComponentData","updateAttributes","on","off","_wrapperRef$current$o","_wrapperRef$current","doc","ownerDocument","document","handleOutsideClick","contains","target","handleEscape","key","addEventListener","removeEventListener","filteredOptions","filter","toLowerCase","updateAndApply","_x","_updateAndApply","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","newValues","wrap","_callee$","_context","prev","next","set","interactionType","concat","finish","stop","handleOptionToggle","val","v","singleValue","handleClearAll","handleSelectAll","o","ref","placeholder","onChange"],"sources":["../../../../src/shadcn/components/ui/filter.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport isEqual from 'lodash/isEqual';\n\nimport { Button } from './button';\nimport { Checkbox } from './checkbox';\nimport { Loader2Icon } from 'lucide-react';\nimport { ScrollArea } from './scroll-area';\nimport { getAffectedComponentsWithLoader } from '../../../helpers';\n\ntype FilterOption = {\n label: string;\n value: string;\n};\n\ntype FilterProps = {\n isEditable?: boolean;\n gjsModel: any;\n performInteraction: (payload: Record<string, any>) => Promise<void>;\n};\n\ntype FilterHeaderProps = {\n label: string;\n count: number;\n isDisabled: boolean;\n isLoading: boolean;\n toggleOpen: () => void;\n};\n\ntype FilterActionsProps = {\n selected: string[];\n allSelected: boolean;\n onClear: () => void;\n onSelectAll: () => void;\n isDisabled: boolean;\n};\n\ntype FilterOptionListProps = {\n options: FilterOption[];\n selected: string[];\n onToggle: (value: string) => void;\n isDisabled: boolean;\n};\n\nfunction FilterHeader({ label, count, isDisabled, isLoading, toggleOpen }: FilterHeaderProps) {\n return (\n <Button variant=\"outline\" size=\"sm\" disabled={isDisabled} onClick={toggleOpen}>\n {count > 0 ? `${label} (${count})` : label}\n {isLoading && <Loader2Icon className=\"ml-2 animate-spin\" size={16} />}\n </Button>\n );\n}\n\nfunction FilterActions({\n selected,\n allSelected,\n onClear,\n onSelectAll,\n isDisabled,\n}: FilterActionsProps) {\n return (\n <div className=\"flex items-center mb-3\">\n <Checkbox\n checked={allSelected}\n onCheckedChange={() => (allSelected ? onClear() : onSelectAll())}\n disabled={isDisabled}\n />\n <span className=\"ml-2 text-sm text-gray-900\">Select All</span>\n {selected.length > 0 && (\n <button\n type=\"button\"\n className=\"ml-auto text-sm text-blue-600 hover:underline\"\n onMouseDown={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n onClick={onClear}\n disabled={isDisabled}\n >\n Clear All\n </button>\n )}\n </div>\n );\n}\n\nfunction FilterOptionList({ options, selected, onToggle, isDisabled }: FilterOptionListProps) {\n return (\n <ScrollArea className=\"max-h-48 mb-4 space-y-2\">\n {options.length > 0 ? (\n options.map((opt) => (\n <label\n key={opt.value}\n className=\"flex items-center space-x-2 hover:bg-gray-100 rounded p-1 transition\"\n >\n <Checkbox\n checked={selected.includes(opt.value)}\n onCheckedChange={() => onToggle(opt.value)}\n disabled={isDisabled}\n />\n <span className=\"text-sm text-gray-900\">{opt.label}</span>\n </label>\n ))\n ) : (\n <div className=\"text-sm text-gray-500\">No results found</div>\n )}\n </ScrollArea>\n );\n}\n\nexport function renderFilter({ isEditable = false, gjsModel, performInteraction }: FilterProps) {\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const [componentData, setComponentData] = useState({ ...gjsModel.get('componentProps') });\n const [attributes, setAttributes] = useState({ ...gjsModel.get('attributes') });\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [isApplying, setIsApplying] = useState(false);\n\n const {\n options = [],\n value = [],\n className = '',\n affectedComponents = [],\n id,\n text: label = 'Filter',\n filterType = 'multiselect',\n } = componentData;\n\n const defaultValue = componentData.default || [];\n\n const [selectedValues, setSelectedValues] = useState<string[]>(\n value?.length ? value : defaultValue,\n );\n\n const isFirstRender = useRef(true);\n\n const isMultiSelect = filterType === 'multiselect';\n const isBusy = attributes.interactionApiInProgress || isApplying;\n const allOptionsSelected = selectedValues.length === options.length && options.length > 0;\n\n useEffect(() => {\n if (isFirstRender.current) {\n if (Array.isArray(value) && value.length === 0 && defaultValue.length > 0) {\n setSelectedValues(defaultValue);\n } else {\n setSelectedValues(value);\n }\n\n isFirstRender.current = false;\n } else if (!isEqual(value, selectedValues)) {\n setSelectedValues(value);\n }\n }, [value]);\n\n useEffect(() => {\n function updateComponentData() {\n setComponentData({ ...gjsModel.get('componentProps') });\n }\n\n function updateAttributes() {\n setAttributes({ ...gjsModel.get('attributes') });\n }\n\n gjsModel.on('change:componentProps', updateComponentData);\n gjsModel.on('change:attributes', updateAttributes);\n\n return () => {\n gjsModel.off('change:componentProps', updateComponentData);\n gjsModel.off('change:attributes', updateAttributes);\n };\n }, [gjsModel]);\n\n useEffect(() => {\n const doc = wrapperRef.current?.ownerDocument ?? document;\n\n function handleOutsideClick(e: PointerEvent) {\n if (isDropdownOpen && wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n setIsDropdownOpen(false);\n }\n }\n\n function handleEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setIsDropdownOpen(false);\n }\n }\n\n doc.addEventListener('pointerdown', handleOutsideClick);\n doc.addEventListener('keydown', handleEscape);\n\n return () => {\n doc.removeEventListener('pointerdown', handleOutsideClick);\n doc.removeEventListener('keydown', handleEscape);\n };\n }, [isDropdownOpen]);\n\n const filteredOptions = options.filter((opt: FilterOption) =>\n opt.label.toLowerCase().includes(searchQuery.toLowerCase()),\n );\n\n async function updateAndApply(newValues: string[] = selectedValues) {\n setIsApplying(true);\n\n try {\n gjsModel.set('componentProps', {\n ...gjsModel.get('componentProps'),\n value: newValues,\n ...(isEditable && { default: newValues }),\n });\n\n await performInteraction({\n interactionType: 'filter',\n id,\n affectedComponents: getAffectedComponentsWithLoader([id, ...affectedComponents], true),\n });\n } finally {\n setIsApplying(false);\n setIsDropdownOpen(false);\n }\n }\n\n const handleOptionToggle = useCallback(\n (val: string) => {\n if (isMultiSelect) {\n setSelectedValues((prev) =>\n prev.includes(val) ? prev.filter((v) => v !== val) : [...prev, val],\n );\n } else {\n if (selectedValues.includes(val)) {\n setSelectedValues([]);\n updateAndApply([]);\n } else {\n const singleValue = [val];\n setSelectedValues(singleValue);\n updateAndApply(singleValue);\n }\n }\n },\n [isMultiSelect, selectedValues],\n );\n\n function handleClearAll() {\n setSelectedValues([]);\n }\n\n function handleSelectAll() {\n setSelectedValues(options.map((o: FilterOption) => o.value));\n }\n\n return (\n <div ref={wrapperRef} className={`relative inline-block ${className}`}>\n <FilterHeader\n label={label}\n count={selectedValues.length}\n isDisabled={isBusy}\n isLoading={isBusy}\n toggleOpen={() => setIsDropdownOpen((prev) => !prev)}\n />\n\n {isDropdownOpen && (\n <div className=\"absolute left-0 top-full mt-2 w-64 bg-white border rounded-lg shadow-lg ring-1 ring-black ring-opacity-5 p-4 z-50\">\n <input\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full mb-3 px-2 py-1 border rounded focus:outline-none\"\n disabled={isBusy}\n />\n\n {isMultiSelect && (\n <FilterActions\n selected={selectedValues}\n allSelected={allOptionsSelected}\n onClear={handleClearAll}\n onSelectAll={handleSelectAll}\n isDisabled={isBusy}\n />\n )}\n\n <FilterOptionList\n options={filteredOptions}\n selected={selectedValues}\n onToggle={handleOptionToggle}\n isDisabled={isBusy}\n />\n\n {isMultiSelect && (\n <div className=\"flex justify-end space-x-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsDropdownOpen(false)}\n disabled={isApplying}\n >\n Cancel\n </Button>\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={() => updateAndApply(selectedValues)}\n disabled={isBusy}\n >\n {isApplying && <Loader2Icon className=\"animate-spin mr-2\" size={16} />}Apply\n </Button>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"filter.js","names":["useCallback","useEffect","useRef","useState","isEqual","Button","Checkbox","Loader2Icon","ScrollArea","getAffectedComponentsWithLoader","jsx","_jsx","jsxs","_jsxs","FilterHeader","_ref","label","count","isDisabled","isLoading","toggleOpen","variant","size","disabled","onClick","children","className","FilterActions","_ref2","selected","allSelected","onClear","onSelectAll","checked","onCheckedChange","length","type","onMouseDown","e","stopPropagation","preventDefault","FilterOptionList","_ref3","options","onToggle","map","opt","includes","value","renderFilter","_ref4","_ref4$isEditable","isEditable","gjsModel","performInteraction","wrapperRef","_useState","_extends","get","componentData","setComponentData","_useState2","attributes","setAttributes","_useState3","isDropdownOpen","setIsDropdownOpen","_useState4","searchQuery","setSearchQuery","_useState5","isApplying","setIsApplying","_componentData$option","_componentData$value","_componentData$classN","_componentData$affect","affectedComponents","id","_componentData$text","text","_componentData$filter","filterType","defaultValue","_useState6","selectedValues","setSelectedValues","isFirstRender","isMultiSelect","isBusy","interactionApiInProgress","allOptionsSelected","console","log","firstRefValue","current","Array","isArray","updateComponentData","updateAttributes","on","off","_wrapperRef$current$o","_wrapperRef$current","doc","ownerDocument","document","handleOutsideClick","contains","target","handleEscape","key","addEventListener","removeEventListener","filteredOptions","filter","toLowerCase","updateAndApply","_x","_updateAndApply","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","newValues","wrap","_callee$","_context","prev","next","set","interactionType","concat","finish","stop","handleOptionToggle","val","v","singleValue","handleClearAll","handleSelectAll","o","ref","placeholder","onChange"],"sources":["../../../../src/shadcn/components/ui/filter.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport isEqual from 'lodash/isEqual';\n\nimport { Button } from './button';\nimport { Checkbox } from './checkbox';\nimport { Loader2Icon } from 'lucide-react';\nimport { ScrollArea } from './scroll-area';\nimport { getAffectedComponentsWithLoader } from '../../../helpers';\n\ntype FilterOption = {\n label: string;\n value: string;\n};\n\ntype FilterProps = {\n isEditable?: boolean;\n gjsModel: any;\n performInteraction: (payload: Record<string, any>) => Promise<void>;\n};\n\ntype FilterHeaderProps = {\n label: string;\n count: number;\n isDisabled: boolean;\n isLoading: boolean;\n toggleOpen: () => void;\n};\n\ntype FilterActionsProps = {\n selected: string[];\n allSelected: boolean;\n onClear: () => void;\n onSelectAll: () => void;\n isDisabled: boolean;\n};\n\ntype FilterOptionListProps = {\n options: FilterOption[];\n selected: string[];\n onToggle: (value: string) => void;\n isDisabled: boolean;\n};\n\nfunction FilterHeader({ label, count, isDisabled, isLoading, toggleOpen }: FilterHeaderProps) {\n return (\n <Button variant=\"outline\" size=\"sm\" disabled={isDisabled} onClick={toggleOpen}>\n {count > 0 ? `${label} (${count})` : label}\n {isLoading && <Loader2Icon className=\"ml-2 animate-spin\" size={16} />}\n </Button>\n );\n}\n\nfunction FilterActions({\n selected,\n allSelected,\n onClear,\n onSelectAll,\n isDisabled,\n}: FilterActionsProps) {\n return (\n <div className=\"flex items-center mb-3\">\n <Checkbox\n checked={allSelected}\n onCheckedChange={() => (allSelected ? onClear() : onSelectAll())}\n disabled={isDisabled}\n />\n <span className=\"ml-2 text-sm text-gray-900\">Select All</span>\n {selected.length > 0 && (\n <button\n type=\"button\"\n className=\"ml-auto text-sm text-blue-600 hover:underline\"\n onMouseDown={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n onClick={onClear}\n disabled={isDisabled}\n >\n Clear All\n </button>\n )}\n </div>\n );\n}\n\nfunction FilterOptionList({ options, selected, onToggle, isDisabled }: FilterOptionListProps) {\n return (\n <ScrollArea className=\"max-h-48 mb-4 space-y-2\">\n {options.length > 0 ? (\n options.map((opt) => (\n <label\n key={opt.value}\n className=\"flex items-center space-x-2 hover:bg-gray-100 rounded p-1 transition\"\n >\n <Checkbox\n checked={selected.includes(opt.value)}\n onCheckedChange={() => onToggle(opt.value)}\n disabled={isDisabled}\n />\n <span className=\"text-sm text-gray-900\">{opt.label}</span>\n </label>\n ))\n ) : (\n <div className=\"text-sm text-gray-500\">No results found</div>\n )}\n </ScrollArea>\n );\n}\n\nexport function renderFilter({ isEditable = false, gjsModel, performInteraction }: FilterProps) {\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const [componentData, setComponentData] = useState({ ...gjsModel.get('componentProps') });\n const [attributes, setAttributes] = useState({ ...gjsModel.get('attributes') });\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [isApplying, setIsApplying] = useState(false);\n\n const {\n options = [],\n value = [],\n className = '',\n affectedComponents = [],\n id,\n text: label = 'Filter',\n filterType = 'multiselect',\n } = componentData;\n\n const defaultValue = componentData.default || [];\n\n const [selectedValues, setSelectedValues] = useState<string[]>(\n value?.length ? value : defaultValue,\n );\n\n const isFirstRender = useRef(true);\n\n const isMultiSelect = filterType === 'multiselect';\n const isBusy = attributes.interactionApiInProgress || isApplying;\n const allOptionsSelected = selectedValues.length === options.length && options.length > 0;\n\n useEffect(() => {\n console.log({ firstRefValue: isFirstRender.current, value, selectedValues, defaultValue });\n\n if (isFirstRender.current) {\n if (Array.isArray(value) && value.length === 0 && defaultValue.length > 0) {\n setSelectedValues(defaultValue);\n } else {\n setSelectedValues(value);\n }\n\n isFirstRender.current = false;\n } else if (!isEqual(value, selectedValues)) {\n setSelectedValues(value);\n }\n }, [value]);\n\n useEffect(() => {\n function updateComponentData() {\n setComponentData({ ...gjsModel.get('componentProps') });\n }\n\n function updateAttributes() {\n setAttributes({ ...gjsModel.get('attributes') });\n }\n\n gjsModel.on('change:componentProps', updateComponentData);\n gjsModel.on('change:attributes', updateAttributes);\n\n return () => {\n gjsModel.off('change:componentProps', updateComponentData);\n gjsModel.off('change:attributes', updateAttributes);\n };\n }, [gjsModel]);\n\n useEffect(() => {\n const doc = wrapperRef.current?.ownerDocument ?? document;\n\n function handleOutsideClick(e: PointerEvent) {\n if (isDropdownOpen && wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n setIsDropdownOpen(false);\n }\n }\n\n function handleEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setIsDropdownOpen(false);\n }\n }\n\n doc.addEventListener('pointerdown', handleOutsideClick);\n doc.addEventListener('keydown', handleEscape);\n\n return () => {\n doc.removeEventListener('pointerdown', handleOutsideClick);\n doc.removeEventListener('keydown', handleEscape);\n };\n }, [isDropdownOpen]);\n\n const filteredOptions = options.filter((opt: FilterOption) =>\n opt.label.toLowerCase().includes(searchQuery.toLowerCase()),\n );\n\n async function updateAndApply(newValues: string[] = selectedValues) {\n setIsApplying(true);\n\n try {\n gjsModel.set('componentProps', {\n ...gjsModel.get('componentProps'),\n value: newValues,\n ...(isEditable && { default: newValues }),\n });\n\n await performInteraction({\n interactionType: 'filter',\n id,\n affectedComponents: getAffectedComponentsWithLoader([id, ...affectedComponents], true),\n });\n } finally {\n setIsApplying(false);\n setIsDropdownOpen(false);\n }\n }\n\n const handleOptionToggle = useCallback(\n (val: string) => {\n if (isMultiSelect) {\n setSelectedValues((prev) =>\n prev.includes(val) ? prev.filter((v) => v !== val) : [...prev, val],\n );\n } else {\n if (selectedValues.includes(val)) {\n setSelectedValues([]);\n updateAndApply([]);\n } else {\n const singleValue = [val];\n setSelectedValues(singleValue);\n updateAndApply(singleValue);\n }\n }\n },\n [isMultiSelect, selectedValues],\n );\n\n function handleClearAll() {\n setSelectedValues([]);\n }\n\n function handleSelectAll() {\n setSelectedValues(options.map((o: FilterOption) => o.value));\n }\n\n return (\n <div ref={wrapperRef} className={`relative inline-block ${className}`}>\n <FilterHeader\n label={label}\n count={selectedValues.length}\n isDisabled={isBusy}\n isLoading={isBusy}\n toggleOpen={() => setIsDropdownOpen((prev) => !prev)}\n />\n\n {isDropdownOpen && (\n <div className=\"absolute left-0 top-full mt-2 w-64 bg-white border rounded-lg shadow-lg ring-1 ring-black ring-opacity-5 p-4 z-50\">\n <input\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full mb-3 px-2 py-1 border rounded focus:outline-none\"\n disabled={isBusy}\n />\n\n {isMultiSelect && (\n <FilterActions\n selected={selectedValues}\n allSelected={allOptionsSelected}\n onClear={handleClearAll}\n onSelectAll={handleSelectAll}\n isDisabled={isBusy}\n />\n )}\n\n <FilterOptionList\n options={filteredOptions}\n selected={selectedValues}\n onToggle={handleOptionToggle}\n isDisabled={isBusy}\n />\n\n {isMultiSelect && (\n <div className=\"flex justify-end space-x-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsDropdownOpen(false)}\n disabled={isApplying}\n >\n Cancel\n </Button>\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={() => updateAndApply(selectedValues)}\n disabled={isBusy}\n >\n {isApplying && <Loader2Icon className=\"animate-spin mr-2\" size={16} />}Apply\n </Button>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"wLAAA,uDACA,OAASA,WAAW,CAAEC,SAAS,CAAEC,MAAM,CAAEC,QAAQ,KAAQ,OAAO,CAChE,MAAO,CAAAC,OAAO,KAAM,gBAAgB,CAEpC,OAASC,MAAM,KAAQ,UAAU,CACjC,OAASC,QAAQ,KAAQ,YAAY,CACrC,OAASC,WAAW,KAAQ,cAAc,CAC1C,OAASC,UAAU,KAAQ,eAAe,CAC1C,OAASC,+BAA+B,KAAQ,kBAAkB,CAAC,OAAAC,GAAA,IAAAC,IAAA,CAAAC,IAAA,IAAAC,KAAA,yBAoCnE,QAAS,CAAAC,YAAYA,CAAAC,IAAA,CAAyE,IAAtE,CAAAC,KAAK,CAAAD,IAAA,CAALC,KAAK,CAAEC,KAAK,CAAAF,IAAA,CAALE,KAAK,CAAEC,UAAU,CAAAH,IAAA,CAAVG,UAAU,CAAEC,SAAS,CAAAJ,IAAA,CAATI,SAAS,CAAEC,UAAU,CAAAL,IAAA,CAAVK,UAAU,CACrE,mBACEP,KAAA,CAACR,MAAM,EAACgB,OAAO,CAAC,SAAS,CAACC,IAAI,CAAC,IAAI,CAACC,QAAQ,CAAEL,UAAW,CAACM,OAAO,CAAEJ,UAAW,CAAAK,QAAA,EAC3ER,KAAK,CAAG,CAAC,CAAMD,KAAK,MAAKC,KAAK,KAAMD,KAAK,CACzCG,SAAS,eAAIR,IAAA,CAACJ,WAAW,EAACmB,SAAS,CAAC,mBAAmB,CAACJ,IAAI,CAAE,EAAG,CAAE,CAAC,EAC/D,CAEZ,CAEA,QAAS,CAAAK,aAAaA,CAAAC,KAAA,CAMC,IALrB,CAAAC,QAAQ,CAAAD,KAAA,CAARC,QAAQ,CACRC,WAAW,CAAAF,KAAA,CAAXE,WAAW,CACXC,OAAO,CAAAH,KAAA,CAAPG,OAAO,CACPC,WAAW,CAAAJ,KAAA,CAAXI,WAAW,CACXd,UAAU,CAAAU,KAAA,CAAVV,UAAU,CAEV,mBACEL,KAAA,QAAKa,SAAS,CAAC,wBAAwB,CAAAD,QAAA,eACrCd,IAAA,CAACL,QAAQ,EACP2B,OAAO,CAAEH,WAAY,CACrBI,eAAe,CAAE,QAAjB,CAAAA,eAAeA,CAAA,QAAS,CAAAJ,WAAW,CAAGC,OAAO,CAAC,CAAC,CAAGC,WAAW,CAAC,CAAC,CAAE,CACjET,QAAQ,CAAEL,UAAW,CACtB,CAAC,cACFP,IAAA,SAAMe,SAAS,CAAC,4BAA4B,CAAAD,QAAA,CAAC,YAAU,CAAM,CAAC,CAC7DI,QAAQ,CAACM,MAAM,CAAG,CAAC,eAClBxB,IAAA,WACEyB,IAAI,CAAC,QAAQ,CACbV,SAAS,CAAC,+CAA+C,CACzDW,WAAW,CAAE,QAAb,CAAAA,WAAWA,CAAGC,CAAC,CAAK,CAClBA,CAAC,CAACC,eAAe,CAAC,CAAC,CACnBD,CAAC,CAACE,cAAc,CAAC,CACnB,CAAE,CACFhB,OAAO,CAAEO,OAAQ,CACjBR,QAAQ,CAAEL,UAAW,CAAAO,QAAA,CACtB,WAED,CAAQ,CACT,EACE,CAET,CAEA,QAAS,CAAAgB,gBAAgBA,CAAAC,KAAA,CAAqE,IAAlE,CAAAC,OAAO,CAAAD,KAAA,CAAPC,OAAO,CAAEd,QAAQ,CAAAa,KAAA,CAARb,QAAQ,CAAEe,QAAQ,CAAAF,KAAA,CAARE,QAAQ,CAAE1B,UAAU,CAAAwB,KAAA,CAAVxB,UAAU,CACjE,mBACEP,IAAA,CAACH,UAAU,EAACkB,SAAS,CAAC,yBAAyB,CAAAD,QAAA,CAC5CkB,OAAO,CAACR,MAAM,CAAG,CAAC,CACjBQ,OAAO,CAACE,GAAG,CAAC,SAACC,GAAG,qBACdjC,KAAA,UAEEa,SAAS,CAAC,sEAAsE,CAAAD,QAAA,eAEhFd,IAAA,CAACL,QAAQ,EACP2B,OAAO,CAAEJ,QAAQ,CAACkB,QAAQ,CAACD,GAAG,CAACE,KAAK,CAAE,CACtCd,eAAe,CAAE,QAAjB,CAAAA,eAAeA,CAAA,QAAQ,CAAAU,QAAQ,CAACE,GAAG,CAACE,KAAK,CAAC,CAAC,CAC3CzB,QAAQ,CAAEL,UAAW,CACtB,CAAC,cACFP,IAAA,SAAMe,SAAS,CAAC,uBAAuB,CAAAD,QAAA,CAAEqB,GAAG,CAAC9B,KAAK,CAAO,CAAC,GARrD8B,GAAG,CAACE,KASJ,CAAC,CACT,CAAC,cAEFrC,IAAA,QAAKe,SAAS,CAAC,uBAAuB,CAAAD,QAAA,CAAC,kBAAgB,CAAK,CAC7D,CACS,CAEhB,CAEA,MAAO,SAAS,CAAAwB,YAAYA,CAAAC,KAAA,CAAoE,KAAAC,gBAAA,CAAAD,KAAA,CAAjEE,UAAU,CAAVA,UAAU,CAAAD,gBAAA,UAAG,KAAK,CAAAA,gBAAA,CAAEE,QAAQ,CAAAH,KAAA,CAARG,QAAQ,CAAEC,kBAAkB,CAAAJ,KAAA,CAAlBI,kBAAkB,CAC7E,GAAM,CAAAC,UAAU,CAAGrD,MAAM,CAAiB,IAAI,CAAC,CAE/C,IAAAsD,SAAA,CAA0CrD,QAAQ,CAAAsD,QAAA,IAAMJ,QAAQ,CAACK,GAAG,CAAC,gBAAgB,CAAC,CAAE,CAAC,CAAlFC,aAAa,CAAAH,SAAA,IAAEI,gBAAgB,CAAAJ,SAAA,IACtC,IAAAK,UAAA,CAAoC1D,QAAQ,CAAAsD,QAAA,IAAMJ,QAAQ,CAACK,GAAG,CAAC,YAAY,CAAC,CAAE,CAAC,CAAxEI,UAAU,CAAAD,UAAA,IAAEE,aAAa,CAAAF,UAAA,IAChC,IAAAG,UAAA,CAA4C7D,QAAQ,CAAC,KAAK,CAAC,CAApD8D,cAAc,CAAAD,UAAA,IAAEE,iBAAiB,CAAAF,UAAA,IACxC,IAAAG,UAAA,CAAsChE,QAAQ,CAAC,EAAE,CAAC,CAA3CiE,WAAW,CAAAD,UAAA,IAAEE,cAAc,CAAAF,UAAA,IAClC,IAAAG,UAAA,CAAoCnE,QAAQ,CAAC,KAAK,CAAC,CAA5CoE,UAAU,CAAAD,UAAA,IAAEE,aAAa,CAAAF,UAAA,IAEhC,IAAAG,qBAAA,CAQId,aAAa,CAPfhB,OAAO,CAAPA,OAAO,CAAA8B,qBAAA,UAAG,EAAE,CAAAA,qBAAA,CAAAC,oBAAA,CAOVf,aAAa,CANfX,KAAK,CAALA,KAAK,CAAA0B,oBAAA,UAAG,EAAE,CAAAA,oBAAA,CAAAC,qBAAA,CAMRhB,aAAa,CALfjC,SAAS,CAATA,SAAS,CAAAiD,qBAAA,UAAG,EAAE,CAAAA,qBAAA,CAAAC,qBAAA,CAKZjB,aAAa,CAJfkB,kBAAkB,CAAlBA,kBAAkB,CAAAD,qBAAA,UAAG,EAAE,CAAAA,qBAAA,CACvBE,EAAE,CAGAnB,aAAa,CAHfmB,EAAE,CAAAC,mBAAA,CAGApB,aAAa,CAFfqB,IAAI,CAAEhE,KAAK,CAAA+D,mBAAA,UAAG,QAAQ,CAAAA,mBAAA,CAAAE,qBAAA,CAEpBtB,aAAa,CADfuB,UAAU,CAAVA,UAAU,CAAAD,qBAAA,UAAG,aAAa,CAAAA,qBAAA,CAG5B,GAAM,CAAAE,YAAY,CAAGxB,aAAa,WAAQ,EAAI,EAAE,CAEhD,IAAAyB,UAAA,CAA4CjF,QAAQ,CAClD6C,KAAK,QAALA,KAAK,CAAEb,MAAM,CAAGa,KAAK,CAAGmC,YAC1B,CAAC,CAFME,cAAc,CAAAD,UAAA,IAAEE,iBAAiB,CAAAF,UAAA,IAIxC,GAAM,CAAAG,aAAa,CAAGrF,MAAM,CAAC,IAAI,CAAC,CAElC,GAAM,CAAAsF,aAAa,CAAGN,UAAU,GAAK,aAAa,CAClD,GAAM,CAAAO,MAAM,CAAG3B,UAAU,CAAC4B,wBAAwB,EAAInB,UAAU,CAChE,GAAM,CAAAoB,kBAAkB,CAAGN,cAAc,CAAClD,MAAM,GAAKQ,OAAO,CAACR,MAAM,EAAIQ,OAAO,CAACR,MAAM,CAAG,CAAC,CAEzFlC,SAAS,CAAC,UAAM,CACd2F,OAAO,CAACC,GAAG,CAAC,CAAEC,aAAa,CAAEP,aAAa,CAACQ,OAAO,CAAE/C,KAAK,CAALA,KAAK,CAAEqC,cAAc,CAAdA,cAAc,CAAEF,YAAY,CAAZA,YAAa,CAAC,CAAC,CAE1F,GAAII,aAAa,CAACQ,OAAO,CAAE,CACzB,GAAIC,KAAK,CAACC,OAAO,CAACjD,KAAK,CAAC,EAAIA,KAAK,CAACb,MAAM,GAAK,CAAC,EAAIgD,YAAY,CAAChD,MAAM,CAAG,CAAC,CAAE,CACzEmD,iBAAiB,CAACH,YAAY,CAChC,CAAC,IAAM,CACLG,iBAAiB,CAACtC,KAAK,CACzB,CAEAuC,aAAa,CAACQ,OAAO,CAAG,KAC1B,CAAC,IAAM,IAAI,CAAC3F,OAAO,CAAC4C,KAAK,CAAEqC,cAAc,CAAC,CAAE,CAC1CC,iBAAiB,CAACtC,KAAK,CACzB,CACF,CAAC,CAAE,CAACA,KAAK,CAAC,CAAC,CAEX/C,SAAS,CAAC,UAAM,CACd,QAAS,CAAAiG,mBAAmBA,CAAA,CAAG,CAC7BtC,gBAAgB,CAAAH,QAAA,IAAMJ,QAAQ,CAACK,GAAG,CAAC,gBAAgB,CAAC,CAAE,CACxD,CAEA,QAAS,CAAAyC,gBAAgBA,CAAA,CAAG,CAC1BpC,aAAa,CAAAN,QAAA,IAAMJ,QAAQ,CAACK,GAAG,CAAC,YAAY,CAAC,CAAE,CACjD,CAEAL,QAAQ,CAAC+C,EAAE,CAAC,uBAAuB,CAAEF,mBAAmB,CAAC,CACzD7C,QAAQ,CAAC+C,EAAE,CAAC,mBAAmB,CAAED,gBAAgB,CAAC,CAElD,MAAO,WAAM,CACX9C,QAAQ,CAACgD,GAAG,CAAC,uBAAuB,CAAEH,mBAAmB,CAAC,CAC1D7C,QAAQ,CAACgD,GAAG,CAAC,mBAAmB,CAAEF,gBAAgB,CACpD,CACF,CAAC,CAAE,CAAC9C,QAAQ,CAAC,CAAC,CAEdpD,SAAS,CAAC,UAAM,KAAAqG,qBAAA,CAAAC,mBAAA,CACd,GAAM,CAAAC,GAAG,EAAAF,qBAAA,EAAAC,mBAAA,CAAGhD,UAAU,CAACwC,OAAO,eAAlBQ,mBAAA,CAAoBE,aAAa,QAAAH,qBAAA,CAAII,QAAQ,CAEzD,QAAS,CAAAC,kBAAkBA,CAACrE,CAAe,CAAE,CAC3C,GAAI2B,cAAc,EAAIV,UAAU,CAACwC,OAAO,EAAI,CAACxC,UAAU,CAACwC,OAAO,CAACa,QAAQ,CAACtE,CAAC,CAACuE,MAAc,CAAC,CAAE,CAC1F3C,iBAAiB,CAAC,KAAK,CACzB,CACF,CAEA,QAAS,CAAA4C,YAAYA,CAACxE,CAAgB,CAAE,CACtC,GAAIA,CAAC,CAACyE,GAAG,GAAK,QAAQ,CAAE,CACtB7C,iBAAiB,CAAC,KAAK,CACzB,CACF,CAEAsC,GAAG,CAACQ,gBAAgB,CAAC,aAAa,CAAEL,kBAAkB,CAAC,CACvDH,GAAG,CAACQ,gBAAgB,CAAC,SAAS,CAAEF,YAAY,CAAC,CAE7C,MAAO,WAAM,CACXN,GAAG,CAACS,mBAAmB,CAAC,aAAa,CAAEN,kBAAkB,CAAC,CAC1DH,GAAG,CAACS,mBAAmB,CAAC,SAAS,CAAEH,YAAY,CACjD,CACF,CAAC,CAAE,CAAC7C,cAAc,CAAC,CAAC,CAEpB,GAAM,CAAAiD,eAAe,CAAGvE,OAAO,CAACwE,MAAM,CAAC,SAACrE,GAAiB,QACvD,CAAAA,GAAG,CAAC9B,KAAK,CAACoG,WAAW,CAAC,CAAC,CAACrE,QAAQ,CAACqB,WAAW,CAACgD,WAAW,CAAC,CAAC,CAAC,CAC7D,CAAC,CAAC,QAEa,CAAAC,cAAcA,CAAAC,EAAA,SAAAC,eAAA,CAAAC,KAAA,MAAAC,SAAA,WAAAF,gBAAA,EAAAA,eAAA,CAAAG,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAA7B,SAAAC,QAA8BC,SAAmB,SAAAH,mBAAA,CAAAI,IAAA,UAAAC,SAAAC,QAAA,iBAAAA,QAAA,CAAAC,IAAA,CAAAD,QAAA,CAAAE,IAAA,YAAnBL,SAAmB,WAAnBA,SAAmB,CAAGzC,cAAc,CAChEb,aAAa,CAAC,IAAI,CAAC,CAACyD,QAAA,CAAAC,IAAA,GAGlB7E,QAAQ,CAAC+E,GAAG,CAAC,gBAAgB,CAAA3E,QAAA,IACxBJ,QAAQ,CAACK,GAAG,CAAC,gBAAgB,CAAC,EACjCV,KAAK,CAAE8E,SAAS,EACZ1E,UAAU,EAAI,CAAE,UAAS0E,SAAU,CAAC,CACzC,CAAC,CAACG,QAAA,CAAAE,IAAA,SAEG,CAAA7E,kBAAkB,CAAC,CACvB+E,eAAe,CAAE,QAAQ,CACzBvD,EAAE,CAAFA,EAAE,CACFD,kBAAkB,CAAEpE,+BAA+B,EAAEqE,EAAE,EAAAwD,MAAA,CAAKzD,kBAAkB,EAAG,IAAI,CACvF,CAAC,CAAC,QAAAoD,QAAA,CAAAC,IAAA,GAEF1D,aAAa,CAAC,KAAK,CAAC,CACpBN,iBAAiB,CAAC,KAAK,CAAC,CAAC,OAAA+D,QAAA,CAAAM,MAAA,6BAAAN,QAAA,CAAAO,IAAA,KAAAX,OAAA,mBAE5B,UAAAN,eAAA,CAAAC,KAAA,MAAAC,SAAA,EAED,GAAM,CAAAgB,kBAAkB,CAAGzI,WAAW,CACpC,SAAC0I,GAAW,CAAK,CACf,GAAIlD,aAAa,CAAE,CACjBF,iBAAiB,CAAC,SAAC4C,IAAI,QACrB,CAAAA,IAAI,CAACnF,QAAQ,CAAC2F,GAAG,CAAC,CAAGR,IAAI,CAACf,MAAM,CAAC,SAACwB,CAAC,QAAK,CAAAA,CAAC,GAAKD,GAAG,EAAC,IAAAJ,MAAA,CAAOJ,IAAI,EAAEQ,GAAG,EAAC,CACrE,CACF,CAAC,IAAM,CACL,GAAIrD,cAAc,CAACtC,QAAQ,CAAC2F,GAAG,CAAC,CAAE,CAChCpD,iBAAiB,CAAC,EAAE,CAAC,CACrB+B,cAAc,CAAC,EAAE,CACnB,CAAC,IAAM,CACL,GAAM,CAAAuB,WAAW,CAAG,CAACF,GAAG,CAAC,CACzBpD,iBAAiB,CAACsD,WAAW,CAAC,CAC9BvB,cAAc,CAACuB,WAAW,CAC5B,CACF,CACF,CAAC,CACD,CAACpD,aAAa,CAAEH,cAAc,CAChC,CAAC,CAED,QAAS,CAAAwD,cAAcA,CAAA,CAAG,CACxBvD,iBAAiB,CAAC,EAAE,CACtB,CAEA,QAAS,CAAAwD,eAAeA,CAAA,CAAG,CACzBxD,iBAAiB,CAAC3C,OAAO,CAACE,GAAG,CAAC,SAACkG,CAAe,QAAK,CAAAA,CAAC,CAAC/F,KAAK,EAAC,CAC7D,CAEA,mBACEnC,KAAA,QAAKmI,GAAG,CAAEzF,UAAW,CAAC7B,SAAS,0BAA2BA,SAAY,CAAAD,QAAA,eACpEd,IAAA,CAACG,YAAY,EACXE,KAAK,CAAEA,KAAM,CACbC,KAAK,CAAEoE,cAAc,CAAClD,MAAO,CAC7BjB,UAAU,CAAEuE,MAAO,CACnBtE,SAAS,CAAEsE,MAAO,CAClBrE,UAAU,CAAE,QAAZ,CAAAA,UAAUA,CAAA,QAAQ,CAAA8C,iBAAiB,CAAC,SAACgE,IAAI,QAAK,CAACA,IAAI,EAAC,CAAC,CACtD,CAAC,CAEDjE,cAAc,eACbpD,KAAA,QAAKa,SAAS,CAAC,mHAAmH,CAAAD,QAAA,eAChId,IAAA,UACEyB,IAAI,CAAC,MAAM,CACX6G,WAAW,CAAC,WAAW,CACvBjG,KAAK,CAAEoB,WAAY,CACnB8E,QAAQ,CAAE,QAAV,CAAAA,QAAQA,CAAG5G,CAAC,QAAK,CAAA+B,cAAc,CAAC/B,CAAC,CAACuE,MAAM,CAAC7D,KAAK,CAAC,CAAC,CAChDtB,SAAS,CAAC,yDAAyD,CACnEH,QAAQ,CAAEkE,MAAO,CAClB,CAAC,CAEDD,aAAa,eACZ7E,IAAA,CAACgB,aAAa,EACZE,QAAQ,CAAEwD,cAAe,CACzBvD,WAAW,CAAE6D,kBAAmB,CAChC5D,OAAO,CAAE8G,cAAe,CACxB7G,WAAW,CAAE8G,eAAgB,CAC7B5H,UAAU,CAAEuE,MAAO,CACpB,CACF,cAED9E,IAAA,CAAC8B,gBAAgB,EACfE,OAAO,CAAEuE,eAAgB,CACzBrF,QAAQ,CAAEwD,cAAe,CACzBzC,QAAQ,CAAE6F,kBAAmB,CAC7BvH,UAAU,CAAEuE,MAAO,CACpB,CAAC,CAEDD,aAAa,eACZ3E,KAAA,QAAKa,SAAS,CAAC,4BAA4B,CAAAD,QAAA,eACzCd,IAAA,CAACN,MAAM,EACLgB,OAAO,CAAC,OAAO,CACfC,IAAI,CAAC,IAAI,CACTE,OAAO,CAAE,QAAT,CAAAA,OAAOA,CAAA,QAAQ,CAAA0C,iBAAiB,CAAC,KAAK,CAAC,CAAC,CACxC3C,QAAQ,CAAEgD,UAAW,CAAA9C,QAAA,CACtB,QAED,CAAQ,CAAC,cACTZ,KAAA,CAACR,MAAM,EACLgB,OAAO,CAAC,SAAS,CACjBC,IAAI,CAAC,IAAI,CACTE,OAAO,CAAE,QAAT,CAAAA,OAAOA,CAAA,QAAQ,CAAA6F,cAAc,CAAChC,cAAc,CAAC,CAAC,CAC9C9D,QAAQ,CAAEkE,MAAO,CAAAhE,QAAA,EAEhB8C,UAAU,eAAI5D,IAAA,CAACJ,WAAW,EAACmB,SAAS,CAAC,mBAAmB,CAACJ,IAAI,CAAE,EAAG,CAAE,CAAC,CAAC,OACzE,EAAQ,CAAC,EACN,CACN,EACE,CACN,EACE,CAET","ignoreList":[]}